diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ref/compiler/selector-logical.png | bin | 0 -> 3844 bytes | |||
| -rw-r--r-- | tests/typ/compiler/selector-logical.typ | 127 |
2 files changed, 127 insertions, 0 deletions
diff --git a/tests/ref/compiler/selector-logical.png b/tests/ref/compiler/selector-logical.png Binary files differnew file mode 100644 index 00000000..eafa93c8 --- /dev/null +++ b/tests/ref/compiler/selector-logical.png diff --git a/tests/typ/compiler/selector-logical.typ b/tests/typ/compiler/selector-logical.typ new file mode 100644 index 00000000..64f97384 --- /dev/null +++ b/tests/typ/compiler/selector-logical.typ @@ -0,0 +1,127 @@ +//Tests for logical (and/or) selectors + +--- += A +== B +#figure([Cat], kind: "cat", supplement: [Other]) +=== D += E <first> +#figure([Frog], kind: "frog", supplement: none) +#figure([Giraffe], kind: "giraffe", supplement: none) <second> +#figure([GiraffeCat], kind: "cat", supplement: [Other]) <second> += H +#figure([Iguana], kind: "iguana", supplement: none) +== I + +#let test-selector(selector, ref) = locate(loc => { + let elems = query(selector, loc) + test(elems.map(e => e.body), ref) +}) + +// Test `or`. +#test-selector( + heading.where(level: 1).or(heading.where(level: 3)), + ([A], [D], [E], [H]), +) + +#test-selector( + heading.where(level: 1).or( + heading.where(level: 3), + figure.where(kind: "frog"), + ), + ([A], [D], [E], [Frog], [H]), +) + +#test-selector( + heading.where(level: 1).or( + heading.where(level: 2), + figure.where(kind: "frog"), + figure.where(kind: "cat"), + ), + ([A], [B], [Cat], [E], [Frog], [GiraffeCat], [H], [I]), +) + +#test-selector( + figure.where(kind: "dog").or(heading.where(level: 3)), + ([D],), +) + +#test-selector( + figure.where(kind: "dog").or(figure.where(kind: "fish")), + (), +) + +// Test `or` duplicates removal. +#test-selector( + heading.where(level: 1).or(heading.where(level: 1)), + ([A], [E], [H]), +) + +// Test `and`. +#test-selector( + figure.where(kind: "cat").and(figure.where(kind: "frog")), + (), +) + +// Test `or` with `before`/`after` +#test-selector( + selector(heading) + .before(<first>) + .or(selector(figure).before(<first>)), + ([A], [B], [Cat], [D], [E]), +) + +#test-selector( + heading.where(level: 2) + .after(<first>) + .or(selector(figure).after(<first>)), + ([Frog], [Giraffe], [GiraffeCat], [Iguana], [I]), +) + +// Test `and` with `after` +#test-selector( + figure.where(kind: "cat") + .and(figure.where(supplement: [Other])) + .after(<first>), + ([GiraffeCat],), +) + +// Test `and` (with nested `or`) +#test-selector( + heading.where(level: 2) + .or(heading.where(level: 3)) + .and(heading.where(level: 2).or(heading.where(level: 1))), + ([B], [I]), +) + +#test-selector( + heading.where(level: 2) + .or(heading.where(level: 3), heading.where(level:1)) + .and( + heading.where(level: 2).or(heading.where(level: 1)), + heading.where(level: 3).or(heading.where(level: 1)), + ), + ([A], [E], [H]), +) + +// Test `and` with `or` and `before`/`after` +#test-selector( + heading.where(level: 1).before(<first>) + .or(heading.where(level: 3).before(<first>)) + .and( + heading.where(level: 1).before(<first>) + .or(heading.where(level: 2).before(<first>)) + ), + ([A], [E]), +) + +#test-selector( + heading.where(level: 1).before(<first>, inclusive: false) + .or(selector(figure).after(<first>)) + .and(figure.where(kind: "iguana").or( + figure.where(kind: "frog"), + figure.where(kind: "cat"), + heading.where(level: 1).after(<first>), + )), + ([Frog], [GiraffeCat], [Iguana]) +) |
