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

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