{
  "schema": "https://bars.commonsware.com/conformance/schema/partials-fixture.schema.json",
  "version": "0.1.0",
  "cases": [
    {
      "name": "inline-partial-defines-and-is-used-in-the-same-block",
      "description": "An {{#inline name }} block defines a partial body directly usable by a {{> name }} reference in the same block, with no loader entry for that name.",
      "template": "{{#inline greeting }}Hi{{/inline}}{{> greeting }}",
      "partials": {},
      "expect": {
        "kind": "output",
        "expectedOutput": "Hi"
      }
    },
    {
      "name": "inline-partial-is-visible-before-its-own-definition",
      "description": "Because the whole block is scanned for inline definitions before any segment renders, a {{> name }} reference textually before its {{#inline name }} definition still resolves (hoisting), matching Handlebars' decorator pre-pass.",
      "template": "{{> greeting }}{{#inline greeting }}Hi{{/inline}}",
      "partials": {},
      "expect": {
        "kind": "output",
        "expectedOutput": "Hi"
      }
    },
    {
      "name": "inline-partial-renders-with-no-loader-registered",
      "description": "An inline partial resolves and renders even when no onLoadPartial loader is registered at all (the fixture's partials map is omitted): the hard NoPartialLoader failure only fires when a static key matches neither an inline definition nor a loader.",
      "template": "{{#inline greeting }}Hi{{/inline}}{{> greeting }}",
      "expect": {
        "kind": "output",
        "expectedOutput": "Hi"
      }
    },
    {
      "name": "inline-partial-shadows-a-loader-provided-partial-of-the-same-name",
      "description": "When an in-scope inline definition and a loader-resolvable key share a name, the inline definition wins; the loader is never consulted.",
      "template": "{{#inline label }}INLINE{{/inline}}{{> label }}",
      "partials": {
        "label": "LOADED"
      },
      "expect": {
        "kind": "output",
        "expectedOutput": "INLINE"
      }
    },
    {
      "name": "inline-partial-is-visible-to-a-loaded-partial-invoked-from-the-same-block",
      "description": "Block scoping propagates into an invoked loaded partial: the shared RenderContext registry is not reset at partial boundaries, so a {{> label }} reference inside the loaded 'outer' partial resolves the inline 'label' defined in the block that invoked 'outer'.",
      "template": "{{#inline label }}L{{/inline}}{{> outer }}",
      "partials": {
        "outer": "{{> label }}"
      },
      "expect": {
        "kind": "output",
        "expectedOutput": "L"
      }
    },
    {
      "name": "inline-partial-defined-inside-a-block-is-out-of-scope-after-that-block",
      "description": "An inline definition inside a {{#with}} block is visible for the duration of that block, but out of scope once rendering leaves it; a subsequent {{> label }} reference at the outer level falls through to the loader instead.",
      "template": "{{#with person }}{{#inline label }}IN{{/inline}}{{> label }}{{/with}}{{> label }}",
      "context": {
        "person": {}
      },
      "partials": {
        "label": "OUT"
      },
      "expect": {
        "kind": "output",
        "expectedOutput": "INOUT"
      }
    },
    {
      "name": "dynamic-key-resolves-against-the-inline-scope",
      "description": "A dynamic {{> (expr) }} key is resolved against the inline scope exactly like a static key: the loader lookup that would otherwise run for the resolved key string is skipped once an inline definition matches.",
      "template": "{{#inline greeting }}Hi{{/inline}}{{> (which) }}",
      "context": {
        "which": "greeting"
      },
      "partials": {},
      "expect": {
        "kind": "output",
        "expectedOutput": "Hi"
      }
    }
  ]
}
