;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018 Julien Lepiller ;;; ;;; This file is part of GNU Guix. ;;; ;;; GNU Guix is free software; you can redistribute it and/or modify it ;;; under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 3 of the License, or (at ;;; your option) any later version. ;;; ;;; GNU Guix is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Guix. If not, see . (define-module (test-opam) #:use-module (guix import opam) #:use-module (guix base32) #:use-module (gcrypt hash) #:use-module (guix tests) #:use-module ((guix build syscalls) #:select
aboutsummaryrefslogtreecommitdiff
path: root/tests
('method 'url-fetch) ('uri "https://example.org/foo-1.0.0.tar.gz") ('sha256 ('base32 (? string? hash))))) ('build-system 'ocaml-build-system) ('propagated-inputs ('quasiquote (("ocaml-zarith" ('unquote 'ocaml-zarith))))) ('native-inputs ('quasiquote (("ocaml-alcotest" ('unquote 'ocaml-alcotest)) ("ocamlbuild" ('unquote 'ocamlbuild))))) ('home-page "https://example.org/") ('synopsis "Some example package") ('description "This package is just an example.") ('license #f)) (string=? (bytevector->nix-base32-string test-source-hash) hash)) (x (pk 'fail x #f))))) ;; Test the opam file parser ;; We fold over some test cases. Each case is a pair of the string to parse and the ;; expected result. (test-assert "parse-strings" (fold (lambda (test acc) (display test) (newline) (and acc (let ((result (peg:tree (match-pattern string-pat (car test))))) (if (equal? result (cdr test)) #t (pk 'fail (list (car test) result (cdr test)) #f))))) #t '(("" . #f) ("\"hello\"" . (string-pat "hello")) ("\"hello world\"" . (string-pat "hello world")) ("\"The dreaded \\\"é\\\"\"" . (string-pat "The dreaded \"é\"")) ("\"Have some \\\\\\\\ :)\"" . (string-pat "Have some \\\\ :)")) ("\"今日は\"" . (string-pat "今日は"))))) (test-assert "parse-multiline-strings" (fold (lambda (test acc) (display test) (newline) (and acc (let ((result (peg:tree (match-pattern multiline-string (car test))))) (if (equal? result (cdr test)) #t (pk 'fail (list (car test) result (cdr test)) #f))))) #t '(("" . #f) ("\"\"\"hello\"\"\"" . (multiline-string "hello")) ("\"\"\"hello \"world\"!\"\"\"" . (multiline-string "hello \"world\"!")) ("\"\"\"hello \"\"world\"\"!\"\"\"" . (multiline-string "hello \"\"world\"\"!"))))) (test-assert "parse-lists" (fold (lambda (test acc) (and acc (let ((result (peg:tree (match-pattern list-pat (car test))))) (if (equal? result (cdr test)) #t (pk 'fail (list (car test) result (cdr test)) #f))))) #t '(("" . #f) ("[]" . list-pat) ("[make]" . (list-pat (var "make"))) ("[\"make\"]" . (list-pat (string-pat "make"))) ("[\n a\n b\n c]" . (list-pat (var "a") (var "b") (var "c"))) ("[a b \"c\"]" . (list-pat (var "a") (var "b") (string-pat "c")))))) (test-assert "parse-dicts" (fold (lambda (test acc) (and acc (let ((result (peg:tree (match-pattern dict (car test))))) (if (equal? result (cdr test)) #t (pk 'fail (list (car test) result (cdr test)) #f))))) #t '(("" . #f) ("{}" . dict) ("{a: \"b\"}" . (dict (record "a" (string-pat "b")))) ("{a: \"b\"\nc: \"d\"}" . (dict (record "a" (string-pat "b")) (record "c" (string-pat "d"))))))) (test-assert "parse-conditions" (fold (lambda (test acc) (and acc (let ((result (peg:tree (match-pattern condition (car test))))) (if (equal? result (cdr test)) #t (pk 'fail (list (car test) result (cdr test)) #f))))) #t '(("" . #f) ("{}" . #f) ("{build}" . (condition-var "build")) ("{>= \"0.2.0\"}" . (condition-greater-or-equal (condition-string "0.2.0"))) ("{>= \"0.2.0\" & test}" . (condition-and (condition-greater-or-equal (condition-string "0.2.0")) (condition-var "test"))) ("{>= \"0.2.0\" | build}" . (condition-or (condition-greater-or-equal (condition-string "0.2.0")) (condition-var "build"))) ("{ = \"1.0+beta19\" }" . (condition-eq (condition-string "1.0+beta19")))))) (test-end "opam")
AgeCommit message (Expand)Author
2022-08-10read-print: Report missing closing parens instead of looping....Fixes <https://issues.guix.gnu.org/57093>. Reported by Mohammed AMAR-BENSABER <renken@shione.net>. Previously 'read-with-comments' would enter an infinite loop. * guix/read-print.scm (read-with-comments)[missing-closing-paren-error]: New procedure. Call it when 'loop' as called from 'liip' returns EOF. * tests/read-print.scm ("read-with-comments: missing closing paren"): New test. Ludovic Courtès