@Test public void testBinding() throws Exception { String source = "$x : property"; ConstraintConnectiveDescr result = parser.parse( source ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); assertEquals( ConnectiveType.AND, result.getConnective() ); assertEquals( 1, result.getDescrs().size() ); BindingDescr bind = (BindingDescr) result.getDescrs().get( 0 ); assertEquals( "$x", bind.getVariable() ); assertEquals( "property", bind.getExpression() ); }
@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()); }
@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()); }
protected void visit( final ConstraintConnectiveDescr descr ) { checkResource(descr); for( BaseDescr d : descr.getDescrs() ) { visit(d); } }
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 ); assertEquals( expectedConstraints, ccd.getDescrs().get( 0 ).toString() ); assertEquals(expectedExpr, constraintsAndExpr[1]); assertEquals(expectedExpr, atomicExpr.getRewrittenExpression()); expectedExpr = "((Class)field1.field2).field3"; atomicExpr = new AtomicExprDescr(expr); ccd = new ConstraintConnectiveDescr( ); constraintsAndExpr = dumper.processImplicitConstraints( expr, atomicExpr, ccd, ccd.getDescrs().indexOf( atomicExpr ), null ); assertEquals( expectedConstraints1, ccd.getDescrs().get( 0 ).toString() ); assertEquals( expectedConstraints2, ccd.getDescrs().get( 1 ).toString() ); assertEquals(expectedExpr, constraintsAndExpr[1]); assertEquals(expectedExpr, atomicExpr.getRewrittenExpression()); expectedExpr = "((Class)field1).field2.field3"; atomicExpr = new AtomicExprDescr(expr); ccd = new ConstraintConnectiveDescr( ); constraintsAndExpr = dumper.processImplicitConstraints( expr, atomicExpr, ccd, ccd.getDescrs().indexOf( atomicExpr ), null ); assertEquals( expectedConstraints1, ccd.getDescrs().get( 0 ).toString() ); assertEquals( expectedConstraints2, ccd.getDescrs().get( 1 ).toString() ); assertEquals(expectedExpr, constraintsAndExpr[1]); assertEquals(expectedExpr, atomicExpr.getRewrittenExpression());
protected void visit(final ConstraintConnectiveDescr descr) { for (BaseDescr d : descr.getDescrs()) { visit(d); } visitAnnos(descr); }
@Test public void testDoubleBinding() throws Exception { String source = "$x : x.m( 1, a ) && $y : y[z].foo"; ConstraintConnectiveDescr result = parser.parse( source ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); assertEquals( ConnectiveType.AND, result.getConnective() ); assertEquals( 2, result.getDescrs().size() ); BindingDescr bind = (BindingDescr) result.getDescrs().get( 0 ); assertEquals( "$x", bind.getVariable() ); assertEquals( "x.m( 1, a )", bind.getExpression() ); bind = (BindingDescr) result.getDescrs().get( 1 ); assertEquals( "$y", bind.getVariable() ); assertEquals( "y[z].foo", bind.getExpression() ); }
private boolean isViable() { final DrlExprParser parser = new DrlExprParser( DrlParser.DEFAULT_LANGUAGE_LEVEL ); final ConstraintConnectiveDescr result = parser.parse( expression ); if ( parser.hasErrors() || result == null ) { return false; } try { for ( BaseDescr descr : result.getDescrs() ) { visit( descr ); } } catch ( RuleModelDRLPersistenceImpl.RuleModelUnmarshallingException e ) { return false; } return true; }
@Test public void testSimpleExpression() throws Exception { String source = "a > b"; ConstraintConnectiveDescr result = parser.parse( source ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); assertEquals( ConnectiveType.AND, result.getConnective() ); assertEquals( 1, result.getDescrs().size() ); RelationalExprDescr expr = (RelationalExprDescr) result.getDescrs().get( 0 ); assertEquals( ">", expr.getOperator() ); AtomicExprDescr left = (AtomicExprDescr) expr.getLeft(); AtomicExprDescr right = (AtomicExprDescr) expr.getRight(); assertEquals( "a", left.getExpression() ); assertEquals( "b", right.getExpression() ); }
@Test public void testBindingConstraint() throws Exception { String source = "$x : property > value"; ConstraintConnectiveDescr result = parser.parse( source ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); assertEquals( ConnectiveType.AND, result.getConnective() ); assertEquals( 1, result.getDescrs().size() ); RelationalExprDescr rel = (RelationalExprDescr) result.getDescrs().get( 0 ); assertEquals( ">", rel.getOperator() ); BindingDescr bind = (BindingDescr) rel.getLeft(); assertEquals( "$x", bind.getVariable() ); assertEquals( "property", bind.getExpression() ); AtomicExprDescr right = (AtomicExprDescr) rel.getRight(); assertEquals( "value", right.getExpression() ); }
@Test(timeout = 10000L) public void testNestedExpression() throws Exception { // DROOLS-982 String source = "(((((((((((((((((((((((((((((((((((((((((((((((((( a > b ))))))))))))))))))))))))))))))))))))))))))))))))))"; ConstraintConnectiveDescr result = parser.parse( source ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); assertEquals( ConnectiveType.AND, result.getConnective() ); assertEquals( 1, result.getDescrs().size() ); RelationalExprDescr expr = (RelationalExprDescr) result.getDescrs().get( 0 ); assertEquals( ">", expr.getOperator() ); AtomicExprDescr left = (AtomicExprDescr) expr.getLeft(); AtomicExprDescr right = (AtomicExprDescr) expr.getRight(); assertEquals( "a", left.getExpression() ); assertEquals( "b", right.getExpression() ); } }
result.getConnective() ); assertEquals( 2, result.getDescrs().size() ); ConstraintConnectiveDescr or = (ConstraintConnectiveDescr) result.getDescrs().get( 0 ); assertEquals( ConnectiveType.OR, or.getConnective() ); assertEquals( 2, or.getDescrs().size() ); RelationalExprDescr expr = (RelationalExprDescr) or.getDescrs().get( 0 ); assertEquals( ">", expr.getOperator() ); right.getExpression() ); expr = (RelationalExprDescr) or.getDescrs().get( 1 ); assertEquals( "!=", expr.getOperator() ); right.getExpression() ); expr = (RelationalExprDescr) result.getDescrs().get( 1 ); assertEquals( "==", expr.getOperator() );
result.getConnective() ); assertEquals( 2, result.getDescrs().size() ); RelationalExprDescr rel = (RelationalExprDescr) result.getDescrs().get( 0 ); assertEquals( ">", rel.getOperator() ); right.getExpression() ); rel = (RelationalExprDescr) result.getDescrs().get( 1 ); assertEquals( "<", rel.getOperator() );
@Test public void testAndConnective() throws Exception { String source = "a > b && 10 != 20"; ConstraintConnectiveDescr result = parser.parse( source ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); assertEquals( ConnectiveType.AND, result.getConnective() ); assertEquals( 2, result.getDescrs().size() ); RelationalExprDescr expr = (RelationalExprDescr) result.getDescrs().get( 0 ); assertEquals( ">", expr.getOperator() ); AtomicExprDescr left = (AtomicExprDescr) expr.getLeft(); AtomicExprDescr right = (AtomicExprDescr) expr.getRight(); assertEquals( "a", left.getExpression() ); assertEquals( "b", right.getExpression() ); expr = (RelationalExprDescr) result.getDescrs().get( 1 ); assertEquals( "!=", expr.getOperator() ); left = (AtomicExprDescr) expr.getLeft(); right = (AtomicExprDescr) expr.getRight(); assertEquals( "10", left.getExpression() ); assertEquals( "20", right.getExpression() ); }
result.getConnective() ); assertEquals( 2, result.getDescrs().size() ); ConstraintConnectiveDescr or = (ConstraintConnectiveDescr) result.getDescrs().get( 0 ); assertEquals( ConnectiveType.OR, or.getConnective() ); assertEquals( 2, or.getDescrs().size() ); RelationalExprDescr expr = (RelationalExprDescr) or.getDescrs().get( 0 ); assertEquals( ">", expr.getOperator() ); rightBind.getExpression() ); expr = (RelationalExprDescr) or.getDescrs().get( 1 ); assertEquals( "!=", expr.getOperator() ); rightExpr.getExpression() ); expr = (RelationalExprDescr) result.getDescrs().get( 1 ); assertEquals( "==", expr.getOperator() );