{
  "schema": "https://bars.commonsware.com/conformance/schema/render-fixture.schema.json",
  "version": "0.1.0",
  "cases": [
    {
      "name": "string-literal-double-quoted",
      "description": "A double-quoted string literal renders its content unquoted, HTML-escaped.",
      "template": "{{ \"hi\" }}",
      "expect": {
        "kind": "output",
        "expectedOutput": "hi"
      }
    },
    {
      "name": "string-literal-single-quoted",
      "description": "A single-quoted string literal renders identically to the double-quoted form.",
      "template": "{{ 'hi' }}",
      "expect": {
        "kind": "output",
        "expectedOutput": "hi"
      }
    },
    {
      "name": "string-literal-html-escaped-in-double-mustache",
      "description": "HTML-special characters in a string literal are escaped under {{ }}.",
      "template": "{{ \"<b>raw</b>\" }}",
      "expect": {
        "kind": "output",
        "expectedOutput": "&lt;b&gt;raw&lt;/b&gt;"
      }
    },
    {
      "name": "string-literal-verbatim-in-triple-mustache",
      "description": "HTML-special characters in a string literal pass through verbatim under {{{ }}}.",
      "template": "{{{ \"<b>raw</b>\" }}}",
      "expect": {
        "kind": "output",
        "expectedOutput": "<b>raw</b>"
      }
    },
    {
      "name": "string-literal-with-embedded-quote",
      "description": "An escaped quote inside a double-quoted string literal is decoded by the parser before rendering, then HTML-escaped to its named entity.",
      "template": "{{ \"she said \\\"hi\\\"\" }}",
      "expect": {
        "kind": "output",
        "expectedOutput": "she said &quot;hi&quot;"
      }
    },
    {
      "name": "string-literal-empty",
      "description": "An empty-string literal renders as an empty string.",
      "template": "[{{ \"\" }}]",
      "expect": {
        "kind": "output",
        "expectedOutput": "[]"
      }
    },
    {
      "name": "integer-literal",
      "description": "An integer literal renders as its JSON form.",
      "template": "{{ 42 }}",
      "expect": {
        "kind": "output",
        "expectedOutput": "42"
      }
    },
    {
      "name": "negative-integer-literal",
      "description": "A negative integer literal includes the leading minus sign.",
      "template": "{{ -7 }}",
      "expect": {
        "kind": "output",
        "expectedOutput": "-7"
      }
    },
    {
      "name": "decimal-literal",
      "description": "A decimal literal renders with its fractional part.",
      "template": "{{ 3.14 }}",
      "expect": {
        "kind": "output",
        "expectedOutput": "3.14"
      }
    },
    {
      "name": "negative-decimal-literal",
      "description": "A negative decimal literal includes the leading minus sign.",
      "template": "{{ -3.5 }}",
      "expect": {
        "kind": "output",
        "expectedOutput": "-3.5"
      }
    },
    {
      "name": "zero-literal",
      "description": "The numeric literal 0 renders as \"0\" \u2014 it is *not* the same as the empty string.",
      "template": "[{{ 0 }}]",
      "expect": {
        "kind": "output",
        "expectedOutput": "[0]"
      }
    },
    {
      "name": "true-literal",
      "description": "The boolean literal true renders as the lowercase word \"true\".",
      "template": "{{ true }}",
      "expect": {
        "kind": "output",
        "expectedOutput": "true"
      }
    },
    {
      "name": "false-literal",
      "description": "The boolean literal false renders as the lowercase word \"false\".",
      "template": "{{ false }}",
      "expect": {
        "kind": "output",
        "expectedOutput": "false"
      }
    },
    {
      "name": "null-literal",
      "description": "The null literal renders as the literal text \"null\", matching the convention used for a null rendering context.",
      "template": "{{ null }}",
      "expect": {
        "kind": "output",
        "expectedOutput": "null"
      }
    },
    {
      "name": "literal-in-unescaped-triple-mustache",
      "description": "A numeric literal under {{{ }}} renders identically to {{ }} (numbers contain no HTML-special characters).",
      "template": "{{{ 42 }}}",
      "expect": {
        "kind": "output",
        "expectedOutput": "42"
      }
    },
    {
      "name": "literal-with-trim-open",
      "description": "Trim-open on a literal interpolation strips leading whitespace from the surrounding template text — the literal's own rendered value is untouched.",
      "template": "  {{~ \"  x\" }}",
      "expect": {
        "kind": "output",
        "expectedOutput": "  x"
      }
    },
    {
      "name": "literal-with-trim-close",
      "description": "Trim-close on a literal interpolation strips trailing whitespace from the surrounding template text — the literal's own rendered value is untouched.",
      "template": "{{ \"x  \" ~}}  ",
      "expect": {
        "kind": "output",
        "expectedOutput": "x  "
      }
    },
    {
      "name": "literal-with-both-trim",
      "description": "Both trim variants applied at once strip leading and trailing whitespace from the surrounding template text — the literal's own rendered value is untouched.",
      "template": "  {{~ \"  x  \" ~}}  ",
      "expect": {
        "kind": "output",
        "expectedOutput": "  x  "
      }
    },
    {
      "name": "string-literal-interior-whitespace-preserved",
      "description": "Whitespace *inside* a string literal is part of the value and is preserved verbatim \u2014 trim variants act on surrounding template text, not on the literal's content.",
      "template": "[{{ \"  spaced  \" }}]",
      "expect": {
        "kind": "output",
        "expectedOutput": "[  spaced  ]"
      }
    },
    {
      "name": "literal-alongside-identifier",
      "description": "A literal interpolation and an identifier interpolation coexist in the same template.",
      "template": "{{ \"hello, \" }}{{ name }}",
      "context": {
        "name": "Alice"
      },
      "expect": {
        "kind": "output",
        "expectedOutput": "hello, Alice"
      }
    }
  ]
}
