{
  "scenario": "Valid tests",
  "description": "Additional valid tests",
  "defaultTestProperties": {
    "locale": "en-US"
  },
  "tests": [
    { "src": "hello {|4.2| :number minimumFractionDigits=2}", "exp": "hello 4.20"},
    { "src": "hello {|4.2| :number minimumFractionDigits = 2}", "exp": "hello 4.20" },
    { "src": "hello {|4.2| :number minimumFractionDigits= 2}", "exp": "hello 4.20" },
    { "src": "hello {|4.2| :number minimumFractionDigits =2}", "exp": "hello 4.20"},
    { "src": "hello {|4.2| :number minimumFractionDigits=2  }", "exp": "hello 4.20"},
    { "src": "hello {|4.2| :number minimumFractionDigits=2 bar=3}", "exp": "hello 4.20"},
    { "src": "hello {|4.2| :number minimumFractionDigits=2 bar=3  }", "exp": "hello 4.20"},
    { "src": "hello {|4.2| :number minimumFractionDigits=|2|}", "exp": "hello 4.20"},
    { "src": "content -tag", "exp": "content -tag"},
    { "src": "", "exp": ""},
    { "src": "{|hel\\\\lo|}", "exp": "hel\\lo"},
    { "src": "{|hel\\|lo|}", "exp": "hel|lo"},
    { "src": "{|hel\\|\\\\lo|}", "exp": "hel|\\lo"},
    { "src": "hel\\{lo", "exp": "hel{lo"},
    { "src": "hel\\}lo", "exp": "hel}lo"},
    { "src": "hel\\\\lo", "exp": "hel\\lo"},
    { "src": "hel\\{\\\\lo", "exp": "hel{\\lo"},
    { "src": "hel\\{\\}lo", "exp": "hel{}lo"},
    { "src": "hello {|wo\nrld|}", "exp": "hello wo\nrld"},
    { "src": "hello wo\nrld", "exp": "hello wo\nrld"},
    { "src": "{#tag/} content", "exp": " content"},
    { "src": "{#tag} content", "exp": " content"},
    { "src": "{#tag/} {|content|}", "exp": " content"},
    { "src": "{#tag} {|content|}", "exp": " content"},
    { "src": "{|content|} {#tag/}", "exp": "content "},
    { "src": "{|content|} {#tag}", "exp": "content "},
    { "src": "{/tag} {|content|}", "exp": " content"},
    { "src": "{|content|} {/tag}", "exp": "content "},
    { "src": "{#tag} {|content|} {/tag}", "exp": " content "},
    { "src": "{/tag} {|content|} {#tag}", "exp": " content "},
    { "src": "{#tag/} {|content|} {#tag}", "exp": " content "},
    { "src": "{#tag/} {|content|} {/tag}", "exp": " content "},
    { "src": "{#tag foo=bar/} {|content|}", "exp": " content"},
    { "src": "{#tag foo=bar} {|content|}", "exp": " content"},
    { "src": "{/tag foo=bar} {|content|}", "exp": " content"},
    { "src": "{#tag foo=bar} {|content|} {/tag foo=bar}", "exp": " content "},
    { "src": "{/tag foo=bar} {|content|} {#tag foo=bar}", "exp": " content "},
    { "src": "{#tag foo=bar /} {|content|} {#tag foo=bar}", "exp": " content "},
    { "src": "{#tag foo=bar/} {|content|} {/tag foo=bar}", "exp": " content "},
    { "src": "The value is {horse @horse}.", "exp": "The value is horse."},
    { "src": "hello {|4.2| @number}", "exp": "hello 4.2"},
    { "src": "The value is {horse @horse=cool}.", "exp": "The value is horse."},
    { "src": "hello {|4.2| @number=5}", "exp": "hello 4.2"},
    { "src": "{-1}", "exp": "-1"},
    { "src": "{0}", "exp": "0"},
    { "src": "{0.0123}", "exp": "0.0123"},
    { "src": "{1.234e5}", "exp": "1.234e5",
      "ignoreJava": "See ICU-22810"},
    { "src": "{1.234E5}", "exp": "1.234E5",
      "ignoreJava": "See ICU-22810"},
    { "src": "{1.234E+5}", "exp": "1.234E+5",
      "ignoreJava": "See ICU-22810"},
    { "src": "{1.234e-5}", "exp": "1.234e-5",
      "ignoreJava": "See ICU-22810"},
    { "src": "{42e5}", "exp": "42e5",
      "ignoreJava": "See ICU-22810"},
    { "src": "{42e0}", "exp": "42e0",
      "ignoreJava": "See ICU-22810"},
    { "src": "{42e000}", "exp": "42e000",
      "ignoreJava": "See ICU-22810"},
    { "src": "{42e369}", "exp": "42e369",
      "ignoreJava": "See ICU-22810"},
    { "src": "hello {|3| :number   }", "exp": "hello 3" },
    { "src": "{:foo}", "expErrors": [{ "type": "unknown-function" }],
      "ignoreJava": "See https://github.com/unicode-org/message-format-wg/issues/782" },
    { "src": "{:foo }", "expErrors": [{ "type": "unknown-function" }],
      "ignoreJava": "See https://github.com/unicode-org/message-format-wg/issues/782" },
    { "src": "{:foo   }", "expErrors": [{ "type": "unknown-function" }],
      "ignoreJava": "See https://github.com/unicode-org/message-format-wg/issues/782" },
    { "src": "{:foo k=v}", "expErrors": [{ "type": "unknown-function" }],
      "ignoreJava": "See https://github.com/unicode-org/message-format-wg/issues/782" },
    { "src": "{:foo k=v   }", "expErrors": [{ "type": "unknown-function" }],
      "ignoreJava": "See https://github.com/unicode-org/message-format-wg/issues/782" },
    { "src": "{:foo k1=v1   k2=v2}", "expErrors": [{ "type": "unknown-function" }],
      "ignoreJava": "See https://github.com/unicode-org/message-format-wg/issues/782" },
    { "src": "{:foo k1=v1   k2=v2   }", "expErrors": [{ "type": "unknown-function" }],
      "ignoreJava": "See https://github.com/unicode-org/message-format-wg/issues/782" },
    { "src": "{|3.14| }", "exp": "3.14" },
    { "src": "{|3.14|    }", "exp": "3.14" },
    { "src": "{|3.14|    :number}", "exp": "3.14" },
    { "src": "{|3.14|    :number   }", "exp": "3.14" },
    { "src": "{$bar }", "expErrors": [{ "type": "unresolved-variable" }],
      "ignoreJava": "See https://github.com/unicode-org/message-format-wg/issues/782" },
    { "src": "{$bar    }", "expErrors": [{ "type": "unresolved-variable" }],
      "ignoreJava": "See https://github.com/unicode-org/message-format-wg/issues/782" },
    { "src": "{$bar    :foo}", "expErrors": [{ "type": "unresolved-variable" }],
      "ignoreJava": "See https://github.com/unicode-org/message-format-wg/issues/782" },
    { "src": "{$bar    :foo   }", "expErrors": [{ "type": "unresolved-variable" }],
      "ignoreJava": "See https://github.com/unicode-org/message-format-wg/issues/782" },
    { "src": "{$bar-foo}", "expErrors": [{ "type": "unresolved-variable" }],
      "ignoreJava": "See https://github.com/unicode-org/message-format-wg/issues/782" },
    { "src": ".local $foo = {|hello|} .local $foo = {$foo} {{{$foo}}}",
      "expErrors": [{ "type": "duplicate-declaration" }] },
    { "src": "good {placeholder}", "exp": "good placeholder" },
    {
        "src": "a\\\\qbc",
        "exp": "a\\qbc",
        "comment": "pattern -> escaped-char -> backslash backslash"
    },
    {
      "comment": "message -> simple-message -> simple-start pattern -> escaped-char",
      "src": "\\\\",
      "exp": "\\"
    },
    {
      "comment": "message -> simple-message -> simple-start pattern -> placeholder -> markup -> \"{\" s \"#\" identifier \"}\"", 
      "src": "{ #a}",
      "exp": ""
    },
    {
      "comment": "message -> simple-message -> simple-start pattern -> placeholder -> markup -> \"{\" s \"/\" identifier \"}\"",
      "src": "{ /a}",
      "exp": ""
    },
    {
      "comment": "message -> complex-message -> *(declaration [s]) complex-body -> declaration complex-body -> input-declaration complex-body -> input variable-expression complex-body",
      "src": ".input{$x}{{}}",
      "exp": ""
    },
    {
      "comment": "Test that escaped characters are re-escaped properly when serializing literals",
      "src": "{|\\}|}",
      "exp": "}"
    },
    {
      "comment": "Test that escaped characters are re-escaped properly when serializing patterns",
      "src": "\\|",
      "exp": "|"
    },
    {
      "comment": "Test that parser and serializer treat optionally-escaped characters consistently",
      "src" : "{{{1}|}}",
      "exp": "1|"
    },
    {
      "comment": "Trailing whitespace after match is valid",
      "src": ".local $x = {1 :string} .match $x * {{}} ",
      "exp": ""
    },
    {
      "src" : "𴢸",
      "exp" : "𴢸"
    },
    {
      "src" : "{{􍅲}}",
      "exp" : "􍅲"
    }
  ]
}
