Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEATURE]: Use Expressions For Filters #7

Merged

Update generics to be TNode vs TElement

16e57a9
Select commit
Loading
Failed to load commit list.
Sign in for the full log view
Merged

[FEATURE]: Use Expressions For Filters #7

Update generics to be TNode vs TElement
16e57a9
Select commit
Loading
Failed to load commit list.
GitHub Actions / Unit Tests succeeded Jun 14, 2024 in 0s

336 passed, 0 failed and 0 skipped

Tests passed successfully

✅ _fv-az1055-391_2024-06-14_15_36_10.trx

336 tests were completed in 1s with 336 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
Hyperbee.Json.Tests.Builder.JsonPathBuilderTests 4✅ 5ms
Hyperbee.Json.Tests.Dynamic.JsonDynamicTests 2✅ 39ms
Hyperbee.Json.Tests.Evaluators.JsonPathExpressionTests 75✅ 41ms
Hyperbee.Json.Tests.Extensions.JsonExtensionTests 2✅ 19ms
Hyperbee.Json.Tests.Query.JsonPathArrayTests 80✅ 41ms
Hyperbee.Json.Tests.Query.JsonPathBookstoreTests 34✅ 232ms
Hyperbee.Json.Tests.Query.JsonPathBracketNotationTests 88✅ 83ms
Hyperbee.Json.Tests.Query.JsonPathDotNotationTests 8✅ 6ms
Hyperbee.Json.Tests.Query.JsonPathFilterTests 4✅ 2ms
Hyperbee.Json.Tests.Query.JsonPathRootOnScalarTests 6✅ 8ms
Hyperbee.Json.Tests.Query.JsonPathUnionTests 10✅ 3ms
Hyperbee.Json.Tests.Tokenizer.JsonPathQueryTokenizerTests 23✅ 15ms

✅ Hyperbee.Json.Tests.Builder.JsonPathBuilderTests

✅ Should_GetPath ($['store']['book'][0]['author'],$.store.book[0].author)
✅ Should_GetPath ($['store']['book'][1]['author'],$.store.book[1].author)
✅ Should_GetPath ($['store']['book'][2]['author'],$.store.book[2].author)
✅ Should_GetPath ($['store']['book'][3]['author'],$.store.book[3].author)

✅ Hyperbee.Json.Tests.Dynamic.JsonDynamicTests

✅ Dynamic_json_converter_should_return_correct_results
✅ Dynamic_json_element_should_return_correct_results

✅ Hyperbee.Json.Tests.Evaluators.JsonPathExpressionTests

