{
  "schema": "https://bars.commonsware.com/conformance/schema/render-fixture.schema.json",
  "version": "0.1.0",
  "cases": [
    {
      "name": "if-true-literal-renders-body",
      "description": "{{#if true}} always renders its body.",
      "template": "{{#if true }}yes{{/if}}",
      "expect": {
        "kind": "output",
        "expectedOutput": "yes"
      }
    },
    {
      "name": "if-false-literal-renders-else",
      "description": "{{#if false}} with an else arm renders the else body.",
      "template": "{{#if false }}yes{{else}}no{{/if}}",
      "expect": {
        "kind": "output",
        "expectedOutput": "no"
      }
    },
    {
      "name": "if-false-literal-no-else-emits-nothing",
      "description": "{{#if false}} with no else arm emits nothing.",
      "template": "[{{#if false }}yes{{/if}}]",
      "expect": {
        "kind": "output",
        "expectedOutput": "[]"
      }
    },
    {
      "name": "if-zero-literal-is-falsy",
      "description": "Numeric 0 literal is falsy; the else body renders.",
      "template": "{{#if 0 }}truthy{{else}}falsy{{/if}}",
      "expect": {
        "kind": "output",
        "expectedOutput": "falsy"
      }
    },
    {
      "name": "if-negative-zero-decimal-is-falsy",
      "description": "Numeric -0.0 literal is falsy (matches existing 0.0 == -0.0 truthiness rule).",
      "template": "{{#if -0.0 }}truthy{{else}}falsy{{/if}}",
      "expect": {
        "kind": "output",
        "expectedOutput": "falsy"
      }
    },
    {
      "name": "if-nonzero-number-literal-is-truthy",
      "description": "A nonzero numeric literal is truthy.",
      "template": "{{#if 1 }}truthy{{else}}falsy{{/if}}",
      "expect": {
        "kind": "output",
        "expectedOutput": "truthy"
      }
    },
    {
      "name": "if-empty-string-literal-is-falsy",
      "description": "An empty-string literal is falsy.",
      "template": "{{#if \"\" }}truthy{{else}}falsy{{/if}}",
      "expect": {
        "kind": "output",
        "expectedOutput": "falsy"
      }
    },
    {
      "name": "if-nonempty-string-literal-is-truthy",
      "description": "A non-empty string literal is truthy (including \"false\" as a string).",
      "template": "{{#if \"false\" }}truthy{{else}}falsy{{/if}}",
      "expect": {
        "kind": "output",
        "expectedOutput": "truthy"
      }
    },
    {
      "name": "if-null-literal-is-falsy",
      "description": "The null literal is falsy.",
      "template": "{{#if null }}truthy{{else}}falsy{{/if}}",
      "expect": {
        "kind": "output",
        "expectedOutput": "falsy"
      }
    },
    {
      "name": "if-else-if-with-literal-second-arm-wins",
      "description": "{{else if}} accepts a literal expression; when the first arm is falsy and the {{else if}} literal is truthy, the second arm wins.",
      "template": "{{#if cond }}A{{else if true }}B{{/if}}",
      "context": {
        "cond": false
      },
      "expect": {
        "kind": "output",
        "expectedOutput": "B"
      }
    },
    {
      "name": "if-else-if-with-falsy-literal-falls-through",
      "description": "A falsy {{else if}} literal falls through to the next arm.",
      "template": "{{#if a }}A{{else if false }}B{{else}}Z{{/if}}",
      "context": {
        "a": false
      },
      "expect": {
        "kind": "output",
        "expectedOutput": "Z"
      }
    },
    {
      "name": "unless-null-literal-renders-body",
      "description": "{{#unless null}} renders its body (null is falsy).",
      "template": "{{#unless null }}yes{{/unless}}",
      "expect": {
        "kind": "output",
        "expectedOutput": "yes"
      }
    },
    {
      "name": "unless-truthy-string-literal-renders-else",
      "description": "{{#unless \"hi\"}} renders its else body (a non-empty string is truthy).",
      "template": "{{#unless \"hi\" }}body{{else}}else{{/unless}}",
      "expect": {
        "kind": "output",
        "expectedOutput": "else"
      }
    },
    {
      "name": "unless-zero-literal-renders-body",
      "description": "{{#unless 0}} renders its body (0 is falsy).",
      "template": "{{#unless 0 }}yes{{else}}no{{/unless}}",
      "expect": {
        "kind": "output",
        "expectedOutput": "yes"
      }
    },
    {
      "name": "with-string-literal-pushes-primitive",
      "description": "{{#with \"hi\"}} pushes the string primitive onto the context stack; {{ this }} inside the body resolves it.",
      "template": "{{#with \"hi\" }}{{ this }}{{/with}}",
      "expect": {
        "kind": "output",
        "expectedOutput": "hi"
      }
    },
    {
      "name": "with-number-literal-pushes-primitive",
      "description": "{{#with 42}} pushes the number primitive; {{ this }} inside renders \"42\".",
      "template": "{{#with 42 }}{{ this }}{{/with}}",
      "expect": {
        "kind": "output",
        "expectedOutput": "42"
      }
    },
    {
      "name": "with-true-literal-pushes-primitive",
      "description": "{{#with true}} pushes the boolean primitive; {{ this }} inside renders \"true\".",
      "template": "{{#with true }}{{ this }}{{/with}}",
      "expect": {
        "kind": "output",
        "expectedOutput": "true"
      }
    },
    {
      "name": "with-null-literal-pushes-null-context",
      "description": "{{#with null}} pushes a null context; {{ this }} renders \"null\" by the null-context convention.",
      "template": "{{#with null }}{{ this }}{{/with}}",
      "expect": {
        "kind": "output",
        "expectedOutput": "null"
      }
    },
    {
      "name": "with-string-literal-then-non-this-identifier-is-null",
      "description": "A non-`this` identifier inside {{#with primitive}} soft-fails and resolves to null (matches B1 identifier-resolution behavior for non-container contexts).",
      "template": "{{#with \"hi\" }}{{ name }}{{/with}}",
      "expect": {
        "kind": "output",
        "expectedOutput": "null"
      }
    },
    {
      "name": "each-string-literal-falls-into-else",
      "description": "A string literal is not an iterable container; {{#each}} falls into the else arm.",
      "template": "{{#each \"hi\" }}body{{else}}none{{/each}}",
      "expect": {
        "kind": "output",
        "expectedOutput": "none"
      }
    },
    {
      "name": "each-number-literal-falls-into-else",
      "description": "A number literal is not an iterable container; {{#each}} falls into the else arm.",
      "template": "{{#each 42 }}body{{else}}none{{/each}}",
      "expect": {
        "kind": "output",
        "expectedOutput": "none"
      }
    },
    {
      "name": "each-true-literal-falls-into-else",
      "description": "A boolean literal is not an iterable container; {{#each}} falls into the else arm.",
      "template": "{{#each true }}body{{else}}none{{/each}}",
      "expect": {
        "kind": "output",
        "expectedOutput": "none"
      }
    },
    {
      "name": "each-null-literal-falls-into-else",
      "description": "A null literal is not an iterable container; {{#each}} falls into the else arm.",
      "template": "{{#each null }}body{{else}}none{{/each}}",
      "expect": {
        "kind": "output",
        "expectedOutput": "none"
      }
    },
    {
      "name": "each-null-literal-no-else-emits-nothing",
      "description": "A non-iterable literal with no else arm emits nothing.",
      "template": "[{{#each null }}body{{/each}}]",
      "expect": {
        "kind": "output",
        "expectedOutput": "[]"
      }
    }
  ]
}
