// Module : $RCSfile: EventGenerationRuleTest.java,v $ // Version : $Revision: 0.0 $ $Author: pharms $ $Date: 23.08.2012 $ // Project : quest-plugin-mfc-test // Creation : 2012 by pharms // Copyright : Patrick Harms, 2012 package de.ugoe.cs.quest.plugin.mfc; import static org.junit.Assert.*; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.Namespace; import org.jdom.input.SAXBuilder; import org.junit.Test; import de.ugoe.cs.quest.plugin.mfc.EventGenerationRule.Term; import de.ugoe.cs.quest.plugin.mfc.eventcore.WindowsMessageType; import de.ugoe.cs.util.console.Console; /** *

* TODO comment *

* * @version $Revision: $ $Date: 23.08.2012$ * @author 2012, last modified by $Author: pharms$ */ public class EventGenerationRuleTest { /** * */ Namespace rulesNamespace = null; /** *

* TODO: comment *

*/ @Test public void testRule1() { String ruleXML = "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + ""; Element ruleElement = getRuleElement(ruleXML); EventGenerationRule rule = new EventGenerationRule(ruleElement, rulesNamespace); assertEquals("LeftClickButton", rule.getName()); assertNotNull(rule.getMessageConditions()); assertEquals(2, rule.getMessageConditions().size()); // check condition 1 EventGenerationRule.MessageCondition condition1 = rule.getMessageConditions().get(0); assertEquals(WindowsMessageType.WM_LBUTTONDOWN, condition1.getMessageType()); assertFalse(condition1.matchMultiple()); assertNotNull(condition1.getAttributeConditions()); assertEquals(0, condition1.getAttributeConditions().size()); assertNotNull(condition1.getMessagesToStore()); assertEquals(1, condition1.getMessagesToStore().size()); assertTerm(condition1.getMessagesToStore().get(0), "store", "clicked", null, null, null, null, null, null, null, null); // check condition 2 EventGenerationRule.MessageCondition condition2 = rule.getMessageConditions().get(1); assertEquals(WindowsMessageType.WM_LBUTTONUP, condition2.getMessageType()); assertFalse(condition2.matchMultiple()); assertNotNull(condition2.getAttributeConditions()); assertEquals(2, condition2.getAttributeConditions().size()); assertNotNull(condition2.getMessagesToStore()); assertEquals(0, condition2.getMessagesToStore().size()); EventGenerationRule.AttributeCondition attrCond1 = condition2.getAttributeConditions().get(0); assertTerm(attrCond1.getLeftHandSide(), "constValue", null, null, null, null, null, null, null, "Button", null); assertTerm(attrCond1.getRightHandSide(), "winInfoValue", "this", null, null, null, null, null, null, null, "class"); EventGenerationRule.AttributeCondition attrCond2 = condition2.getAttributeConditions().get(1); assertTerm(attrCond2.getLeftHandSide(), "paramValue", "clicked", null, "window.hwnd", null, null, null, null, null, null); assertTerm(attrCond2.getRightHandSide(), "paramValue", "this", null, "window.hwnd", null, null, null, null, null, null); // check event parameters assertNotNull(rule.getEventParameters()); assertEquals(0, rule.getEventParameters().size()); // check replay specs assertNotNull(rule.getReplayMessageSpecifications()); assertEquals(1, rule.getReplayMessageSpecifications().size()); // check replay spec 1 EventGenerationRule.ReplayMessageSpec replaySpec = rule.getReplayMessageSpecifications().get(0); assertNotNull(replaySpec); assertEquals(500, replaySpec.getDelay()); assertTrue(replaySpec.generateSingleMessage()); assertNull(replaySpec.getLparam()); assertNull(replaySpec.getLparamHiWord()); assertNull(replaySpec.getLparamLoWord()); assertNull(replaySpec.getReplayObjectId()); assertTerm(replaySpec.getTarget(), "msgInfoValue", "clicked", "target", null, null, null, null, null, null, null); assertTerm(replaySpec.getType(), "constValue", null, null, null, null, null, null, null, "" + WindowsMessageType.BM_CLICK.getNumber(), null); assertNull(replaySpec.getWparam()); assertNull(replaySpec.getWparamHiWord()); assertNull(replaySpec.getWparamLoWord()); } /** *

* TODO: comment *

*/ @Test public void testRule2() { String ruleXML = "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; Element ruleElement = getRuleElement(ruleXML); EventGenerationRule rule = new EventGenerationRule(ruleElement, rulesNamespace); assertEquals("HScroll_TrackBar", rule.getName()); assertNotNull(rule.getMessageConditions()); assertEquals(3, rule.getMessageConditions().size()); // check condition 1 EventGenerationRule.MessageCondition condition1 = rule.getMessageConditions().get(0); assertEquals(WindowsMessageType.WM_LBUTTONDOWN, condition1.getMessageType()); assertFalse(condition1.matchMultiple()); assertNotNull(condition1.getAttributeConditions()); assertEquals(1, condition1.getAttributeConditions().size()); EventGenerationRule.AttributeCondition attrCond1 = condition1.getAttributeConditions().get(0); assertTerm(attrCond1.getLeftHandSide(), "winInfoValue", "this", null, null, null, null, null, null, null, "class"); assertTerm(attrCond1.getRightHandSide(), "constValue", null, null, null, null, null, null, null, "msctls_trackbar32", null); assertNotNull(condition1.getMessagesToStore()); assertEquals(1, condition1.getMessagesToStore().size()); assertTerm(condition1.getMessagesToStore().get(0), "store", "clicked", null, null, null, null, null, null, null, null); // check condition 2 EventGenerationRule.MessageCondition condition2 = rule.getMessageConditions().get(1); assertEquals(WindowsMessageType.WM_HSCROLL, condition2.getMessageType()); assertTrue(condition2.matchMultiple()); assertNotNull(condition2.getAttributeConditions()); assertEquals(1, condition2.getAttributeConditions().size()); EventGenerationRule.AttributeCondition attrCond2 = condition2.getAttributeConditions().get(0); assertTerm(attrCond2.getLeftHandSide(), "paramValue", "this", null, "scrollBarHandle", null, null, null, null, null, null); assertTerm(attrCond2.getRightHandSide(), "paramValue", "clicked", null, "window.hwnd", null, null, null, null, null, null); assertNotNull(condition2.getMessagesToStore()); assertEquals(1, condition2.getMessagesToStore().size()); String[][] resolveHwnd = { { "scrollBarHandle", "scrollBarTarget" } }; assertTerm(condition2.getMessagesToStore().get(0), "storeSeq", null, null, null, resolveHwnd, "scrolls", null, null, null, null); // check condition 3 EventGenerationRule.MessageCondition condition3 = rule.getMessageConditions().get(2); assertEquals(WindowsMessageType.WM_LBUTTONUP, condition3.getMessageType()); assertFalse(condition3.matchMultiple()); assertNotNull(condition3.getAttributeConditions()); assertEquals(1, condition3.getAttributeConditions().size()); assertNotNull(condition3.getMessagesToStore()); assertEquals(0, condition3.getMessagesToStore().size()); EventGenerationRule.AttributeCondition attrCond3 = condition3.getAttributeConditions().get(0); assertTerm(attrCond3.getLeftHandSide(), "paramValue", "this", null, "window.hwnd", null, null, null, null, null, null); assertTerm(attrCond3.getRightHandSide(), "paramValue", "clicked", null, "window.hwnd", null, null, null, null, null, null); // check event parameters assertNotNull(rule.getEventParameters()); assertEquals(0, rule.getEventParameters().size()); // check replay specs assertNotNull(rule.getReplayMessageSpecifications()); assertEquals(1, rule.getReplayMessageSpecifications().size()); // check replay spec 1 EventGenerationRule.ReplayMessageSpec replaySpec = rule.getReplayMessageSpecifications().get(0); assertNotNull(replaySpec); assertEquals(50, replaySpec.getDelay()); assertFalse(replaySpec.generateSingleMessage()); assertTerm(replaySpec.getLparam(), "seqValue", null, null, null, null, "scrolls", "scrollPos", null, null, null); assertNull(replaySpec.getLparamHiWord()); assertNull(replaySpec.getLparamLoWord()); assertEquals("scrolls", replaySpec.getReplayObjectId()); assertTerm(replaySpec.getTarget(), "seqValue", null, null, null, null, "scrolls", "scrollBarTarget", null, null, null); assertTerm(replaySpec.getType(), "constValue", null, null, null, null, null, null, null, "" + WindowsMessageType.TBM_SETPOS.getNumber(), null); assertTerm(replaySpec.getWparam(), "constValue", null, null, null, null, null, null, null, "1", null); assertNull(replaySpec.getWparamHiWord()); assertNull(replaySpec.getWparamLoWord()); } /** * */ private void assertTerm(Term term, String name, String messageId, String messageInfoName, String messageParameterName, String[][] resolveHandles, String sequenceId, String sequenceParameterName, String storeParameterName, String value, String windowParameterName) { assertNotNull(term); if (name != null) { assertEquals("name does not match", name, term.getName()); } else { assertNull("name is not null", term.getName()); } if (messageId != null) { assertEquals("messageId does not match", messageId, term.getMessageId()); } else { assertNull("messageId is not null", term.getMessageId()); } if (messageInfoName != null) { assertEquals ("messageInfoName does not match", messageInfoName, term.getMessageInfoName()); } else { assertNull("messageInfoName is not null", term.getMessageInfoName()); } if (messageParameterName != null) { assertEquals("messageParameterName does not match", messageParameterName, term.getMessageParameterName()); } else { assertNull("messageParameterName is not null", term.getMessageParameterName()); } if (resolveHandles != null) { assertEquals("resolveHandles does not match", resolveHandles.length, term.getResolveHandles().size()); for (int i = 0; i < resolveHandles.length; i++) { assertTerm(term.getResolveHandles().get(i), "resolveHwnd", null, null, resolveHandles[i][0], null, null, null, resolveHandles[i][1], null, null); } } else { assertNull("resolveHandles is not null", term.getResolveHandles()); } if (sequenceId != null) { assertEquals("sequenceId does not match", sequenceId, term.getSequenceId()); } else { assertNull("sequenceId is not null", term.getSequenceId()); } if (sequenceParameterName != null) { assertEquals("sequenceParameter does not match", sequenceParameterName, term.getSequenceParameterName()); } else { assertNull("sequenceParameter is not null", term.getSequenceParameterName()); } if (storeParameterName != null) { assertEquals("storeParameterName does not match", storeParameterName, term.getStoreParameterName()); } else { assertNull("storeParameterName is not null", term.getStoreParameterName()); } if (value != null) { assertEquals("value does not match", value, term.getValue()); } else { assertNull("value is not null", term.getValue()); } if (windowParameterName != null) { assertEquals("windowParameterName does not match", windowParameterName, term.getWindowParameterName()); } else { assertNull("windowParameterName is not null", term.getWindowParameterName()); } } /** *

* TODO: comment *

* * @param ruleXML * @return */ private Element getRuleElement(String ruleXML) { String fullXML = "\n" + "\n" + "\n"; fullXML += ruleXML; fullXML += "\n\n"; SAXBuilder builder = new SAXBuilder(); Document doc = null; try { ByteArrayInputStream in = new ByteArrayInputStream(fullXML.getBytes("UTF-8")); doc = builder.build(in); rulesNamespace = Namespace.getNamespace("ul:rules"); } catch (JDOMException e) { Console.printerrln("Invalid rules file."); e.printStackTrace(); } catch (IOException e) { Console.printerrln("Invalid rules file."); e.printStackTrace(); } Element rulesRoot = doc.getRootElement(); @SuppressWarnings("unchecked") List ruleElements = rulesRoot.getChildren("rule", rulesNamespace); assertEquals(1, ruleElements.size()); return ruleElements.get(0); } }