www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

test-missing-nested.rkt (2076B)


      1 #lang racket
      2 (require subtemplate/override
      3          rackunit)
      4 
      5 (check-equal? (syntax-parse #'((yy 1 2) #:kw (yyy 3 4))
      6                 [({~and {~or (y x …) :keyword}} …)
      7                  (syntax->datum
      8                   (quasitemplate
      9                    (0 #,(list (quasitemplate
     10                                (?? (~~~
     11                                     y
     12                                     #,(list x) ...
     13                                     ~~~)
     14                                    oops)))
     15                       ... 9)))])
     16               '(0 ((~~~ yy (1) (2) ~~~)) (oops) ((~~~ yyy (3) (4) ~~~)) 9))
     17 
     18 (check-equal?
     19  (syntax-parse #'((y a b 3 d 5 f) #:kw (z g 8 i) #:kww)
     20    [({~and {~or (y {~and {~or x:id _}} …) :keyword}} …)
     21     (syntax->datum
     22      (quasitemplate
     23       (0 #,(list (quasitemplate
     24                   (?? (~~~
     25                        y
     26                        #,(list (template (?? x -)) (template (?? x -))) ...
     27                        ~~~)
     28                       oops)))
     29          ... 9)))])
     30  '(0
     31    ((~~~ y (a a) (b b) (- -) (d d) (- -) (f f) ~~~))
     32    (oops)
     33    ((~~~ z (g g) (- -) (i i) ~~~))
     34    (oops)
     35    9))
     36 
     37 (check-equal? (syntax-parse #'((yy 1 2) #:kw (yyy 3 4))
     38                 [({~and {~or (y x …) :keyword}} …)
     39                  (list (?? (list y (?? x '-) …) 'oops) …)])
     40               '((yy 1 2) oops (yyy 3 4)))
     41 
     42 (check-equal? (syntax-parse #'((y a b 3 d 5 f) #:kw (z g 8 i) #:kww)
     43                 [({~and {~or (y {~and {~or x:id _}} …) :keyword}} …)
     44                  (list (?? (list y (?? x '-) …) 'oops) …)])
     45               '((y a b - d - f) oops (z g - i) oops))
     46 
     47 (check-exn
     48  #rx"attribute contains an omitted element"
     49  (λ ()
     50    (syntax-parse #'((y a b 3 d 5 f) #:kw (z g 8 i) #:kww)
     51      [({~and {~or (y {~and {~or x:id _}} …) :keyword}} …)
     52       (list (?? x '-) … …)])))
     53 
     54 (check-exn
     55  #rx"attribute contains an omitted element"
     56  (λ ()
     57    (syntax-parse #'((y a b 3 d 5 f) #:kw (z g 8 i) #:kww)
     58      [({~and {~or (y {~and {~or x:id _}} …) :keyword}} …)
     59       (define l (?if y (?? x '-) 'oops)) … …
     60       l])))