{
  "schema": "https://bars.commonsware.com/conformance/schema/render-fixture.schema.json",
  "version": "0.1.0",
  "cases": [
    {
      "name": "uri-fragment-simple",
      "description": "A URI fragment identifier (#/name) resolves the same as the equivalent RFC 6901 pointer (/name).",
      "template": "{{ #/name }}",
      "context": {
        "name": "Alice"
      },
      "expect": {
        "kind": "output",
        "expectedOutput": "Alice"
      }
    },
    {
      "name": "uri-fragment-nested",
      "description": "A URI fragment identifier navigates nested objects the same as RFC 6901.",
      "template": "{{ #/user/city }}",
      "context": {
        "user": {
          "city": "Springfield"
        }
      },
      "expect": {
        "kind": "output",
        "expectedOutput": "Springfield"
      }
    },
    {
      "name": "uri-fragment-percent-encoded",
      "description": "Percent-encoding in a URI fragment is decoded before pointer resolution; %20 becomes a space, addressing a key whose name contains a space.",
      "template": "{{ #/first%20name }}",
      "context": {
        "first name": "Alice"
      },
      "expect": {
        "kind": "output",
        "expectedOutput": "Alice"
      }
    },
    {
      "name": "dot-notation-simple",
      "description": "A bare word identifier (Mustache/Handlebars dot notation) resolves the top-level key of that name.",
      "template": "{{ name }}",
      "context": {
        "name": "Alice"
      },
      "expect": {
        "kind": "output",
        "expectedOutput": "Alice"
      }
    },
    {
      "name": "dot-notation-nested",
      "description": "Dot-separated segments navigate nested objects; 'user.city' resolves context['user']['city'].",
      "template": "{{ user.city }}",
      "context": {
        "user": {
          "city": "Springfield"
        }
      },
      "expect": {
        "kind": "output",
        "expectedOutput": "Springfield"
      }
    },
    {
      "name": "dot-notation-leading-dot",
      "description": "A leading dot is stripped before parsing; '.name' resolves identically to 'name'.",
      "template": "{{ .name }}",
      "context": {
        "name": "Alice"
      },
      "expect": {
        "kind": "output",
        "expectedOutput": "Alice"
      }
    },
    {
      "name": "dot-notation-trailing-dot-is-error",
      "description": "A trailing dot produces an empty segment, which is rejected by fromDotNotation and causes a kbParseException at render time.",
      "template": "{{ foo. }}",
      "context": {
        "foo": "bar"
      },
      "expect": {
        "kind": "error"
      }
    },
    {
      "name": "dot-notation-consecutive-dots-is-error",
      "description": "Consecutive dots produce an empty segment, which is rejected by fromDotNotation and causes a kbParseException at render time.",
      "template": "{{ foo..bar }}",
      "context": {
        "foo": {
          "bar": "baz"
        }
      },
      "expect": {
        "kind": "error"
      }
    }
  ]
}
