Skip to content

Commit

Permalink
Bug 1121985 - Test scenario: Not working with Java enums
Browse files Browse the repository at this point in the history
  • Loading branch information
Rikkola committed Nov 13, 2014
1 parent a0df4a8 commit 451eebe
Show file tree
Hide file tree
Showing 20 changed files with 58 additions and 97 deletions.
Expand Up @@ -27,7 +27,6 @@

import org.drools.core.base.ClassTypeResolver;
import org.drools.core.impl.InternalKnowledgeBase;
import org.drools.core.impl.KnowledgeBaseImpl;
import org.drools.workbench.models.testscenarios.backend.populators.FactPopulator;
import org.drools.workbench.models.testscenarios.backend.populators.FactPopulatorFactory;
import org.drools.workbench.models.testscenarios.shared.ActivateRuleFlowGroup;
Expand Down Expand Up @@ -86,7 +85,6 @@ public void run( final Scenario scenario ) throws ClassNotFoundException, Illega

final Map<String, Object> populatedData = new HashMap<String, Object>();
final Map<String, Object> globalData = new HashMap<String, Object>();
final ClassLoader classloader = Thread.currentThread().getContextClassLoader();

// This looks safe!
final KieBase kieBase = ksession.getKieBase();
Expand All @@ -97,13 +95,11 @@ public void run( final Scenario scenario ) throws ClassNotFoundException, Illega

this.workingMemoryWrapper = new TestScenarioKSessionWrapper( ksession,
resolver,
classloader,
populatedData,
globalData );
this.factPopulatorFactory = new FactPopulatorFactory( populatedData,
globalData,
resolver,
classloader );
resolver );
this.factPopulator = new FactPopulator( ksession,
populatedData );

