| { |
| "scenario": "Bidi support", |
| "description": "Tests for correct parsing of messages with bidirectional marks and isolates", |
| "defaultTestProperties": { |
| "locale": "en-US" |
| }, |
| "tests": [ |
| { |
| "comment": "simple-message = o [simple-start pattern]", |
| "src": " \u061C Hello world!", |
| "exp": " \u061C Hello world!" |
| }, |
| { |
| "comment": "complex-message = o *(declaration o) complex-body o", |
| "src": "\u200E .local $x = {1} {{ {$x}}}", |
| "exp": " 1" |
| }, |
| { |
| "comment": "complex-message = o *(declaration o) complex-body o", |
| "src": ".local $x = {1} \u200F {{ {$x}}}", |
| "exp": " 1" |
| }, |
| { |
| "comment": "complex-message = o *(declaration o) complex-body o", |
| "src": ".local $x = {1} {{ {$x}}} \u2066", |
| "exp": " 1" |
| }, |
| { |
| "comment": "input-declaration = input o variable-expression", |
| "src": ".input \u2067 {$x :number} {{hello}}", |
| "params": [{"name": "x", "value": "1"}], |
| "exp": "hello" |
| }, |
| { |
| "comment": "local s variable o \"=\" o expression", |
| "src": ".local $x \u2068 = \u2069 {1} {{hello}}", |
| "exp": "hello" |
| }, |
| { |
| "comment": "local s variable o \"=\" o expression", |
| "src": ".local \u2067 $x = {1} {{hello}}", |
| "exp": "hello" |
| }, |
| { |
| "comment": "local s variable o \"=\" o expression", |
| "src": ".local\u2067 $x = {1} {{hello}}", |
| "exp": "hello" |
| }, |
| { |
| "comment": "o \"{{\" pattern \"}}\"", |
| "src": "\u2067 {{hello}}", |
| "exp": "hello" |
| }, |
| { |
| "comment": "match-statement s variant *(o variant)", |
| "src": [".local $x = {1 :number}\n", |
| ".match $x\n", |
| "1 {{one}}\n", |
| "\u061C * {{other}}"], |
| "exp": "one" |
| }, |
| { |
| "comment": "match-statement s variant *(o variant)", |
| "src": [".local $x = {1 :number}", |
| ".match $x \u061c", |
| "1 {{one}}", |
| "* {{other}}"], |
| "exp": "one" |
| }, |
| { |
| "comment": "match-statement s variant *(o variant)", |
| "src": [".local $x = {1 :number}", |
| ".match $x \u061c", |
| "1 {{one}}", |
| "* {{other}}"], |
| "exp": "one" |
| }, |
| { |
| "comment": "variant = key *(s key) quoted-pattern", |
| "src": [".local $x = {1 :number} .local $y = {$x :number}", |
| ".match $x $y\n", |
| "1 \u200E 1 {{one}}", |
| "* * {{other}}"], |
| "exp": "one" |
| }, |
| { |
| "comment": "variant = key *(s key) quoted-pattern", |
| "src": [".local $x = {1 :number} .local $y = {$x :number}", |
| ".match $x $y\n", |
| "1\u200E 1 {{one}}", |
| "* * {{other}}"], |
| "exp": "one" |
| }, |
| { |
| "comment": "literal-expression = \"{\" o literal [s function] *(s attribute) o \"}\"", |
| "src": "{\u200E hello \u200F}", |
| "exp": "hello" |
| }, |
| { |
| "comment": "variable-expression = \"{\" o variable [s function] *(s attribute) o \"}\"", |
| "src": ".local $x = {1} {{ {\u200E $x \u200F} }}", |
| "exp": " 1 " |
| }, |
| { |
| "comment": "function-expression = \"{\" o function *(s attribute) o \"}\"", |
| "src": "{1 \u200E :number \u200F}", |
| "exp": "1" |
| }, |
| { |
| "comment": "markup = \"{\" o \"#\" identifier *(s option) *(s attribute) o [\"/\"] \"}\"", |
| "src": "{\u200F #b \u200E }", |
| "exp": "" |
| }, |
| { |
| "comment": "markup = \"{\" o \"/\" identifier *(s option) *(s attribute) o \"}\"", |
| "src": "{\u200F /b \u200E }", |
| "exp": "" |
| }, |
| { |
| "comment": "option = identifier o \"=\" o (literal / variable)", |
| "src": "{1 :number minimumFractionDigits\u200F=\u200E1 }", |
| "exp": "1.0" |
| }, |
| { |
| "comment": "attribute = \"@\" identifier [o \"=\" o (literal / variable)]", |
| "src": "{1 :number @locale\u200F=\u200Een }", |
| "exp": "1" |
| }, |
| { |
| "comment": " name... excludes U+FFFD and U+061C -- this pases as name -> [bidi] name-start *name-char", |
| "src": ".local $\u061Cfoo = {1} {{ {$\u061Cfoo} }}", |
| "exp": " 1 " |
| }, |
| { |
| "comment": " name matches https://www.w3.org/TR/REC-xml-names/#NT-NCName but excludes U+FFFD and U+061C", |
| "src": ".local $foo\u061Cbar = {2} {{ }}", |
| "expErrors": [{"type": "syntax-error"}] |
| }, |
| { |
| "comment": "name = [bidi] name-start *name-char [bidi]", |
| "src": ".local $\u200Efoo\u200F = {3} {{{$\u200Efoo\u200F}}}", |
| "exp": "3" |
| }, |
| { |
| "comment": "name = [bidi] name-start *name-char [bidi]", |
| "src": ".local $foo = {4} {{{$\u200Efoo\u200F}}}", |
| "exp": "4" |
| }, |
| { |
| "comment": "name = [bidi] name-start *name-char [bidi]", |
| "src": ".local $\u200Efoo\u200F = {5} {{{$foo}}}", |
| "exp": "5" |
| }, |
| { |
| "comment": "name = [bidi] name-start *name-char [bidi]", |
| "src": ".local $foo\u200Ebar = {6} {{{$foo\u200Ebar}}}", |
| "expErrors": [{"type": "syntax-error"}] |
| } |
| ] |
| } |