@@ -14,90 +14,109 @@ public class JsonPointerGeneratorFilteringTest extends com.fasterxml.jackson.cor
14
14
15
15
public void testSimplePropertyWithPath () throws Exception
16
16
{
17
- _assert (SIMPLE_INPUT , "/c" , Inclusion .INCLUDE_ALL_AND_PATH , "{'c':{'d':{'a':true}}}" );
18
- _assert (SIMPLE_INPUT , "/c/d" , Inclusion .INCLUDE_ALL_AND_PATH , "{'c':{'d':{'a':true}}}" );
19
- _assert (SIMPLE_INPUT , "/c/d/a" , Inclusion .INCLUDE_ALL_AND_PATH , "{'c':{'d':{'a':true}}}" );
17
+ _assert (SIMPLE_INPUT , "/c" , Inclusion .INCLUDE_ALL_AND_PATH , "{'c':{'d':{'a':true}}}" , false );
18
+ _assert (SIMPLE_INPUT , "/c/d" , Inclusion .INCLUDE_ALL_AND_PATH , "{'c':{'d':{'a':true}}}" , false );
19
+ _assert (SIMPLE_INPUT , "/c/d/a" , Inclusion .INCLUDE_ALL_AND_PATH , "{'c':{'d':{'a':true}}}" , false );
20
20
21
- _assert (SIMPLE_INPUT , "/c/d/a" , Inclusion .INCLUDE_ALL_AND_PATH , "{'c':{'d':{'a':true}}}" );
21
+ _assert (SIMPLE_INPUT , "/c/d/a" , Inclusion .INCLUDE_ALL_AND_PATH , "{'c':{'d':{'a':true}}}" , false );
22
22
23
- _assert (SIMPLE_INPUT , "/a" , Inclusion .INCLUDE_ALL_AND_PATH , "{'a':1}" );
24
- _assert (SIMPLE_INPUT , "/d" , Inclusion .INCLUDE_ALL_AND_PATH , "{'d':null}" );
23
+ _assert (SIMPLE_INPUT , "/a" , Inclusion .INCLUDE_ALL_AND_PATH , "{'a':1}" , false );
24
+ _assert (SIMPLE_INPUT , "/d" , Inclusion .INCLUDE_ALL_AND_PATH , "{'d':null}" , false );
25
25
26
26
// and then non-match
27
- _assert (SIMPLE_INPUT , "/x" , Inclusion .INCLUDE_ALL_AND_PATH , "" );
27
+ _assert (SIMPLE_INPUT , "/x" , Inclusion .INCLUDE_ALL_AND_PATH , "" , false );
28
28
}
29
29
30
30
public void testSimplePropertyWithoutPath () throws Exception
31
31
{
32
- _assert (SIMPLE_INPUT , "/c" , Inclusion .ONLY_INCLUDE_ALL , "{'d':{'a':true}}" );
33
- _assert (SIMPLE_INPUT , "/c/d" , Inclusion .ONLY_INCLUDE_ALL , "{'a':true}" );
34
- _assert (SIMPLE_INPUT , "/c/d/a" , Inclusion .ONLY_INCLUDE_ALL , "true" );
32
+ _assert (SIMPLE_INPUT , "/c" , Inclusion .ONLY_INCLUDE_ALL , "{'d':{'a':true}}" , false );
33
+ _assert (SIMPLE_INPUT , "/c/d" , Inclusion .ONLY_INCLUDE_ALL , "{'a':true}" , false );
34
+ _assert (SIMPLE_INPUT , "/c/d/a" , Inclusion .ONLY_INCLUDE_ALL , "true" , false );
35
35
36
- _assert (SIMPLE_INPUT , "/a" , Inclusion .ONLY_INCLUDE_ALL , "1" );
37
- _assert (SIMPLE_INPUT , "/d" , Inclusion .ONLY_INCLUDE_ALL , "null" );
36
+ _assert (SIMPLE_INPUT , "/a" , Inclusion .ONLY_INCLUDE_ALL , "1" , false );
37
+ _assert (SIMPLE_INPUT , "/d" , Inclusion .ONLY_INCLUDE_ALL , "null" , false );
38
38
39
39
// and then non-match
40
- _assert (SIMPLE_INPUT , "/x" , Inclusion .ONLY_INCLUDE_ALL , "" );
40
+ _assert (SIMPLE_INPUT , "/x" , Inclusion .ONLY_INCLUDE_ALL , "" , false );
41
41
}
42
42
43
43
public void testArrayElementWithPath () throws Exception
44
44
{
45
- _assert (SIMPLE_INPUT , "/b" , Inclusion .INCLUDE_ALL_AND_PATH , "{'b':[1,2,3]}" );
46
- _assert (SIMPLE_INPUT , "/b/1" , Inclusion .INCLUDE_ALL_AND_PATH , "{'b':[2]}" );
47
- _assert (SIMPLE_INPUT , "/b/2" , Inclusion .INCLUDE_ALL_AND_PATH , "{'b':[3]}" );
45
+ _assert (SIMPLE_INPUT , "/b" , Inclusion .INCLUDE_ALL_AND_PATH , "{'b':[1,2,3]}" , false );
46
+ _assert (SIMPLE_INPUT , "/b/1" , Inclusion .INCLUDE_ALL_AND_PATH , "{'b':[2]}" , false );
47
+ _assert (SIMPLE_INPUT , "/b/2" , Inclusion .INCLUDE_ALL_AND_PATH , "{'b':[3]}" , false );
48
48
49
49
// and then non-match
50
- _assert (SIMPLE_INPUT , "/b/8" , Inclusion .INCLUDE_ALL_AND_PATH , "" );
50
+ _assert (SIMPLE_INPUT , "/b/8" , Inclusion .INCLUDE_ALL_AND_PATH , "" , false );
51
51
}
52
52
53
53
public void testArrayNestedWithPath () throws Exception
54
54
{
55
- _assert ("{'a':[true,{'b':3,'d':2},false]}" , "/a/1/b" , Inclusion .INCLUDE_ALL_AND_PATH , "{'a':[{'b':3}]}" );
56
- _assert ("[true,[1]]" , "/0" , Inclusion .INCLUDE_ALL_AND_PATH , "[true]" );
57
- _assert ("[true,[1]]" , "/1" , Inclusion .INCLUDE_ALL_AND_PATH , "[[1]]" );
58
- _assert ("[true,[1,2,[true],3],0]" , "/0" , Inclusion .INCLUDE_ALL_AND_PATH , "[true]" );
59
- _assert ("[true,[1,2,[true],3],0]" , "/1" , Inclusion .INCLUDE_ALL_AND_PATH , "[[1,2,[true],3]]" );
60
-
61
- _assert ("[true,[1,2,[true],3],0]" , "/1/2" , Inclusion .INCLUDE_ALL_AND_PATH , "[[[true]]]" );
62
- _assert ("[true,[1,2,[true],3],0]" , "/1/2/0" , Inclusion .INCLUDE_ALL_AND_PATH , "[[[true]]]" );
63
- _assert ("[true,[1,2,[true],3],0]" , "/1/3/0" , Inclusion .INCLUDE_ALL_AND_PATH , "" );
55
+ _assert ("{'a':[true,{'b':3,'d':2},false]}" , "/a/1/b" , Inclusion .INCLUDE_ALL_AND_PATH , "{'a':[{'b':3}]}" , false );
56
+ _assert ("[true,[1]]" , "/0" , Inclusion .INCLUDE_ALL_AND_PATH , "[true]" , false );
57
+ _assert ("[true,[1]]" , "/1" , Inclusion .INCLUDE_ALL_AND_PATH , "[[1]]" , false );
58
+ _assert ("[true,[1,2,[true],3],0]" , "/0" , Inclusion .INCLUDE_ALL_AND_PATH , "[true]" , false );
59
+ _assert ("[true,[1,2,[true],3],0]" , "/1" , Inclusion .INCLUDE_ALL_AND_PATH , "[[1,2,[true],3]]" , false );
60
+
61
+ _assert ("[true,[1,2,[true],3],0]" , "/1/2" , Inclusion .INCLUDE_ALL_AND_PATH , "[[[true]]]" , false );
62
+ _assert ("[true,[1,2,[true],3],0]" , "/1/2/0" , Inclusion .INCLUDE_ALL_AND_PATH , "[[[true]]]" , false );
63
+ _assert ("[true,[1,2,[true],3],0]" , "/1/3/0" , Inclusion .INCLUDE_ALL_AND_PATH , "" , false );
64
64
}
65
65
66
66
public void testArrayNestedWithoutPath () throws Exception
67
67
{
68
- _assert ("{'a':[true,{'b':3,'d':2},false]}" , "/a/1/b" , Inclusion .ONLY_INCLUDE_ALL , "3" );
69
- _assert ("[true,[1,2,[true],3],0]" , "/0" , Inclusion .ONLY_INCLUDE_ALL , "true" );
68
+ _assert ("{'a':[true,{'b':3,'d':2},false]}" , "/a/1/b" , Inclusion .ONLY_INCLUDE_ALL , "3" , false );
69
+ _assert ("[true,[1,2,[true],3],0]" , "/0" , Inclusion .ONLY_INCLUDE_ALL , "true" , false );
70
70
_assert ("[true,[1,2,[true],3],0]" , "/1" , Inclusion .ONLY_INCLUDE_ALL ,
71
- "[1,2,[true],3]" );
71
+ "[1,2,[true],3]" , false );
72
72
73
- _assert ("[true,[1,2,[true],3],0]" , "/1/2" , Inclusion .ONLY_INCLUDE_ALL , "[true]" );
74
- _assert ("[true,[1,2,[true],3],0]" , "/1/2/0" , Inclusion .ONLY_INCLUDE_ALL , "true" );
75
- _assert ("[true,[1,2,[true],3],0]" , "/1/3/0" , Inclusion .ONLY_INCLUDE_ALL , "" );
73
+ _assert ("[true,[1,2,[true],3],0]" , "/1/2" , Inclusion .ONLY_INCLUDE_ALL , "[true]" , false );
74
+ _assert ("[true,[1,2,[true],3],0]" , "/1/2/0" , Inclusion .ONLY_INCLUDE_ALL , "true" , false );
75
+ _assert ("[true,[1,2,[true],3],0]" , "/1/3/0" , Inclusion .ONLY_INCLUDE_ALL , "" , false );
76
76
}
77
77
78
78
// final String SIMPLE_INPUT = aposToQuotes("{'a':1,'b':[1,2,3],'c':{'d':{'a':true}},'d':null}");
79
79
80
80
public void testArrayElementWithoutPath () throws Exception
81
81
{
82
- _assert (SIMPLE_INPUT , "/b" , Inclusion .ONLY_INCLUDE_ALL , "[1,2,3]" );
83
- _assert (SIMPLE_INPUT , "/b/1" , Inclusion .ONLY_INCLUDE_ALL , "2" );
84
- _assert (SIMPLE_INPUT , "/b/2" , Inclusion .ONLY_INCLUDE_ALL , "3" );
82
+ _assert (SIMPLE_INPUT , "/b" , Inclusion .ONLY_INCLUDE_ALL , "[1,2,3]" , false );
83
+ _assert (SIMPLE_INPUT , "/b/1" , Inclusion .ONLY_INCLUDE_ALL , "2" , false );
84
+ _assert (SIMPLE_INPUT , "/b/2" , Inclusion .ONLY_INCLUDE_ALL , "3" , false );
85
85
86
- _assert (SIMPLE_INPUT , "/b/8" , Inclusion .ONLY_INCLUDE_ALL , "" );
86
+ _assert (SIMPLE_INPUT , "/b/8" , Inclusion .ONLY_INCLUDE_ALL , "" , false );
87
87
88
88
// and then non-match
89
- _assert (SIMPLE_INPUT , "/x" , Inclusion .ONLY_INCLUDE_ALL , "" );
89
+ _assert (SIMPLE_INPUT , "/x" , Inclusion .ONLY_INCLUDE_ALL , "" , false );
90
90
}
91
91
92
- private void _assert (String input , String pathExpr , Inclusion tokenFilterInclusion , String exp )
92
+ public void testAllowMultipleMatchesWithPath () throws Exception
93
+ {
94
+ _assert ("[1,2,3]" , "/0" , Inclusion .INCLUDE_ALL_AND_PATH , "[1]" , true );
95
+ _assert ("[1,2,3]" , "/1" , Inclusion .INCLUDE_ALL_AND_PATH , "[2]" , true );
96
+ _assert ("[1,2,3]" , "/2" , Inclusion .INCLUDE_ALL_AND_PATH , "[3]" , true );
97
+
98
+ _assert ("{'a':[1,2,3]}" , "/a/0" , Inclusion .INCLUDE_ALL_AND_PATH , "{'a':[1]}" , true );
99
+ _assert ("{'a':[1,2,3]}" , "/a/1" , Inclusion .INCLUDE_ALL_AND_PATH , "{'a':[2]}" , true );
100
+ _assert ("{'a':[1,2,3]}" , "/a/2" , Inclusion .INCLUDE_ALL_AND_PATH , "{'a':[3]}" , true );
101
+
102
+ _assert ("[{'id':1},{'id':2},{'id':3}]" , "/0/id" , Inclusion .INCLUDE_ALL_AND_PATH , "[{'id':1}]" , true );
103
+ _assert ("[{'id':1},{'id':2},{'id':3}]" , "/1/id" , Inclusion .INCLUDE_ALL_AND_PATH , "[{'id':2}]" , true );
104
+ _assert ("[{'id':1},{'id':2},{'id':3}]" , "/2/id" , Inclusion .INCLUDE_ALL_AND_PATH , "[{'id':3}]" , true );
105
+
106
+ _assert ("[{'id':1,'stuff':[1,2,3]},{'id':2,'stuff':[4,5,6]},{'id':3,'stuff':[7,8,9]}]" , "/0/stuff/0" , Inclusion .INCLUDE_ALL_AND_PATH , "[{'stuff':[1]}]" , true );
107
+ _assert ("[{'id':1,'stuff':[1,2,3]},{'id':2,'stuff':[4,5,6]},{'id':3,'stuff':[7,8,9]}]" , "/1/stuff/1" , Inclusion .INCLUDE_ALL_AND_PATH , "[{'stuff':[5]}]" , true );
108
+ _assert ("[{'id':1,'stuff':[1,2,3]},{'id':2,'stuff':[4,5,6]},{'id':3,'stuff':[7,8,9]}]" , "/2/stuff/2" , Inclusion .INCLUDE_ALL_AND_PATH , "[{'stuff':[9]}]" , true );
109
+ }
110
+
111
+ private void _assert (String input , String pathExpr , Inclusion tokenFilterInclusion , String exp , boolean allowMultipleMatches )
93
112
throws Exception
94
113
{
95
114
StringWriter w = new StringWriter ();
96
115
97
116
JsonGenerator g0 = JSON_F .createGenerator (w );
98
117
FilteringGeneratorDelegate g = new FilteringGeneratorDelegate (g0 ,
99
118
new JsonPointerBasedFilter (pathExpr ),
100
- tokenFilterInclusion , false );
119
+ tokenFilterInclusion , allowMultipleMatches );
101
120
102
121
try {
103
122
writeJsonDoc (JSON_F , input , g );
0 commit comments