@@ -2058,6 +2058,142 @@ public void shouldCopyBindVarWithDollarAfterLookup() {
2058
2058
);
2059
2059
}
2060
2060
2061
+ @ Test
2062
+ @ MetafixToDo ("Should insert into specific object, but inserts into all" )
2063
+ public void shouldCopyToFieldWithIndexAndReservedFieldName () {
2064
+ MetafixTestHelpers .assertFix (streamReceiver , Arrays .asList (
2065
+ "set_array('a[].*.test[]', 'test')" ,
2066
+ "copy_field('some', 'a[].1.test[].$append')" ,
2067
+ "remove_field('some')"
2068
+ ),
2069
+ i -> {
2070
+ i .startRecord ("1" );
2071
+ i .literal ("some" , "thing" );
2072
+ i .startEntity ("a[]" );
2073
+ i .startEntity ("1" );
2074
+ i .literal ("name" , "Dog" );
2075
+ i .endEntity ();
2076
+ i .startEntity ("2" );
2077
+ i .literal ("name" , "Cat" );
2078
+ i .endEntity ();
2079
+ i .endEntity ();
2080
+ i .endRecord ();
2081
+ },
2082
+ (o , f ) -> {
2083
+ o .get ().startRecord ("1" );
2084
+ o .get ().startEntity ("a[]" );
2085
+ o .get ().startEntity ("1" );
2086
+ o .get ().literal ("name" , "Dog" );
2087
+ o .get ().startEntity ("test[]" );
2088
+ o .get ().literal ("1" , "test" );
2089
+ o .get ().literal ("2" , "thing" );
2090
+ f .apply (2 ).endEntity ();
2091
+ o .get ().startEntity ("2" );
2092
+ o .get ().literal ("name" , "Cat" );
2093
+ o .get ().startEntity ("test[]" );
2094
+ o .get ().literal ("1" , "test" );
2095
+ f .apply (3 ).endEntity ();
2096
+ o .get ().endRecord ();
2097
+ }
2098
+ );
2099
+ }
2100
+
2101
+ @ Test
2102
+ @ MetafixToDo ("Should insert into specific object, but inserts into all" )
2103
+ public void shouldCopyToFieldWithTwoReservedFieldNames () {
2104
+ MetafixTestHelpers .assertFix (streamReceiver , Arrays .asList (
2105
+ "set_array('a[].*.test[]', 'test')" ,
2106
+ "copy_field('some', 'a[].$first.test[].$append')" ,
2107
+ "remove_field('some')"
2108
+ ),
2109
+ i -> {
2110
+ i .startRecord ("1" );
2111
+ i .literal ("some" , "thing" );
2112
+ i .startEntity ("a[]" );
2113
+ i .startEntity ("1" );
2114
+ i .literal ("name" , "Dog" );
2115
+ i .endEntity ();
2116
+ i .startEntity ("2" );
2117
+ i .literal ("name" , "Cat" );
2118
+ i .endEntity ();
2119
+ i .endEntity ();
2120
+ i .endRecord ();
2121
+ },
2122
+ (o , f ) -> {
2123
+ o .get ().startRecord ("1" );
2124
+ o .get ().startEntity ("a[]" );
2125
+ o .get ().startEntity ("1" );
2126
+ o .get ().literal ("name" , "Dog" );
2127
+ o .get ().startEntity ("test[]" );
2128
+ o .get ().literal ("1" , "test" );
2129
+ o .get ().literal ("2" , "thing" );
2130
+ f .apply (2 ).endEntity ();
2131
+ o .get ().startEntity ("2" );
2132
+ o .get ().literal ("name" , "Cat" );
2133
+ o .get ().startEntity ("test[]" );
2134
+ o .get ().literal ("1" , "test" );
2135
+ f .apply (3 ).endEntity ();
2136
+ o .get ().endRecord ();
2137
+ }
2138
+ );
2139
+ }
2140
+
2141
+ @ Test
2142
+ @ MetafixToDo ("Existing value has no path ('[[a]]'), resulting in wrong path for new value" )
2143
+ public void shouldMoveFieldToPathWithIndexAndReservedField () {
2144
+ MetafixTestHelpers .assertFix (streamReceiver , Arrays .asList (
2145
+ "move_field('b', 'names[].1.$append')"
2146
+ ),
2147
+ i -> {
2148
+ i .startRecord ("1" );
2149
+ i .literal ("b" , "b" );
2150
+ i .startEntity ("names[]" );
2151
+ i .startEntity ("1[]" );
2152
+ i .literal ("1" , "a" );
2153
+ i .endEntity ();
2154
+ i .endEntity ();
2155
+ i .endRecord ();
2156
+ },
2157
+ (o , f ) -> {
2158
+ o .get ().startRecord ("1" );
2159
+ o .get ().startEntity ("names[]" );
2160
+ o .get ().startEntity ("1[]" );
2161
+ o .get ().literal ("1" , "a" );
2162
+ o .get ().literal ("2" , "b" );
2163
+ f .apply (2 ).endEntity ();
2164
+ o .get ().endRecord ();
2165
+ }
2166
+ );
2167
+ }
2168
+
2169
+ @ Test
2170
+ @ MetafixToDo ("Existing value has no path ('[[a]]'), resulting in wrong path for new value" )
2171
+ public void shouldMoveFieldToPathWithTwoReservedFields () {
2172
+ MetafixTestHelpers .assertFix (streamReceiver , Arrays .asList (
2173
+ "move_field('b', 'names[].$first.$append')"
2174
+ ),
2175
+ i -> {
2176
+ i .startRecord ("1" );
2177
+ i .literal ("b" , "b" );
2178
+ i .startEntity ("names[]" );
2179
+ i .startEntity ("1[]" );
2180
+ i .literal ("1" , "a" );
2181
+ i .endEntity ();
2182
+ i .endEntity ();
2183
+ i .endRecord ();
2184
+ },
2185
+ (o , f ) -> {
2186
+ o .get ().startRecord ("1" );
2187
+ o .get ().startEntity ("names[]" );
2188
+ o .get ().startEntity ("1[]" );
2189
+ o .get ().literal ("1" , "a" );
2190
+ o .get ().literal ("2" , "b" );
2191
+ f .apply (2 ).endEntity ();
2192
+ o .get ().endRecord ();
2193
+ }
2194
+ );
2195
+ }
2196
+
2061
2197
@ Test
2062
2198
// See https://github.com/metafacture/metafacture-fix/issues/121
2063
2199
public void shouldReplaceAllRegexesInNestedArray () {
0 commit comments