{
  "property-basics": [
    {
      "expr": "foo.bar",
      "contexts": {
        "foo": {
          "bar": "baz"
        }
      },
      "result": { "kind": "String", "value": "baz" }
    },
    {
      "expr": "foo.Bar",
      "contexts": {
        "foo": {
          "Bar": "baz"
        }
      },
      "result": { "kind": "String", "value": "baz" }
    },
    {
      "expr": "foo.b",
      "contexts": {
        "foo": {
          "b": "baz"
        }
      },
      "result": { "kind": "String", "value": "baz" }
    },
    {
      "expr": "foo._",
      "contexts": {
        "foo": {
          "_": "baz"
        }
      },
      "result": { "kind": "String", "value": "baz" }
    },
    {
      "expr": "foo._bar",
      "contexts": {
        "foo": {
          "_bar": "baz"
        }
      },
      "result": { "kind": "String", "value": "baz" }
    },
    {
      "expr": "foo.b_ar",
      "contexts": {
        "foo": {
          "b_ar": "baz"
        }
      },
      "result": { "kind": "String", "value": "baz" }
    },
    {
      "expr": "foo.b-ar",
      "contexts": {
        "foo": {
          "b-ar": "baz"
        }
      },
      "result": { "kind": "String", "value": "baz" }
    },
    {
      "expr": "fromJson('{\"one\": \"one val\"}').one",
      "result": { "kind": "String", "value": "one val" }
    },
    {
      "expr": "(fromJson('{\"one\": \"one val\"}')).one",
      "result": { "kind": "String", "value": "one val" }
    },
    {
      "expr": "foo[*]",
      "contexts": {
        "foo": {
          "one": "one val",
          "two": "two val"
        }
      },
      "result": { "kind": "Array", "value": ["one val", "two val"] }
    }
  ],
  "property-case-insensitive": [
    {
      "expr": "foo.bar",
      "contexts": {
        "foo": {
          "BAR": "baz"
        }
      },
      "result": { "kind": "String", "value": "baz" }
    },
    {
      "expr": "foo.BAR",
      "contexts": {
        "foo": {
          "bar": "baz"
        }
      },
      "result": { "kind": "String", "value": "baz" }
    }
  ],
  "property-matches-const": [
    {
      "expr": "foo.true",
      "contexts": {
        "foo": {
          "true": "it's true"
        }
      },
      "result": { "kind": "String", "value": "it's true" }
    },
    {
      "expr": "foo.false",
      "contexts": {
        "foo": {
          "false": "it's false"
        }
      },
      "result": { "kind": "String", "value": "it's false" }
    },
    {
      "expr": "foo.Infinity",
      "contexts": {
        "foo": {
          "Infinity": "it's Infinity"
        }
      },
      "result": { "kind": "String", "value": "it's Infinity" }
    },
    {
      "expr": "foo.NaN",
      "contexts": {
        "foo": {
          "NaN": "it's NaN"
        }
      },
      "result": { "kind": "String", "value": "it's NaN" }
    },
    {
      "expr": "foo.null",
      "contexts": {
        "foo": {
          "null": "it's null"
        }
      },
      "result": { "kind": "String", "value": "it's null" }
    },
    {
      "expr": "foo.format",
      "contexts": {
        "foo": {
          "format": "it's format"
        }
      },
      "result": { "kind": "String", "value": "it's format" }
    }
  ],
  "property-errors": [
    {
      "expr": "foo.b@r",
      "contexts": {
        "foo": {
          "b@r": "baz"
        }
      },
      "err": {
        "kind": "lexing",
        "value": "Unexpected symbol: 'b@r'. Located at position 5 within expression: foo.b@r"
      }
    },
    {
      "expr": "foo.1",
      "contexts": {
        "foo": {}
      },
      "err": {
        "kind": "parsing",
        "value": "Unexpected symbol: '1'. Located at position 5 within expression: foo.1"
      }
    },
    {
      "expr": "fromjson('').1",
      "err": {
        "kind": "parsing",
        "value": "Unexpected symbol: '1'. Located at position 14 within expression: fromjson('').1"
      }
    },
    {
      "expr": "foo[1].2",
      "contexts": {
        "foo": {}
      },
      "err": {
        "kind": "parsing",
        "value": "Unexpected symbol: '2'. Located at position 8 within expression: foo[1].2"
      }
    }
  ]
}
