1 /*******************************************************************************
2 * Copyright (c) 2016 École Polytechnique de Montréal and others
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
8 *******************************************************************************/
10 package org
.eclipse
.tracecompass
.tmf
.core
.tests
.parsers
.custom
;
12 import static org
.junit
.Assert
.assertEquals
;
13 import static org
.junit
.Assert
.assertTrue
;
15 import java
.io
.BufferedWriter
;
17 import java
.io
.FileWriter
;
18 import java
.io
.IOException
;
19 import java
.text
.SimpleDateFormat
;
20 import java
.util
.Arrays
;
21 import java
.util
.Date
;
23 import org
.eclipse
.jdt
.annotation
.NonNull
;
24 import org
.eclipse
.tracecompass
.tmf
.core
.event
.ITmfEvent
;
25 import org
.eclipse
.tracecompass
.tmf
.core
.exceptions
.TmfTraceException
;
26 import org
.eclipse
.tracecompass
.tmf
.core
.parsers
.custom
.CustomXmlEvent
;
27 import org
.eclipse
.tracecompass
.tmf
.core
.parsers
.custom
.CustomXmlTrace
;
28 import org
.eclipse
.tracecompass
.tmf
.core
.parsers
.custom
.CustomXmlTraceDefinition
;
29 import org
.eclipse
.tracecompass
.tmf
.core
.trace
.ITmfTrace
;
30 import org
.junit
.runner
.RunWith
;
31 import org
.junit
.runners
.Parameterized
;
32 import org
.junit
.runners
.Parameterized
.Parameters
;
35 * Test the events parsed by a custom XML trace
37 * @author Geneviève Bastien
39 @RunWith(Parameterized
.class)
40 public class CustomXmlTraceDataTest
extends AbstractCustomTraceDataTest
{
42 private static final String TRACE_PATH
= TRACE_DIRECTORY
+ File
.separator
+ "test.xml";
43 private static final String DEFINITION_PATH
= "testfiles" + File
.separator
+ "xml" + File
.separator
+ "testDefinition.xml";
49 * The name of this test
51 * The custom test data for this test case
53 public CustomXmlTraceDataTest(String name
, @NonNull ICustomTestData data
) {
57 private static CustomXmlTraceDefinition
getDefinition(int index
) {
58 CustomXmlTraceDefinition
[] definitions
= CustomXmlTraceDefinition
.loadAll(new File(DEFINITION_PATH
).toString());
59 return definitions
[index
];
62 private static final ICustomTestData CUSTOM_XML
= new ICustomTestData() {
64 private static final int NB_EVENTS
= 10;
65 private CustomXmlTraceDefinition fDefinition
;
68 public ITmfTrace
getTrace() throws IOException
, TmfTraceException
{
69 fDefinition
= getDefinition(0);
70 final File file
= new File(TRACE_PATH
);
71 try (BufferedWriter writer
= new BufferedWriter(new FileWriter(file
));) {
72 writer
.write("<trace>");
73 for (int i
= 0; i
< NB_EVENTS
; ++i
) {
74 SimpleDateFormat f
= new SimpleDateFormat(TIMESTAMP_FORMAT
);
75 String eventStr
= "<element time=\"" + f
.format(new Date(i
)) + "\">message</element>\n";
76 writer
.write(eventStr
);
78 writer
.write("</trace>");
80 return new CustomXmlTrace(null, fDefinition
, file
.getPath(), BLOCK_SIZE
);
84 public void validateEvent(ITmfEvent event
) {
85 assertTrue(event
instanceof CustomXmlEvent
);
86 String name
= fDefinition
.definitionName
;
87 assertEquals("Event name", name
, event
.getName());
88 assertEquals("Event name and type", event
.getType().getName(), event
.getName());
92 public void validateEventCount(int eventCount
) {
93 assertEquals("Event count", NB_EVENTS
, eventCount
);
98 private static final ICustomTestData CUSTOM_XML_EVENT_NAME
= new ICustomTestData() {
100 private static final int NB_EVENTS
= 10;
101 private static final String DEFAULT_EVENT
= "DefaultName";
102 private static final String ATTRIBUTE_EVENT
= "AttributeName";
103 private static final String ELEMENT_EVENT
= "ElementName";
104 private CustomXmlTraceDefinition fDefinition
;
107 public ITmfTrace
getTrace() throws IOException
, TmfTraceException
{
108 fDefinition
= getDefinition(1);
109 final File file
= new File(TRACE_PATH
);
110 try (BufferedWriter writer
= new BufferedWriter(new FileWriter(file
));) {
111 writer
.write("<trace>");
112 for (int i
= 0; i
< NB_EVENTS
; ++i
) {
113 String attribute
= (i
% 5) != 0 ? String
.format(" type=\"%s\"", ATTRIBUTE_EVENT
) : "";
114 String element
= (i
% 5) != 0 && i
% 2 != 0 ? String
.format("<type>%s</type>", ELEMENT_EVENT
) : "";
115 String eventStr
= String
.format("<element time=\"" + i
+ "\"%s>%s</element>\n", attribute
, element
);
116 writer
.write(eventStr
);
118 writer
.write("</trace>");
120 return new CustomXmlTrace(null, fDefinition
, file
.getPath(), BLOCK_SIZE
);
124 public void validateEvent(ITmfEvent event
) {
125 assertTrue(event
instanceof CustomXmlEvent
);
126 long ts
= event
.getTimestamp().getValue();
128 assertEquals("Event name", DEFAULT_EVENT
, event
.getName());
129 } else if (ts
% 2 == 0) {
130 assertEquals("Event name", ATTRIBUTE_EVENT
, event
.getName());
132 assertEquals("Event name", ELEMENT_EVENT
, event
.getName());
134 assertEquals("Event name and type", event
.getType().getName(), event
.getName());
138 public void validateEventCount(int eventCount
) {
139 assertEquals("Event count", NB_EVENTS
, eventCount
);
145 * @return The arrays of parameters
147 @Parameters(name
= "{index}: {0}")
148 public static Iterable
<Object
[]> getParameters() {
149 return Arrays
.asList(new Object
[][] {
150 { "Base parser", CUSTOM_XML
},
151 { "Parse with event name", CUSTOM_XML_EVENT_NAME
}