source: trunk/quest-core-usability-test/src/test/java/de/ugoe/cs/quest/usability/AbstractUsabilityEvaluationTC.java @ 725

Last change on this file since 725 was 725, checked in by pharms, 12 years ago
  • use console for logging instead of logger
File size: 6.4 KB
Line 
1package de.ugoe.cs.quest.usability;
2
3import static org.junit.Assert.assertEquals;
4import static org.junit.Assert.fail;
5
6import java.util.ArrayList;
7import java.util.logging.Level;
8import java.util.regex.Matcher;
9import java.util.regex.Pattern;
10
11import org.junit.Before;
12
13import de.ugoe.cs.quest.eventcore.Event;
14import de.ugoe.cs.quest.eventcore.gui.TextInput;
15import de.ugoe.cs.quest.tasktrees.treeifc.IEventTask;
16import de.ugoe.cs.quest.tasktrees.treeifc.IIteration;
17import de.ugoe.cs.quest.tasktrees.treeifc.ISelection;
18import de.ugoe.cs.quest.tasktrees.treeifc.ISequence;
19import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTree;
20import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeBuilder;
21import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
22import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeFactory;
23import de.ugoe.cs.quest.tasktrees.treeimpl.TaskTreeBuilder;
24import de.ugoe.cs.quest.tasktrees.treeimpl.TaskTreeNodeFactory;
25import de.ugoe.cs.quest.test.DummyGUIElement;
26import de.ugoe.cs.quest.test.DummyInteraction;
27import de.ugoe.cs.quest.test.DummyTextField;
28import de.ugoe.cs.util.console.TextConsole;
29
30/**
31 * TODO comment
32 *
33 * @version $Revision: $ $Date: 18.07.2012$
34 * @author 2012, last modified by $Author: pharms$
35 */
36public class AbstractUsabilityEvaluationTC {
37
38    /** */
39    private ITaskTreeBuilder taskTreeBuilder = new TaskTreeBuilder();
40
41    /** */
42    private ITaskTreeNodeFactory taskTreeNodeFactory = new TaskTreeNodeFactory();
43
44    /**
45   *
46   */
47    @Before
48    public void setUp() {
49        new TextConsole(Level.FINEST);
50    }
51
52    /**
53   *
54   */
55    protected ITaskTree createTaskTree(String spec) {
56        Matcher matcher =
57            Pattern.compile("(\\s*(\\w+)\\s*(\\(((\\w*\\s*)*)\\))?\\s*(\\{))|(\\})").matcher(spec);
58
59        if (!matcher.find()) {
60            if (!matcher.hitEnd()) {
61                throw new IllegalArgumentException("could not parse task specification");
62            }
63        }
64
65        return taskTreeNodeFactory.createTaskTree(parseTask(matcher, new int[1]));
66    }
67
68    /**
69     * TODO: comment
70     *
71     * @param expectedDefects
72     * @param evaluateUsability
73     */
74    protected void assertUsabilityEvaluationResult(UsabilityDefect[]         expectedDefects,
75                                                   UsabilityEvaluationResult evaluationResult)
76    {
77        assertEquals(expectedDefects.length, evaluationResult.getAllDefects().size());
78
79        EXPECTED_DEFECT_ITERATION:
80        for (UsabilityDefect expectedDefect : expectedDefects) {
81            for (UsabilityDefect defect : evaluationResult.getAllDefects()) {
82                if (expectedDefect.equals(defect)) {
83                    System.err.println(defect.getParameterizedDescription());
84                    continue EXPECTED_DEFECT_ITERATION;
85                }
86            }
87
88            for (UsabilityDefect defect : evaluationResult.getAllDefects()) {
89                System.err.println(defect);
90            }
91
92            fail("expected defect " + expectedDefect + " not found in evaluation result");
93        }
94    }
95
96    /**
97   *
98   */
99    private ITaskTreeNode parseTask(Matcher tokenMatcher, int[] typeNumbers) {
100        String firstToken = tokenMatcher.group();
101
102        if ("}".equals(firstToken)) {
103            throw new IllegalArgumentException("found a closing bracket at an unexpected place");
104        }
105
106        ITaskTreeNode treeNode = instantiateTreeNode(tokenMatcher, typeNumbers);
107
108        if (!tokenMatcher.find()) {
109            throw new IllegalArgumentException("could not parse task specification");
110        }
111
112        firstToken = tokenMatcher.group();
113
114        if (!"}".equals(firstToken)) {
115            ITaskTreeNode child = null;
116
117            do {
118                child = parseTask(tokenMatcher, typeNumbers);
119
120                if (child != null) {
121                    addChild(treeNode, child);
122
123                    if (!tokenMatcher.find()) {
124                        throw new IllegalArgumentException("could not parse task specification");
125                    }
126
127                    firstToken = tokenMatcher.group();
128
129                    if ("}".equals(firstToken)) {
130                        break;
131                    }
132                }
133
134            }
135            while (child != null);
136
137        }
138
139        return treeNode;
140    }
141
142    /**
143     * TODO: comment
144     *
145     * @param group
146     * @return
147     */
148    private ITaskTreeNode instantiateTreeNode(Matcher tokenMatcher, int[] typeNumbers) {
149        String type = tokenMatcher.group(2);
150        String additionalInfo = tokenMatcher.group(4);
151
152        if ("Interaction".equals(type)) {
153            return taskTreeNodeFactory.createNewEventTask
154                (new DummyInteraction("dummy", typeNumbers[0]++), new DummyGUIElement("dummy"));
155        }
156        else if ("Sequence".equals(type)) {
157            return taskTreeNodeFactory.createNewSequence();
158        }
159        else if ("Iteration".equals(type)) {
160            return taskTreeNodeFactory.createNewIteration();
161        }
162        else if ("Selection".equals(type)) {
163            return taskTreeNodeFactory.createNewSelection();
164        }
165        else if ("TextInput".equals(type)) {
166            if (additionalInfo == null) {
167                fail("no simulated text provided for text input interactin task");
168            }
169
170            TextInput textInput = new TextInput(additionalInfo, new ArrayList<Event>());
171           
172            IEventTask task = taskTreeNodeFactory.createNewEventTask
173                (textInput, new DummyTextField(additionalInfo));
174
175            return task;
176        }
177        else {
178            fail("invalid type of task tree node: " + type);
179            return null;
180        }
181    }
182
183    /**
184     * TODO: comment
185     *
186     * @param treeNode
187     * @param child
188     */
189    private void addChild(ITaskTreeNode parent, ITaskTreeNode child) {
190        if (parent instanceof ISequence) {
191            taskTreeBuilder.addChild((ISequence) parent, child);
192        }
193        else if (parent instanceof IIteration) {
194            if (parent.getChildren().size() <= 0) {
195                taskTreeBuilder.setChild((IIteration) parent, child);
196            }
197            else {
198                fail("can not add more than one child to an iteration");
199            }
200        }
201        else if (parent instanceof ISelection) {
202            taskTreeBuilder.addChild((ISelection) parent, child);
203        }
204        else {
205            fail("can not add children to parent task tree node of type " +
206                 parent.getClass().getName());
207        }
208    }
209
210}
Note: See TracBrowser for help on using the repository browser.