|
| 1 | +{ |
| 2 | + "scenario": "Bidi support", |
| 3 | + "description": "Tests for correct parsing of messages with bidirectional marks and isolates", |
| 4 | + "defaultTestProperties": { |
| 5 | + "locale": "en-US" |
| 6 | + }, |
| 7 | + "tests": [ |
| 8 | + { |
| 9 | + "description": "simple-message = o [simple-start pattern]", |
| 10 | + "src": " \u061C Hello world!", |
| 11 | + "exp": " \u061C Hello world!" |
| 12 | + }, |
| 13 | + { |
| 14 | + "description": "complex-message = o *(declaration o) complex-body o", |
| 15 | + "src": "\u200E .local $x = {1} {{ {$x}}}", |
| 16 | + "exp": " 1" |
| 17 | + }, |
| 18 | + { |
| 19 | + "description": "complex-message = o *(declaration o) complex-body o", |
| 20 | + "src": ".local $x = {1} \u200F {{ {$x}}}", |
| 21 | + "exp": " 1" |
| 22 | + }, |
| 23 | + { |
| 24 | + "description": "complex-message = o *(declaration o) complex-body o", |
| 25 | + "src": ".local $x = {1} {{ {$x}}} \u2066", |
| 26 | + "exp": "1" |
| 27 | + }, |
| 28 | + { |
| 29 | + "description": "input-declaration = input o variable-expression", |
| 30 | + "src": ".input \u2067 {$x :number} {{hello}}", |
| 31 | + "params": [{"name": "x", "value": "1"}], |
| 32 | + "exp": "hello" |
| 33 | + }, |
| 34 | + { |
| 35 | + "description": "local s variable o \"=\" o expression", |
| 36 | + "src": ".local $x \u2068 = \u2069 {1} {{hello}}", |
| 37 | + "exp": "hello" |
| 38 | + }, |
| 39 | + { |
| 40 | + "description": "local s variable o \"=\" o expression", |
| 41 | + "src": ".local \u2067 $x = {1} {{hello}}", |
| 42 | + "exp": "hello" |
| 43 | + }, |
| 44 | + { |
| 45 | + "description": "local s variable o \"=\" o expression", |
| 46 | + "src": ".local\u2067 $x = {1} {{hello}}", |
| 47 | + "exp": "hello" |
| 48 | + }, |
| 49 | + { |
| 50 | + "description": "o \"{{\" pattern \"}}\"", |
| 51 | + "src": "\u2067 {{hello}}", |
| 52 | + "exp": "hello" |
| 53 | + }, |
| 54 | + { |
| 55 | + "description": "match-statement s variant *(o variant)", |
| 56 | + "src": ".local $x = {1 :number}\n.match $x\n1 {{one}}\n\u061C * {{other}}", |
| 57 | + "exp": "one" |
| 58 | + }, |
| 59 | + { |
| 60 | + "description": "match-statement s variant *(o variant)", |
| 61 | + "src": ".local $x = {1 :number}.match $x \u061c1 {{one}}* {{other}}", |
| 62 | + "exp": "one" |
| 63 | + }, |
| 64 | + { |
| 65 | + "description": "match-statement s variant *(o variant)", |
| 66 | + "src": ".local $x = {1 :number}.match $x\u061c1 {{one}}* {{other}}", |
| 67 | + "exp": "one" |
| 68 | + }, |
| 69 | + { |
| 70 | + "description": "variant = key *(s key) quoted-pattern", |
| 71 | + "src": ".local $x = {1 :number} .local $y = {$x :number}.match $x $y\n1 \u200E 1 {{one}}* * {{other}}", |
| 72 | + "exp": "one" |
| 73 | + }, |
| 74 | + { |
| 75 | + "description": "variant = key *(s key) quoted-pattern", |
| 76 | + "src": ".local $x = {1 :number} .local $y = {$x :number}.match $x $y\n1\u200E 1 {{one}}* * {{other}}", |
| 77 | + "exp": "one" |
| 78 | + }, |
| 79 | + { |
| 80 | + "description": "literal-expression = \"{\" o literal [s function] *(s attribute) o \"}\"", |
| 81 | + "src": "{\u200E hello \u200F}", |
| 82 | + "exp": "hello" |
| 83 | + }, |
| 84 | + { |
| 85 | + "description": "variable-expression = \"{\" o variable [s function] *(s attribute) o \"}\"", |
| 86 | + "src": ".local $x = {1} {{ {\u200E $x \u200F} }}", |
| 87 | + "exp": "1" |
| 88 | + }, |
| 89 | + { |
| 90 | + "description": "function-expression = \"{\" o function *(s attribute) o \"}\"", |
| 91 | + "src": "{1 \u200E :number \u200F}", |
| 92 | + "exp": "1" |
| 93 | + }, |
| 94 | + { |
| 95 | + "description": "markup = \"{\" o \"#\" identifier *(s option) *(s attribute) o [\"/\"] \"}\"", |
| 96 | + "src": "{\u200F #b \u200E }", |
| 97 | + "exp": "" |
| 98 | + }, |
| 99 | + { |
| 100 | + "description": "markup = \"{\" o \"/\" identifier *(s option) *(s attribute) o \"}\"", |
| 101 | + "src": "{\u200F /b \u200E }", |
| 102 | + "exp": "" |
| 103 | + }, |
| 104 | + { |
| 105 | + "description": "option = identifier o \"=\" o (literal / variable)", |
| 106 | + "src": "{1 :number minimumFractionDigits\u200F=\u200E1 }", |
| 107 | + "exp": "1.1" |
| 108 | + }, |
| 109 | + { |
| 110 | + "description": "attribute = \"@\" identifier [o \"=\" o (literal / variable)]", |
| 111 | + "src": "{1 :number @locale\u200F=\u200Een }", |
| 112 | + "exp": "1" |
| 113 | + }, |
| 114 | + { |
| 115 | + "description": " name... excludes U+FFFD and U+061C -- this pases as name -> [bidi] name-start *name-char", |
| 116 | + "src": ".local $\u061Cfoo = {1} {{ {$\u061Cfoo} }}", |
| 117 | + "exp": " 1 " |
| 118 | + }, |
| 119 | + { |
| 120 | + "description": " name matches https://www.w3.org/TR/REC-xml-names/#NT-NCName but excludes U+FFFD and U+061C", |
| 121 | + "src": ".local $foo\u061Cbar = {2} {{ }}", |
| 122 | + "expErrors": [{"type": "syntax-error"}] |
| 123 | + }, |
| 124 | + { |
| 125 | + "description": "name = [bidi] name-start *name-char [bidi]", |
| 126 | + "src": ".local $\u200Efoo\u200F = {3} {{$\u200Efoo\u200F}}", |
| 127 | + "exp": "3" |
| 128 | + }, |
| 129 | + { |
| 130 | + "description": "name = [bidi] name-start *name-char [bidi]", |
| 131 | + "src": ".local $foo = {4} {{$\u200Efoo\u200F}}", |
| 132 | + "exp": "4" |
| 133 | + }, |
| 134 | + { |
| 135 | + "description": "name = [bidi] name-start *name-char [bidi]", |
| 136 | + "src": ".local $\u200Efoo\u200F = {4} {{$foo}}", |
| 137 | + "exp": "5" |
| 138 | + }, |
| 139 | + { |
| 140 | + "description": "name = [bidi] name-start *name-char [bidi]", |
| 141 | + "src": ".local $foo\u200Ebar = {5} {{$foo\u200Ebar}}", |
| 142 | + "expErrors": [{"type": "syntax-error"}] |
| 143 | + } |
| 144 | + ] |
| 145 | +} |
0 commit comments