source: trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/nodeequality/GUIEventTaskComparisonRuleTest.java @ 807

Last change on this file since 807 was 807, checked in by pharms, 12 years ago
  • improved node equality comparison to match the principle of lexical, syntactical and semantical node equality. As a result, more condensed task trees are created.
File size: 6.0 KB
Line 
1package de.ugoe.cs.quest.tasktrees.nodeequality;
2
3import static org.junit.Assert.*;
4
5import java.util.ArrayList;
6import java.util.List;
7
8import org.junit.Test;
9
10import de.ugoe.cs.quest.eventcore.Event;
11import de.ugoe.cs.quest.eventcore.IEventTarget;
12import de.ugoe.cs.quest.eventcore.IEventType;
13import de.ugoe.cs.quest.eventcore.StringEventType;
14import de.ugoe.cs.quest.eventcore.gui.KeyboardFocusChange;
15import de.ugoe.cs.quest.eventcore.gui.TextInput;
16import de.ugoe.cs.quest.eventcore.gui.ValueSelection;
17import de.ugoe.cs.quest.tasktrees.treeifc.ISelection;
18import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
19import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeFactory;
20import de.ugoe.cs.quest.tasktrees.treeimpl.TaskTreeNodeFactory;
21import de.ugoe.cs.quest.test.DummyGUIElement;
22
23/**
24 * @author Patrick Harms
25 */
26public class GUIEventTaskComparisonRuleTest {
27
28    /**
29     *
30     */
31    @Test
32    public void test() {
33        ITaskTreeNodeFactory treeNodeFactory = new TaskTreeNodeFactory();
34       
35        GUIEventTaskComparisonRule rule = new GUIEventTaskComparisonRule();
36       
37        // test the identity check
38        IEventType eventType1 = new StringEventType("blub");
39        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
40        ITaskTreeNode task1 = treeNodeFactory.createNewEventTask(eventType1, eventTarget1);
41       
42        assertNull(rule.compare(task1, task1));
43
44        eventType1 = new KeyboardFocusChange();
45        task1 = treeNodeFactory.createNewEventTask(eventType1, eventTarget1);
46       
47        assertEquals(NodeEquality.IDENTICAL, rule.compare(task1, task1));
48
49        // test lexical equality for interaction events which are no value selections or text inputs
50        IEventType eventType2 = new KeyboardFocusChange();
51        ITaskTreeNode task2 = treeNodeFactory.createNewEventTask(eventType2, eventTarget1);
52       
53        assertEquals(NodeEquality.LEXICALLY_EQUAL, rule.compare(task1, task2));
54        assertEquals(NodeEquality.LEXICALLY_EQUAL, rule.compare(task2, task1));
55       
56        // test equality of value selections
57        eventType1 = new ValueSelection<String>("value1");
58        task1 = treeNodeFactory.createNewEventTask(eventType1, eventTarget1);
59       
60        assertEquals(NodeEquality.UNEQUAL, rule.compare(task1, task2));
61        assertEquals(NodeEquality.UNEQUAL, rule.compare(task2, task1));
62       
63        eventType2 = new ValueSelection<String>("value1");
64        task2 = treeNodeFactory.createNewEventTask(eventType2, eventTarget1);
65       
66        assertEquals(NodeEquality.SYNTACTICALLY_EQUAL, rule.compare(task1, task2));
67        assertEquals(NodeEquality.SYNTACTICALLY_EQUAL, rule.compare(task2, task1));
68       
69        eventType2 = new ValueSelection<String>("value2");
70        task2 = treeNodeFactory.createNewEventTask(eventType2, eventTarget1);
71       
72        assertEquals(NodeEquality.SEMANTICALLY_EQUAL, rule.compare(task1, task2));
73        assertEquals(NodeEquality.SEMANTICALLY_EQUAL, rule.compare(task2, task1));
74       
75        // test equality of text inputs
76        List<Event> textInputEvents1 = new ArrayList<Event>();
77        textInputEvents1.add(new Event(eventType1, eventTarget1));
78        eventType1 = new TextInput("enteredText1", textInputEvents1);
79        task1 = treeNodeFactory.createNewEventTask(eventType1, eventTarget1);
80       
81        assertEquals(NodeEquality.UNEQUAL, rule.compare(task1, task2));
82        assertEquals(NodeEquality.UNEQUAL, rule.compare(task2, task1));
83       
84        eventType2 = new TextInput("enteredText1", textInputEvents1);
85        task2 = treeNodeFactory.createNewEventTask(eventType2, eventTarget1);
86       
87        assertEquals(NodeEquality.LEXICALLY_EQUAL, rule.compare(task1, task2));
88        assertEquals(NodeEquality.LEXICALLY_EQUAL, rule.compare(task2, task1));
89       
90        List<Event> textInputEvents2 = new ArrayList<Event>();
91        textInputEvents2.add(new Event(eventType2, eventTarget1));
92        eventType2 = new TextInput("enteredText1", textInputEvents2);
93        task2 = treeNodeFactory.createNewEventTask(eventType2, eventTarget1);
94       
95        assertEquals(NodeEquality.SYNTACTICALLY_EQUAL, rule.compare(task1, task2));
96        assertEquals(NodeEquality.SYNTACTICALLY_EQUAL, rule.compare(task2, task1));
97       
98        eventType2 = new TextInput("enteredText2", textInputEvents2);
99        task2 = treeNodeFactory.createNewEventTask(eventType2, eventTarget1);
100       
101        assertEquals(NodeEquality.SEMANTICALLY_EQUAL, rule.compare(task1, task2));
102        assertEquals(NodeEquality.SEMANTICALLY_EQUAL, rule.compare(task2, task1));
103       
104        // now ensure unequality for all combinations, if the event targets do not match
105        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
106        eventType1 = new KeyboardFocusChange();
107        task1 = treeNodeFactory.createNewEventTask(eventType1, eventTarget1);
108        task2 = treeNodeFactory.createNewEventTask(eventType2, eventTarget2);
109        assertEquals(NodeEquality.UNEQUAL, rule.compare(task1, task2));
110        assertEquals(NodeEquality.UNEQUAL, rule.compare(task2, task1));
111       
112        eventType1 = new ValueSelection<String>("value1");
113        task1 = treeNodeFactory.createNewEventTask(eventType1, eventTarget1);
114        task2 = treeNodeFactory.createNewEventTask(eventType1, eventTarget2);
115        assertEquals(NodeEquality.UNEQUAL, rule.compare(task1, task2));
116        assertEquals(NodeEquality.UNEQUAL, rule.compare(task2, task1));
117       
118        eventType1 = new TextInput("enteredText1", textInputEvents1);
119        task1 = treeNodeFactory.createNewEventTask(eventType1, eventTarget1);
120        task2 = treeNodeFactory.createNewEventTask(eventType1, eventTarget2);
121        assertEquals(NodeEquality.UNEQUAL, rule.compare(task1, task2));
122        assertEquals(NodeEquality.UNEQUAL, rule.compare(task2, task1));
123
124        ISelection selection = treeNodeFactory.createNewSelection();
125        assertNull(rule.compare(task1, selection));
126        assertNull(rule.compare(selection, task1));
127        assertNull(rule.compare(task2, selection));
128        assertNull(rule.compare(selection, task2));
129    }
130
131}
Note: See TracBrowser for help on using the repository browser.