From 73da4e57075ef475de5d1464d431d966a021ab71 Mon Sep 17 00:00:00 2001 From: Davide Bettio Date: Fri, 17 Jul 2020 12:19:11 +0200 Subject: [PATCH 1/2] tests: add tests for slice with negative indices Negative indices are supported and they should be tested in order to keep the API stable and safe from regressions. --- test/ex_json_path_test.exs | 136 +++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) diff --git a/test/ex_json_path_test.exs b/test/ex_json_path_test.exs index ef58c8d..6c2ba07 100644 --- a/test/ex_json_path_test.exs +++ b/test/ex_json_path_test.exs @@ -583,6 +583,142 @@ defmodule ExJSONPathTest do assert ExJSONPath.eval(map, path) == {:ok, []} end + test ~s{eval $.data[-3:]} do + map = %{"data" => ["a", "b", "c"]} + + path = ~s{$.data[-3:]} + + assert ExJSONPath.eval(map, path) == {:ok, ["a", "b", "c"]} + end + + test ~s{eval $.data[-2:]} do + map = %{"data" => ["a", "b", "c"]} + + path = ~s{$.data[-2:]} + + assert ExJSONPath.eval(map, path) == {:ok, ["b", "c"]} + end + + test ~s{eval $.data[-1:]} do + map = %{"data" => [1, 2, 3]} + + path = ~s{$.data[-1:]} + + assert ExJSONPath.eval(map, path) == {:ok, [3]} + end + + test ~s{eval $.data[3:-4]} do + map = %{"data" => ["a", "b", "c", "d", "e", "f"]} + + path = ~s{$.data[3:-4]} + + assert ExJSONPath.eval(map, path) == {:ok, []} + end + + test ~s{eval $.data[-4:-5]} do + map = %{"data" => ["a", "b", "c", "d", "e", "f"]} + + path = ~s{$.data[-4:-5]} + + assert ExJSONPath.eval(map, path) == {:ok, []} + end + + test ~s{eval $.data[-4:-4]} do + map = %{"data" => ["a", "b", "c", "d", "e", "f"]} + + path = ~s{$.data[-4:-4]} + + assert ExJSONPath.eval(map, path) == {:ok, []} + end + + test ~s{eval $.data[-4:-3]} do + map = %{"data" => ["a", "b", "c", "d", "e", "f"]} + + path = ~s{$.data[-4:-3]} + + assert ExJSONPath.eval(map, path) == {:ok, ["c"]} + end + + test ~s{eval $.data[-4:-2]} do + map = %{"data" => ["a", "b", "c", "d", "e", "f"]} + + path = ~s{$.data[-4:-2]} + + assert ExJSONPath.eval(map, path) == {:ok, ["c", "d"]} + end + + test ~s{eval $.data[-4:-1]} do + map = %{"data" => ["a", "b", "c", "d", "e", "f"]} + + path = ~s{$.data[-4:-1]} + + assert ExJSONPath.eval(map, path) == {:ok, ["c", "d", "e"]} + end + + test ~s{eval $.data[-4:0]} do + map = %{"data" => ["a", "b", "c", "d", "e", "f"]} + + path = ~s{$.data[-4:0]} + + assert ExJSONPath.eval(map, path) == {:ok, ["c", "d", "e", "f"]} + end + + test ~s{eval $.data[-4:1]} do + map = %{"data" => ["a", "b", "c", "d", "e", "f"]} + + path = ~s{$.data[-4:1]} + + assert ExJSONPath.eval(map, path) == {:ok, []} + end + + test ~s{eval $.data[-4:2]} do + map = %{"data" => ["a", "b", "c", "d", "e", "f"]} + + path = ~s{$.data[-4:2]} + + assert ExJSONPath.eval(map, path) == {:ok, []} + end + + test ~s{eval $.data[-4:3]} do + map = %{"data" => ["a", "b", "c", "d", "e", "f"]} + + path = ~s{$.data[-4:3]} + + assert ExJSONPath.eval(map, path) == {:ok, ["c"]} + end + + test ~s{eval $.data[-4:4]} do + map = %{"data" => ["a", "b", "c", "d", "e", "f"]} + + path = ~s{$.data[-4:4]} + + assert ExJSONPath.eval(map, path) == {:ok, ["c", "d"]} + end + + test ~s{eval $.data[-4:5]} do + map = %{"data" => ["a", "b", "c", "d", "e", "f"]} + + path = ~s{$.data[-4:5]} + + assert ExJSONPath.eval(map, path) == {:ok, ["c", "d", "e"]} + end + + test ~s{eval $.data[-4:6]} do + map = %{"data" => ["a", "b", "c", "d", "e", "f"]} + + path = ~s{$.data[-4:6]} + + assert ExJSONPath.eval(map, path) == {:ok, ["c", "d", "e", "f"]} + end + + test ~s{eval $.data[-4:7]} do + map = %{"data" => ["a", "b", "c", "d", "e", "f"]} + + path = ~s{$.data[-4:7]} + + assert ExJSONPath.eval(map, path) == {:ok, ["c", "d", "e", "f"]} + end + test ~s{eval $.data[:5]} do map = %{"data" => [0, -1, 2, -3, 4, -5, 6, -7, 8]} From 1e38ebb0d493d133188964c064e3edc02c4fec95 Mon Sep 17 00:00:00 2001 From: Davide Bettio Date: Fri, 17 Jul 2020 12:21:34 +0200 Subject: [PATCH 2/2] WIP: Array slice with start large negative number and open end on short array --- test/ex_json_path_test.exs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/ex_json_path_test.exs b/test/ex_json_path_test.exs index 6c2ba07..93cc184 100644 --- a/test/ex_json_path_test.exs +++ b/test/ex_json_path_test.exs @@ -583,6 +583,15 @@ defmodule ExJSONPathTest do assert ExJSONPath.eval(map, path) == {:ok, []} end + # https://cburgmer.github.io/json-path-comparison/results/array_slice_with_start_large_negative_number_and_open_end_on_short_array.html + test ~s{eval $.data[-4:]} do + map = %{"data" => [1, 2, 3]} + + path = ~s{$.data[-4:]} + + assert ExJSONPath.eval(map, path) == {:ok, [1, 2, 3]} + end + test ~s{eval $.data[-3:]} do map = %{"data" => ["a", "b", "c"]}