source: trunk/autoquest-plugin-html-test/src/test/java/de/ugoe/cs/autoquest/plugin/html/commands/CMDcondenseHTMLGUIModelTest.java @ 1336

Last change on this file since 1336 was 1336, checked in by pharms, 10 years ago
  • removed common group stuff again as it did not work with a larger data set and as it also does not help, as grouping may introduce several group layers which can still not be merged.
File size: 18.3 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.plugin.html.commands;
16
17import static org.junit.Assert.*;
18
19import java.util.Arrays;
20import java.util.HashMap;
21import java.util.LinkedList;
22import java.util.List;
23import java.util.Map;
24
25import org.junit.Before;
26import org.junit.Test;
27
28import de.ugoe.cs.autoquest.eventcore.guimodel.GUIElementFactory;
29import de.ugoe.cs.autoquest.eventcore.guimodel.GUIElementGroup;
30import de.ugoe.cs.autoquest.eventcore.guimodel.GUIModel;
31import de.ugoe.cs.autoquest.eventcore.guimodel.GUIModel.Traverser;
32import de.ugoe.cs.autoquest.eventcore.guimodel.GUIModelException;
33import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElement;
34import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElementSpec;
35import de.ugoe.cs.autoquest.plugin.html.guimodel.HTMLDocument;
36import de.ugoe.cs.autoquest.plugin.html.guimodel.HTMLDocumentSpec;
37import de.ugoe.cs.autoquest.plugin.html.guimodel.HTMLPageElement;
38import de.ugoe.cs.autoquest.plugin.html.guimodel.HTMLPageElementSpec;
39import de.ugoe.cs.autoquest.plugin.html.guimodel.HTMLServer;
40import de.ugoe.cs.autoquest.plugin.html.guimodel.HTMLServerSpec;
41import de.ugoe.cs.util.console.GlobalDataContainer;
42import de.ugoe.cs.util.console.TextConsole;
43
44/**
45 * @author Patrick Harms
46 */
47public class CMDcondenseHTMLGUIModelTest {
48
49    /**
50     *
51     */
52    @Before
53    public void setUp() {
54        new TextConsole();
55    }
56   
57    /**
58     *
59     */
60    @Test
61    public void test_condense_01() throws Exception {
62        String[] guiSpec =
63            { "/server/doc1/html/body/div_0" };
64       
65        GUIModel guiModel = generateGUIModel(guiSpec);
66        GlobalDataContainer.getInstance().addData("sequences_targets", guiModel);
67       
68        executeCommand();
69       
70        String[] assertionSpec =
71            { "/server/doc1/html/body/div" };
72       
73        assertGUIModel(guiModel, assertionSpec);
74    }
75
76    /**
77     *
78     */
79    @Test
80    public void test_condense_02() throws Exception {
81        String[] guiSpec =
82            { "/server/doc1/html/body/div_0",
83              "/server/doc1/html/body/div_1",
84              "/server/doc1/html/body/div_2",
85              "/server/doc1/html/body/div_3"};
86           
87        GUIModel guiModel = generateGUIModel(guiSpec);
88        GlobalDataContainer.getInstance().addData("sequences_targets", guiModel);
89           
90        executeCommand();
91       
92        String[] assertionSpec =
93            { "/server/doc1/html/body/div",
94              "/server/doc1/html/body/div_1",
95              "/server/doc1/html/body/div_2",
96              "/server/doc1/html/body/div_3" };
97       
98        assertGUIModel(guiModel, assertionSpec);
99    }
100
101    /**
102     *
103     */
104    @Test
105    public void test_condense_03() throws Exception {
106        String[] guiSpec =
107            { "/server/doc1/html/body/div_0",
108              "/server/doc1/html/body/div_1",
109              "/server/doc2/html/body/div_2",
110              "/server/doc2/html/body/div_3"};
111               
112        GUIModel guiModel = generateGUIModel(guiSpec);
113        GlobalDataContainer.getInstance().addData("sequences_targets", guiModel);
114               
115        executeCommand();
116           
117        String[] assertionSpec =
118            { "/server/doc1/html/body/group_doc1/div",
119              "/server/doc1/html/body/group_doc1/div_1",
120              "/server/doc1/html/body/group_doc2/div_2",
121              "/server/doc1/html/body/group_doc2/div_3" };
122       
123        assertGUIModel(guiModel, assertionSpec);
124    }
125
126    /**
127     *
128     */
129    @Test
130    public void test_condense_04() throws Exception {
131        String[] guiSpec =
132            { "/server/doc1/html/body/div",
133              "/server/doc1/html/body/div_1",
134              "/server/doc2/html/body/div",
135              "/server/doc2/html/body/div_1"};
136               
137        GUIModel guiModel = generateGUIModel(guiSpec);
138        GlobalDataContainer.getInstance().addData("sequences_targets", guiModel);
139               
140        executeCommand();
141           
142        String[] assertionSpec =
143            { "/server/doc1/html/body/div",
144              "/server/doc1/html/body/div_1" };
145       
146        assertGUIModel(guiModel, assertionSpec);
147    }
148
149    /**
150     *
151     */
152    @Test
153    public void test_condense_05() throws Exception {
154        String[] guiSpec =
155            { "/server/doc1/html/body/div",
156              "/server/doc1/html/body/div_1",
157              "/server/doc2/html/body/div",
158              "/server/doc2/html/body/div_2"};
159               
160        GUIModel guiModel = generateGUIModel(guiSpec);
161        GlobalDataContainer.getInstance().addData("sequences_targets", guiModel);
162               
163        executeCommand();
164           
165        String[] assertionSpec =
166            { "/server/doc1/html/body/div",
167              "/server/doc1/html/body/group_doc1/div_1",
168              "/server/doc1/html/body/group_doc2/div_2" };
169       
170        assertGUIModel(guiModel, assertionSpec);
171    }
172
173    /**
174     *
175     */
176    @Test
177    public void test_condense_06() throws Exception {
178        String[] guiSpec =
179            { "/server/doc1/html/body/div/div_1",
180              "/server/doc1/html/body/div/div_2",
181              "/server/doc1/html/body/div/div_3",
182              "/server/doc1/html/body/div/div_4",
183              "/server/doc1/html/body/div/div_5",
184              "/server/doc1/html/body/div/div_6",
185              "/server/doc2/html/body/div/div_1",
186              "/server/doc2/html/body/div/div_2",
187              "/server/doc2/html/body/div/div_7",
188              "/server/doc2/html/body/div/div_8",
189              "/server/doc2/html/body/div/div_6",
190              "/server/doc3/html/body/div/div_9",
191              "/server/doc3/html/body/div/div_10",
192              "/server/doc3/html/body/div/div_6",
193              "/server/doc3/html/body/div/div_11",
194              "/server/doc4/html/body/div/div_12",
195              "/server/doc4/html/body/div/div_13",
196              "/server/doc5/html/body/div/div_4",
197              "/server/doc5/html/body/div/div_11" };
198               
199        GUIModel guiModel = generateGUIModel(guiSpec);
200        GlobalDataContainer.getInstance().addData("sequences_targets", guiModel);
201               
202        executeCommand();
203           
204        String[] assertionSpec =
205            { "/server/doc1/html/body/div/group_doc1doc2doc3/group_doc1doc2/div_1",
206              "/server/doc1/html/body/div/group_doc1doc2doc3/group_doc1doc2/div_2",
207              "/server/doc1/html/body/div/group_doc1doc2doc3/group_doc1doc2/group_doc1/div_3",
208              "/server/doc1/html/body/div/group_doc1doc2doc3/group_doc1doc2/group_doc1/div_5",
209              "/server/doc1/html/body/div/group_doc1doc2doc3/group_doc1doc2/group_doc2/div_7",
210              "/server/doc1/html/body/div/group_doc1doc2doc3/group_doc1doc2/group_doc2/div_8",
211              "/server/doc1/html/body/div/group_doc1doc2doc3/div_6",
212              "/server/doc1/html/body/div/group_doc1doc5/div_4",
213              "/server/doc1/html/body/div/group_doc3doc5/div_11",
214              "/server/doc1/html/body/div/group_doc3doc5/group_doc3/div_9",
215              "/server/doc1/html/body/div/group_doc3doc5/group_doc3/div_10",
216              "/server/doc1/html/body/div/group_doc4/div_12",
217              "/server/doc1/html/body/div/group_doc4/div_13" };
218       
219        assertGUIModel(guiModel, assertionSpec);
220    }
221
222    /**
223     *
224     */
225    @Test
226    public void test_condense_07() throws Exception {
227        String[] guiSpec =
228            { "/server/doc1/html/body/div/div_1/div_11",
229              "/server/doc2/html/body/div/div_2/div_21",
230              "/server/doc3/html/body/div/div_1/div_12" };
231               
232        GUIModel guiModel = generateGUIModel(guiSpec);
233        GlobalDataContainer.getInstance().addData("sequences_targets", guiModel);
234               
235        executeCommand();
236           
237        String[] assertionSpec =
238            { "/server/doc1/html/body/div/group_doc1doc3/div_1/group_doc1/div_11",
239              "/server/doc1/html/body/div/group_doc1doc3/div_1/group_doc3/div_12",
240              "/server/doc1/html/body/div/group_doc2/div_2/div_21" };
241       
242        assertGUIModel(guiModel, assertionSpec);
243    }
244
245    /**
246     *
247     */
248    @Test
249    public void test_condense_08() throws Exception {
250        String[] guiSpec =
251            { "/server/doc1/html/body/div/div_1/div_11/div_111",
252              "/server/doc1/html/body/div/div_2/div_21/div_211",
253              "/server/doc1/html/body/div/div_3/div_31",
254              "/server/doc2/html/body/div/div_1/div_11/div_111",
255              "/server/doc2/html/body/div/div_2/div_21/div_211",
256              "/server/doc2/html/body/div/div_3/div_31",
257              "/server/doc2/html/body/div/div_4/div_41",
258              "/server/doc3/html/body/div" };
259               
260        GUIModel guiModel = generateGUIModel(guiSpec);
261        GlobalDataContainer.getInstance().addData("sequences_targets", guiModel);
262               
263        executeCommand();
264           
265        String[] assertionSpec =
266            { "/server/doc1/html/body/div/group_doc1doc2/div_1/div_11/div_111",
267              "/server/doc1/html/body/div/group_doc1doc2/div_2/div_21/div_211",
268              "/server/doc1/html/body/div/group_doc1doc2/div_3/div_31",
269              "/server/doc1/html/body/div/group_doc1doc2/group_doc2/div_4/div_41" };
270       
271        assertGUIModel(guiModel, assertionSpec);
272    }
273
274    /**
275     *
276     */
277    @Test
278    public void test_condense_09() throws Exception {
279        String[] guiSpec =
280            { "/server/doc1/html/body/div/div_1/div_11/div_111",
281              "/server/doc1/html/body/div/div_2/div_21/div_211",
282              "/server/doc1/html/body/div/div_3/div_31",
283              "/server/doc2/html/body/div/div_1/div_12/div_121",
284              "/server/doc2/html/body/div/div_2/div_22/div_221",
285              "/server/doc2/html/body/div/div_3/div_31",
286              "/server/doc2/html/body/div/div_4/div_41",
287              "/server/doc3/html/body/div" };
288               
289        GUIModel guiModel = generateGUIModel(guiSpec);
290        GlobalDataContainer.getInstance().addData("sequences_targets", guiModel);
291               
292        executeCommand();
293           
294        String[] assertionSpec =
295            { "/server/doc1/html/body/div/group_doc1doc2/div_1/group_doc1/div_11/div_111",
296              "/server/doc1/html/body/div/group_doc1doc2/div_1/group_doc2/div_12/div_121",
297              "/server/doc1/html/body/div/group_doc1doc2/div_2/group_doc1/div_21/div_211",
298              "/server/doc1/html/body/div/group_doc1doc2/div_2/group_doc2/div_22/div_221",
299              "/server/doc1/html/body/div/group_doc1doc2/div_3/div_31",
300              "/server/doc1/html/body/div/group_doc1doc2/group_doc2/div_4/div_41" };
301       
302        assertGUIModel(guiModel, assertionSpec);
303    }
304
305    /**
306     *
307     */
308    @Test
309    public void test_condense_10() throws Exception {
310        String[] guiSpec =
311            { "/server/doc1/html/body/div/div_1/div_11/div_111",
312              "/server/doc1/html/body/div/div_2/div_21/div_211",
313              "/server/doc1/html/body/div/div_3/div_31/div_311",
314              "/server/doc1/html/body/div/div_4/div_41/div_411",
315              "/server/doc1/html/body/div/div_5/div_51/div_511",
316              "/server/doc2/html/body/div/div_2/div_21/div_211",
317              "/server/doc2/html/body/div/div_3/div_31/div_311",
318              "/server/doc2/html/body/div/div_4/div_41/div_411",
319              "/server/doc2/html/body/div/div_5/div_51/div_511",
320              "/server/doc3/html/body/div/div_3/div_31/div_311",
321              "/server/doc3/html/body/div/div_4/div_41/div_411",
322              "/server/doc3/html/body/div/div_5/div_51/div_511",
323              "/server/doc4/html/body/div/div_4/div_41/div_411",
324              "/server/doc4/html/body/div/div_5/div_51/div_511" };
325               
326        GUIModel guiModel = generateGUIModel(guiSpec);
327        GlobalDataContainer.getInstance().addData("sequences_targets", guiModel);
328               
329        executeCommand();
330           
331        String[] assertionSpec =
332            { "/server/doc1/html/body/div/div_4/div_41/div_411",
333              "/server/doc1/html/body/div/div_5/div_51/div_511",
334              "/server/doc1/html/body/div/group_doc1doc2doc3/div_3/div_31/div_311",
335              "/server/doc1/html/body/div/group_doc1doc2doc3/group_doc1doc2/div_2/div_21/div_211",
336              "/server/doc1/html/body/div/group_doc1doc2doc3/group_doc1doc2/group_doc1/div_1/div_11/div_111" };
337       
338        assertGUIModel(guiModel, assertionSpec);
339    }
340
341    /**
342     *
343     */
344    private GUIModel generateGUIModel(String[] guiSpec)
345        throws IllegalArgumentException, GUIModelException
346    {
347        GUIModel model = new GUIModel(true);
348       
349        Map<String, HTMLServerSpec> servers = new HashMap<String, HTMLServerSpec>();
350        Map<String, HTMLDocumentSpec> documents = new HashMap<String, HTMLDocumentSpec>();
351        Map<String, HTMLPageElementSpec> pageElements = new HashMap<String, HTMLPageElementSpec>();
352       
353        for (String path : guiSpec) {
354            String[] elements = path.split("/");
355           
356            if ("".equals(elements[0])) {
357                elements = Arrays.copyOfRange(elements, 1, elements.length);
358            }
359           
360            List<IGUIElementSpec> pathList = new LinkedList<IGUIElementSpec>();
361            for (int i = 0; i < elements.length; i++) {
362                if (i == 0) {
363                    if (!servers.containsKey(elements[i])) {
364                        servers.put(elements[i], new HTMLServerSpec(elements[i], 80));
365                    }
366                    pathList.add(servers.get(elements[i]));
367                }
368                else if (i == 1) {
369                    if (!documents.containsKey(elements[i])) {
370                        HTMLDocumentSpec doc = new HTMLDocumentSpec
371                            ((HTMLServerSpec) pathList.get(0), elements[i], null, elements[i]);
372                        documents.put(elements[i], doc);
373                    }
374                    pathList.add(documents.get(elements[i]));
375                }
376                else {
377                    if (!pageElements.containsKey(elements[i])) {
378                        String[] infos = elements[i].split("_");
379                   
380                        String tagName = infos[0];
381                   
382                        int index = 0;
383                        String id = null;
384                   
385                        if (infos.length > 1) {
386                            try {
387                                index = Integer.parseInt(infos[1]);
388                            }
389                            catch (Exception e) {
390                                id = infos[1];
391                                index = -1;
392                            }
393                        }
394
395                        HTMLPageElementSpec pageElem = new HTMLPageElementSpec
396                            ((HTMLDocumentSpec) pathList.get(1), tagName, id, index);
397                        pageElements.put(elements[i], pageElem);
398                    }
399
400                    pathList.add(pageElements.get(elements[i]));
401                }
402            }
403           
404            model.integratePath(pathList, GUIElementFactory.getInstance());
405        }
406       
407        return model;
408    }
409
410    /**
411     *
412     */
413    private void executeCommand() {
414        CMDcondenseHTMLGUIModel command = new CMDcondenseHTMLGUIModel();
415       
416        List<Object> parameters = new LinkedList<Object>();
417        parameters.add("sequences");
418       
419        command.run(parameters);
420    }
421
422    /**
423     *
424     */
425    private void assertGUIModel(GUIModel guiModel, String[] assertionSpec) {
426        List<String> paths = new LinkedList<String>();
427       
428        for (String path : assertionSpec) {
429            paths.add(path);
430        }
431       
432        GUIModel.Traverser traverser = guiModel.getTraverser();
433       
434        assertPaths(traverser, "", paths);
435       
436        assertEquals(0, paths.size());
437    }
438
439    /**
440     *
441     */
442    private void assertPaths(Traverser traverser, String path, List<String> paths) {
443        if (traverser.hasFirstChild()) {
444            IGUIElement childElement = traverser.firstChild();
445       
446            while (childElement != null) {
447                String currentPath = path + "/" + getPathElement(childElement);
448                assertPaths(traverser, currentPath, paths);
449                childElement = traverser.nextSibling();
450            }
451       
452            traverser.parent();
453        }
454        else {
455            assertTrue("unexpected path: " + path, paths.remove(path));
456        }
457    }
458
459    /**
460     *
461     */
462    private String getPathElement(IGUIElement childElement) {
463        StringBuffer name = new StringBuffer();
464       
465        if (childElement instanceof HTMLServer) {
466            name.append(((HTMLServer) childElement).getHost());
467        }
468        else if (childElement instanceof HTMLDocument) {
469            name.append(((HTMLDocument) childElement).getPath());
470        }
471        else if (childElement instanceof HTMLPageElement) {
472            name.append(((HTMLPageElement) childElement).getTagName());
473           
474            if (((HTMLPageElement) childElement).getHtmlId() != null) {
475                name.append("_");
476                name.append(((HTMLPageElement) childElement).getHtmlId());
477            }
478            else if (((HTMLPageElement) childElement).getIndex() > 0) {
479                name.append("_");
480                name.append(((HTMLPageElement) childElement).getIndex());
481            }
482        }
483        else if (childElement instanceof GUIElementGroup) {
484            name.append(((GUIElementGroup) childElement).getStringIdentifier());
485           
486            /*for (IGUIElement groupedElement : ((GUIElementGroup) childElement).getGroupedElements())
487            {
488                name.append(getPathElement(groupedElement));
489            }*/
490        }
491       
492        return name.toString();
493    }
494
495}
Note: See TracBrowser for help on using the repository browser.