@Test public void testCopyAsArrayPredicate() throws Exception { TupleEntry entry = new TupleEntry( new Fields( "json", JSONCoercibleType.TYPE ), Tuple.size( 1 ) ); entry.setObject( 0, JSONData.people ); CopySpec copySpec = new CopySpec() .from( "/people/*", new JSONStringPointerFilter( "/person/name", "John Doe" ) ); JSONCopyAsFunction function = new JSONCopyAsFunction( new Fields( "result" ), copySpec ); TupleListCollector result = invokeFunction( function, entry, new Fields( "result" ) ); Object value = result.iterator().next().getObject( 0 ); assertNotNull( value ); assertEquals( "John Doe", ( (ObjectNode) value ).get( "person" ).get( "name" ).textValue() ); assertEquals( 50, ( (ObjectNode) value ).get( "person" ).get( "age" ).intValue() ); assertEquals( "123-45-6789", ( (ObjectNode) value ).get( "person" ).get( "ssn" ).textValue() ); }
@Test public void testCopyAsArrayPredicateNegate() throws Exception { TupleEntry entry = new TupleEntry( new Fields( "json", JSONCoercibleType.TYPE ), Tuple.size( 1 ) ); entry.setObject( 0, JSONData.people ); CopySpec copySpec = new CopySpec() .from( "/people/*", new JSONStringPointerFilter( "/person/name", "John Doe" ).negate() ); JSONCopyAsFunction function = new JSONCopyAsFunction( new Fields( "result" ), copySpec ); TupleListCollector result = invokeFunction( function, entry, new Fields( "result" ) ); Object value = result.iterator().next().getObject( 0 ); assertNotNull( value ); assertEquals( "Jane Doe", ( (ObjectNode) value ).get( "person" ).get( "name" ).textValue() ); assertEquals( 49, ( (ObjectNode) value ).get( "person" ).get( "age" ).intValue() ); assertEquals( "123-45-6789", ( (ObjectNode) value ).get( "person" ).get( "ssn" ).textValue() ); }
@Test public void testCopyAsArrayPredicateNegate() throws Exception { TupleEntry entry = new TupleEntry( new Fields( "json", JSONCoercibleType.TYPE ), Tuple.size( 1 ) ); entry.setObject( 0, JSONData.people ); CopySpec copySpec = new CopySpec() .from( "/people/*", new JSONStringPointerFilter( "/person/name", "John Doe" ).negate() ); JSONCopyAsFunction function = new JSONCopyAsFunction( new Fields( "result" ), copySpec ); TupleListCollector result = invokeFunction( function, entry, new Fields( "result" ) ); Object value = result.iterator().next().getObject( 0 ); assertNotNull( value ); assertEquals( "Jane Doe", ( (ObjectNode) value ).get( "person" ).get( "name" ).textValue() ); assertEquals( 49, ( (ObjectNode) value ).get( "person" ).get( "age" ).intValue() ); assertEquals( "123-45-6789", ( (ObjectNode) value ).get( "person" ).get( "ssn" ).textValue() ); }
@Test public void testCopyAsArrayPredicate() throws Exception { TupleEntry entry = new TupleEntry( new Fields( "json", JSONCoercibleType.TYPE ), Tuple.size( 1 ) ); entry.setObject( 0, JSONData.people ); CopySpec copySpec = new CopySpec() .from( "/people/*", new JSONStringPointerFilter( "/person/name", "John Doe" ) ); JSONCopyAsFunction function = new JSONCopyAsFunction( new Fields( "result" ), copySpec ); TupleListCollector result = invokeFunction( function, entry, new Fields( "result" ) ); Object value = result.iterator().next().getObject( 0 ); assertNotNull( value ); assertEquals( "John Doe", ( (ObjectNode) value ).get( "person" ).get( "name" ).textValue() ); assertEquals( 50, ( (ObjectNode) value ).get( "person" ).get( "age" ).intValue() ); assertEquals( "123-45-6789", ( (ObjectNode) value ).get( "person" ).get( "ssn" ).textValue() ); }
@Test public void testCopyAsInto() throws Exception { TupleEntry entry = new TupleEntry( new Fields( "json", JSONCoercibleType.TYPE ), Tuple.size( 1 ) ); entry.setObject( 0, JSONData.people ); CopySpec copySpec = new CopySpec( "/people" ) .from( "/people/0" ); JSONCopyAsFunction function = new JSONCopyAsFunction( new Fields( "result" ), copySpec ); TupleListCollector result = invokeFunction( function, entry, new Fields( "result" ) ); Object value = result.iterator().next().getObject( 0 ); assertNotNull( value ); value = ( (ObjectNode) value ).get( "people" ).get( "person" ); assertEquals( "John Doe", ( (ObjectNode) value ).get( "name" ).textValue() ); assertEquals( 50, ( (ObjectNode) value ).get( "age" ).intValue() ); assertEquals( "123-45-6789", ( (ObjectNode) value ).get( "ssn" ).textValue() ); }
@Test public void testCopyAs() throws Exception { TupleEntry entry = new TupleEntry( new Fields( "json", JSONCoercibleType.TYPE ), Tuple.size( 1 ) ); entry.setObject( 0, JSONData.nested ); CopySpec copySpec = new CopySpec() .from( "/person" ); JSONCopyAsFunction function = new JSONCopyAsFunction( new Fields( "result" ), copySpec ); TupleListCollector result = invokeFunction( function, entry, new Fields( "result" ) ); Object value = result.iterator().next().getObject( 0 ); assertNotNull( value ); assertEquals( "John Doe", ( (ObjectNode) value ).get( "name" ).textValue() ); assertEquals( 50, ( (ObjectNode) value ).get( "age" ).intValue() ); assertEquals( "123-45-6789", ( (ObjectNode) value ).get( "ssn" ).textValue() ); }
@Test public void testCopyAs() throws Exception { TupleEntry entry = new TupleEntry( new Fields( "json", JSONCoercibleType.TYPE ), Tuple.size( 1 ) ); entry.setObject( 0, JSONData.nested ); CopySpec copySpec = new CopySpec() .from( "/person" ); JSONCopyAsFunction function = new JSONCopyAsFunction( new Fields( "result" ), copySpec ); TupleListCollector result = invokeFunction( function, entry, new Fields( "result" ) ); Object value = result.iterator().next().getObject( 0 ); assertNotNull( value ); assertEquals( "John Doe", ( (ObjectNode) value ).get( "name" ).textValue() ); assertEquals( 50, ( (ObjectNode) value ).get( "age" ).intValue() ); assertEquals( "123-45-6789", ( (ObjectNode) value ).get( "ssn" ).textValue() ); }
@Test public void testCopyAsPredicate() throws Exception { TupleEntry entry = new TupleEntry( new Fields( "json", JSONCoercibleType.TYPE ), Tuple.size( 1 ) ); entry.setObject( 0, JSONData.nested ); CopySpec copySpec = new CopySpec() .from( "/person", new JSONStringPointerFilter( "/name", "John Doe" ) ); JSONCopyAsFunction function = new JSONCopyAsFunction( new Fields( "result" ), copySpec ); TupleListCollector result = invokeFunction( function, entry, new Fields( "result" ) ); Object value = result.iterator().next().getObject( 0 ); assertNotNull( value ); assertEquals( "John Doe", ( (ObjectNode) value ).get( "name" ).textValue() ); assertEquals( 50, ( (ObjectNode) value ).get( "age" ).intValue() ); assertEquals( "123-45-6789", ( (ObjectNode) value ).get( "ssn" ).textValue() ); }
@Test public void testCopyExcludeDescent() throws Exception { TupleEntry entry = new TupleEntry( new Fields( "json", JSONCoercibleType.TYPE ), Tuple.size( 1 ) ); entry.setObject( 0, JSONData.nested ); CopySpec copySpec = new CopySpec() .exclude( "/**/value" ); JSONCopyAsFunction function = new JSONCopyAsFunction( new Fields( "result" ), copySpec ); TupleListCollector result = invokeFunction( function, entry, new Fields( "result" ) ); Object value = result.iterator().next().getObject( 0 ); assertNotNull( value ); assertNotNull( ( (ObjectNode) value ).get( "person" ) ); value = ( (ObjectNode) value ).get( "person" ); assertNull( ( (ObjectNode) value ).get( "measure" ).get( "value" ) ); }
@Test public void testCopyExcludeFrom() throws Exception { TupleEntry entry = new TupleEntry( new Fields( "json", JSONCoercibleType.TYPE ), Tuple.size( 1 ) ); entry.setObject( 0, JSONData.nested ); CopySpec copySpec = new CopySpec() .fromExclude( "/person", "/ssn", "/children" ); JSONCopyAsFunction function = new JSONCopyAsFunction( new Fields( "result" ), copySpec ); TupleListCollector result = invokeFunction( function, entry, new Fields( "result" ) ); Object value = result.iterator().next().getObject( 0 ); assertNotNull( value ); assertEquals( "John Doe", ( (ObjectNode) value ).get( "name" ).textValue() ); assertEquals( 50, ( (ObjectNode) value ).get( "age" ).intValue() ); assertEquals( null, ( (ObjectNode) value ).get( "ssn" ) ); assertEquals( null, ( (ObjectNode) value ).get( "children" ) ); }
@Test public void testCopyIncludeFrom2() throws Exception { TupleEntry entry = new TupleEntry( new Fields( "json", JSONCoercibleType.TYPE ), Tuple.size( 1 ) ); entry.setObject( 0, JSONData.nested ); CopySpec copySpec = new CopySpec() .fromInclude( "/person", "/firstName", "/age" ); JSONCopyAsFunction function = new JSONCopyAsFunction( new Fields( "result" ), copySpec ); TupleListCollector result = invokeFunction( function, entry, new Fields( "result" ) ); Object value = result.iterator().next().getObject( 0 ); assertNotNull( value ); assertEquals( "John", ( (ObjectNode) value ).get( "firstName" ).textValue() ); assertEquals( 50, ( (ObjectNode) value ).get( "age" ).intValue() ); assertEquals( null, ( (ObjectNode) value ).get( "ssn" ) ); }
@Test public void testCopyIncludeFrom2() throws Exception { TupleEntry entry = new TupleEntry( new Fields( "json", JSONCoercibleType.TYPE ), Tuple.size( 1 ) ); entry.setObject( 0, JSONData.nested ); CopySpec copySpec = new CopySpec() .fromInclude( "/person", "/firstName", "/age" ); JSONCopyAsFunction function = new JSONCopyAsFunction( new Fields( "result" ), copySpec ); TupleListCollector result = invokeFunction( function, entry, new Fields( "result" ) ); Object value = result.iterator().next().getObject( 0 ); assertNotNull( value ); assertEquals( "John", ( (ObjectNode) value ).get( "firstName" ).textValue() ); assertEquals( 50, ( (ObjectNode) value ).get( "age" ).intValue() ); assertEquals( null, ( (ObjectNode) value ).get( "ssn" ) ); }
@Test public void testCoerce() throws Exception { TupleEntry entry = new TupleEntry( new Fields( "json", JSONCoercibleType.TYPE ), Tuple.size( 1 ) ); entry.setObject( 0, JSONData.nested ); CopySpec copySpec = new CopySpec() .fromTransform( "/person/measure", "/value", JSONPrimitiveTransforms.TO_FLOAT ); JSONCopyAsFunction function = new JSONCopyAsFunction( new Fields( "result" ), copySpec ); TupleListCollector result = invokeFunction( function, entry, new Fields( "result" ) ); Object value = result.iterator().next().getObject( 0 ); assertNotNull( value ); assertEquals( JsonNodeType.NUMBER, ( (ObjectNode) value ).get( "value" ).getNodeType() ); assertEquals( FloatNode.class, ( (ObjectNode) value ).get( "value" ).getClass() ); assertEquals( 100.0F, ( (ObjectNode) value ).get( "value" ).floatValue() ); }
@Test public void testCoerce() throws Exception { TupleEntry entry = new TupleEntry( new Fields( "json", JSONCoercibleType.TYPE ), Tuple.size( 1 ) ); entry.setObject( 0, JSONData.nested ); CopySpec copySpec = new CopySpec() .fromTransform( "/person/measure", "/value", JSONPrimitiveTransforms.TO_FLOAT ); JSONCopyAsFunction function = new JSONCopyAsFunction( new Fields( "result" ), copySpec ); TupleListCollector result = invokeFunction( function, entry, new Fields( "result" ) ); Object value = result.iterator().next().getObject( 0 ); assertNotNull( value ); assertEquals( JsonNodeType.NUMBER, ( (ObjectNode) value ).get( "value" ).getNodeType() ); assertEquals( FloatNode.class, ( (ObjectNode) value ).get( "value" ).getClass() ); assertEquals( 100.0F, ( (ObjectNode) value ).get( "value" ).floatValue() ); }
@Test public void testCopyIncludeFrom() throws Exception { TupleEntry entry = new TupleEntry( new Fields( "json", JSONCoercibleType.TYPE ), Tuple.size( 1 ) ); entry.setObject( 0, JSONData.nested ); CopySpec copySpec = new CopySpec() .fromInclude( "/person", "/firstName" ) .fromInclude( "/person", "/age" ); JSONCopyAsFunction function = new JSONCopyAsFunction( new Fields( "result" ), copySpec ); TupleListCollector result = invokeFunction( function, entry, new Fields( "result" ) ); Object value = result.iterator().next().getObject( 0 ); assertNotNull( value ); assertEquals( "John", ( (ObjectNode) value ).get( "firstName" ).textValue() ); assertEquals( 50, ( (ObjectNode) value ).get( "age" ).intValue() ); assertEquals( null, ( (ObjectNode) value ).get( "ssn" ) ); }
@Test public void testCopyAsPredicateNegate() throws Exception { TupleEntry entry = new TupleEntry( new Fields( "json", JSONCoercibleType.TYPE ), Tuple.size( 1 ) ); entry.setObject( 0, JSONData.nested ); CopySpec copySpec = new CopySpec() .from( "/person", new JSONStringPointerFilter( "/name", "John Doe" ).negate() ); JSONCopyAsFunction function = new JSONCopyAsFunction( new Fields( "result" ), copySpec ); TupleListCollector result = invokeFunction( function, entry, new Fields( "result" ) ); Object value = result.iterator().next().getObject( 0 ); assertNotNull( value ); assertNull( ( (ObjectNode) value ).get( "name" ) ); assertNull( ( (ObjectNode) value ).get( "age" ) ); assertNull( ( (ObjectNode) value ).get( "ssn" ) ); }
@Test public void testCopyInclude() throws Exception { TupleEntry entry = new TupleEntry( new Fields( "json", JSONCoercibleType.TYPE ), Tuple.size( 1 ) ); entry.setObject( 0, JSONData.nested ); CopySpec copySpec = new CopySpec() .include( "/person/firstName" ) .include( "/person/age" ); JSONCopyAsFunction function = new JSONCopyAsFunction( new Fields( "result" ), copySpec ); TupleListCollector result = invokeFunction( function, entry, new Fields( "result" ) ); Object value = result.iterator().next().getObject( 0 ); assertNotNull( value ); assertEquals( "John", ( (ObjectNode) value ).findPath( "firstName" ).textValue() ); assertEquals( 50, ( (ObjectNode) value ).findPath( "age" ).intValue() ); assertEquals( null, ( (ObjectNode) value ).findValue( "ssn" ) ); }
@Test public void testCopyIncludeWild() throws Exception { TupleEntry entry = new TupleEntry( new Fields( "json", JSONCoercibleType.TYPE ), Tuple.size( 1 ) ); entry.setObject( 0, JSONData.nested ); CopySpec copySpec = new CopySpec() .include( "/person/firstName" ) .include( "/*/age" ); JSONCopyAsFunction function = new JSONCopyAsFunction( new Fields( "result" ), copySpec ); TupleListCollector result = invokeFunction( function, entry, new Fields( "result" ) ); Object value = result.iterator().next().getObject( 0 ); assertNotNull( value ); assertEquals( "John", ( (ObjectNode) value ).findPath( "firstName" ).textValue() ); assertEquals( 50, ( (ObjectNode) value ).findPath( "age" ).intValue() ); assertEquals( null, ( (ObjectNode) value ).findValue( "ssn" ) ); }
@Test public void testCopyInclude() throws Exception { TupleEntry entry = new TupleEntry( new Fields( "json", JSONCoercibleType.TYPE ), Tuple.size( 1 ) ); entry.setObject( 0, JSONData.nested ); CopySpec copySpec = new CopySpec() .include( "/person/firstName" ) .include( "/person/age" ); JSONCopyAsFunction function = new JSONCopyAsFunction( new Fields( "result" ), copySpec ); TupleListCollector result = invokeFunction( function, entry, new Fields( "result" ) ); Object value = result.iterator().next().getObject( 0 ); assertNotNull( value ); assertEquals( "John", ( (ObjectNode) value ).findPath( "firstName" ).textValue() ); assertEquals( 50, ( (ObjectNode) value ).findPath( "age" ).intValue() ); assertEquals( null, ( (ObjectNode) value ).findValue( "ssn" ) ); }
@Test public void testCopyExclude() throws Exception { TupleEntry entry = new TupleEntry( new Fields( "json", JSONCoercibleType.TYPE ), Tuple.size( 1 ) ); entry.setObject( 0, JSONData.nested ); CopySpec copySpec = new CopySpec() .exclude( "/person/ssn", "/person/children" ); JSONCopyAsFunction function = new JSONCopyAsFunction( new Fields( "result" ), copySpec ); TupleListCollector result = invokeFunction( function, entry, new Fields( "result" ) ); Object value = result.iterator().next().getObject( 0 ); assertNotNull( value ); assertEquals( "John Doe", ( (ObjectNode) value ).findPath( "name" ).textValue() ); assertEquals( 50, ( (ObjectNode) value ).findPath( "age" ).intValue() ); assertEquals( null, ( (ObjectNode) value ).findValue( "ssn" ) ); assertEquals( null, ( (ObjectNode) value ).findValue( "children" ) ); }