| { |
| "$schema": "https://raw.githubusercontent.com/unicode-org/message-format-wg/main/test/schemas/v0/tests.schema.json", |
| "scenario": "Syntax errors", |
| "description": "Strings that produce syntax errors when parsed.", |
| "defaultTestProperties": { |
| "locale": "en-US", |
| "expErrors": [ |
| { |
| "type": "syntax-error" |
| } |
| ] |
| }, |
| "tests": [ |
| { |
| "src": "." |
| }, |
| { |
| "src": "{" |
| }, |
| { |
| "src": "}" |
| }, |
| { |
| "src": "{}" |
| }, |
| { |
| "src": "{{" |
| }, |
| { |
| "src": "{{}" |
| }, |
| { |
| "src": "{{}}}" |
| }, |
| { |
| "src": "{|foo| #markup}" |
| }, |
| { |
| "src": "{{missing end brace}" |
| }, |
| { |
| "src": "{{missing end braces" |
| }, |
| { |
| "src": "{{missing end {$braces" |
| }, |
| { |
| "src": "{{extra}} content" |
| }, |
| { |
| "src": "empty { } placeholder" |
| }, |
| { |
| "src": "missing space {42:func}" |
| }, |
| { |
| "src": "missing space {|foo|:func}" |
| }, |
| { |
| "src": "missing space {|foo|@bar}" |
| }, |
| { |
| "src": "missing space {:func@bar}" |
| }, |
| { |
| "src": "missing space {:func @bar@baz}" |
| }, |
| { |
| "src": "missing space {:func @bar=42@baz}" |
| }, |
| { |
| "src": "missing space {+reserved@bar}" |
| }, |
| { |
| "src": "missing space {&private@bar}" |
| }, |
| { |
| "src": "bad {:} placeholder" |
| }, |
| { |
| "src": "bad {\\u0000placeholder}" |
| }, |
| { |
| "src": "no-equal {|42| :number minimumFractionDigits 2}" |
| }, |
| { |
| "src": "bad {:placeholder option=}" |
| }, |
| { |
| "src": "bad {:placeholder option value}" |
| }, |
| { |
| "src": "bad {:placeholder option:value}" |
| }, |
| { |
| "src": "bad {:placeholder option}" |
| }, |
| { |
| "src": "bad {:placeholder:}" |
| }, |
| { |
| "src": "bad {::placeholder}" |
| }, |
| { |
| "src": "bad {:placeholder::foo}" |
| }, |
| { |
| "src": "bad {:placeholder option:=x}" |
| }, |
| { |
| "src": "bad {:placeholder :option=x}" |
| }, |
| { |
| "src": "bad {:placeholder option::x=y}" |
| }, |
| { |
| "src": "bad {$placeholder option}" |
| }, |
| { |
| "src": "bad {:placeholder @attribute=}" |
| }, |
| { |
| "src": "bad {:placeholder @attribute=@foo}" |
| }, |
| { |
| "src": "bad {:placeholder @attribute=$foo}" |
| }, |
| { |
| "src": "{ @misplaced = attribute }" |
| }, |
| { |
| "src": "no {placeholder end" |
| }, |
| { |
| "src": "no {$placeholder end" |
| }, |
| { |
| "src": "no {:placeholder end" |
| }, |
| { |
| "src": "no {|placeholder| end" |
| }, |
| { |
| "src": "no {|literal} end" |
| }, |
| { |
| "src": "no {|literal or placeholder end" |
| }, |
| { |
| "src": ".local bar = {|foo|} {{_}}" |
| }, |
| { |
| "src": ".local #bar = {|foo|} {{_}}" |
| }, |
| { |
| "src": ".local $bar {|foo|} {{_}}" |
| }, |
| { |
| "src": ".local $bar = |foo| {{_}}" |
| }, |
| { "src": ".match {{foo}}" }, |
| { "src": ".match * {{foo}}" }, |
| { "src": ".match x * {{foo}}" }, |
| { "src": ".match |x| * {{foo}}" }, |
| { "src": ".match :x * {{foo}}" }, |
| { "src": ".match {$foo} * {{foo}}" }, |
| { "src": ".match {#foo} * {{foo}}" }, |
| { "src": ".input {$x :x} .match {$x} * {{foo}}" }, |
| { "src": ".input {$x :x} .match$x * {{foo}}" }, |
| { "src": ".input {$x :x} .match $x* {{foo}}" }, |
| { "src": ".input {$x :x} .match $x|x| {{foo}} * {{foo}}" }, |
| { "src": ".input {$x :x} .local $y = {y :y} .match $x$y * * {{foo}}" }, |
| { "src": ".input {$x :x} .local $y = {y :y} .match $x $y ** {{foo}}" }, |
| { "src": ".input {$x :x} .match $x" }, |
| { "src": ".input {$x :x} .match $x *" }, |
| { "src": ".input {$x :x} .match $x * foo" }, |
| { "src": ".input {$x :x} .match $x * {{foo}} extra" }, |
| { "src": ".n{a}{{}}" }, |
| { "src": "{^}" }, |
| { "src": "{!}" }, |
| { "src": ".n .{a}{{}}" }, |
| { "src": ".n. {a}{{}}" }, |
| { "src": ".n.{a}{b}{{}}" }, |
| { "src": "{!.}" }, |
| { "src": "{! .}" }, |
| { "src": "{%}" }, |
| { "src": "{*}" }, |
| { "src": "{<}" }, |
| { "src": "{>}" }, |
| { "src": "{?}" }, |
| { "src": "{~}" }, |
| { "src": "{^.}" }, |
| { "src": "{^ .}" }, |
| { "src": "{&}" }, |
| { "src": "{\ud800}" }, |
| { "src": "{\ufdd0}" }, |
| { "src": "{\ufffe}" }, |
| { "src": "{!.\\{}" }, |
| { "src": "{!. \\{}" }, |
| { "src": "{!|a|}" }, |
| { "src": "foo {&private}" }, |
| { "src": "foo {?reserved @a @b=c}" }, |
| { "src": ".foo {42} {{bar}}" }, |
| { "src": ".foo{42}{{bar}}" }, |
| { "src": ".foo |}lit{| {42}{{bar}}" }, |
| { "src": ".i {1} {{}}" }, |
| { "src": ".l $y = {|bar|} {{}}" }, |
| { "src": ".l $x.y = {|bar|} {{}}" }, |
| { "src": "hello {|4.2| %number}" }, |
| { "src": "hello {|4.2| %n|um|ber}" }, |
| { "src": "hello {|4.2| &num|be|r}" }, |
| { "src": "hello {|4.2| ^num|be|r}" }, |
| { "src": "hello {|4.2| +num|be|r}" }, |
| { "src": "hello {|4.2| ?num|be||r|s}" }, |
| { "src": "hello {|foo| !number}" }, |
| { "src": "hello {|foo| *number}" }, |
| { "src": "hello {?number}" }, |
| { "src": "{<tag}" }, |
| { "src": ".local $bar = {$none ~plural} .match {foo :string} * {{{$bar}}}" }, |
| { "src": "hello {|4.2| %num\\\\ber}" }, |
| { "src": "hello {|4.2| %num\\{be\\|r}" }, |
| { "src": "hello {|4.2| %num\\\\\\}ber}" }, |
| { "src": "hello {|4.2| !}" }, |
| { "src": "hello {|4.2| %}" }, |
| { "src": "hello {|4.2| *}" }, |
| { "src": "hello {|4.2| ^abc|123||5|\\\\}" }, |
| { "src": "hello {|4.2| ^ abc|123||5|\\\\}" }, |
| { "src": "hello {|4.2| ^ abc|123||5|\\\\ \\|def |3.14||2|}" }, |
| { "src": "hello {|4.2| ? }" }, |
| { "src": "hello {|4.2| %xyzz }" }, |
| { "src": "hello {|4.2| >xyzz }" }, |
| { "src": "hello {$foo ~xyzz }" }, |
| { "src": "hello {$x <xyzz }" }, |
| { "src": "{>xyzz }" }, |
| { "src": "{ !xyzz }" }, |
| { "src": "{~xyzz }" }, |
| { "src": "{ <xyzz }" }, |
| { "src": "hello {|4.2| !xy z z }" }, |
| { "src": "hello {|4.2| *num \\\\ b er}" }, |
| { "src": "hello {|4.2| %num \\\\ b |3.14| r }" }, |
| { "src": "hello {|4.2| +num xx \\\\ b |3.14| r }" }, |
| { "src": "hello {$foo +num x \\\\ abcde |3.14| r }" }, |
| { "src": "hello {$foo >num x \\\\ abcde |aaa||3.14||42| r }" }, |
| { "src": "hello {$foo >num x \\\\ abcde |aaa||3.14| |42| r }" }, |
| { "src" : ".input{ $n ~ }{{{$n}}}" } |
| ] |
| } |