/** * Copyright 2010 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.drools.guvnor.client.qa.testscenarios; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.drools.ide.common.client.modeldriven.testing.CallFixtureMap; import org.drools.ide.common.client.modeldriven.testing.CallMethod; import org.drools.ide.common.client.modeldriven.testing.ExecutionTrace; import org.drools.ide.common.client.modeldriven.testing.FactData; import org.drools.ide.common.client.modeldriven.testing.FieldData; import org.drools.ide.common.client.modeldriven.testing.Fixture; import org.drools.ide.common.client.modeldriven.testing.FixtureList; import org.drools.ide.common.client.modeldriven.testing.RetractFact; import org.drools.ide.common.client.modeldriven.testing.VerifyFact; import org.drools.ide.common.client.modeldriven.testing.VerifyRuleFired; import org.junit.Test; public class ScenarioHelperTest { //need to get out chunks, so we get data (insert, update, retract) //then callMethodData //then execute //then expectations //then data //then execute //want it in chunks @SuppressWarnings("unchecked") @Test public void testChunks() { List l = new ArrayList(); l.add(new FactData("Q", "x", new ArrayList(), false)); l.add(new FactData("Q", "y", new ArrayList(), false)); l.add(new FactData("X", "a", new ArrayList(), false)); l.add(new FactData("X", "b", new ArrayList(), false)); l.add(new CallMethod("x","hello")); l.add(new CallMethod("x","helloItherWay")); l.add(new CallMethod("v","helloAgain")); ExecutionTrace ex1 = new ExecutionTrace(); l.add(ex1); l.add(new FactData("Z", "z", new ArrayList(), false)); l.add(new FactData("Q", "x", new ArrayList(), true)); l.add(new FactData("Q", "y", new ArrayList(), true)); l.add(new RetractFact("y")); l.add(new CallMethod("x","hello")); VerifyFact vf1 = new VerifyFact(); VerifyFact vf2 = new VerifyFact(); VerifyRuleFired vr1 = new VerifyRuleFired(); VerifyRuleFired vr2 = new VerifyRuleFired(); l.add(vf1); l.add(vf2); l.add(vr1); l.add(vr2); ExecutionTrace ex2 = new ExecutionTrace(); l.add(ex2); VerifyFact vf3 = new VerifyFact(); l.add(vf3); ScenarioHelper hlp = new ScenarioHelper(); List fx = hlp.lumpyMap(l); assertEquals(9, fx.size()); Map first = (Map) fx.get(0); assertEquals(2, first.size()); List fdl = (List) first.get("Q"); assertEquals(2, fdl.size()); FactData fd = (FactData) fdl.get(0); assertEquals("x", fd.name); fd = (FactData) fdl.get(1); assertEquals("y", fd.name); fdl = (List) first.get("X"); assertEquals(2, fdl.size()); fd = (FactData) fdl.get(0); assertEquals("a", fd.name); CallFixtureMap callMap = (CallFixtureMap)fx.get(1); assertEquals(2, callMap.size()); assertTrue(callMap.containsKey("x")); FixtureList lcall1 = callMap.get("x"); CallMethod c1 = (CallMethod)lcall1.get(0); assertTrue(c1.variable.equals("x")); assertTrue(c1.methodName.equals("hello")); CallMethod c2 = (CallMethod)lcall1.get(1); assertTrue(c2.variable.equals("x")); assertTrue(c2.methodName.equals("helloItherWay")); assertTrue(callMap.containsKey("v")); FixtureList lcall2 = callMap.get("v"); CallMethod c3= (CallMethod)lcall2.get(0); assertTrue(c3.variable.equals("v")); assertTrue(c3.methodName.equals("helloAgain")); assertEquals(ex1, fx.get(2)); List ruleFired = (List) fx.get(3); assertEquals(2, ruleFired.size()); assertEquals(vr1, ruleFired.get(0)); assertEquals(vr2, ruleFired.get(1)); List verifyFact = (List) fx.get(4); assertEquals(2, verifyFact.size()); assertEquals(vf1, verifyFact.get(0)); assertEquals(vf2, verifyFact.get(1)); Map second = (Map) fx.get(5); assertEquals(3, second.size()); assertTrue(second.containsKey("Z")); assertTrue(second.containsKey("Q")); fdl = (List) second.get("Q"); assertEquals(2, fdl.size()); assertTrue(second.containsKey("retract")); List retracts = (List) second.get("retract"); assertEquals(1, retracts.size()); RetractFact ret = (RetractFact) retracts.get(0); assertEquals("y", ret.name); CallFixtureMap third = (CallFixtureMap)fx.get(6); assertEquals(1, third.size()); assertTrue(third.containsKey("x")); FixtureList lcall3 = third.get("x"); CallMethod c4= (CallMethod)lcall3.get(0); assertTrue(c4.variable.equals("x")); assertTrue(c4.methodName.equals("hello")); assertEquals(ex2, fx.get(7)); List last = (List) fx.get(8); assertEquals(1, last.size()); assertEquals(vf3, last.get(0)); } @SuppressWarnings("unchecked") @Test public void testGlobals() { List l = new ArrayList(); l.add(new FactData("X", "d", new ArrayList(), true)); l.add(new FactData("X", "c", new ArrayList(), true)); l.add(new FactData("Q", "a", new ArrayList(), true)); l.add(new FactData("Q", "b", new ArrayList(), true)); ScenarioHelper hlp = new ScenarioHelper(); Map m = hlp.lumpyMapGlobals(l); assertEquals(2, m.size()); List fd = (List) m.get("X"); assertEquals(2, fd.size()); assertEquals("d", ((FactData)fd.get(0)).name); assertEquals("c", ((FactData)fd.get(1)).name); fd = (List) m.get("Q"); assertEquals(2, fd.size()); assertEquals("a", ((FactData)fd.get(0)).name); assertEquals("b", ((FactData)fd.get(1)).name); } @SuppressWarnings("unchecked") @Test public void testRemoveField() { List fieldData = new ArrayList(); fieldData.add(new FieldData("q", "1")); fieldData.add(new FieldData("w", "2")); FactData fd = new FactData("X", "x", fieldData, false); List fieldData2 = new ArrayList(); fieldData2.add(new FieldData("q", "3")); fieldData2.add(new FieldData("w", "4")); fieldData2.add(new FieldData("x", "5")); FactData fd2 = new FactData("X", "x", fieldData2, false); List factData = new ArrayList(); factData.add(fd); factData.add(fd2); ScenarioHelper.removeFields(factData, "q"); assertEquals(2, factData.size()); assertEquals(1, fieldData.size()); assertEquals("w", ((FieldData)fieldData.get(0)).name); assertEquals(2, fieldData2.size()); assertEquals("w", ((FieldData)fieldData2.get(0)).name); } @SuppressWarnings("unchecked") @Test public void testEmptyMap() { //this should check that there is always a map present to force the GUI to show a "GIVEN" section. List<Fixture> fl = new ArrayList<Fixture>(); fl.add(new FactData()); fl.add(new ExecutionTrace()); fl.add(new ExecutionTrace()); ScenarioHelper hlp = new ScenarioHelper(); List r = hlp.lumpyMap(fl); assertEquals(6, r.size()); assertTrue(r.get(0) instanceof Map); assertTrue(r.get(1) instanceof Map); assertTrue(r.get(2) instanceof ExecutionTrace); assertTrue(r.get(3) instanceof Map); assertTrue(r.get(4) instanceof Map); assertTrue(r.get(5) instanceof ExecutionTrace); Map r_ = (Map) r.get(3); assertEquals(0, r_.size()); r_ = (Map) r.get(4); assertEquals(0, r_.size()); r_ = (Map) r.get(0); assertEquals(1, r_.size()); r_ = (Map) r.get(1); assertEquals(0, r_.size()); } }