diff options
author | Ryo Nihei <nihei.dev@gmail.com> | 2021-12-11 18:47:39 +0900 |
---|---|---|
committer | Ryo Nihei <nihei.dev@gmail.com> | 2021-12-11 19:31:41 +0900 |
commit | 46d49df654e9e152680717830aec70b65e8c507c (patch) | |
tree | cb8c1410e34566a233a93bb52039ef47e0914ab8 /compiler/parser/parser_test.go | |
parent | Simplify process that generates UTF-8 byte sequences from a code point range (diff) | |
download | tre-46d49df654e9e152680717830aec70b65e8c507c.tar.gz tre-46d49df654e9e152680717830aec70b65e8c507c.tar.xz |
Make character properties unavailable in bracket expressions
Diffstat (limited to '')
-rw-r--r-- | compiler/parser/parser_test.go | 63 |
1 files changed, 56 insertions, 7 deletions
diff --git a/compiler/parser/parser_test.go b/compiler/parser/parser_test.go index beeef1b..1fa0489 100644 --- a/compiler/parser/parser_test.go +++ b/compiler/parser/parser_test.go @@ -408,10 +408,30 @@ func TestParse(t *testing.T) { ast: newSymbolNode('N'), }, { + pattern: "[\\u{0061}-\\u{007A}]", + ast: newRangeSymbolNode('a', 'z'), + }, + { pattern: "[\\p{Lu}]", skipTestAST: true, }, { + pattern: "[a-\\p{Lu}]", + syntaxError: synErrRangePropIsUnavailable, + }, + { + pattern: "[\\p{Lu}-z]", + syntaxError: synErrRangePropIsUnavailable, + }, + { + pattern: "[\\p{Lu}-\\p{Ll}]", + syntaxError: synErrRangePropIsUnavailable, + }, + { + pattern: "[z-a]", + syntaxError: synErrRangeInvalidOrder, + }, + { pattern: "a[]", syntaxError: synErrBExpNoElem, }, @@ -424,6 +444,34 @@ func TestParse(t *testing.T) { syntaxError: synErrBExpNoElem, }, { + pattern: "[^a-z]", + skipTestAST: true, + }, + { + pattern: "[^\\u{004E}]", + skipTestAST: true, + }, + { + pattern: "[^\\u{0061}-\\u{007A}]", + skipTestAST: true, + }, + { + pattern: "[^\\p{Lu}]", + skipTestAST: true, + }, + { + pattern: "[^a-\\p{Lu}]", + syntaxError: synErrRangePropIsUnavailable, + }, + { + pattern: "[^\\p{Lu}-z]", + syntaxError: synErrRangePropIsUnavailable, + }, + { + pattern: "[^\\p{Lu}-\\p{Ll}]", + syntaxError: synErrRangePropIsUnavailable, + }, + { pattern: "[^]", ast: newSymbolNode('^'), }, @@ -857,23 +905,24 @@ func TestParse(t *testing.T) { p := NewParser(spec.LexKindName("test"), strings.NewReader(tt.pattern)) root, err := p.Parse() if tt.syntaxError != nil { - // printCPTree(os.Stdout, ast, "", "") - if err == nil { - t.Fatalf("expected syntax error: got: nil") + // printCPTree(os.Stdout, root, "", "") + if err != ParseErr { + t.Fatalf("unexpected error: want: %v, got: %v", ParseErr, err) } _, synErr := p.Error() if synErr != tt.syntaxError { t.Fatalf("unexpected syntax error: want: %v, got: %v", tt.syntaxError, synErr) } if root != nil { - t.Fatalf("tree is not nil") + t.Fatalf("tree must be nil") } } else { if err != nil { - t.Fatal(err) + detail, cause := p.Error() + t.Fatalf("%v: %v: %v", err, cause, detail) } if root == nil { - t.Fatal("tree is nil") + t.Fatal("tree must be non-nil") } complete, err := ApplyFragments(root, fragmentTrees) @@ -884,7 +933,7 @@ func TestParse(t *testing.T) { t.Fatalf("incomplete fragments") } - // printCPTree(os.Stdout, ast, "", "") + // printCPTree(os.Stdout, root, "", "") if !tt.skipTestAST { r := root.(*rootNode) testAST(t, tt.ast, r.tree) |