Expand Down
Expand Up @@ -45,17 +45,14 @@ public class TestScenarioKSessionWrapper {
private final MethodExecutor methodExecutor;
private final Map<String, Object> populatedData;

private final ClassLoader classLoader;

public TestScenarioKSessionWrapper( KieSession ksession,
final TypeResolver resolver,
final ClassLoader classLoader,
Map<String, Object> populatedData,
Map<String, Object> globalData ) {
this.ksession = ksession;
this.populatedData = populatedData;
this.methodExecutor = new MethodExecutor( populatedData );
this.classLoader = classLoader;

factVerifier = initFactVerifier( resolver,
globalData );
Expand All @@ -65,7 +62,6 @@ private FactVerifier initFactVerifier( TypeResolver resolver,
Map<String, Object> globalData ) {
return new FactVerifier( populatedData,
resolver,
classLoader,
ksession,
globalData );
}
Expand Down
Expand Up @@ -36,15 +36,14 @@ public class EnumFieldPopulator extends FieldPopulator {
public EnumFieldPopulator(Object factObject,
String fieldName,
String fieldValue,
TypeResolver typeResolver,
ClassLoader classLoader) {
TypeResolver typeResolver) {
super( factObject,
fieldName );
this.typeResolver = typeResolver;
this.fieldValue = fieldValue;

this.pconf = new ParserConfiguration();
pconf.setClassLoader( classLoader );
pconf.setClassLoader( typeResolver.getClassLoader() ); // classLoader );
this.pctx = new ParserContext( pconf );
pctx.setStrongTyping( true );
}
Expand Down
Expand Up @@ -29,11 +29,9 @@ class ExistingFactPopulator extends FactPopulatorBase {

public ExistingFactPopulator( Map<String, Object> populatedData,
TypeResolver typeResolver,
ClassLoader classLoader,
FactData fact ) throws ClassNotFoundException {
super( populatedData,
typeResolver,
classLoader,
fact );
}

Expand Down
Expand Up @@ -30,17 +30,14 @@ public class FactAssignmentFieldPopulator

private final Object fact;
private final Collection<FieldPopulator> subFieldPopulators = new ArrayList<FieldPopulator>();
private final ClassLoader classLoader;

public FactAssignmentFieldPopulator(Object factObject,
FactAssignmentField field,
TypeResolver resolver,
ClassLoader classLoader)
TypeResolver resolver)
throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException {
super(factObject,
field.getName());
this.fact = resolver.resolveType(resolver.getFullTypeName(field.getFact().getType())).newInstance();
this.classLoader = classLoader;

initSubFieldPopulators(field,
resolver);
Expand All @@ -50,8 +47,7 @@ private void initSubFieldPopulators(FactAssignmentField field,
TypeResolver resolver)
throws ClassNotFoundException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
FieldPopulatorFactory fieldPopulatorFactory = new FieldPopulatorFactory(fact,
resolver,
classLoader);
resolver);
for (Field subField : field.getFact().getFieldData()) {
try {
subFieldPopulators.add(fieldPopulatorFactory.getFieldPopulator(subField));
Expand Down
Expand Up @@ -31,16 +31,13 @@ abstract class FactPopulatorBase

protected final Map<String, Object> populatedData;
protected final TypeResolver typeResolver;
protected final ClassLoader classLoader;
protected final FactData fact;

public FactPopulatorBase(Map<String, Object> populatedData,
TypeResolver typeResolver,
ClassLoader classLoader,
FactData fact) throws ClassNotFoundException {
this.populatedData = populatedData;
this.typeResolver = typeResolver;
this.classLoader = classLoader;
this.fact = fact;
}

Expand All @@ -52,8 +49,7 @@ protected List<FieldPopulator> getFieldPopulators(Object factObject)
throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException {

FieldPopulatorFactory fieldPopulatorFactory = new FieldPopulatorFactory(factObject,
typeResolver,
classLoader);
typeResolver);

List<FieldPopulator> fieldPopulators = new ArrayList<FieldPopulator>();
for (Field field : fact.getFieldData()) {
Expand Down
Expand Up @@ -26,16 +26,13 @@ public class FactPopulatorFactory {
private Map<String, Object> populatedData;
private Map<String, Object> globalData;
private final TypeResolver typeResolver;
private ClassLoader classLoader;

public FactPopulatorFactory(Map<String, Object> populatedData,
Map<String, Object> globalData,
TypeResolver typeResolver,
ClassLoader classLoader) {
TypeResolver typeResolver) {
this.populatedData = populatedData;
this.globalData = globalData;
this.typeResolver = typeResolver;
this.classLoader = classLoader;
}

public Populator createFactPopulator(FactData fact) throws ClassNotFoundException,
Expand All @@ -45,13 +42,11 @@ public Populator createFactPopulator(FactData fact) throws ClassNotFoundExceptio
return new ExistingFactPopulator(
populatedData,
typeResolver,
classLoader,
fact );
} else {
return new NewFactPopulator(
populatedData,
typeResolver,
classLoader,
fact );
}
}
Expand All @@ -62,7 +57,6 @@ public Populator createGlobalFactPopulator(FactData fact) throws ClassNotFoundEx
return new GlobalFactPopulator(
populatedData,
typeResolver,
classLoader,
fact,
globalData );
}
Expand Down
Expand Up @@ -29,14 +29,11 @@ class FieldPopulatorFactory {

private final Object factObject;
private final TypeResolver typeResolver;
private final ClassLoader classLoader;

public FieldPopulatorFactory(Object factObject,
TypeResolver typeResolver,
ClassLoader classLoader) {
TypeResolver typeResolver) {
this.factObject = factObject;
this.typeResolver = typeResolver;
this.classLoader = classLoader;
}

public FieldPopulator getFieldPopulator(Field field) throws ClassNotFoundException,
Expand All @@ -53,8 +50,7 @@ public FieldPopulator getFieldPopulator(Field field) throws ClassNotFoundExcepti
} else if (field instanceof FactAssignmentField ) {
return new FactAssignmentFieldPopulator(factObject,
(FactAssignmentField) field,
typeResolver,
classLoader);
typeResolver);
} else if (field instanceof CollectionFieldData) {
return new CollectionFieldPopulator(
factObject,
Expand All @@ -80,8 +76,7 @@ private FieldPopulator getFieldDataPopulator(Object factObject,
return new EnumFieldPopulator(factObject,
fieldData.getName(),
fieldData.getValue(),
typeResolver,
classLoader);
typeResolver);
} else if (isDate(fieldData.getName())) {
return new DateFieldPopulator(
factObject,
Expand Down
Expand Up @@ -31,14 +31,12 @@ class GlobalFactPopulator extends FactPopulatorBase {

public GlobalFactPopulator( Map<String, Object> populatedData,
TypeResolver typeResolver,
ClassLoader classLoader,
FactData fact,
Map<String, Object> globalData ) throws ClassNotFoundException,
InstantiationException,
IllegalAccessException {
super( populatedData,
typeResolver,
classLoader,
fact );

factObject = resolveFactObject();
Expand Down
Expand Up @@ -32,13 +32,11 @@ class NewFactPopulator extends FactPopulatorBase {
public NewFactPopulator(
Map<String, Object> populatedData,
TypeResolver typeResolver,
ClassLoader classLoader,
FactData fact ) throws ClassNotFoundException,
InstantiationException,
IllegalAccessException {
super( populatedData,
typeResolver,
classLoader,
fact );
factObject = resolveFactObject();
}
Expand Down
Expand Up @@ -49,15 +49,14 @@ public class FactFieldValueVerifier {
public FactFieldValueVerifier(Map<String, Object> populatedData,
String factName,
Object factObject,
final TypeResolver resolver,
final ClassLoader classLoader) {
final TypeResolver resolver) {
this.populatedData = populatedData;
this.factName = factName;
this.factObject = factObject;
this.resolver = resolver;

this.pconf = new ParserConfiguration();
pconf.setClassLoader(classLoader);
pconf.setClassLoader(resolver.getClassLoader());
this.pctx = new ParserContext(pconf);
pctx.setStrongTyping(true);
}
Expand Down
Expand Up @@ -30,16 +30,13 @@ public class FactVerifier {
private final TypeResolver resolver;
private final KieSession ksession;
private final Map<String, Object> globalData;
private final ClassLoader classLoader;

public FactVerifier( Map<String, Object> populatedData,
TypeResolver resolver,
ClassLoader classLoader,
KieSession ksession,
Map<String, Object> globalData ) {
this.populatedData = populatedData;
this.resolver = resolver;
this.classLoader = classLoader;
this.ksession = ksession;
this.globalData = globalData;
}
Expand All @@ -62,8 +59,7 @@ public void verify( VerifyFact verifyFact ) throws InvocationTargetException,
verifyFact.getName(),
populatedData,
globalData ),
resolver,
classLoader );
resolver );
fieldVerifier.checkFields( verifyFact.getFieldValues() );
} else {
for ( Object object : ksession.getObjects() ) {
Expand Down Expand Up @@ -94,8 +90,7 @@ private boolean verifyFact( Object factObject,
FactFieldValueVerifier fieldVerifier = new FactFieldValueVerifier( populatedData,
verifyFact.getName(),
factObject,
resolver,
classLoader );
resolver );
fieldVerifier.checkFields( verifyFact.getFieldValues() );
if ( verifyFact.wasSuccessful() ) {
return true;
Expand Down
Expand Up @@ -290,6 +290,30 @@ public void testVerifyFactsWithEnum() throws Exception {
assertTrue(field.getSuccessResult());
}
}
@Test
public void testVerifyFactsWithEnumWildCardImport() throws Exception {

FieldData cheeseType = new FieldData(
"cheeseType",
"CheeseType.CHEDDAR"
);
cheeseType.setNature(FieldData.TYPE_ENUM);
FactData f1 = new FactData(
"Cheese",
"f1",
Arrays.<Field>asList(cheeseType),
false
);

Scenario scenario = new Scenario();
scenario.setPackageName("org.drools.workbench.models.testscenarios.backend");
scenario.getFixtures().add(f1);

ScenarioRunner runner = new ScenarioRunner(ksession);

runner.run(scenario);

}

@Test
public void testTestingEventListener() throws Exception {
Expand Down
Expand Up @@ -43,7 +43,7 @@ public void testFactAssignmentField() throws Exception {

FactAssignmentField factAssignmentField = new FactAssignmentField("cheese", "Cheese");

FactAssignmentFieldPopulator factAssignmentFieldPopulator = new FactAssignmentFieldPopulator(mouse, factAssignmentField, typeResolver, classLoader);
FactAssignmentFieldPopulator factAssignmentFieldPopulator = new FactAssignmentFieldPopulator(mouse, factAssignmentField, typeResolver);

factAssignmentFieldPopulator.populate(new HashMap<String, Object>());

Expand All @@ -61,7 +61,7 @@ public void testSimpleFields() throws Exception {
FactAssignmentField factAssignmentField = new FactAssignmentField("cheese", "Cheese");
factAssignmentField.getFact().getFieldData().add(new FieldData("type", "Best cheddar EVER! (tm)"));

FactAssignmentFieldPopulator factAssignmentFieldPopulator = new FactAssignmentFieldPopulator(mouse, factAssignmentField, typeResolver, classLoader);
FactAssignmentFieldPopulator factAssignmentFieldPopulator = new FactAssignmentFieldPopulator(mouse, factAssignmentField, typeResolver);

factAssignmentFieldPopulator.populate(new HashMap<String, Object>());

Expand All @@ -79,7 +79,7 @@ public void testMatryoshkaDollSituation() throws Exception {
FactAssignmentField factAssignmentField = createFactAssignmentField();
addFactAssignmentFieldIntoFactAssignmentField(factAssignmentField, 5);

FactAssignmentFieldPopulator factAssignmentFieldPopulator = new FactAssignmentFieldPopulator(matryoshkaDoll, factAssignmentField, typeResolver, classLoader);
FactAssignmentFieldPopulator factAssignmentFieldPopulator = new FactAssignmentFieldPopulator(matryoshkaDoll, factAssignmentField, typeResolver);

factAssignmentFieldPopulator.populate(new HashMap<String, Object>());

Expand Down

0 comments on commit 451eebe

Please sign in to comment.