| # Basic multi-regex tests. |
| |
| [[test]] |
| name = "basic10" |
| regex = ["a", "a"] |
| haystack = "a" |
| matches = [ |
| { id = 0, span = [0, 1] }, |
| { id = 1, span = [0, 1] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "basic10-leftmost-first" |
| regex = ["a", "a"] |
| haystack = "a" |
| matches = [ |
| { id = 0, span = [0, 1] }, |
| ] |
| match-kind = "leftmost-first" |
| search-kind = "leftmost" |
| |
| [[test]] |
| name = "basic20" |
| regex = ["a", "a"] |
| haystack = "ba" |
| matches = [ |
| { id = 0, span = [1, 2] }, |
| { id = 1, span = [1, 2] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "basic30" |
| regex = ["a", "b"] |
| haystack = "a" |
| matches = [ |
| { id = 0, span = [0, 1] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "basic40" |
| regex = ["a", "b"] |
| haystack = "b" |
| matches = [ |
| { id = 1, span = [0, 1] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "basic50" |
| regex = ["a|b", "b|a"] |
| haystack = "b" |
| matches = [ |
| { id = 0, span = [0, 1] }, |
| { id = 1, span = [0, 1] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "basic60" |
| regex = ["foo", "oo"] |
| haystack = "foo" |
| matches = [ |
| { id = 0, span = [0, 3] }, |
| { id = 1, span = [1, 3] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "basic60-leftmost-first" |
| regex = ["foo", "oo"] |
| haystack = "foo" |
| matches = [ |
| { id = 0, span = [0, 3] }, |
| ] |
| match-kind = "leftmost-first" |
| search-kind = "leftmost" |
| |
| [[test]] |
| name = "basic61" |
| regex = ["oo", "foo"] |
| haystack = "foo" |
| matches = [ |
| { id = 1, span = [0, 3] }, |
| { id = 0, span = [1, 3] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "basic61-leftmost-first" |
| regex = ["oo", "foo"] |
| haystack = "foo" |
| matches = [ |
| { id = 1, span = [0, 3] }, |
| ] |
| match-kind = "leftmost-first" |
| search-kind = "leftmost" |
| |
| [[test]] |
| name = "basic70" |
| regex = ["abcd", "bcd", "cd", "d"] |
| haystack = "abcd" |
| matches = [ |
| { id = 0, span = [0, 4] }, |
| { id = 1, span = [1, 4] }, |
| { id = 2, span = [2, 4] }, |
| { id = 3, span = [3, 4] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "basic71" |
| regex = ["bcd", "cd", "d", "abcd"] |
| haystack = "abcd" |
| matches = [ |
| { id = 3, span = [0, 4] }, |
| ] |
| match-kind = "leftmost-first" |
| search-kind = "leftmost" |
| |
| [[test]] |
| name = "basic80" |
| regex = ["^foo", "bar$"] |
| haystack = "foo" |
| matches = [ |
| { id = 0, span = [0, 3] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "basic81" |
| regex = ["^foo", "bar$"] |
| haystack = "foo bar" |
| matches = [ |
| { id = 0, span = [0, 3] }, |
| { id = 1, span = [4, 7] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "basic82" |
| regex = ["^foo", "bar$"] |
| haystack = "bar" |
| matches = [ |
| { id = 1, span = [0, 3] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "basic90" |
| regex = ["[a-z]+$", "foo"] |
| haystack = "01234 foo" |
| matches = [ |
| { id = 0, span = [8, 9] }, |
| { id = 0, span = [7, 9] }, |
| { id = 0, span = [6, 9] }, |
| { id = 1, span = [6, 9] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "basic91" |
| regex = ["[a-z]+$", "foo"] |
| haystack = "foo 01234" |
| matches = [ |
| { id = 1, span = [0, 3] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "basic100" |
| regex = [".*?", "a"] |
| haystack = "zzza" |
| matches = [ |
| { id = 0, span = [0, 0] }, |
| { id = 0, span = [1, 1] }, |
| { id = 0, span = [0, 1] }, |
| { id = 0, span = [2, 2] }, |
| { id = 0, span = [1, 2] }, |
| { id = 0, span = [0, 2] }, |
| { id = 0, span = [3, 3] }, |
| { id = 0, span = [2, 3] }, |
| { id = 0, span = [1, 3] }, |
| { id = 0, span = [0, 3] }, |
| { id = 0, span = [4, 4] }, |
| { id = 0, span = [3, 4] }, |
| { id = 0, span = [2, 4] }, |
| { id = 0, span = [1, 4] }, |
| { id = 0, span = [0, 4] }, |
| { id = 1, span = [3, 4] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "basic101" |
| regex = [".*", "a"] |
| haystack = "zzza" |
| matches = [ |
| { id = 0, span = [0, 0] }, |
| { id = 0, span = [1, 1] }, |
| { id = 0, span = [0, 1] }, |
| { id = 0, span = [2, 2] }, |
| { id = 0, span = [1, 2] }, |
| { id = 0, span = [0, 2] }, |
| { id = 0, span = [3, 3] }, |
| { id = 0, span = [2, 3] }, |
| { id = 0, span = [1, 3] }, |
| { id = 0, span = [0, 3] }, |
| { id = 0, span = [4, 4] }, |
| { id = 0, span = [3, 4] }, |
| { id = 0, span = [2, 4] }, |
| { id = 0, span = [1, 4] }, |
| { id = 0, span = [0, 4] }, |
| { id = 1, span = [3, 4] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "basic102" |
| regex = [".*", "a"] |
| haystack = "zzz" |
| matches = [ |
| { id = 0, span = [0, 0] }, |
| { id = 0, span = [1, 1] }, |
| { id = 0, span = [0, 1] }, |
| { id = 0, span = [2, 2] }, |
| { id = 0, span = [1, 2] }, |
| { id = 0, span = [0, 2] }, |
| { id = 0, span = [3, 3] }, |
| { id = 0, span = [2, 3] }, |
| { id = 0, span = [1, 3] }, |
| { id = 0, span = [0, 3] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "basic110" |
| regex = ['\ba\b'] |
| haystack = "hello a bye" |
| matches = [ |
| { id = 0, span = [6, 7] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "basic111" |
| regex = ['\ba\b', '\be\b'] |
| haystack = "hello a bye e" |
| matches = [ |
| { id = 0, span = [6, 7] }, |
| { id = 1, span = [12, 13] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "basic120" |
| regex = ["a"] |
| haystack = "a" |
| matches = [ |
| { id = 0, span = [0, 1] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "basic121" |
| regex = [".*a"] |
| haystack = "a" |
| matches = [ |
| { id = 0, span = [0, 1] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "basic122" |
| regex = [".*a", "β"] |
| haystack = "β" |
| matches = [ |
| { id = 1, span = [0, 2] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "basic130" |
| regex = ["ab", "b"] |
| haystack = "ba" |
| matches = [ |
| { id = 1, span = [0, 1] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| # These test cases where one of the regexes matches the empty string. |
| |
| [[test]] |
| name = "empty10" |
| regex = ["", "a"] |
| haystack = "abc" |
| matches = [ |
| { id = 0, span = [0, 0] }, |
| { id = 1, span = [0, 1] }, |
| { id = 0, span = [1, 1] }, |
| { id = 0, span = [2, 2] }, |
| { id = 0, span = [3, 3] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "empty10-leftmost-first" |
| regex = ["", "a"] |
| haystack = "abc" |
| matches = [ |
| { id = 0, span = [0, 0] }, |
| { id = 0, span = [1, 1] }, |
| { id = 0, span = [2, 2] }, |
| { id = 0, span = [3, 3] }, |
| ] |
| match-kind = "leftmost-first" |
| search-kind = "leftmost" |
| |
| [[test]] |
| name = "empty11" |
| regex = ["a", ""] |
| haystack = "abc" |
| matches = [ |
| { id = 1, span = [0, 0] }, |
| { id = 0, span = [0, 1] }, |
| { id = 1, span = [1, 1] }, |
| { id = 1, span = [2, 2] }, |
| { id = 1, span = [3, 3] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "empty11-leftmost-first" |
| regex = ["a", ""] |
| haystack = "abc" |
| matches = [ |
| { id = 0, span = [0, 1] }, |
| { id = 1, span = [2, 2] }, |
| { id = 1, span = [3, 3] }, |
| ] |
| match-kind = "leftmost-first" |
| search-kind = "leftmost" |
| |
| [[test]] |
| name = "empty20" |
| regex = ["", "b"] |
| haystack = "abc" |
| matches = [ |
| { id = 0, span = [0, 0] }, |
| { id = 0, span = [1, 1] }, |
| { id = 1, span = [1, 2] }, |
| { id = 0, span = [2, 2] }, |
| { id = 0, span = [3, 3] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "empty20-leftmost-first" |
| regex = ["", "b"] |
| haystack = "abc" |
| matches = [ |
| { id = 0, span = [0, 0] }, |
| { id = 0, span = [1, 1] }, |
| { id = 0, span = [2, 2] }, |
| { id = 0, span = [3, 3] }, |
| ] |
| match-kind = "leftmost-first" |
| search-kind = "leftmost" |
| |
| [[test]] |
| name = "empty21" |
| regex = ["b", ""] |
| haystack = "abc" |
| matches = [ |
| { id = 1, span = [0, 0] }, |
| { id = 1, span = [1, 1] }, |
| { id = 0, span = [1, 2] }, |
| { id = 1, span = [2, 2] }, |
| { id = 1, span = [3, 3] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "empty21-leftmost-first" |
| regex = ["b", ""] |
| haystack = "abc" |
| matches = [ |
| { id = 1, span = [0, 0] }, |
| { id = 0, span = [1, 2] }, |
| { id = 1, span = [3, 3] }, |
| ] |
| match-kind = "leftmost-first" |
| search-kind = "leftmost" |
| |
| [[test]] |
| name = "empty22" |
| regex = ["(?:)", "b"] |
| haystack = "abc" |
| matches = [ |
| { id = 0, span = [0, 0] }, |
| { id = 0, span = [1, 1] }, |
| { id = 1, span = [1, 2] }, |
| { id = 0, span = [2, 2] }, |
| { id = 0, span = [3, 3] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "empty23" |
| regex = ["b", "(?:)"] |
| haystack = "abc" |
| matches = [ |
| { id = 1, span = [0, 0] }, |
| { id = 1, span = [1, 1] }, |
| { id = 0, span = [1, 2] }, |
| { id = 1, span = [2, 2] }, |
| { id = 1, span = [3, 3] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "empty30" |
| regex = ["", "z"] |
| haystack = "abc" |
| matches = [ |
| { id = 0, span = [0, 0] }, |
| { id = 0, span = [1, 1] }, |
| { id = 0, span = [2, 2] }, |
| { id = 0, span = [3, 3] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "empty30-leftmost-first" |
| regex = ["", "z"] |
| haystack = "abc" |
| matches = [ |
| { id = 0, span = [0, 0] }, |
| { id = 0, span = [1, 1] }, |
| { id = 0, span = [2, 2] }, |
| { id = 0, span = [3, 3] }, |
| ] |
| match-kind = "leftmost-first" |
| search-kind = "leftmost" |
| |
| [[test]] |
| name = "empty31" |
| regex = ["z", ""] |
| haystack = "abc" |
| matches = [ |
| { id = 1, span = [0, 0] }, |
| { id = 1, span = [1, 1] }, |
| { id = 1, span = [2, 2] }, |
| { id = 1, span = [3, 3] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "empty31-leftmost-first" |
| regex = ["z", ""] |
| haystack = "abc" |
| matches = [ |
| { id = 1, span = [0, 0] }, |
| { id = 1, span = [1, 1] }, |
| { id = 1, span = [2, 2] }, |
| { id = 1, span = [3, 3] }, |
| ] |
| match-kind = "leftmost-first" |
| search-kind = "leftmost" |
| |
| [[test]] |
| name = "empty40" |
| regex = ["c(?:)", "b"] |
| haystack = "abc" |
| matches = [ |
| { id = 1, span = [1, 2] }, |
| { id = 0, span = [2, 3] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "empty40-leftmost-first" |
| regex = ["c(?:)", "b"] |
| haystack = "abc" |
| matches = [ |
| { id = 1, span = [1, 2] }, |
| { id = 0, span = [2, 3] }, |
| ] |
| match-kind = "leftmost-first" |
| search-kind = "leftmost" |
| |
| # These test cases where there are no matches. |
| |
| [[test]] |
| name = "nomatch10" |
| regex = ["a", "a"] |
| haystack = "b" |
| matches = [] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "nomatch20" |
| regex = ["^foo", "bar$"] |
| haystack = "bar foo" |
| matches = [] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "nomatch30" |
| regex = [] |
| haystack = "a" |
| matches = [] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| [[test]] |
| name = "nomatch40" |
| regex = ["^rooted$", '\.log$'] |
| haystack = "notrooted" |
| matches = [] |
| match-kind = "all" |
| search-kind = "overlapping" |
| |
| # These test multi-regex searches with capture groups. |
| # |
| # NOTE: I wrote these tests in the course of developing a first class API for |
| # overlapping capturing group matches, but ultimately removed that API because |
| # the semantics for overlapping matches aren't totally clear. However, I've |
| # left the tests because I believe the semantics for these patterns are clear |
| # and because we can still test our "which patterns matched" APIs with them. |
| |
| [[test]] |
| name = "caps-010" |
| regex = ['^(\w+) (\w+)$', '^(\S+) (\S+)$'] |
| haystack = "Bruce Springsteen" |
| matches = [ |
| { id = 0, spans = [[0, 17], [0, 5], [6, 17]] }, |
| { id = 1, spans = [[0, 17], [0, 5], [6, 17]] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| unicode = false |
| utf8 = false |
| |
| [[test]] |
| name = "caps-020" |
| regex = ['^(\w+) (\w+)$', '^[A-Z](\S+) [A-Z](\S+)$'] |
| haystack = "Bruce Springsteen" |
| matches = [ |
| { id = 0, spans = [[0, 17], [0, 5], [6, 17]] }, |
| { id = 1, spans = [[0, 17], [1, 5], [7, 17]] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| unicode = false |
| utf8 = false |
| |
| [[test]] |
| name = "caps-030" |
| regex = ['^(\w+) (\w+)$', '^([A-Z])(\S+) ([A-Z])(\S+)$'] |
| haystack = "Bruce Springsteen" |
| matches = [ |
| { id = 0, spans = [[0, 17], [0, 5], [6, 17]] }, |
| { id = 1, spans = [[0, 17], [0, 1], [1, 5], [6, 7], [7, 17]] }, |
| ] |
| match-kind = "all" |
| search-kind = "overlapping" |
| unicode = false |
| utf8 = false |
| |
| [[test]] |
| name = "caps-110" |
| regex = ['(\w+) (\w+)', '(\S+) (\S+)'] |
| haystack = "Bruce Springsteen" |
| matches = [ |
| { id = 0, spans = [[0, 17], [0, 5], [6, 17]] }, |
| ] |
| match-kind = "leftmost-first" |
| search-kind = "leftmost" |
| unicode = false |
| utf8 = false |
| |
| [[test]] |
| name = "caps-120" |
| regex = ['(\w+) (\w+)', '(\S+) (\S+)'] |
| haystack = "&ruce $pringsteen" |
| matches = [ |
| { id = 1, spans = [[0, 17], [0, 5], [6, 17]] }, |
| ] |
| match-kind = "leftmost-first" |
| search-kind = "leftmost" |
| unicode = false |
| utf8 = false |
| |
| [[test]] |
| name = "caps-121" |
| regex = ['(\w+) (\w+)', '(\S+) (\S+)'] |
| haystack = "&ruce $pringsteen Foo Bar" |
| matches = [ |
| { id = 1, spans = [[0, 17], [0, 5], [6, 17]] }, |
| { id = 0, spans = [[18, 25], [18, 21], [22, 25]] }, |
| ] |
| match-kind = "leftmost-first" |
| search-kind = "leftmost" |
| unicode = false |
| utf8 = false |