@Test public void testProcessNullSafeDereferencing() throws Exception { String expr = "field1!.field2"; String expectedNullCheck = "field1 != null"; String expectedExpr = "field1.field2"; AtomicExprDescr atomicExpr = new AtomicExprDescr(expr); ConstraintConnectiveDescr ccd = new ConstraintConnectiveDescr( ); String[] nullCheckAndExpr = dumper.processImplicitConstraints( expr, atomicExpr, ccd, ccd.getDescrs().indexOf( atomicExpr ), null ); assertEquals( expectedNullCheck, ccd.getDescrs().get( 0 ).toString() ); assertEquals(expectedExpr, nullCheckAndExpr[1]); assertEquals(expectedExpr, atomicExpr.getRewrittenExpression()); expr = "field1!.field2!.field3"; String expectedNullCheck1 = "field1 != null"; String expectedNullCheck2 = "field1.field2 != null"; expectedExpr = "field1.field2.field3"; atomicExpr = new AtomicExprDescr(expr); ccd = new ConstraintConnectiveDescr( ); nullCheckAndExpr = dumper.processImplicitConstraints( expr, atomicExpr, ccd, ccd.getDescrs().indexOf( atomicExpr ), null ); assertEquals( expectedNullCheck1, ccd.getDescrs().get( 0 ).toString() ); assertEquals( expectedNullCheck2, ccd.getDescrs().get( 1 ).toString() ); assertEquals(expectedExpr, nullCheckAndExpr[1]); assertEquals(expectedExpr, atomicExpr.getRewrittenExpression()); }
@Test public void testProcessInlineCast() throws Exception { String expr = "field1#Class.field2"; String expectedInstanceof = "field1 instanceof Class"; String expectedcasted = "((Class)field1).field2"; AtomicExprDescr atomicExpr = new AtomicExprDescr(expr); ConstraintConnectiveDescr ccd = new ConstraintConnectiveDescr( ); ccd.addDescr( atomicExpr ); String[] instanceofAndCastedExpr = dumper.processImplicitConstraints(expr, atomicExpr, ccd, ccd.getDescrs().indexOf( atomicExpr ), null); assertEquals( 2, ccd.getDescrs().size() ); assertEquals( expectedInstanceof, ccd.getDescrs().get( 0 ).toString() ); assertEquals(expectedcasted, atomicExpr.getRewrittenExpression()); expr = "field1#Class1.field2#Class2.field3"; String expectedInstanceof1 = "field1 instanceof Class1"; String expectedInstanceof2 = "((Class1)field1).field2 instanceof Class2"; expectedcasted = "((Class2)((Class1)field1).field2).field3"; atomicExpr = new AtomicExprDescr(expr); ccd = new ConstraintConnectiveDescr( ); instanceofAndCastedExpr = dumper.processImplicitConstraints(expr, atomicExpr, ccd, ccd.getDescrs().indexOf( atomicExpr ), null); assertEquals( expectedInstanceof1, ccd.getDescrs().get( 0 ).toString() ); assertEquals( expectedInstanceof2, ccd.getDescrs().get( 1 ).toString() ); assertEquals(expectedcasted, instanceofAndCastedExpr[1]); assertEquals(expectedcasted, atomicExpr.getRewrittenExpression()); }
String expectedConstraints = "field1 instanceof Class"; String expectedExpr = "((Class)field1).field2"; AtomicExprDescr atomicExpr = new AtomicExprDescr(expr); ConstraintConnectiveDescr ccd = new ConstraintConnectiveDescr( ); String[] constraintsAndExpr = dumper.processImplicitConstraints( expr, atomicExpr, ccd, ccd.getDescrs().indexOf( atomicExpr ), null ); String expectedConstraints2 = "field1.field2 instanceof Class"; expectedExpr = "((Class)field1.field2).field3"; atomicExpr = new AtomicExprDescr(expr); ccd = new ConstraintConnectiveDescr( ); constraintsAndExpr = dumper.processImplicitConstraints( expr, atomicExpr, ccd, ccd.getDescrs().indexOf( atomicExpr ), null ); expectedConstraints2 = "((Class)field1).field2 != null"; expectedExpr = "((Class)field1).field2.field3"; atomicExpr = new AtomicExprDescr(expr); ccd = new ConstraintConnectiveDescr( ); constraintsAndExpr = dumper.processImplicitConstraints( expr, atomicExpr, ccd, ccd.getDescrs().indexOf( atomicExpr ), null );