1 /*******************************************************************************
2 * Copyright (c) 2014, 2016 Ericsson
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * Matthew Khouzam - Initial API and implementation
11 *******************************************************************************/
13 package org
.eclipse
.tracecompass
.tmf
.ui
.swtbot
.tests
.parsers
.custom
;
15 import static org
.junit
.Assert
.assertEquals
;
16 import static org
.junit
.Assert
.assertNotNull
;
19 import java
.io
.FileNotFoundException
;
20 import java
.io
.FileWriter
;
21 import java
.io
.IOException
;
23 import org
.eclipse
.core
.resources
.ResourcesPlugin
;
24 import org
.eclipse
.swtbot
.swt
.finder
.junit
.SWTBotJunit4ClassRunner
;
25 import org
.eclipse
.swtbot
.swt
.finder
.waits
.Conditions
;
26 import org
.eclipse
.swtbot
.swt
.finder
.widgets
.SWTBotTreeItem
;
27 import org
.eclipse
.tracecompass
.tmf
.ui
.swtbot
.tests
.shared
.SWTBotUtils
;
28 import org
.eclipse
.tracecompass
.tmf
.ui
.tests
.shared
.WaitUtils
;
29 import org
.junit
.Test
;
30 import org
.junit
.runner
.RunWith
;
33 * Custom text wizard tests
35 * Some reminders to help making tests (javadoc to keep formatting)
40 * 0 Time Stamp Format Help
46 * 6 Regular Expression Help
47 * 7 Remove group (group 1 toggle)
48 * 8 Remove group (group 2 toggle)
49 * 9 Add group (group 3 toggle ...)
50 * 10 Show parsing result
58 * 1 event type (message, timestamp...)
59 * 2 how to handle the data (set, append...)
63 * @author Matthew Khouzam
65 @RunWith(SWTBotJunit4ClassRunner
.class)
66 public class TestCustomTxtWizard
extends AbstractCustomParserWizard
{
68 private static final String MANAGE_CUSTOM_PARSERS_SHELL_TITLE
= "Manage Custom Parsers";
69 private static final String CUSTOM_TEXT_PARSER_SHELL_TITLE
= "Custom Text Parser";
70 private static final String PROJECT_NAME
= "TestText";
71 private static final String CATEGORY_NAME
= "Test Category";
72 private static final String TRACETYPE_NAME
= "Test Trace";
73 private static final String EXPECTED_TEST_DEFINITION
= "<Definition category=\"Test Category\" name=\"Test Trace\">\n" +
74 "<TimeStampOutputFormat>ss</TimeStampOutputFormat>\n" +
76 "<Cardinality max=\"2147483647\" min=\"0\"/>\n" +
77 "<RegEx>\\s*(\\d\\d)\\s(.*\\S)</RegEx>\n" +
78 "<InputData action=\"0\" format=\"ss\" name=\"Timestamp\" tag=\"TIMESTAMP\"/>\n" +
79 "<InputData action=\"0\" name=\"Message\" tag=\"MESSAGE\"/>\n" +
82 "<Cardinality max=\"2147483647\" min=\"0\"/>\n" +
83 "<RegEx>([^0-9]*)</RegEx>\n" +
84 "<InputData action=\"2\" name=\"Message\" tag=\"MESSAGE\"/>\n" +
86 "<OutputColumn name=\"Timestamp\" tag=\"TIMESTAMP\"/>\n" +
87 "<OutputColumn name=\"Message\" tag=\"MESSAGE\"/>\n";
90 * Test to create a custom txt trace and compare the xml
93 * the xml file is not accessible, this is bad
94 * @throws FileNotFoundException
95 * the xml file wasn't written, this is bad
98 public void testNew() throws FileNotFoundException
, IOException
{
99 File xmlFile
= ResourcesPlugin
.getWorkspace().getRoot().getLocation().append(".metadata/.plugins/org.eclipse.tracecompass.tmf.core/custom_txt_parsers.xml").toFile();
100 // Open the custom parsers dialog
101 SWTBotUtils
.createProject(PROJECT_NAME
);
103 SWTBotTreeItem treeNode
= SWTBotUtils
.selectTracesFolder(fBot
, PROJECT_NAME
);
104 treeNode
.contextMenu("Manage Custom Parsers...").click();
105 fBot
.waitUntil(Conditions
.shellIsActive(MANAGE_CUSTOM_PARSERS_SHELL_TITLE
));
106 fBot
.shell(MANAGE_CUSTOM_PARSERS_SHELL_TITLE
).setFocus();
108 // Open the new custom txt parser dialog
109 fBot
.button("New...").click();
110 fBot
.waitUntil(Conditions
.shellIsActive(CUSTOM_TEXT_PARSER_SHELL_TITLE
));
113 fBot
.textWithLabel("Category:").setText(CATEGORY_NAME
);
114 fBot
.textWithLabel("Trace type:").setText(TRACETYPE_NAME
);
115 fBot
.textWithLabel("Time Stamp format:").setText("ss");
117 // Fill Group 1 as time stamp
118 fBot
.comboBox(1).setSelection("Timestamp");
119 fBot
.textWithLabel("format:").setText("ss");
120 // Click on the New group button
121 fBot
.button(8).click();
123 fBot
.button(2).click();
124 SWTBotTreeItem
[] treeItems
= fBot
.tree().getAllItems();
125 SWTBotTreeItem eventLine
[] = new SWTBotTreeItem
[2];
126 treeItems
= fBot
.tree().getAllItems();
127 for (SWTBotTreeItem item
: treeItems
) {
128 if (item
.getText().startsWith("Root Line 1")) {
131 if (item
.getText().startsWith("Root Line 2")) {
135 assertNotNull(eventLine
[0]);
136 assertNotNull(eventLine
[1]);
137 // Set the regular expression for each event line
138 fBot
.styledText().setText("12 Hello\nWorld\n23 Goodbye\ncruel world");
139 eventLine
[0].select();
140 WaitUtils
.waitForJobs();
141 fBot
.textWithLabel("Regular expression:").setText("\\s*(\\d\\d)\\s(.*\\S)");
142 eventLine
[1].select();
143 fBot
.textWithLabel("Regular expression:").setText("([^0-9]*)");
144 // Click on the new group of root line 2
145 fBot
.button(7).click();
146 fBot
.comboBox("Set").setSelection("Append with |");
147 fBot
.button("Highlight All").click();
148 fBot
.button("Next >").click();
149 fBot
.button("Finish").click();
150 fBot
.waitUntil(new CustomDefinitionHasContent(xmlFile
, CATEGORY_NAME
, TRACETYPE_NAME
, EXPECTED_TEST_DEFINITION
));
151 String xmlPart
= extractTestXml(xmlFile
, CATEGORY_NAME
, TRACETYPE_NAME
);
152 assertEquals(EXPECTED_TEST_DEFINITION
, xmlPart
);
153 fBot
.list().select(CATEGORY_NAME
+ " : " + TRACETYPE_NAME
);
154 fBot
.button("Delete").click();
155 fBot
.button("Yes").click();
156 fBot
.button("Close").click();
157 fBot
.waitUntil(new CustomDefinitionHasContent(xmlFile
, CATEGORY_NAME
, TRACETYPE_NAME
, ""));
158 xmlPart
= extractTestXml(xmlFile
, CATEGORY_NAME
, TRACETYPE_NAME
);
159 assertEquals("", xmlPart
);
161 SWTBotUtils
.deleteProject(PROJECT_NAME
, fBot
);
165 * Test to edit a custom txt trace and compare the xml
167 * @throws IOException
168 * the xml file is not accessible, this is bad
169 * @throws FileNotFoundException
170 * the xml file wasn't written, this is bad
173 public void testEdit() throws FileNotFoundException
, IOException
{
174 File xmlFile
= ResourcesPlugin
.getWorkspace().getRoot().getLocation().append(".metadata/.plugins/org.eclipse.tracecompass.tmf.core/custom_txt_parsers.xml").toFile();
175 try (FileWriter fw
= new FileWriter(xmlFile
)) {
176 String xmlContent
= "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n" +
177 "<CustomTxtTraceDefinitionList>\n" +
178 "<Definition category=\"Demo Category\" name=\"Demo trace\">\n" +
179 "<TimeStampOutputFormat>sss</TimeStampOutputFormat>\n" +
181 "<Cardinality max=\"2147483647\" min=\"0\"/>\n" +
182 "<RegEx>\\s*(\\d*)\\s(.*)</RegEx>\n" +
183 "<InputData action=\"0\" format=\"sss\" name=\"Timestamp\" tag=\"TIMESTAMP\"/>\n" +
184 "<InputData action=\"0\" name=\"Message\" tag=\"MESSAGE\"/>\n" +
186 "<OutputColumn name=\"Timestamp\" tag=\"TIMESTAMP\"/>\n" +
187 "<OutputColumn name=\"Message\" tag=\"MESSAGE\"/>\n" +
189 "<Definition name=\"dmesg\">\n" +
190 "<TimeStampOutputFormat>sssssss.ssssss</TimeStampOutputFormat>\n" +
192 "<Cardinality max=\"2147483647\" min=\"0\"/>\n" +
193 "<RegEx>^[([0-9]*\\.[0.9]*)]\\s(.*)</RegEx>\n" +
194 "<InputData action=\"0\" format=\"sssss.sssss\" name=\"Timestamp\" tag=\"TIMESTAMP\"/>\n" +
195 "<InputData action=\"0\" name=\"Message\" tag=\"MESSAGE\"/>\n" +
197 "<OutputColumn name=\"Timestamp\" tag=\"TIMESTAMP\"/>\n" +
198 "<OutputColumn name=\"Message\" tag=\"MESSAGE\"/>\n" +
200 "</CustomTxtTraceDefinitionList>";
201 fw
.write(xmlContent
);
204 // Open the custom parsers dialog
205 SWTBotUtils
.createProject(PROJECT_NAME
);
206 SWTBotTreeItem treeNode
= SWTBotUtils
.selectTracesFolder(fBot
, PROJECT_NAME
);
207 treeNode
.contextMenu("Manage Custom Parsers...").click();
208 fBot
.waitUntil(Conditions
.shellIsActive(MANAGE_CUSTOM_PARSERS_SHELL_TITLE
));
209 // Open the edition dialog for txt parser
210 fBot
.shell(MANAGE_CUSTOM_PARSERS_SHELL_TITLE
).setFocus();
211 fBot
.list().select("Demo Category : Demo trace");
212 fBot
.button("Edit...").click();
213 fBot
.waitUntil(Conditions
.shellIsActive(CUSTOM_TEXT_PARSER_SHELL_TITLE
));
215 // update parser's data
216 fBot
.textWithLabel("Category:").setText(CATEGORY_NAME
);
217 fBot
.textWithLabel("Trace type:").setText(TRACETYPE_NAME
);
218 fBot
.textWithLabel("Time Stamp format:").setText("ss");
220 // update time stamp format
221 fBot
.comboBox(1).setSelection("Timestamp");
222 fBot
.textWithLabel("format:").setText("ss");
223 fBot
.button(2).click();
224 SWTBotTreeItem
[] treeItems
= fBot
.tree().getAllItems();
225 SWTBotTreeItem eventLine
[] = new SWTBotTreeItem
[2];
226 for (SWTBotTreeItem item
: treeItems
) {
227 if (item
.getText().startsWith("Root Line 1")) {
230 if (item
.getText().startsWith("Root Line 2")) {
234 treeItems
= fBot
.tree().getAllItems();
235 assertNotNull(eventLine
[0]);
236 assertNotNull(eventLine
[1]);
237 fBot
.styledText().setText("12 Hello\nWorld\n23 Goodbye\ncruel world");
238 eventLine
[0].select();
239 WaitUtils
.waitForJobs();
240 fBot
.textWithLabel("Regular expression:").setText("\\s*(\\d\\d)\\s(.*\\S)");
241 eventLine
[1].select();
242 fBot
.textWithLabel("Regular expression:").setText("([^0-9]*)");
243 fBot
.button(7).click();
244 fBot
.comboBox("Set").setSelection("Append with |");
245 fBot
.button("Highlight All").click();
246 fBot
.button("Next >").click();
247 fBot
.button("Finish").click();
248 fBot
.waitUntil(new CustomDefinitionHasContent(xmlFile
, CATEGORY_NAME
, TRACETYPE_NAME
, EXPECTED_TEST_DEFINITION
));
249 String xmlPart
= extractTestXml(xmlFile
, CATEGORY_NAME
, TRACETYPE_NAME
);
250 assertEquals(EXPECTED_TEST_DEFINITION
, xmlPart
);
251 fBot
.list().select(CATEGORY_NAME
+ " : " + TRACETYPE_NAME
);
252 fBot
.button("Delete").click();
253 fBot
.button("Yes").click();
254 fBot
.button("Close").click();
255 fBot
.waitUntil(new CustomDefinitionHasContent(xmlFile
, CATEGORY_NAME
, TRACETYPE_NAME
, ""));
256 xmlPart
= extractTestXml(xmlFile
, CATEGORY_NAME
, TRACETYPE_NAME
);
257 assertEquals("", xmlPart
);
259 SWTBotUtils
.deleteProject(PROJECT_NAME
, fBot
);