[
    {
        "cases": [
            {
                "expression": "foo.bar[0]",
                "result": "zero"
            },
            {
                "expression": "foo.bar[1]",
                "result": "one"
            },
            {
                "expression": "foo.bar[2]",
                "result": "two"
            },
            {
                "expression": "foo.bar[3]",
                "result": null
            },
            {
                "expression": "foo.bar[-1]",
                "result": "two"
            },
            {
                "expression": "foo.bar[-2]",
                "result": "one"
            },
            {
                "expression": "foo.bar[-3]",
                "result": "zero"
            },
            {
                "expression": "foo.bar[-4]",
                "result": null
            }
        ],
        "given": {
            "foo": {
                "bar": [
                    "zero",
                    "one",
                    "two"
                ]
            }
        }
    },
    {
        "cases": [
            {
                "expression": "foo.bar",
                "result": null
            },
            {
                "expression": "foo[0].bar",
                "result": "one"
            },
            {
                "expression": "foo[1].bar",
                "result": "two"
            },
            {
                "expression": "foo[2].bar",
                "result": "three"
            },
            {
                "expression": "foo[3].notbar",
                "result": "four"
            },
            {
                "expression": "foo[3].bar",
                "result": null
            },
            {
                "expression": "foo[0]",
                "is_deeply": 1,
                "result": {
                    "bar": "one"
                }
            },
            {
                "expression": "foo[1]",
                "is_deeply": 1,
                "result": {
                    "bar": "two"
                }
            },
            {
                "expression": "foo[2]",
                "is_deeply": 1,
                "result": {
                    "bar": "three"
                }
            },
            {
                "expression": "foo[3]",
                "is_deeply": 1,
                "result": {
                    "notbar": "four"
                }
            },
            {
                "expression": "foo[4]",
                "result": null
            }
        ],
        "given": {
            "foo": [
                {
                    "bar": "one"
                },
                {
                    "bar": "two"
                },
                {
                    "bar": "three"
                },
                {
                    "notbar": "four"
                }
            ]
        }
    },
    {
        "cases": [
            {
                "expression": "[0]",
                "result": "one"
            },
            {
                "expression": "[1]",
                "result": "two"
            },
            {
                "expression": "[2]",
                "result": "three"
            },
            {
                "expression": "[-1]",
                "result": "three"
            },
            {
                "expression": "[-2]",
                "result": "two"
            },
            {
                "expression": "[-3]",
                "result": "one"
            }
        ],
        "given": [
            "one",
            "two",
            "three"
        ]
    },
    {
        "cases": [
            {
                "expression": "reservations[].instances[].foo",
                "is_deeply": 1,
                "result": [
                    1,
                    2
                ]
            },
            {
                "expression": "reservations[].instances[].bar",
                "is_deeply": 1,
                "result": []
            },
            {
                "expression": "reservations[].notinstances[].foo",
                "is_deeply": 1,
                "result": []
            },
            {
                "expression": "reservations[].notinstances[].foo",
                "is_deeply": 1,
                "result": []
            }
        ],
        "given": {
            "reservations": [
                {
                    "instances": [
                        {
                            "foo": 1
                        },
                        {
                            "foo": 2
                        }
                    ]
                }
            ]
        }
    },
    {
        "cases": [
            {
                "expression": "reservations[].instances[].foo[].bar",
                "is_deeply": 1,
                "result": [
                    1,
                    2,
                    4,
                    5,
                    6,
                    8
                ]
            },
            {
                "expression": "reservations[].instances[].foo[].baz",
                "is_deeply": 1,
                "result": []
            },
            {
                "expression": "reservations[].instances[].notfoo[].bar",
                "is_deeply": 1,
                "result": [
                    20,
                    21,
                    22,
                    23,
                    24,
                    25
                ]
            },
            {
                "expression": "reservations[].instances[].notfoo[].notbar",
                "is_deeply": 1,
                "result": [
                    [
                        7
                    ],
                    [
                        7
                    ]
                ]
            },
            {
                "expression": "reservations[].notinstances[].foo",
                "is_deeply": 1,
                "result": []
            },
            {
                "expression": "reservations[].instances[].foo[].notbar",
                "is_deeply": 1,
                "result": [
                    3,
                    [
                        7
                    ]
                ]
            },
            {
                "expression": "reservations[].instances[].bar[].baz",
                "is_deeply": 1,
                "result": [
                    [
                        1
                    ],
                    [
                        2
                    ],
                    [
                        3
                    ],
                    [
                        4
                    ]
                ]
            },
            {
                "expression": "reservations[].instances[].baz[].baz",
                "is_deeply": 1,
                "result": [
                    [
                        1,
                        2
                    ],
                    [],
                    [],
                    [
                        3,
                        4
                    ]
                ]
            },
            {
                "expression": "reservations[].instances[].qux[].baz",
                "is_deeply": 1,
                "result": [
                    [],
                    [
                        1,
                        2,
                        3
                    ],
                    [
                        4
                    ],
                    [],
                    [],
                    [
                        1,
                        2,
                        3
                    ],
                    [
                        4
                    ],
                    []
                ]
            },
            {
                "expression": "reservations[].instances[].qux[].baz[]",
                "is_deeply": 1,
                "result": [
                    1,
                    2,
                    3,
                    4,
                    1,
                    2,
                    3,
                    4
                ]
            }
        ],
        "given": {
            "reservations": [
                {
                    "instances": [
                        {
                            "foo": [
                                {
                                    "bar": 1
                                },
                                {
                                    "bar": 2
                                },
                                {
                                    "notbar": 3
                                },
                                {
                                    "bar": 4
                                }
                            ]
                        },
                        {
                            "foo": [
                                {
                                    "bar": 5
                                },
                                {
                                    "bar": 6
                                },
                                {
                                    "notbar": [
                                        7
                                    ]
                                },
                                {
                                    "bar": 8
                                }
                            ]
                        },
                        {
                            "foo": "bar"
                        },
                        {
                            "notfoo": [
                                {
                                    "bar": 20
                                },
                                {
                                    "bar": 21
                                },
                                {
                                    "notbar": [
                                        7
                                    ]
                                },
                                {
                                    "bar": 22
                                }
                            ]
                        },
                        {
                            "bar": [
                                {
                                    "baz": [
                                        1
                                    ]
                                },
                                {
                                    "baz": [
                                        2
                                    ]
                                },
                                {
                                    "baz": [
                                        3
                                    ]
                                },
                                {
                                    "baz": [
                                        4
                                    ]
                                }
                            ]
                        },
                        {
                            "baz": [
                                {
                                    "baz": [
                                        1,
                                        2
                                    ]
                                },
                                {
                                    "baz": []
                                },
                                {
                                    "baz": []
                                },
                                {
                                    "baz": [
                                        3,
                                        4
                                    ]
                                }
                            ]
                        },
                        {
                            "qux": [
                                {
                                    "baz": []
                                },
                                {
                                    "baz": [
                                        1,
                                        2,
                                        3
                                    ]
                                },
                                {
                                    "baz": [
                                        4
                                    ]
                                },
                                {
                                    "baz": []
                                }
                            ]
                        }
                    ],
                    "otherkey": {
                        "foo": [
                            {
                                "bar": 1
                            },
                            {
                                "bar": 2
                            },
                            {
                                "notbar": 3
                            },
                            {
                                "bar": 4
                            }
                        ]
                    }
                },
                {
                    "instances": [
                        {
                            "a": [
                                {
                                    "bar": 1
                                },
                                {
                                    "bar": 2
                                },
                                {
                                    "notbar": 3
                                },
                                {
                                    "bar": 4
                                }
                            ]
                        },
                        {
                            "b": [
                                {
                                    "bar": 5
                                },
                                {
                                    "bar": 6
                                },
                                {
                                    "notbar": [
                                        7
                                    ]
                                },
                                {
                                    "bar": 8
                                }
                            ]
                        },
                        {
                            "c": "bar"
                        },
                        {
                            "notfoo": [
                                {
                                    "bar": 23
                                },
                                {
                                    "bar": 24
                                },
                                {
                                    "notbar": [
                                        7
                                    ]
                                },
                                {
                                    "bar": 25
                                }
                            ]
                        },
                        {
                            "qux": [
                                {
                                    "baz": []
                                },
                                {
                                    "baz": [
                                        1,
                                        2,
                                        3
                                    ]
                                },
                                {
                                    "baz": [
                                        4
                                    ]
                                },
                                {
                                    "baz": []
                                }
                            ]
                        }
                    ],
                    "otherkey": {
                        "foo": [
                            {
                                "bar": 1
                            },
                            {
                                "bar": 2
                            },
                            {
                                "notbar": 3
                            },
                            {
                                "bar": 4
                            }
                        ]
                    }
                }
            ]
        }
    },
    {
        "cases": [
            {
                "expression": "foo[]",
                "is_deeply": 1,
                "result": [
                    [
                        "one",
                        "two"
                    ],
                    [
                        "three",
                        "four"
                    ],
                    [
                        "five",
                        "six"
                    ],
                    [
                        "seven",
                        "eight"
                    ],
                    [
                        "nine"
                    ],
                    [
                        "ten"
                    ]
                ]
            },
            {
                "expression": "foo[][0]",
                "is_deeply": 1,
                "result": [
                    "one",
                    "three",
                    "five",
                    "seven",
                    "nine",
                    "ten"
                ]
            },
            {
                "expression": "foo[][1]",
                "is_deeply": 1,
                "result": [
                    "two",
                    "four",
                    "six",
                    "eight"
                ]
            },
            {
                "expression": "foo[][0][0]",
                "is_deeply": 1,
                "result": []
            },
            {
                "expression": "foo[][2][2]",
                "is_deeply": 1,
                "result": []
            },
            {
                "expression": "foo[][0][0][100]",
                "is_deeply": 1,
                "result": []
            }
        ],
        "given": {
            "foo": [
                [
                    [
                        "one",
                        "two"
                    ],
                    [
                        "three",
                        "four"
                    ]
                ],
                [
                    [
                        "five",
                        "six"
                    ],
                    [
                        "seven",
                        "eight"
                    ]
                ],
                [
                    [
                        "nine"
                    ],
                    [
                        "ten"
                    ]
                ]
            ]
        }
    },
    {
        "cases": [
            {
                "expression": "foo",
                "is_deeply": 1,
                "result": [
                    {
                        "bar": [
                            {
                                "baz": 1,
                                "qux": 2
                            },
                            {
                                "baz": 3,
                                "qux": 4
                            }
                        ]
                    },
                    {
                        "bar": [
                            {
                                "baz": 5,
                                "qux": 6
                            },
                            {
                                "baz": 7,
                                "qux": 8
                            }
                        ]
                    }
                ]
            },
            {
                "expression": "foo[]",
                "is_deeply": 1,
                "result": [
                    {
                        "bar": [
                            {
                                "baz": 1,
                                "qux": 2
                            },
                            {
                                "baz": 3,
                                "qux": 4
                            }
                        ]
                    },
                    {
                        "bar": [
                            {
                                "baz": 5,
                                "qux": 6
                            },
                            {
                                "baz": 7,
                                "qux": 8
                            }
                        ]
                    }
                ]
            },
            {
                "expression": "foo[].bar",
                "is_deeply": 1,
                "result": [
                    [
                        {
                            "baz": 1,
                            "qux": 2
                        },
                        {
                            "baz": 3,
                            "qux": 4
                        }
                    ],
                    [
                        {
                            "baz": 5,
                            "qux": 6
                        },
                        {
                            "baz": 7,
                            "qux": 8
                        }
                    ]
                ]
            },
            {
                "expression": "foo[].bar[]",
                "is_deeply": 1,
                "result": [
                    {
                        "baz": 1,
                        "qux": 2
                    },
                    {
                        "baz": 3,
                        "qux": 4
                    },
                    {
                        "baz": 5,
                        "qux": 6
                    },
                    {
                        "baz": 7,
                        "qux": 8
                    }
                ]
            },
            {
                "expression": "foo[].bar[].baz",
                "is_deeply": 1,
                "result": [
                    1,
                    3,
                    5,
                    7
                ]
            }
        ],
        "given": {
            "foo": [
                {
                    "bar": [
                        {
                            "baz": 1,
                            "qux": 2
                        },
                        {
                            "baz": 3,
                            "qux": 4
                        }
                    ]
                },
                {
                    "bar": [
                        {
                            "baz": 5,
                            "qux": 6
                        },
                        {
                            "baz": 7,
                            "qux": 8
                        }
                    ]
                }
            ]
        }
    },
    {
        "cases": [
            {
                "expression": "string[]",
                "result": null
            },
            {
                "expression": "hash[]",
                "result": null
            },
            {
                "expression": "number[]",
                "result": null
            },
            {
                "expression": "nullvalue[]",
                "result": null
            },
            {
                "expression": "string[].foo",
                "result": null
            },
            {
                "expression": "hash[].foo",
                "result": null
            },
            {
                "expression": "number[].foo",
                "result": null
            },
            {
                "expression": "nullvalue[].foo",
                "result": null
            },
            {
                "expression": "nullvalue[].foo[].bar",
                "result": null
            }
        ],
        "given": {
            "hash": {
                "bar": "baz",
                "foo": "bar"
            },
            "nullvalue": null,
            "number": 23,
            "string": "string"
        }
    }
]