source: trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/AbstractTemporalRelationshipTC.java @ 1132

Last change on this file since 1132 was 1132, checked in by pharms, 11 years ago
  • adapted test cases to run through with respect to the new task detection implementation
File size: 7.6 KB
Line 
1//   Copyright 2012 Georg-August-Universität Göttingen, Germany
2//
3//   Licensed under the Apache License, Version 2.0 (the "License");
4//   you may not use this file except in compliance with the License.
5//   You may obtain a copy of the License at
6//
7//       http://www.apache.org/licenses/LICENSE-2.0
8//
9//   Unless required by applicable law or agreed to in writing, software
10//   distributed under the License is distributed on an "AS IS" BASIS,
11//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12//   See the License for the specific language governing permissions and
13//   limitations under the License.
14
15package de.ugoe.cs.autoquest.tasktrees.temporalrelation;
16
17import static org.junit.Assert.fail;
18import static org.junit.Assert.assertTrue;
19import static org.junit.Assert.assertNotNull;
20
21import java.lang.reflect.Constructor;
22import java.lang.reflect.InvocationTargetException;
23import java.util.ArrayList;
24import java.util.LinkedList;
25import java.util.List;
26import java.util.Stack;
27import java.util.logging.Level;
28
29import org.junit.Before;
30
31import de.ugoe.cs.autoquest.eventcore.IEventTarget;
32import de.ugoe.cs.autoquest.eventcore.IEventType;
33import de.ugoe.cs.autoquest.tasktrees.nodeequality.NodeEquality;
34import de.ugoe.cs.autoquest.tasktrees.nodeequality.NodeEqualityRuleManager;
35import de.ugoe.cs.autoquest.tasktrees.testutils.Utilities;
36import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTask;
37import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequence;
38import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTree;
39import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTreeBuilder;
40import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTreeNode;
41import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTreeNodeFactory;
42import de.ugoe.cs.autoquest.tasktrees.treeimpl.TaskTreeBuilder;
43import de.ugoe.cs.autoquest.tasktrees.treeimpl.TaskTreeNodeFactory;
44import de.ugoe.cs.util.console.Console;
45import de.ugoe.cs.util.console.TextConsole;
46
47/**
48 * @version $Revision: $ $Date: 28.04.2012$
49 * @author 2012, last modified by $Author: patrick$
50 */
51public class AbstractTemporalRelationshipTC {
52
53    /** */
54    private List<IEventTask> events;
55
56    /** */
57    private ITaskTreeBuilder taskTreeBuilder = new TaskTreeBuilder();
58
59    /** */
60    private ITaskTreeNodeFactory taskTreeNodeFactory = new TaskTreeNodeFactory();
61
62    /** */
63    private NodeEqualityRuleManager nodeEqualityRuleManager =
64        Utilities.getNodeEqualityRuleManagerForTests();
65
66    /**
67     *
68     */
69    @Before
70    public void setUp() {
71        new TextConsole(Level.FINEST);
72        events = new ArrayList<IEventTask>();
73    }
74
75    /**
76     *
77     */
78    protected void simulateEvent(IEventType eventType, IEventTarget eventTarget) {
79        events.add(taskTreeNodeFactory.createNewEventTask(eventType, eventTarget));
80        Console.reset();
81    }
82
83    /**
84     *
85     */
86    protected ITaskTree getTaskTree() {
87        ISequence sequence = taskTreeNodeFactory.createNewSequence();
88
89        for (IEventTask task : events) {
90            taskTreeBuilder.addChild(sequence, task);
91        }
92
93        TemporalRelationshipRuleManager ruleManager = new TemporalRelationshipRuleManager
94            (nodeEqualityRuleManager, taskTreeNodeFactory, taskTreeBuilder);
95
96        ruleManager.init();
97        ruleManager.applyRules(sequence);
98
99        return taskTreeNodeFactory.createTaskTree(sequence);
100    }
101
102    /**
103     *
104     */
105    protected ITaskTree getTaskTree(Class<? extends TemporalRelationshipRule> ruleClass,
106                                    NodeEquality                              nodeEquality)
107    {
108        return getTaskTree(ruleClass, nodeEquality, false);
109    }
110   
111    /**
112     *
113     */
114    protected ITaskTree getTaskTree(Class<? extends TemporalRelationshipRule> ruleClass,
115                                    NodeEquality                              nodeEquality,
116                                    boolean                                   explicitSessionSeq)
117    {
118        ISequence sequence = taskTreeNodeFactory.createNewSequence();
119
120        for (IEventTask task : events) {
121            taskTreeBuilder.addChild(sequence, task);
122        }
123
124        if (explicitSessionSeq) {
125            ISequence root = taskTreeNodeFactory.createNewSequence();
126            taskTreeBuilder.addChild(root, sequence);
127            sequence = root;
128        }
129       
130        TemporalRelationshipRule rule = null;
131       
132        CONSTRUCTOR_ITERATION:
133        for (Constructor<?> constructor : ruleClass.getDeclaredConstructors()) {
134            List<Object> parameters = new LinkedList<Object>();
135           
136            for (Class<?> type : constructor.getParameterTypes()) {
137                if (ITaskTreeNodeFactory.class.equals(type)) {
138                    parameters.add(taskTreeNodeFactory);
139                }
140                else if (ITaskTreeBuilder.class.equals(type)) {
141                    parameters.add(taskTreeBuilder);
142                }
143                else if (NodeEqualityRuleManager.class.equals(type)) {
144                    parameters.add(nodeEqualityRuleManager);
145                }
146                else if (NodeEquality.class.equals(type)) {
147                    if (nodeEquality != null) {
148                        parameters.add(nodeEquality);
149                    }
150                    else {
151                        parameters.add(NodeEquality.LEXICALLY_EQUAL);
152                    }
153                }
154                else {
155                    continue CONSTRUCTOR_ITERATION;
156                }
157            }
158           
159            try {
160                rule = (TemporalRelationshipRule) constructor.newInstance(parameters.toArray());
161            }
162            catch (IllegalArgumentException e) {
163                e.printStackTrace();
164                fail("could not invoke the constructor " + constructor);
165            }
166            catch (InstantiationException e) {
167                e.printStackTrace();
168                fail("could not invoke the constructor " + constructor);
169            }
170            catch (IllegalAccessException e) {
171                e.printStackTrace();
172                fail("could not invoke the constructor " + constructor);
173            }
174            catch (InvocationTargetException e) {
175                e.printStackTrace();
176                fail("could not invoke the constructor " + constructor);
177            }
178        }
179       
180        if (rule == null) {
181            fail("no matching constructor found to instantiate rule " + ruleClass);
182        }
183       
184        RuleApplicationResult result;
185        RuleApplicationStatus status;
186       
187        Stack<ITaskTreeNode> toBeAppliedOn = new Stack<ITaskTreeNode>();
188        toBeAppliedOn.push(sequence);
189       
190        do {
191            result = rule.apply(toBeAppliedOn.peek(), true);
192           
193            if (result != null) {
194                status = result.getRuleApplicationStatus();
195                assertNotNull(status);
196            }
197            else {
198                status = RuleApplicationStatus.NOT_APPLIED;
199            }
200           
201            assertTrue(status != RuleApplicationStatus.FEASIBLE);
202           
203            if ((result != null) && (result.getNewlyCreatedParentNodes() != null)) {
204                for (int i = result.getNewlyCreatedParentNodes().size() - 1; i >= 0; i--) {
205                    toBeAppliedOn.push(result.getNewlyCreatedParentNodes().get(i));
206                }
207            }
208           
209            if (status == RuleApplicationStatus.NOT_APPLIED) {
210                toBeAppliedOn.pop();
211            }
212           
213        }
214        while ((!toBeAppliedOn.isEmpty()) || (status == RuleApplicationStatus.FINISHED));
215
216        return taskTreeNodeFactory.createTaskTree(sequence);
217    }
218
219}
Note: See TracBrowser for help on using the repository browser.