private String getFailingExplanation() { if (currentField.getOperator().equals("==")) { return "[" + factName + "] field [" + currentField.getFieldName() + "] was [" + currentField.getActualResult() + "] expected [" + currentField.getExpected() + "]."; } else { return "[" + factName + "] field [" + currentField.getFieldName() + "] was not expected to be [" + currentField.getActualResult() + "]."; } } }
protected boolean fieldExpectationFailed(VerifyField verifyField) { return verifyField.getSuccessResult() != null && !verifyField.getSuccessResult(); }
private Object getExpectedResult() { Object expectedResult = currentField.getExpected().trim(); if ( currentField.getExpected().startsWith( "=" ) ) { expectedResult = eval( currentField.getExpected().substring( 1 ), this.populatedData ); } else if (currentField.getNature() == VerifyField.TYPE_ENUM) { try { // The string representation of enum value is using a // format like CheeseType.CHEDDAR String classNameOfEnum = currentField.getExpected().substring(0, currentField.getExpected().indexOf(".")); String valueOfEnum = currentField.getExpected().substring(currentField.getExpected() .indexOf(".") + 1); String fullName = resolver.getFullTypeName(classNameOfEnum); expectedResult = eval(fullName + "." + valueOfEnum); } catch (ClassNotFoundException e) { //Do nothing. } } return expectedResult; }
public VerifyField(String fieldName, String expected, String operator) { this.setFieldName( fieldName ); this.setExpected( expected ); this.setOperator( operator ); }
private String getSuccessfulExplanation() { if (currentField.getOperator().equals("==")) { return "[" + factName + "] field [" + currentField.getFieldName() + "] was [" + currentField.getExpected() + "]."; } else if (currentField.getOperator().equals("!=")) { return "[" + factName + "] field [" + currentField.getFieldName() + "] was not [" + currentField.getExpected() + "]."; } return ""; }
public void checkFields(List<VerifyField> fieldValues) { Iterator<VerifyField> fields = fieldValues.iterator(); while ( fields.hasNext() ) { this.currentField = fields.next(); if ( currentField.getExpected() != null ) { ResultVerifier resultVerifier = new ResultVerifier( factObject ); resultVerifier.setExpected( getExpectedResult() ); currentField.setSuccessResult( resultVerifier.isSuccess( currentField ) ); if ( !currentField.getSuccessResult() ) { currentField.setActualResult( resultVerifier.getActual( currentField ) ); currentField.setExplanation( getFailingExplanation() ); } else { currentField.setExplanation( getSuccesfulExplanation() ); } } } }
VerifyField vfl = new VerifyField("age", "42", "=="); vfl.setActualResult("43"); vfl.setSuccessResult(new Boolean(false)); vfl.setExplanation("Not cool jimmy."); vfl = new VerifyField("name", "michael", "!="); vfl.setActualResult("bob"); vfl.setSuccessResult(new Boolean(true)); vfl.setExplanation("Yeah !"); fields.add(vfl);
@Test public void testIntegrationWithFailure() throws Exception { Scenario sc = new Scenario(); Expectation[] assertions = populateScenarioForFailure(sc); TypeResolver resolver = new ClassTypeResolver(new HashSet<String>(), Thread.currentThread().getContextClassLoader()); resolver.addImport("org.drools.Cheese"); resolver.addImport("org.drools.Person"); WorkingMemory wm = getWorkingMemory("test_rules2.drl"); ScenarioRunner run = new ScenarioRunner( resolver, getClassLoader(), (InternalWorkingMemory) wm); run.run(sc); assertFalse(sc.wasSuccessful()); VerifyFact vf = (VerifyFact) assertions[1]; assertFalse((vf.getFieldValues().get(0)).getSuccessResult()); assertEquals("XXX", vf.getFieldValues().get(0).getExpected()); assertEquals("rule1", vf.getFieldValues().get(0).getActualResult()); assertNotNull(vf.getFieldValues().get(0).getExplanation()); VerifyRuleFired vr = (VerifyRuleFired) assertions[4]; assertFalse(vr.getSuccessResult()); assertEquals(2, vr.getExpectedCount().intValue()); assertEquals(0, vr.getActualResult().intValue()); }
verifyCheddar.setFieldValues( asList( new VerifyField( "type", "cheddar", "=="), new VerifyField( "price", "42", michaelVerifyFact.setFieldValues( asList( new VerifyField( "name", "michael", "=="), new VerifyField( "age", "33", markVerifyFact.setFieldValues( asList( new VerifyField( "name", "mark", "=="), new VerifyField( "age", "33",
@Test public void testVerifyFieldAndActualIsNull() throws Exception { Cheese f1 = new Cheese(); f1.setType(null); TypeResolver typeResolver = mock(TypeResolver.class); ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); HashMap<String, Object> populatedData = new HashMap<String, Object>(); populatedData.put("f1", f1); workingMemory.facts.add(f1); FactVerifier factVerifier = new FactVerifier(populatedData, typeResolver, classLoader, workingMemory, new HashMap<String, Object>()); VerifyFact vf = new VerifyFact(); vf.setName("f1"); vf.getFieldValues().add(new VerifyField("type", "boo", "==")); factVerifier.verify(vf); VerifyField vfl = vf.getFieldValues().get(0); assertEquals("[f1] field [type] was [] expected [boo].", vfl.getExplanation()); assertEquals("boo", vfl.getExpected()); assertEquals("", vfl.getActualResult()); }
private Object getExpectedResult() throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { Object expectedResult = currentField.getExpected().trim(); if (currentField.getExpected().startsWith("=")) { expectedResult = eval(currentField.getExpected().substring(1), this.populatedData); } else if (currentField.getNature() == VerifyField.TYPE_ENUM) { try { // The string representation of enum value is using a // format like CheeseType.CHEDDAR String classNameOfEnum = currentField.getExpected().substring(0, currentField.getExpected().indexOf(".")); String valueOfEnum = currentField.getExpected().substring(currentField.getExpected().indexOf(".") + 1); String fullName = resolver.getFullTypeName(classNameOfEnum); if (fullName != null && !"".equals(fullName)) { valueOfEnum = fullName + "." + valueOfEnum; } Serializable compiled = MVEL.compileExpression(valueOfEnum, pctx); expectedResult = MVEL.executeExpression(compiled); } catch (ClassNotFoundException e) { //Do nothing. } } else if (isFieldDate()) { return DateObjectFactory.createTimeObject(FieldTypeResolver.getFieldType(currentField.getFieldName(), factObject), currentField.getExpected()); } return expectedResult; }
protected Boolean isSuccess(VerifyField currentField) { String s = "__fact__." + currentField.getFieldName() + " " + currentField.getOperator() + " __expected__"; CompiledExpression expression = new ExpressionCompiler(s).compile(parserContext); return (Boolean) MVEL.executeExpression(expression, variables); }
public void testSQLDate() throws Exception { SqlDateWrapper sqlDateWrapper = new SqlDateWrapper(); sqlDateWrapper.setSqlDate(new Date(2012 - 1900, 11, 12)); HashMap<String, Object> populatedData = new HashMap<String, Object>(); populatedData.put("sqlDateWrapper", sqlDateWrapper); TypeResolver typeResolver = mock(TypeResolver.class); FactFieldValueVerifier verifier = new FactFieldValueVerifier( populatedData, "sqlDateWrapper", sqlDateWrapper, typeResolver, Thread.currentThread().getContextClassLoader()); List<VerifyField> fieldValues = new ArrayList<VerifyField>(); VerifyField verifyField = new VerifyField("sqlDate", "12-DEC-2012", "=="); fieldValues.add(verifyField); verifier.checkFields(fieldValues); assertTrue(verifyField.getSuccessResult()); } }
VerifyField verifyField = new VerifyField( "cheeseType", "CheeseType.CHEDDAR", "=="); verifyField.setNature(VerifyField.TYPE_ENUM); vf.setFieldValues(ls(verifyField)); scenario.getFixtures().add(vf); assertTrue(field.getSuccessResult());
@Test public void testCountSuccessFailures() { Scenario sc = new Scenario(); sc.getFixtures().add( new FactData() ); sc.getFixtures().add( new ExecutionTrace() ); VerifyRuleFired vr = new VerifyRuleFired(); vr.setSuccessResult( false ); sc.getFixtures().add( vr ); VerifyField vf = new VerifyField(); vf.setSuccessResult( true ); VerifyField vf2 = new VerifyField(); vf2.setSuccessResult( false ); VerifyFact vfact = new VerifyFact(); vfact.getFieldValues().add( vf ); vfact.getFieldValues().add( vf2 ); sc.getFixtures().add( vfact ); int[] totals = sc.countFailuresTotal(); assertEquals( 2, totals[0] ); assertEquals( 3, totals[1] ); }
private boolean isFieldDate() { return FieldTypeResolver.isDate(currentField.getFieldName(), factObject); }
public void checkFields(List<VerifyField> fieldValues) { Iterator<VerifyField> fields = fieldValues.iterator(); while ( fields.hasNext() ) { this.currentField = fields.next(); if ( currentField.getExpected() != null ) { ResultVerifier resultVerifier = new ResultVerifier( factObject ); resultVerifier.setExpected( getExpectedResult() ); currentField.setSuccessResult( resultVerifier.isSuccess( currentField ) ); if ( !currentField.getSuccessResult() ) { currentField.setActualResult( resultVerifier.getActual( currentField ) ); currentField.setExplanation( getFailingExplanation() ); } else { currentField.setExplanation( getSuccesfulExplanation() ); } } } }
private String getSuccesfulExplanation() { if ( currentField.getOperator().equals( "==" ) ) { return "[" + factName + "] field [" + currentField.getFieldName() + "] was [" + currentField.getExpected() + "]."; } else if ( currentField.getOperator().equals( "!=" ) ) { return "[" + factName + "] field [" + currentField.getFieldName() + "] was not [" + currentField.getExpected() + "]."; } return ""; }
private Object getExpectedResult() throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { Object expectedResult = currentField.getExpected().trim(); if (currentField.getExpected().startsWith("=")) { expectedResult = eval(currentField.getExpected().substring(1), this.populatedData); } else if (currentField.getNature() == VerifyField.TYPE_ENUM) { try { // The string representation of enum value is using a // format like CheeseType.CHEDDAR String classNameOfEnum = currentField.getExpected().substring(0, currentField.getExpected().indexOf(".")); String valueOfEnum = currentField.getExpected().substring(currentField.getExpected().indexOf(".") + 1); String fullName = resolver.getFullTypeName(classNameOfEnum); if (fullName != null && !"".equals(fullName)) { valueOfEnum = fullName + "." + valueOfEnum; } Serializable compiled = MVEL.compileExpression(valueOfEnum, pctx); expectedResult = MVEL.executeExpression(compiled); } catch (ClassNotFoundException e) { //Do nothing. } } else if (isFieldDate()) { return DateObjectFactory.createTimeObject(FieldTypeResolver.getFieldType(currentField.getFieldName(), factObject), currentField.getExpected()); } return expectedResult; }
public VerifyField(String fieldName, String expected, String operator) { this.setFieldName( fieldName ); this.setExpected( expected ); this.setOperator( operator ); }