source: trunk/quest-plugin-mfc-test/src/test/java/de/ugoe/cs/quest/plugin/mfc/EventGenerationRuleTest.java @ 655

Last change on this file since 655 was 655, checked in by pharms, 12 years ago
  • removed old copyright file header
  • Property svn:keywords set to Date Revision Author HeadURL Id
File size: 17.1 KB
Line 
1package de.ugoe.cs.quest.plugin.mfc;
2
3import static org.junit.Assert.*;
4
5import java.io.ByteArrayInputStream;
6import java.io.IOException;
7import java.util.List;
8
9import org.jdom.Document;
10import org.jdom.Element;
11import org.jdom.JDOMException;
12import org.jdom.Namespace;
13import org.jdom.input.SAXBuilder;
14import org.junit.Test;
15
16import de.ugoe.cs.quest.plugin.mfc.EventGenerationRule.Term;
17import de.ugoe.cs.quest.plugin.mfc.eventcore.WindowsMessageType;
18import de.ugoe.cs.util.console.Console;
19
20/**
21 * <p>
22 * TODO comment
23 * </p>
24 *
25 * @version $Revision$ $Date: 23.08.2012$
26 * @author 2012, last modified by $Author: pharms$
27 */
28public class EventGenerationRuleTest {
29
30    /**
31     *
32     */
33    Namespace rulesNamespace = null;
34   
35    /**
36     * <p>
37     * TODO: comment
38     * </p>
39     */
40    @Test
41    public void testRule1() {
42        String ruleXML =
43            "<rule name='LeftClickButton'>\n" +
44            "  <msg type='&WM_LBUTTONDOWN;'>\n" +
45            "    <store var='clicked'/>\n" +
46            "  </msg>\n" +
47            "  <msg type='&WM_LBUTTONUP;'>\n" +
48            "    <equals>\n" +
49            "      <constValue value='Button'/>\n" +
50            "      <winInfoValue obj='this' winParam='class'/>\n" +
51            "    </equals>\n" +
52            "    <equals>\n" +
53            "      <paramValue obj='clicked' param='window.hwnd'/>\n" +
54            "      <paramValue obj='this' param='window.hwnd'/>\n" +
55            "    </equals>\n" +
56            "  </msg>\n" +
57            "  <genMsg delay='500'>\n" +
58            "    <type>\n" +
59            "      <constValue value='&BM_CLICK;'/>\n" +
60            "    </type>\n" +
61            "    <target>\n" +
62            "      <msgInfoValue obj='clicked' msgParam='target'/>\n" +
63            "    </target>\n" +
64            "  </genMsg>\n" +
65            "</rule>";
66       
67        Element ruleElement = getRuleElement(ruleXML);
68       
69        EventGenerationRule rule = new EventGenerationRule(ruleElement, rulesNamespace);
70       
71        assertEquals("LeftClickButton", rule.getName());
72       
73        assertNotNull(rule.getMessageConditions());
74        assertEquals(2, rule.getMessageConditions().size());
75       
76        // check condition 1
77        EventGenerationRule.MessageCondition condition1 = rule.getMessageConditions().get(0);
78        assertEquals(WindowsMessageType.WM_LBUTTONDOWN, condition1.getMessageType());
79        assertFalse(condition1.matchMultiple());
80        assertNotNull(condition1.getAttributeConditions());
81        assertEquals(0, condition1.getAttributeConditions().size());
82        assertNotNull(condition1.getMessagesToStore());
83        assertEquals(1, condition1.getMessagesToStore().size());
84       
85        assertTerm(condition1.getMessagesToStore().get(0), "store", "clicked", null, null,
86                   null, null, null, null, null, null);
87
88        // check condition 2
89        EventGenerationRule.MessageCondition condition2 = rule.getMessageConditions().get(1);
90        assertEquals(WindowsMessageType.WM_LBUTTONUP, condition2.getMessageType());
91        assertFalse(condition2.matchMultiple());
92        assertNotNull(condition2.getAttributeConditions());
93        assertEquals(2, condition2.getAttributeConditions().size());
94        assertNotNull(condition2.getMessagesToStore());
95        assertEquals(0, condition2.getMessagesToStore().size());
96       
97        EventGenerationRule.AttributeCondition attrCond1 =
98            condition2.getAttributeConditions().get(0);
99       
100        assertTerm(attrCond1.getLeftHandSide(), "constValue", null, null, null,
101                   null, null, null, null, "Button", null);
102
103        assertTerm(attrCond1.getRightHandSide(), "winInfoValue", "this", null, null,
104                   null, null, null, null, null, "class");
105
106        EventGenerationRule.AttributeCondition attrCond2 =
107            condition2.getAttributeConditions().get(1);
108           
109        assertTerm(attrCond2.getLeftHandSide(), "paramValue", "clicked", null, "window.hwnd",
110                   null, null, null, null, null, null);
111
112        assertTerm(attrCond2.getRightHandSide(), "paramValue", "this", null, "window.hwnd",
113                   null, null, null, null, null, null);
114
115        // check event parameters
116        assertNotNull(rule.getEventParameters());
117        assertEquals(0, rule.getEventParameters().size());
118       
119        // check replay specs
120        assertNotNull(rule.getReplayMessageSpecifications());
121        assertEquals(1, rule.getReplayMessageSpecifications().size());
122       
123        // check replay spec 1
124        EventGenerationRule.ReplayMessageSpec replaySpec =
125            rule.getReplayMessageSpecifications().get(0);
126       
127        assertNotNull(replaySpec);
128        assertEquals(500, replaySpec.getDelay());
129        assertTrue(replaySpec.generateSingleMessage());
130        assertNull(replaySpec.getLparam());
131        assertNull(replaySpec.getLparamHiWord());
132        assertNull(replaySpec.getLparamLoWord());
133        assertNull(replaySpec.getReplayObjectId());
134        assertTerm(replaySpec.getTarget(), "msgInfoValue", "clicked", "target", null,
135                   null, null, null, null, null, null);
136        assertTerm(replaySpec.getType(), "constValue", null, null, null,
137                   null, null, null, null, "" + WindowsMessageType.BM_CLICK.getNumber(), null);
138        assertNull(replaySpec.getWparam());
139        assertNull(replaySpec.getWparamHiWord());
140        assertNull(replaySpec.getWparamLoWord());
141       
142    }
143
144    /**
145     * <p>
146     * TODO: comment
147     * </p>
148     */
149    @Test
150    public void testRule2() {
151       
152        String ruleXML =
153            "<rule name='HScroll_TrackBar'>\n" +
154            "  <msg type='&WM_LBUTTONDOWN;'>\n" +
155            "    <equals>\n" +
156            "      <winInfoValue obj='this' winParam='class'/>\n" +
157            "      <constValue value='msctls_trackbar32'/>\n" +
158            "    </equals>\n" +
159            "    <store var='clicked'/>\n" +
160            "  </msg>\n" +
161            "  <msg type='&WM_HSCROLL;' multiple='true'>\n" +
162            "    <equals>\n" +
163            "      <paramValue obj='this' param='scrollBarHandle'/>\n" +
164            "      <paramValue obj='clicked' param='window.hwnd'/>\n" +
165            "    </equals>\n" +
166            "    <storeSeq varSeq='scrolls'>\n" +
167            "      <resolveHwnd param='scrollBarHandle' storeParam='scrollBarTarget'/>\n" +
168            "    </storeSeq>\n" +
169            "  </msg>\n" +
170            "  <msg type='&WM_LBUTTONUP;'>\n" +
171            "    <equals>\n" +
172            "      <paramValue obj='this' param='window.hwnd'/>\n" +
173            "      <paramValue obj='clicked' param='window.hwnd'/>\n" +
174            "    </equals>\n" +
175            "  </msg>\n" +
176            "  <genMsgSeq delay='50'>\n" +
177            "    <type>\n" +
178            "      <constValue value='&TBM_SETPOS;'/>\n" +
179            "    </type>\n" +
180            "    <target>\n" +
181            "      <seqValue seqObj='scrolls' param='scrollBarTarget'/>\n" +
182            "    </target>\n" +
183            "    <LPARAM>\n" +
184            "      <seqValue seqObj='scrolls' param='scrollPos'/>\n" +
185            "    </LPARAM>\n" +
186            "    <WPARAM>\n" +
187            "      <constValue value='1'/>\n" +
188            "    </WPARAM>\n" +
189            "  </genMsgSeq>\n" +
190            "</rule>\n";
191       
192        Element ruleElement = getRuleElement(ruleXML);
193       
194        EventGenerationRule rule = new EventGenerationRule(ruleElement, rulesNamespace);
195       
196        assertEquals("HScroll_TrackBar", rule.getName());
197       
198        assertNotNull(rule.getMessageConditions());
199        assertEquals(3, rule.getMessageConditions().size());
200       
201        // check condition 1
202        EventGenerationRule.MessageCondition condition1 = rule.getMessageConditions().get(0);
203        assertEquals(WindowsMessageType.WM_LBUTTONDOWN, condition1.getMessageType());
204        assertFalse(condition1.matchMultiple());
205        assertNotNull(condition1.getAttributeConditions());
206        assertEquals(1, condition1.getAttributeConditions().size());
207        EventGenerationRule.AttributeCondition attrCond1 =
208            condition1.getAttributeConditions().get(0);
209           
210        assertTerm(attrCond1.getLeftHandSide(), "winInfoValue", "this", null, null,
211                   null, null, null, null, null, "class");
212
213        assertTerm(attrCond1.getRightHandSide(), "constValue", null, null, null,
214                   null, null, null, null, "msctls_trackbar32", null);
215
216        assertNotNull(condition1.getMessagesToStore());
217        assertEquals(1, condition1.getMessagesToStore().size());
218       
219        assertTerm(condition1.getMessagesToStore().get(0), "store", "clicked", null, null,
220                   null, null, null, null, null, null);
221
222        // check condition 2
223        EventGenerationRule.MessageCondition condition2 = rule.getMessageConditions().get(1);
224        assertEquals(WindowsMessageType.WM_HSCROLL, condition2.getMessageType());
225        assertTrue(condition2.matchMultiple());
226        assertNotNull(condition2.getAttributeConditions());
227        assertEquals(1, condition2.getAttributeConditions().size());
228       
229        EventGenerationRule.AttributeCondition attrCond2 =
230                condition2.getAttributeConditions().get(0);
231       
232        assertTerm(attrCond2.getLeftHandSide(), "paramValue", "this", null, "scrollBarHandle",
233                   null, null, null, null, null, null);
234
235        assertTerm(attrCond2.getRightHandSide(), "paramValue", "clicked", null, "window.hwnd",
236                   null, null, null, null, null, null);
237
238
239        assertNotNull(condition2.getMessagesToStore());
240        assertEquals(1, condition2.getMessagesToStore().size());
241       
242        String[][] resolveHwnd = { { "scrollBarHandle",  "scrollBarTarget" } };
243        assertTerm(condition2.getMessagesToStore().get(0), "storeSeq", null, null, null,
244                   resolveHwnd, "scrolls", null, null, null, null);
245
246        // check condition 3
247        EventGenerationRule.MessageCondition condition3 = rule.getMessageConditions().get(2);
248        assertEquals(WindowsMessageType.WM_LBUTTONUP, condition3.getMessageType());
249        assertFalse(condition3.matchMultiple());
250        assertNotNull(condition3.getAttributeConditions());
251        assertEquals(1, condition3.getAttributeConditions().size());
252        assertNotNull(condition3.getMessagesToStore());
253        assertEquals(0, condition3.getMessagesToStore().size());
254       
255        EventGenerationRule.AttributeCondition attrCond3 =
256            condition3.getAttributeConditions().get(0);
257       
258        assertTerm(attrCond3.getLeftHandSide(), "paramValue", "this", null, "window.hwnd",
259                   null, null, null, null, null, null);
260
261        assertTerm(attrCond3.getRightHandSide(), "paramValue", "clicked", null, "window.hwnd",
262                   null, null, null, null, null, null);
263
264        // check event parameters
265        assertNotNull(rule.getEventParameters());
266        assertEquals(0, rule.getEventParameters().size());
267       
268        // check replay specs
269        assertNotNull(rule.getReplayMessageSpecifications());
270        assertEquals(1, rule.getReplayMessageSpecifications().size());
271       
272        // check replay spec 1
273        EventGenerationRule.ReplayMessageSpec replaySpec =
274            rule.getReplayMessageSpecifications().get(0);
275       
276        assertNotNull(replaySpec);
277        assertEquals(50, replaySpec.getDelay());
278        assertFalse(replaySpec.generateSingleMessage());
279        assertTerm(replaySpec.getLparam(), "seqValue", null, null, null,
280                   null, "scrolls", "scrollPos", null, null, null);
281        assertNull(replaySpec.getLparamHiWord());
282        assertNull(replaySpec.getLparamLoWord());
283        assertEquals("scrolls", replaySpec.getReplayObjectId());
284        assertTerm(replaySpec.getTarget(), "seqValue", null, null, null,
285                   null, "scrolls", "scrollBarTarget", null, null, null);
286        assertTerm(replaySpec.getType(), "constValue", null, null, null,
287                   null, null, null, null, "" + WindowsMessageType.TBM_SETPOS.getNumber(), null);
288        assertTerm(replaySpec.getWparam(), "constValue", null, null, null,
289                   null, null, null, null, "1", null);
290        assertNull(replaySpec.getWparamHiWord());
291        assertNull(replaySpec.getWparamLoWord());
292       
293    }
294   
295    /**
296     *
297     */
298    private void assertTerm(Term       term,
299                            String     name,
300                            String     messageId,
301                            String     messageInfoName,
302                            String     messageParameterName,
303                            String[][] resolveHandles,
304                            String     sequenceId,
305                            String     sequenceParameterName,
306                            String     storeParameterName,
307                            String     value,
308                            String     windowParameterName)
309    {
310        assertNotNull(term);
311       
312        if (name != null) {
313            assertEquals("name does not match", name, term.getName());
314        }
315        else {
316            assertNull("name is not null", term.getName());
317        }
318       
319        if (messageId != null) {
320            assertEquals("messageId does not match", messageId, term.getMessageId());
321        }
322        else {
323            assertNull("messageId is not null", term.getMessageId());
324        }
325       
326        if (messageInfoName != null) {
327            assertEquals
328                ("messageInfoName does not match", messageInfoName, term.getMessageInfoName());
329        }
330        else {
331            assertNull("messageInfoName is not null", term.getMessageInfoName());
332        }
333
334        if (messageParameterName != null) {
335            assertEquals("messageParameterName does not match", messageParameterName,
336                         term.getMessageParameterName());
337        }
338        else {
339            assertNull("messageParameterName is not null", term.getMessageParameterName());
340        }
341       
342        if (resolveHandles != null) {
343            assertEquals("resolveHandles does not match", resolveHandles.length,
344                         term.getResolveHandles().size());
345           
346            for (int i = 0; i < resolveHandles.length; i++) {
347                assertTerm(term.getResolveHandles().get(i), "resolveHwnd", null, null,
348                           resolveHandles[i][0], null, null, null, resolveHandles[i][1], null, null);
349            }
350        }
351        else {
352            assertNull("resolveHandles is not null", term.getResolveHandles());
353        }
354       
355        if (sequenceId != null) {
356            assertEquals("sequenceId does not match", sequenceId, term.getSequenceId());
357        }
358        else {
359            assertNull("sequenceId is not null", term.getSequenceId());
360        }
361       
362        if (sequenceParameterName != null) {
363            assertEquals("sequenceParameter does not match", sequenceParameterName,
364                         term.getSequenceParameterName());
365        }
366        else {
367            assertNull("sequenceParameter is not null", term.getSequenceParameterName());
368        }
369       
370        if (storeParameterName != null) {
371            assertEquals("storeParameterName does not match",
372                         storeParameterName, term.getStoreParameterName());
373        }
374        else {
375            assertNull("storeParameterName is not null", term.getStoreParameterName());
376        }
377       
378        if (value != null) {
379            assertEquals("value does not match", value, term.getValue());
380        }
381        else {
382            assertNull("value is not null", term.getValue());
383        }
384       
385        if (windowParameterName != null) {
386            assertEquals("windowParameterName does not match", windowParameterName,
387                         term.getWindowParameterName());
388        }
389        else {
390            assertNull("windowParameterName is not null", term.getWindowParameterName());
391        }
392    }
393
394    /**
395     * <p>
396     * TODO: comment
397     * </p>
398     *
399     * @param ruleXML
400     * @return
401     */
402    private Element getRuleElement(String ruleXML) {
403        String fullXML =
404            "<?xml version='1.0' encoding='utf-8'?>\n" +
405            "<!DOCTYPE rules SYSTEM 'data/ruleDoctype.dtd'>\n" +
406            "<rules xmlns='ul:rules' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " +
407            "                        xsi:schemaLocation='ul:rules ruleSchema.xsd'>\n";
408       
409        fullXML += ruleXML;
410        fullXML += "\n</rules>\n";
411
412        SAXBuilder builder = new SAXBuilder();
413        Document doc = null;
414
415        try {
416            ByteArrayInputStream in = new ByteArrayInputStream(fullXML.getBytes("UTF-8"));
417            doc = builder.build(in);
418            rulesNamespace = Namespace.getNamespace("ul:rules");
419        }
420        catch (JDOMException e) {
421            Console.printerrln("Invalid rules file.");
422            e.printStackTrace();
423        }
424        catch (IOException e) {
425            Console.printerrln("Invalid rules file.");
426            e.printStackTrace();
427        }
428
429        Element rulesRoot = doc.getRootElement();
430       
431        @SuppressWarnings("unchecked")
432        List<Element> ruleElements = rulesRoot.getChildren("rule", rulesNamespace);
433       
434        assertEquals(1, ruleElements.size());
435
436        return ruleElements.get(0);
437    }
438
439}
Note: See TracBrowser for help on using the repository browser.