You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
2.3KB

  1. (module test-parse ()
  2. (import scheme)
  3. (import (chicken base))
  4. (import (chicken syntax))
  5. (import srfi-1)
  6. (import test)
  7. (import comparse)
  8. (import srfi-14)
  9. (import parse)
  10. (test "apple" (parse (lift list->string (one-or-more (in char-set:letter))) "apple"))
  11. (test '(#\o #\r #\a #\n) (parse (one-or-more (is-not #\g)) "orange"))
  12. (test-group "parse-whitespace"
  13. (test '(#\space #\space #\space) (parse parse-whitespace " "))
  14. (test #f (parse parse-whitespace "pear")))
  15. (test-group "skip-whitespace"
  16. (test "mango" (parse (preceded-by skip-whitespace (as-string (one-or-more (in char-set:letter)))) " mango"))
  17. (test "mango" (parse (preceded-by skip-whitespace (as-string (one-or-more (in char-set:letter)))) "mango")))
  18. (test-group "parse-symbol"
  19. (test 'chicken (parse parse-symbol "chicken")))
  20. (test-group "parse-number"
  21. (test 333 (parse parse-number "333"))
  22. (test #f (parse parse-number "owlfox")))
  23. (test-group "parse-string"
  24. (test "0day" (parse parse-string "\"0day\""))
  25. (test #f (parse parse-string "\"0day"))
  26. (test #f (parse parse-string "0day\""))
  27. (test #f (parse parse-string "0day")))
  28. (test-group "followed-by-consuming"
  29. (test '("achtung" "hovercraft") (parse (sequence (followed-by-consuming (as-string (one-or-more (in char-set:letter)))
  30. (char-seq ": ")) (as-string (one-or-more (in char-set:letter)))) "achtung: hovercraft")))
  31. (test-group "separated-by"
  32. (test '("fox" "hen" "lizard") (parse (separated-by (char-seq ", ") (as-string (one-or-more (in char-set:letter)))) "fox, hen, lizard")))
  33. (test-group "parse-symbol-or-number-or-string"
  34. (test 'coin (parse parse-symbol-or-number-or-string "coin"))
  35. (test 67 (parse parse-symbol-or-number-or-string "67"))
  36. (test "token" (parse parse-symbol-or-number-or-string "\"token\"")))
  37. (test-group "completely-parse"
  38. (test "owlbear" (parse (as-string (completely-parse (one-or-more (in char-set:letter)))) "owlbear"))
  39. (test #f (parse (as-string (completely-parse (one-or-more (in char-set:letter)))) "owlbear pelt")))
  40. (test-group "parse-statement"
  41. (test '(set "undulate" 33) (parse parse-statement "set \"undulate\" 33")))
  42. (test-group "parse-line"
  43. (test '(set "christmas" 45) (parse parse-statement "set \"christmas\" 45"))))