✅ Should_FailToParse_WhenUsingInvalidFilters ( 	 ,System.Text.Json.JsonElement)
✅ Should_FailToParse_WhenUsingInvalidFilters ('unbalanced string",System.Text.Json.JsonElement)
✅ Should_FailToParse_WhenUsingInvalidFilters ((1 == ,System.Text.Json.JsonElement)
✅ Should_FailToParse_WhenUsingInvalidFilters ((1 == 1(,System.Text.Json.JsonElement)
✅ Should_FailToParse_WhenUsingInvalidFilters ((1 == 1)(,System.Text.Json.JsonElement)
✅ Should_FailToParse_WhenUsingInvalidFilters (== 1,System.Text.Json.JsonElement)
✅ Should_FailToParse_WhenUsingInvalidFilters (1 === 1,System.Text.Json.JsonElement)
✅ Should_FailToParse_WhenUsingInvalidFilters (badMethod(1),System.Text.Json.JsonElement)
✅ Should_FailToParse_WhenUsingInvalidFilters (unknown_literal,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingConstants (!('World' != 'World') && !(1 == 2 || 1 == 3),True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingConstants (!('World' != 'World') && !(1 == 2 || 1 == 3),True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingConstants (!(1 == 2),True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingConstants (!(1 == 2),True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingConstants (("world" == 'world') && (true || false),True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingConstants (("world" == 'world') && (true || false),True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingConstants (("world" == 'world') || 1 == 1,True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingConstants (("world" == 'world') || 1 == 1,True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingConstants (("world" == 'world') || true,True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingConstants (("world" == 'world') || true,True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingConstants ((1 != 2),True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingConstants ((1 != 2),True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingConstants ((1 == 1),True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingConstants ((1 == 1),True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingConstants (1 == 1,True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingConstants (1 == 1,True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingConstants (false,False,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingConstants (false,False,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingConstants (true,True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingConstants (true,True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingFunctions (count(@.store.book.*) == 4,True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingFunctions (count(@.store.book.*) == 4,True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingFunctions (count(@.store.book) == 1,True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingFunctions (count(@.store.book) == 1,True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingFunctions (length(@.store.book) == 4,True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingFunctions (length(@.store.book) == 4,True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingFunctions (length(@.store.book[0].category) == 9,True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingFunctions (length(@.store.book[0].category) == 9,True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingFunctions (match(@.store.book[0].title, "Sayings*" ),True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingFunctions (match(@.store.book[0].title, "Sayings*" ),True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingFunctions (search(@.store.book[0].author, "[Nn]igel Rees" ),True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingFunctions (search(@.store.book[0].author, "[Nn]igel Rees" ),True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingFunctions (value(@.store.book[0].author) == "Nigel Rees",True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingFunctions (value(@.store.book[0].author) == "Nigel Rees",True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingJsonPath (@.store.bicycle,True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingJsonPath (@.store.bicycle,True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingJsonPath (@.store.bicycle.price < 10,False,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingJsonPath (@.store.bicycle.price < 10,False,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingJsonPath (@.store.bicycle.price > @.store.bicycle.price,False,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingJsonPath (@.store.bicycle.price > @.store.bicycle.price,False,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingJsonPath (@.store.bicycle.price > 15,True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingJsonPath (@.store.bicycle.price > 15,True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingJsonPath (@.store.bicycle.price,True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingJsonPath (@.store.bicycle.price,True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingJsonPath (@.store.book,True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingJsonPath (@.store.book,True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingJsonPath (@.store.book[0].category == 'reference',True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingJsonPath (@.store.book[0].category == 'reference',True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingJsonPath (@.store.book[0].category == "reference",True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingJsonPath (@.store.book[0].category == "reference",True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingJsonPath (@.store.book[0].category == @.store.book[1].category,False,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingJsonPath (@.store.book[0].category == @.store.book[1].category,False,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingJsonPath (@.store.book[0].category,True,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingJsonPath (@.store.book[0].category,True,System.Text.Json.Nodes.JsonNode)
✅ Should_MatchExpectedResult_WhenUsingJsonPath (@.store.nothing,False,System.Text.Json.JsonElement)
✅ Should_MatchExpectedResult_WhenUsingJsonPath (@.store.nothing,False,System.Text.Json.Nodes.JsonNode)
✅ Should_ReturnExpectedResult_WhenUsingExpressionEvaluator ($.store.book[?(@.category == 'reference')].price,8.95,System.Text.Json.JsonElement)
✅ Should_ReturnExpectedResult_WhenUsingExpressionEvaluator ($.store.book[?(@.category == 'reference')].price,8.95,System.Text.Json.Nodes.JsonNode)
✅ Should_ReturnExpectedResult_WhenUsingExpressionEvaluator ($.store.book[?(@.category == $.store.book[0].category)].price,8.95,System.Text.Json.JsonElement)
✅ Should_ReturnExpectedResult_WhenUsingExpressionEvaluator ($.store.book[?(@.category == $.store.book[0].category)].price,8.95,System.Text.Json.Nodes.JsonNode)
✅ Should_ReturnExpectedResult_WhenUsingExpressionEvaluator ($.store.book[?(@.price < 9.00 && @.category == 'reference')].price,8.95,System.Text.Json.JsonElement)
✅ Should_ReturnExpectedResult_WhenUsingExpressionEvaluator ($.store.book[?(@.price < 9.00 && @.category == 'reference')].price,8.95,System.Text.Json.Nodes.JsonNode)
✅ Should_ReturnExpectedResult_WhenUsingExpressionEvaluator ($.store.book[?(@.price > 20)].price,22.99,System.Text.Json.JsonElement)
✅ Should_ReturnExpectedResult_WhenUsingExpressionEvaluator ($.store.book[?(@.price > 20)].price,22.99,System.Text.Json.Nodes.JsonNode)
✅ Should_ReturnExpectedResult_WhenUsingExpressionEvaluator ($.store.book[?(match(@.title, "Sayings*" ))].price,8.95,System.Text.Json.JsonElement)
✅ Should_ReturnExpectedResult_WhenUsingExpressionEvaluator ($.store.book[?(match(@.title, "Sayings*" ))].price,8.95,System.Text.Json.Nodes.JsonNode)

✅ Hyperbee.Json.Tests.Extensions.JsonExtensionTests

✅ Should_return_property_value_for_property_path
✅ Should_serialize_json_element_to_object

✅ Hyperbee.Json.Tests.Query.JsonPathArrayTests

✅ ArraySlice ($[1:3],System.Text.Json.JsonDocument)
✅ ArraySlice ($[1:3],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceOnExactMatch ($[0:5],System.Text.Json.JsonDocument)
✅ ArraySliceOnExactMatch ($[0:5],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceOnNonOverlappingArray ($[7:10],System.Text.Json.JsonDocument)
✅ ArraySliceOnNonOverlappingArray ($[7:10],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceOnObject ($[1:3],System.Text.Json.JsonDocument)
✅ ArraySliceOnObject ($[1:3],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceOnPartiallyOverlappingArray ($[1:10],System.Text.Json.JsonDocument)
✅ ArraySliceOnPartiallyOverlappingArray ($[1:10],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithLargeNumberForEnd ($[2:113667776004],System.Text.Json.JsonDocument)
✅ ArraySliceWithLargeNumberForEnd ($[2:113667776004],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithLargeNumberForEndAndNegativeStep ($[2:-113667776004:-1],System.Text.Json.JsonDocument)
✅ ArraySliceWithLargeNumberForEndAndNegativeStep ($[2:-113667776004:-1],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithLargeNumberForStart ($[-113667776004:2],System.Text.Json.JsonDocument)
✅ ArraySliceWithLargeNumberForStart ($[-113667776004:2],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithLargeNumberForStartAndNegativeStep ($[113667776004:2:-1],System.Text.Json.JsonDocument)
✅ ArraySliceWithLargeNumberForStartAndNegativeStep ($[113667776004:2:-1],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithNegativeStartAndEndAndRangeOf0 ($[-4:-4],System.Text.Json.JsonDocument)
✅ ArraySliceWithNegativeStartAndEndAndRangeOf0 ($[-4:-4],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithNegativeStartAndEndAndRangeOf1 ($[-4:-3],System.Text.Json.JsonDocument)
✅ ArraySliceWithNegativeStartAndEndAndRangeOf1 ($[-4:-3],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithNegativeStartAndEndAndRangeOfNegative1 ($[-4:-5],System.Text.Json.JsonDocument)
✅ ArraySliceWithNegativeStartAndEndAndRangeOfNegative1 ($[-4:-5],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithNegativeStartAndPositiveEndAndRangeOf0 ($[-4:2],System.Text.Json.JsonDocument)
✅ ArraySliceWithNegativeStartAndPositiveEndAndRangeOf0 ($[-4:2],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithNegativeStartAndPositiveEndAndRangeOf1 ($[-4:3],System.Text.Json.JsonDocument)
✅ ArraySliceWithNegativeStartAndPositiveEndAndRangeOf1 ($[-4:3],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithNegativeStartAndPositiveEndAndRangeOfNegative1 ($[-4:1],System.Text.Json.JsonDocument)
✅ ArraySliceWithNegativeStartAndPositiveEndAndRangeOfNegative1 ($[-4:1],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithNegativeStep ($[3:0:-2],System.Text.Json.JsonDocument)
✅ ArraySliceWithNegativeStep ($[3:0:-2],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithNegativeStepAndStartGreaterThanEnd ($[0:3:-2],System.Text.Json.JsonDocument)
✅ ArraySliceWithNegativeStepAndStartGreaterThanEnd ($[0:3:-2],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithNegativeStepOnly ($[::-2],System.Text.Json.JsonDocument)
✅ ArraySliceWithNegativeStepOnly ($[::-2],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithNegativeStepOnPartiallyOverlappingArray ($[7:3:-1],System.Text.Json.JsonDocument)
✅ ArraySliceWithNegativeStepOnPartiallyOverlappingArray ($[7:3:-1],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithOpenEnd ($[1:],System.Text.Json.JsonDocument)
✅ ArraySliceWithOpenEnd ($[1:],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithOpenEndAndNegativeStep ($[3::-1],System.Text.Json.JsonDocument)
✅ ArraySliceWithOpenEndAndNegativeStep ($[3::-1],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithOpenStart ($[:2],System.Text.Json.JsonDocument)
✅ ArraySliceWithOpenStart ($[:2],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithOpenStartAndEndAndStepEmpty ($[::],System.Text.Json.JsonDocument)
✅ ArraySliceWithOpenStartAndEndAndStepEmpty ($[::],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithOpenStartAndEndOnObject ($[:],System.Text.Json.JsonDocument)
✅ ArraySliceWithOpenStartAndEndOnObject ($[:],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithOpenStartAndNegativeStep ($[:2:-1],System.Text.Json.JsonDocument)
✅ ArraySliceWithOpenStartAndNegativeStep ($[:2:-1],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithPositiveStartAndNegativeEndAndRangeOf0 ($[3:-3],System.Text.Json.JsonDocument)
✅ ArraySliceWithPositiveStartAndNegativeEndAndRangeOf0 ($[3:-3],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithPositiveStartAndNegativeEndAndRangeOf1 ($[3:-2],System.Text.Json.JsonDocument)
✅ ArraySliceWithPositiveStartAndNegativeEndAndRangeOf1 ($[3:-2],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithPositiveStartAndNegativeEndAndRangeOfNegative1 ($[3:-4],System.Text.Json.JsonDocument)
✅ ArraySliceWithPositiveStartAndNegativeEndAndRangeOfNegative1 ($[3:-4],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithRangeOf0 ($[0:0],System.Text.Json.JsonDocument)
✅ ArraySliceWithRangeOf0 ($[0:0],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithRangeOf1 ($[0:1],System.Text.Json.JsonDocument)
✅ ArraySliceWithRangeOf1 ($[0:1],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithRangeOfNegative1 ($[2:1],System.Text.Json.JsonDocument)
✅ ArraySliceWithRangeOfNegative1 ($[2:1],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithStartLargeNegativeNumberAndOpenEndOnShortArray ($[-4:],System.Text.Json.JsonDocument)
✅ ArraySliceWithStartLargeNegativeNumberAndOpenEndOnShortArray ($[-4:],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithStartMinus2AndOpenEnd ($[-2:],System.Text.Json.JsonDocument)
✅ ArraySliceWithStartMinus2AndOpenEnd ($[-2:],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithStartNegative1AndOpenEnd ($[-1:],System.Text.Json.JsonDocument)
✅ ArraySliceWithStartNegative1AndOpenEnd ($[-1:],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithStep ($[0:3:2],System.Text.Json.JsonDocument)
✅ ArraySliceWithStep ($[0:3:2],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithStep0 ($[0:3:0],System.Text.Json.JsonDocument)
✅ ArraySliceWithStep0 ($[0:3:0],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithStep1 ($[0:3:1],System.Text.Json.JsonDocument)
✅ ArraySliceWithStep1 ($[0:3:1],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithStepAndLeadingZeros ($[010:024:010],System.Text.Json.JsonDocument)
✅ ArraySliceWithStepAndLeadingZeros ($[010:024:010],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithStepButEndNotAligned ($[0:4:2],System.Text.Json.JsonDocument)
✅ ArraySliceWithStepButEndNotAligned ($[0:4:2],System.Text.Json.Nodes.JsonNode)
✅ ArraySliceWithStepEmpty ($[1:3:],System.Text.Json.JsonDocument)
✅ ArraySliceWithStepEmpty ($[1:3:],System.Text.Json.Nodes.JsonNode)

✅ Hyperbee.Json.Tests.Query.JsonPathBookstoreTests

✅ AllAuthors ($..author,System.Text.Json.JsonDocument)
✅ AllAuthors ($..author,System.Text.Json.Nodes.JsonNode)
✅ AllMembersOfJsonStructure ($..*,System.Text.Json.JsonDocument)
✅ AllMembersOfJsonStructure ($..*,System.Text.Json.Nodes.JsonNode)
✅ AllThingsInStoreWhichAreSomeBooksAndOneRedBicycle ($.store.*,System.Text.Json.JsonDocument)
✅ AllThingsInStoreWhichAreSomeBooksAndOneRedBicycle ($.store.*,System.Text.Json.Nodes.JsonNode)
✅ FilterAllBooksCheaperThan10 ($..book[?(@.price<10)],System.Text.Json.JsonDocument)
✅ FilterAllBooksCheaperThan10 ($..book[?(@.price<10)],System.Text.Json.Nodes.JsonNode)
✅ FilterAllBooksCheaperThan10 ($..book[[email protected]<10],System.Text.Json.JsonDocument)
✅ FilterAllBooksCheaperThan10 ($..book[[email protected]<10],System.Text.Json.Nodes.JsonNode)
✅ FilterAllBooksUsingLogicalAndInScript ($..book[?(@.price == 8.99 && @.category == "fiction")],System.Text.Json.JsonDocument)
✅ FilterAllBooksUsingLogicalAndInScript ($..book[?(@.price == 8.99 && @.category == "fiction")],System.Text.Json.Nodes.JsonNode)
✅ FilterAllBooksWithIsbnNumber ($..book[?(@.isbn)],System.Text.Json.JsonDocument)
✅ FilterAllBooksWithIsbnNumber ($..book[?(@.isbn)],System.Text.Json.Nodes.JsonNode)
✅ FilterAllBooksWithIsbnNumber ($..book[[email protected]],System.Text.Json.JsonDocument)
✅ FilterAllBooksWithIsbnNumber ($..book[[email protected]],System.Text.Json.Nodes.JsonNode)
✅ TheAuthorsOfAllBooksInTheStore ($.store.book[*].author,System.Text.Json.JsonDocument)
✅ TheAuthorsOfAllBooksInTheStore ($.store.book[*].author,System.Text.Json.Nodes.JsonNode)
✅ TheCategoriesAndAuthorsOfAllBooks ($..book['category','author'],System.Text.Json.JsonDocument)
✅ TheCategoriesAndAuthorsOfAllBooks ($..book['category','author'],System.Text.Json.Nodes.JsonNode)
✅ TheFirstTwoBooks ($..book[:2],System.Text.Json.JsonDocument)
✅ TheFirstTwoBooks ($..book[:2],System.Text.Json.Nodes.JsonNode)
✅ TheFirstTwoBooks ($..book[0,1],System.Text.Json.JsonDocument)
✅ TheFirstTwoBooks ($..book[0,1],System.Text.Json.Nodes.JsonNode)
✅ TheFirstTwoBooks ($.store.book[0,1],System.Text.Json.JsonDocument)
✅ TheFirstTwoBooks ($.store.book[0,1],System.Text.Json.Nodes.JsonNode)
✅ TheLastBookInOrder ($..book[-1:],System.Text.Json.JsonDocument)
✅ TheLastBookInOrder ($..book[-1:],System.Text.Json.Nodes.JsonNode)
✅ ThePriceOfEverythingInTheStore ($.store..price,System.Text.Json.JsonDocument)
✅ ThePriceOfEverythingInTheStore ($.store..price,System.Text.Json.Nodes.JsonNode)
✅ TheRootOfEverything ($,System.Text.Json.JsonDocument)
✅ TheRootOfEverything ($,System.Text.Json.Nodes.JsonNode)
✅ TheThirdBook ($..book[2],System.Text.Json.JsonDocument)
✅ TheThirdBook ($..book[2],System.Text.Json.Nodes.JsonNode)

✅ Hyperbee.Json.Tests.Query.JsonPathBracketNotationTests

✅ BracketNotation ($['key'],System.Text.Json.JsonDocument)
✅ BracketNotation ($['key'],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationAfterRecursiveDescent ($..[0],System.Text.Json.JsonDocument)
✅ BracketNotationAfterRecursiveDescent ($..[0],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationOnObjectWithoutKey ($['missing'],System.Text.Json.JsonDocument)
✅ BracketNotationOnObjectWithoutKey ($['missing'],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithDot ($['two.some'],System.Text.Json.JsonDocument)
✅ BracketNotationWithDot ($['two.some'],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithDoubleQuotes ($["key"],System.Text.Json.JsonDocument)
✅ BracketNotationWithDoubleQuotes ($["key"],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithEmptyPath ($[],System.Text.Json.JsonDocument)
✅ BracketNotationWithEmptyPath ($[],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithEmptyString ($[''],System.Text.Json.JsonDocument)
✅ BracketNotationWithEmptyString ($[''],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithEmptyStringDoubleQuoted ($[""],System.Text.Json.JsonDocument)
✅ BracketNotationWithEmptyStringDoubleQuoted ($[""],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithNegativeNumberOnShortArray ($[-2],System.Text.Json.JsonDocument)
✅ BracketNotationWithNegativeNumberOnShortArray ($[-2],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithNFCPathOnNFDKey ($['ü'],System.Text.Json.JsonDocument)
✅ BracketNotationWithNFCPathOnNFDKey ($['ü'],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithNumber ($[2],System.Text.Json.JsonDocument)
✅ BracketNotationWithNumber ($[2],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithNumber0 ($[0],System.Text.Json.JsonDocument)
✅ BracketNotationWithNumber0 ($[0],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithNumberAfterDotNotationWithWildcardOnNestedArraysWithDifferentLength ($.*[1],System.Text.Json.JsonDocument)
✅ BracketNotationWithNumberAfterDotNotationWithWildcardOnNestedArraysWithDifferentLength ($.*[1],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithNumberNegative1 ($[-1],System.Text.Json.JsonDocument)
✅ BracketNotationWithNumberNegative1 ($[-1],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithNumberNegative1OnEmptyArray ($[-1],System.Text.Json.JsonDocument)
✅ BracketNotationWithNumberNegative1OnEmptyArray ($[-1],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithNumberOnObject ($[0],System.Text.Json.JsonDocument)
✅ BracketNotationWithNumberOnObject ($[0],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithNumberOnShortArray ($[1],System.Text.Json.JsonDocument)
✅ BracketNotationWithNumberOnShortArray ($[1],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithoutQuotes ($[key],System.Text.Json.JsonDocument)
✅ BracketNotationWithoutQuotes ($[key],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithQuotedArraySliceLiteral ($[':'],System.Text.Json.JsonDocument)
✅ BracketNotationWithQuotedArraySliceLiteral ($[':'],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithQuotedClosingBracketLiteral ($[']'],System.Text.Json.JsonDocument)
✅ BracketNotationWithQuotedClosingBracketLiteral ($[']'],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithQuotedCurrentObjectLiteral ($['@'],System.Text.Json.JsonDocument)
✅ BracketNotationWithQuotedCurrentObjectLiteral ($['@'],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithQuotedDotLiteral ($['.'],System.Text.Json.JsonDocument)
✅ BracketNotationWithQuotedDotLiteral ($['.'],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithQuotedDotWildcard ($['.*'],System.Text.Json.JsonDocument)
✅ BracketNotationWithQuotedDotWildcard ($['.*'],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithQuotedEscapedBackslash ($['\\'],System.Text.Json.JsonDocument)
✅ BracketNotationWithQuotedEscapedBackslash ($['\\'],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithQuotedEscapedSingleQuote ($['\''],System.Text.Json.JsonDocument)
✅ BracketNotationWithQuotedEscapedSingleQuote ($['\''],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithQuotedNumberOnObject ($['0'],System.Text.Json.JsonDocument)
✅ BracketNotationWithQuotedNumberOnObject ($['0'],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithQuotedRootLiteral ($['$'],System.Text.Json.JsonDocument)
✅ BracketNotationWithQuotedRootLiteral ($['$'],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithQuotedSpecialCharactersCombined ($[':@.\"$,*\'\\'],System.Text.Json.JsonDocument)
✅ BracketNotationWithQuotedSpecialCharactersCombined ($[':@.\"$,*\'\\'],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithQuotedStringAndUnescapedSingleQuote ($['single'quote'],System.Text.Json.JsonDocument)
✅ BracketNotationWithQuotedStringAndUnescapedSingleQuote ($['single'quote'],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithQuotedUnionLiteral ($[','],System.Text.Json.JsonDocument)
✅ BracketNotationWithQuotedUnionLiteral ($[','],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithQuotedWildcardLiteral ($['*'],System.Text.Json.JsonDocument)
✅ BracketNotationWithQuotedWildcardLiteral ($['*'],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithQuotedWildcardLiteralOnObjectWithoutKey ($['*'],System.Text.Json.JsonDocument)
✅ BracketNotationWithQuotedWildcardLiteralOnObjectWithoutKey ($['*'],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithSpaces ($[ 'a' ],System.Text.Json.JsonDocument)
✅ BracketNotationWithSpaces ($[ 'a' ],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithStringIncludingDotWildcard ($['ni.*'],System.Text.Json.JsonDocument)
✅ BracketNotationWithStringIncludingDotWildcard ($['ni.*'],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithTwoLiteralsSeparatedByDot ($['two'.'some'],System.Text.Json.JsonDocument)
✅ BracketNotationWithTwoLiteralsSeparatedByDot ($['two'.'some'],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithTwoLiteralsSeparatedByDotWithoutQuotes ($[two.some],System.Text.Json.JsonDocument)
✅ BracketNotationWithTwoLiteralsSeparatedByDotWithoutQuotes ($[two.some],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithWildcardAfterArraySlice ($[0:2][*],System.Text.Json.JsonDocument)
✅ BracketNotationWithWildcardAfterArraySlice ($[0:2][*],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithWildcardAfterDotNotationAfterBracketNotationWithWildcard ($[*].bar[*],System.Text.Json.JsonDocument)
✅ BracketNotationWithWildcardAfterDotNotationAfterBracketNotationWithWildcard ($[*].bar[*],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithWildcardAfterRecursiveDescent ($..[*],System.Text.Json.JsonDocument)
✅ BracketNotationWithWildcardAfterRecursiveDescent ($..[*],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithWildcardOnArray ($[*],System.Text.Json.JsonDocument)
✅ BracketNotationWithWildcardOnArray ($[*],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithWildcardOnEmptyArray ($[*],System.Text.Json.JsonDocument)
✅ BracketNotationWithWildcardOnEmptyArray ($[*],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithWildcardOnEmptyObject ($[*],System.Text.Json.JsonDocument)
✅ BracketNotationWithWildcardOnEmptyObject ($[*],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithWildcardOnNullValueArray ($[*],System.Text.Json.JsonDocument)
✅ BracketNotationWithWildcardOnNullValueArray ($[*],System.Text.Json.Nodes.JsonNode)
✅ BracketNotationWithWildcardOnObject ($[*],System.Text.Json.JsonDocument)
✅ BracketNotationWithWildcardOnObject ($[*],System.Text.Json.Nodes.JsonNode)

✅ Hyperbee.Json.Tests.Query.JsonPathDotNotationTests

✅ DotBracketNotationWithEmptyPath ($.,System.Text.Json.JsonDocument)
✅ DotBracketNotationWithEmptyPath ($.,System.Text.Json.Nodes.JsonNode)
✅ DotBracketNotationWithoutQuotes ($.[key],System.Text.Json.JsonDocument)
✅ DotBracketNotationWithoutQuotes ($.[key],System.Text.Json.Nodes.JsonNode)
✅ DotNotationWithNonAsciiKey ($.屬性,System.Text.Json.JsonDocument)
✅ DotNotationWithNonAsciiKey ($.屬性,System.Text.Json.Nodes.JsonNode)
✅ DotNotationWithoutDot ($a,System.Text.Json.JsonDocument)
✅ DotNotationWithoutDot ($a,System.Text.Json.Nodes.JsonNode)

✅ Hyperbee.Json.Tests.Query.JsonPathFilterTests

✅ FilterWithLessThan ($[?(@.key<42)],System.Text.Json.JsonDocument)
✅ FilterWithLessThan ($[?(@.key<42)],System.Text.Json.Nodes.JsonNode)
✅ FilterWithTruthyProperty ($[?(@.key)],System.Text.Json.JsonDocument)
✅ FilterWithTruthyProperty ($[?(@.key)],System.Text.Json.Nodes.JsonNode)

✅ Hyperbee.Json.Tests.Query.JsonPathRootOnScalarTests

✅ RootOnScalar ($,System.Text.Json.JsonDocument)
✅ RootOnScalar ($,System.Text.Json.Nodes.JsonNode)
✅ RootOnScalarFalse ($,System.Text.Json.JsonDocument)
✅ RootOnScalarFalse ($,System.Text.Json.Nodes.JsonNode)
✅ RootOnScalarTrue ($,System.Text.Json.JsonDocument)
✅ RootOnScalarTrue ($,System.Text.Json.Nodes.JsonNode)

✅ Hyperbee.Json.Tests.Query.JsonPathUnionTests

✅ UnionWithDuplicationFromArray ($[0,0],System.Text.Json.JsonDocument)
✅ UnionWithDuplicationFromArray ($[0,0],System.Text.Json.Nodes.JsonNode)
✅ UnionWithDuplicationFromObject ($['a','a'],System.Text.Json.JsonDocument)
✅ UnionWithDuplicationFromObject ($['a','a'],System.Text.Json.Nodes.JsonNode)
✅ UnionWithFilter ($[?(@.key<3),?(@.key>6)],System.Text.Json.JsonDocument)
✅ UnionWithFilter ($[?(@.key<3),?(@.key>6)],System.Text.Json.Nodes.JsonNode)
✅ UnionWithKeys ($['key','another'],System.Text.Json.JsonDocument)
✅ UnionWithKeys ($['key','another'],System.Text.Json.Nodes.JsonNode)
✅ UnionWithMultipleKeys ($['key','another','thing1'],System.Text.Json.JsonDocument)
✅ UnionWithMultipleKeys ($['key','another','thing1'],System.Text.Json.Nodes.JsonNode)

✅ Hyperbee.Json.Tests.Tokenizer.JsonPathQueryTokenizerTests

✅ Should_tokenize_json_path (@..author,{@|k};{..|s};{author|k})
✅ Should_tokenize_json_path ($,{$|k})
✅ Should_tokenize_json_path ($..*,{$|k};{..|s};{*|s})
✅ Should_tokenize_json_path ($..book[-1:],{$|k};{..|s};{book|k};{-1:|s})
✅ Should_tokenize_json_path ($..book[:2],{$|k};{..|s};{book|k};{:2|s})
✅ Should_tokenize_json_path ($..book[?(@.isbn)],{$|k};{..|s};{book|k};{?(@.isbn)|s})
✅ Should_tokenize_json_path ($..book[?(@.price == 8.99 && @.category == "fiction")],{$|k};{..|s};{book|k};{?(@.price == 8.99 && @.category == "fiction")|s})
✅ Should_tokenize_json_path ($..book[?(@.price<10)],{$|k};{..|s};{book|k};{?(@.price<10)|s})
✅ Should_tokenize_json_path ($..book[[email protected]],{$|k};{..|s};{book|k};{[email protected]|s})
✅ Should_tokenize_json_path ($..book[[email protected]<10],{$|k};{..|s};{book|k};{[email protected]<10|s})
✅ Should_tokenize_json_path ($..book['category','author'],{$|k};{..|s};{book|k};{author,category|s})
✅ Should_tokenize_json_path ($..book[0,1],{$|k};{..|s};{book|k};{1,0|s})
✅ Should_tokenize_json_path ($..book[2],{$|k};{..|s};{book|k};{2|k})
✅ Should_tokenize_json_path ($..thing[?(@.x == 1)],{$|k};{..|s};{thing|k};{?(@.x == 1)|s})
✅ Should_tokenize_json_path ($.store..price,{$|k};{store|k};{..|s};{price|k})
✅ Should_tokenize_json_path ($.store.*,{$|k};{store|k};{*|s})
✅ Should_tokenize_json_path ($.store.book[?(@path !== "$['store']['book'][0]")],{$|k};{store|k};{book|k};{?(@path !== "$['store']['book'][0]")|s})
✅ Should_tokenize_json_path ($.store.book[*].author,{$|k};{store|k};{book|k};{*|s};{author|k})
✅ Should_tokenize_json_path ($.store.book[0,1],{$|k};{store|k};{book|k};{1,0|s})
✅ Should_tokenize_json_path ($.thing[1:2:3],{$|k};{thing|k};{1:2:3|s})
✅ Should_tokenize_json_path ($.two.some,{$|k};{two|k};{some|k})
✅ Should_tokenize_json_path ($.two.some.thing['this.or.that'],{$|k};{two|k};{some|k};{thing|k};{this.or.that|k})
✅ Should_tokenize_json_path ($['two.some'],{$|k};{two.some|k})