This commit is contained in:
parent
aa2ff7b2f0
commit
2f3113f55d
11742 changed files with 1223940 additions and 0 deletions
43
unikernel/duniverse/ppxlib/test/recursive_replacement/run.t
Normal file
43
unikernel/duniverse/ppxlib/test/recursive_replacement/run.t
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
This test checks that an extension point or attribute that expands to another extension
|
||||
point or attribute will continue to be expanded recursively until it cannot be
|
||||
expanded anymore.
|
||||
|
||||
It uses the extension and attribute defined in driver.ml which expands:
|
||||
- [%ext x ;; ["%ext", "@attr", ...]] into [%ext xx ;; ["@attr", ...]]
|
||||
- [%ext x ;; ["@attr", "%ext", ...]] into xx [@attr ["%ext", ...]]
|
||||
- [%ext x ;; []] into xx
|
||||
- x [@attr ["%ext", "@attr", ...]] into [%ext xx ;; ["@attr", ...]]
|
||||
- x [@attr ["@attr", "%ext", ...]] into xx [@attr ["%ext", ...]]
|
||||
- x [@attr []] into xx
|
||||
|
||||
It adds an "x" to the ident to make it clear how many times the attribute has been applied.
|
||||
|
||||
First check that an extension point is expanded recursively:
|
||||
$ cat > test.ml << EOF
|
||||
> let () = [%ext a ;; ["%ext"]];;
|
||||
> EOF
|
||||
$ ./driver.exe test.ml
|
||||
let () = axx
|
||||
|
||||
An attribute is also expanded recursively:
|
||||
$ cat > test.ml << EOF
|
||||
> let () = b [@attr ["@attr"]];;
|
||||
> EOF
|
||||
$ ./driver.exe test.ml
|
||||
let () = bxx
|
||||
|
||||
An extension that expands into an attribute and vice versa work:
|
||||
$ cat > test.ml << EOF
|
||||
> let () = [%ext c ;; ["@attr"]];;
|
||||
> let () = d [@attr ["%ext"]];;
|
||||
> EOF
|
||||
$ ./driver.exe test.ml
|
||||
let () = cxx
|
||||
let () = dxx
|
||||
|
||||
Something a bit silly to validate it carries on until it's done:
|
||||
$ cat > test.ml << EOF
|
||||
> let () = e [@attr ["%ext"; "@attr"; "@attr"; "%ext"; "%ext"]];;
|
||||
> EOF
|
||||
$ ./driver.exe test.ml
|
||||
let () = exxxxxx
|
||||
Loading…
Add table
Add a link
Reference in a new issue