diff options
| author | Laurenz <laurmaedje@gmail.com> | 2024-04-13 10:39:45 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-13 08:39:45 +0000 |
| commit | 020294fca9a7065d4b9cf4e677f606ebaaa29b00 (patch) | |
| tree | c0027ad22046e2726c22298461327823d6b88d53 /tests/typ/compiler/string.typ | |
| parent | 72dd79210602ecc799726fc096b078afbb47f299 (diff) | |
Better test runner (#3922)
Diffstat (limited to 'tests/typ/compiler/string.typ')
| -rw-r--r-- | tests/typ/compiler/string.typ | 247 |
1 files changed, 0 insertions, 247 deletions
diff --git a/tests/typ/compiler/string.typ b/tests/typ/compiler/string.typ deleted file mode 100644 index 949a2154..00000000 --- a/tests/typ/compiler/string.typ +++ /dev/null @@ -1,247 +0,0 @@ -// Test the string methods. -// Ref: false - ---- -// Test the `len` method. -#test("Hello World!".len(), 12) - ---- -// Test the `first` and `last` methods. -#test("Hello".first(), "H") -#test("Hello".last(), "o") -#test("π³οΈβπAπ³οΈββ§οΈ".first(), "π³οΈβπ") -#test("π³οΈβπAπ³οΈββ§οΈ".last(), "π³οΈββ§οΈ") - ---- -// Error: 2-12 string is empty -#"".first() - ---- -// Error: 2-11 string is empty -#"".last() - ---- -// Test the `at` method. -#test("Hello".at(1), "e") -#test("Hello".at(4), "o") -#test("Hello".at(-1), "o") -#test("Hello".at(-2), "l") -#test("Hey: π³οΈβπ there!".at(5), "π³οΈβπ") - ---- -// Test `at`'s 'default' parameter. -#test("z", "Hello".at(5, default: "z")) - ---- -// Error: 2-14 string index 2 is not a character boundary -#"π³οΈβπ".at(2) - ---- -// Error: 2-15 no default value was specified and string index out of bounds (index: 5, len: 5) -#"Hello".at(5) - ---- -#test("Hello".at(5, default: (a: 10)), (a: 10)) - ---- -// Test the `slice` method. -#test("abc".slice(1, 2), "b") -#test("abcπ‘def".slice(2, 7), "cπ‘") -#test("abcπ‘def".slice(2, -2), "cπ‘d") -#test("abcπ‘def".slice(-3, -1), "de") - ---- -// Error: 2-21 string index -1 is not a character boundary -#"π³οΈβπ".slice(0, -1) - ---- -// Test the `clusters` and `codepoints` methods. -#test("abc".clusters(), ("a", "b", "c")) -#test("abc".clusters(), ("a", "b", "c")) -#test("π³οΈβπ!".clusters(), ("π³οΈβπ", "!")) -#test("π³οΈβπ!".codepoints(), ("π³", "\u{fe0f}", "\u{200d}", "π", "!")) - ---- -// Test the `contains` method. -#test("abc".contains("b"), true) -#test("b" in "abc", true) -#test("1234f".contains(regex("\d")), true) -#test(regex("\d") in "1234f", true) -#test("abc".contains("d"), false) -#test("1234g" in "1234f", false) -#test("abc".contains(regex("^[abc]$")), false) -#test("abc".contains(regex("^[abc]+$")), true) - ---- -// Test the `starts-with` and `ends-with` methods. -#test("Typst".starts-with("Ty"), true) -#test("Typst".starts-with(regex("[Tt]ys")), false) -#test("Typst".starts-with("st"), false) -#test("Typst".ends-with("st"), true) -#test("Typst".ends-with(regex("\d*")), true) -#test("Typst".ends-with(regex("\d+")), false) -#test("Typ12".ends-with(regex("\d+")), true) -#test("typst13".ends-with(regex("1[0-9]")), true) -#test("typst113".ends-with(regex("1[0-9]")), true) -#test("typst23".ends-with(regex("1[0-9]")), false) - ---- -// Test the `find` and `position` methods. -#let date = regex("\d{2}:\d{2}") -#test("Hello World".find("World"), "World") -#test("Hello World".position("World"), 6) -#test("It's 12:13 now".find(date), "12:13") -#test("It's 12:13 now".position(date), 5) - ---- -// Test the `match` method. -#test("Is there a".match("for this?"), none) -#test( - "The time of my life.".match(regex("[mit]+e")), - (start: 4, end: 8, text: "time", captures: ()), -) - -// Test the `matches` method. -#test("Hello there".matches("\d"), ()) -#test("Day by Day.".matches("Day"), ( - (start: 0, end: 3, text: "Day", captures: ()), - (start: 7, end: 10, text: "Day", captures: ()), -)) - -// Compute the sum of all timestamps in the text. -#let timesum(text) = { - let time = 0 - for match in text.matches(regex("(\d+):(\d+)")) { - let caps = match.captures - time += 60 * int(caps.at(0)) + int(caps.at(1)) - } - str(int(time / 60)) + ":" + str(calc.rem(time, 60)) -} - -#test(timesum(""), "0:0") -#test(timesum("2:70"), "3:10") -#test(timesum("1:20, 2:10, 0:40"), "4:10") - ---- -// Test the `replace` method with `Str` replacements. -#test("ABC".replace("", "-"), "-A-B-C-") -#test("Ok".replace("Ok", "Nope", count: 0), "Ok") -#test("to add?".replace("", "How ", count: 1), "How to add?") -#test("AB C DEF GH J".replace(" ", ",", count: 2), "AB,C,DEF GH J") -#test("Walcemo" - .replace("o", "k") - .replace("e", "o") - .replace("k", "e") - .replace("a", "e"), - "Welcome" -) -#test("123".replace(regex("\d$"), "_"), "12_") -#test("123".replace(regex("\d{1,2}$"), "__"), "1__") - ---- -// Test the `replace` method with `Func` replacements. - -#test("abc".replace(regex("[a-z]"), m => { - str(m.start) + m.text + str(m.end) -}), "0a11b22c3") -#test("abcd, efgh".replace(regex("\w+"), m => { - upper(m.text) -}), "ABCD, EFGH") -#test("hello : world".replace(regex("^(.+)\s*(:)\s*(.+)$"), m => { - upper(m.captures.at(0)) + m.captures.at(1) + " " + upper(m.captures.at(2)) -}), "HELLO : WORLD") -#test("hello world, lorem ipsum".replace(regex("(\w+) (\w+)"), m => { - m.captures.at(1) + " " + m.captures.at(0) -}), "world hello, ipsum lorem") -#test("hello world, lorem ipsum".replace(regex("(\w+) (\w+)"), count: 1, m => { - m.captures.at(1) + " " + m.captures.at(0) -}), "world hello, lorem ipsum") -#test("123 456".replace(regex("[a-z]+"), "a"), "123 456") - -#test("abc".replace("", m => "-"), "-a-b-c-") -#test("abc".replace("", m => "-", count: 1), "-abc") -#test("123".replace("abc", m => ""), "123") -#test("123".replace("abc", m => "", count: 2), "123") -#test("a123b123c".replace("123", m => { - str(m.start) + "-" + str(m.end) -}), "a1-4b5-8c") -#test("halla warld".replace("a", m => { - if m.start == 1 { "e" } - else if m.start == 4 or m.start == 7 { "o" } -}), "hello world") -#test("aaa".replace("a", m => str(m.captures.len())), "000") - ---- -// Error: 23-24 expected string, found integer -#"123".replace("123", m => 1) - ---- -// Error: 23-32 expected string or function, found array -#"123".replace("123", (1, 2, 3)) - ---- -// Test the `trim` method; the pattern is not provided. -#let str = "Typst, LaTeX, Word, InDesign" -#let array = ("Typst", "LaTeX", "Word", "InDesign") -#test(str.split(",").map(s => s.trim()), array) -#test("".trim(), "") -#test(" ".trim(), "") -#test("\t".trim(), "") -#test("\n".trim(), "") -#test("\t \n".trim(), "") -#test(" abc ".trim(at: start), "abc ") -#test("\tabc ".trim(at: start), "abc ") -#test("abc\n".trim(at: end), "abc") -#test(" abc ".trim(at: end, repeat: true), " abc") -#test(" abc".trim(at: start, repeat: false), "abc") - ---- -// Test the `trim` method; the pattern is a string. -#test("aabcaa".trim("a", repeat: false), "abca") -#test("aabca".trim("a", at: start), "bca") -#test("aabcaa".trim("a", at: end, repeat: false), "aabca") -#test(" abc\n".trim("\n"), " abc") -#test("whole".trim("whole", at: start), "") - ---- -// Test the `trim` method; the pattern is a regex. -#test("".trim(regex(".")), "") -#test("123abc456".trim(regex("\d")), "abc") -#test("123abc456".trim(regex("\d"), repeat: false), "23abc45") -#test("123a4b5c678".trim(regex("\d"), repeat: true), "a4b5c") -#test("123a4b5c678".trim(regex("\d"), repeat: false), "23a4b5c67") -#test("123abc456".trim(regex("\d"), at: start), "abc456") -#test("123abc456".trim(regex("\d"), at: end), "123abc") -#test("123abc456".trim(regex("\d+"), at: end, repeat: false), "123abc") -#test("123abc456".trim(regex("\d{1,2}$"), repeat: false), "123abc4") -#test("hello world".trim(regex(".")), "") -#test("12306".trim(regex("\d"), at: start), "") -#test("12306abc".trim(regex("\d"), at: start), "abc") -#test("whole".trim(regex("whole"), at: start), "") -#test("12306".trim(regex("\d"), at: end), "") -#test("abc12306".trim(regex("\d"), at: end), "abc") -#test("whole".trim(regex("whole"), at: end), "") - ---- -// Error: 17-21 expected either `start` or `end` -#"abc".trim(at: left) - ---- -// Test the `split` method. -#test("abc".split(""), ("", "a", "b", "c", "")) -#test("abc".split("b"), ("a", "c")) -#test("a123c".split(regex("\d")), ("a", "", "", "c")) -#test("a123c".split(regex("\d+")), ("a", "c")) - ---- -// Test the `rev` method. -#test("abc".rev(), "cba") -#test("axΜe".rev(), "exΜa") - ---- -// Error: 12-15 unknown variable: arg -#"abc".rev(arg) - ---- -// Error: 2-2:1 unclosed string -#"hello\" |
