blob: ab08aa0001aa6a72447f64946bb8a6bb6c24beac [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2017 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Patrick Tasse - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.tmf.core.tests.markers;
import static org.junit.Assert.assertEquals;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import org.eclipse.tracecompass.internal.tmf.core.markers.Marker.PeriodicMarker;
import org.eclipse.tracecompass.internal.tmf.core.markers.MarkerConfigXmlParser;
import org.eclipse.tracecompass.internal.tmf.core.markers.MarkerSegment;
import org.eclipse.tracecompass.internal.tmf.core.markers.MarkerSet;
import org.eclipse.tracecompass.internal.tmf.core.markers.SubMarker.SplitMarker;
import org.eclipse.tracecompass.internal.tmf.core.markers.SubMarker.WeightedMarker;
import org.junit.Test;
import com.google.common.collect.Range;
/**
* Tests for class MarkerConfigXmlParser
*/
public class MarkerConfigXmlParserTest {
private static final String XML_CONTENT =
"<marker-sets>" +
" <marker-set name=\"Set A\" id=\"set.a\">" +
" <marker name=\"Marker A-1\" label=\"A-1 %d\" id=\"marker.a.1\" referenceid=\"ref.a.1\" color=\"#0000ff\" period=\"10\" unit=\"ms\" range=\"0..4095\" offset=\"0\">" +
" <submarker name=\"Submarker A-1-1\" label=\"A-1-1 %d\" id=\"submarker.a.1.1\" color=\"#000000\" range=\"0..99\">" +
" <submarker name=\"Submarker A-1-1-1\" label=\"A-1-1-1 %d\" id=\"submarker.a.1.1.1\" range=\"0..9\">" +
" </submarker>" +
" </submarker>" +
" </marker>" +
" <marker name=\"Marker A-2\" label=\"A-2 %d\" id=\"marker.a.2\" referenceid=\"ref.a.2\" color=\"#ff0000\" period=\"20\" unit=\"us\" range=\"0..\" offset=\"0\">" +
" </marker>" +
" <marker name=\"Marker A-3\" label=\"A-3 %d\" id=\"marker.a.3\" referenceid=\"ref.a.3\" color=\"#00ff00\" period=\"2.5\" unit=\"ns\" range=\"0..\" offset=\"0\">" +
" <segments name=\"Submarker A-3-1\">" +
" <segment label=\"A-3-1-a %d\" id=\"marker.a.3.1.a\" color=\"#aaaaaa\" length=\"1\"/>" +
" <segment label=\"A-3-1-b %d\" id=\"marker.a.3.1.b\" color=\"#bbbbbb\" length=\"2\"/>" +
" </segments>" +
" </marker>" +
" </marker-set>" +
" <marker-set name=\"Set B\" id=\"set.b\">" +
" <marker name=\"Marker B-1\" label=\"B-1 %d\" id=\"marker.b.1\" referenceid=\"ref.b.1\" color=\"#010203\" period=\"1000\" unit=\"cycles\" range=\"1..\" offset=\"5\">" +
" <submarker name=\"Submarker B-1-1\" label=\"B-1-1 %d\" id=\"submarker.b.1.1\" range=\"1..10\">" +
" </submarker>" +
" <submarker name=\"Submarker B-1-2\" label=\"B-1-2 %d\" id=\"submarker.b.1.2\" range=\"1..100\">" +
" </submarker>" +
" </marker>" +
" </marker-set>" +
"</marker-sets>";
private static final String XML_CONTENT_INVALID_PERIOD_STRING =
"<marker-sets>" +
" <marker-set name=\"Set A\" id=\"set.a\">" +
" <marker name=\"Marker A-1\" label=\"A-1 %d\" id=\"marker.a.1\" referenceid=\"ref.a.1\" color=\"#0000ff\" period=\"abc\" unit=\"ms\" range=\"0..4095\" offset=\"0\">" +
" </marker>" +
" </marker-set>" +
"</marker-sets>";
private static final String XML_CONTENT_INVALID_PERIOD_ZERO =
"<marker-sets>" +
" <marker-set name=\"Set A\" id=\"set.a\">" +
" <marker name=\"Marker A-1\" label=\"A-1 %d\" id=\"marker.a.1\" referenceid=\"ref.a.1\" color=\"#0000ff\" period=\"0\" unit=\"ms\" range=\"0..4095\" offset=\"0\">" +
" </marker>" +
" </marker-set>" +
"</marker-sets>";
private static final String XML_CONTENT_INVALID_PERIOD_NEGATIVE =
"<marker-sets>" +
" <marker-set name=\"Set A\" id=\"set.a\">" +
" <marker name=\"Marker A-1\" label=\"A-1 %d\" id=\"marker.a.1\" referenceid=\"ref.a.1\" color=\"#0000ff\" period=\"-1\" unit=\"ms\" range=\"0..4095\" offset=\"0\">" +
" </marker>" +
" </marker-set>" +
"</marker-sets>";
private static final String XML_CONTENT_INVALID_UNIT =
"<marker-sets>" +
" <marker-set name=\"Set A\" id=\"set.a\">" +
" <marker name=\"Marker A-1\" label=\"A-1 %d\" id=\"marker.a.1\" referenceid=\"ref.a.1\" color=\"#0000ff\" period=\"10\" unit=\"qwerty\" range=\"0..4095\" offset=\"0\">" +
" </marker>" +
" </marker-set>" +
"</marker-sets>";
private static final String XML_CONTENT_INVALID_RANGE =
"<marker-sets>" +
" <marker-set name=\"Set A\" id=\"set.a\">" +
" <marker name=\"Marker A-1\" label=\"A-1 %d\" id=\"marker.a.1\" referenceid=\"ref.a.1\" color=\"#0000ff\" period=\"10\" unit=\"ms\" range=\"4095..0\" offset=\"0\">" +
" </marker>" +
" </marker-set>" +
"</marker-sets>";
private static final String XML_CONTENT_INVALID_OFFSET =
"<marker-sets>" +
" <marker-set name=\"Set A\" id=\"set.a\">" +
" <marker name=\"Marker A-1\" label=\"A-1 %d\" id=\"marker.a.1\" referenceid=\"ref.a.1\" color=\"#0000ff\" period=\"10\" unit=\"ms\" range=\"0..4095\" offset=\"abc\">" +
" </marker>" +
" </marker-set>" +
"</marker-sets>";
private static final String XML_CONTENT_INVALID_SUBMARKER_RANGE =
"<marker-sets>" +
" <marker-set name=\"Set A\" id=\"set.a\">" +
" <marker name=\"Marker A-1\" label=\"A-1 %d\" id=\"marker.a.1\" referenceid=\"ref.a.1\" color=\"#0000ff\" period=\"10\" unit=\"ms\" range=\"4095..0\" offset=\"0\">" +
" <submarker name=\"Submarker A-1-1\" label=\"A-1-1 %d\" id=\"submarker.a.1.1\" color=\"#000000\" range=\"0..\"/>" +
" </marker>" +
" </marker-set>" +
"</marker-sets>";
private static final String XML_CONTENT_INVALID_SEGMENT_COUNT =
"<marker-sets>" +
" <marker-set name=\"Set A\" id=\"set.a\">" +
" <marker name=\"Marker A-1\" label=\"A-1 %d\" id=\"marker.a.1\" referenceid=\"ref.a.1\" color=\"#0000ff\" period=\"10\" unit=\"ms\" range=\"4095..0\" offset=\"0\">" +
" <segments name=\"Submarker A-1-1\">" +
" </segments>" +
" </marker>" +
" </marker-set>" +
"</marker-sets>";
private static final String XML_CONTENT_INVALID_SEGMENT_LENGTH =
"<marker-sets>" +
" <marker-set name=\"Set A\" id=\"set.a\">" +
" <marker name=\"Marker A-1\" label=\"A-1 %d\" id=\"marker.a.1\" referenceid=\"ref.a.1\" color=\"#0000ff\" period=\"10\" unit=\"ms\" range=\"4095..0\" offset=\"0\">" +
" <segments name=\"Submarker A-1-1\">" +
" <segment label=\"A-1-1-a %d\" id=\"marker.a.1.1.a\" color=\"#aaaaaa\" length=\"0\"/>" +
" </segments>" +
" </marker>" +
" </marker-set>" +
"</marker-sets>";
/**
* Test the parse method
*
* @throws IOException if an exception occurs
*/
@Test
public void testParse() throws IOException {
File file = File.createTempFile("markers", "xml");
try (FileWriter fw = new FileWriter(file)) {
fw.write(XML_CONTENT);
fw.flush();
List<MarkerSet> markerSets = MarkerConfigXmlParser.parse(file.getAbsolutePath());
assertEquals(2, markerSets.size());
MarkerSet setA = markerSets.get(0);
assertEquals("Set A", setA.getName());
assertEquals("set.a", setA.getId());
assertEquals(3, setA.getMarkers().size());
PeriodicMarker markerA1 = (PeriodicMarker) setA.getMarkers().get(0);
assertEquals("Marker A-1", markerA1.getName());
assertEquals("A-1 %d", markerA1.getLabel());
assertEquals("marker.a.1", markerA1.getId());
assertEquals("ref.a.1", markerA1.getReferenceId());
assertEquals("#0000ff", markerA1.getColor());
assertEquals(10.0, markerA1.getPeriod(), 0);
assertEquals("ms", markerA1.getUnit());
assertEquals(Range.closed(0L, 4095L), markerA1.getRange());
assertEquals(0, markerA1.getOffset());
assertEquals(1, markerA1.getSubMarkers().size());
SplitMarker submarkerA11 = (SplitMarker) markerA1.getSubMarkers().get(0);
assertEquals("Submarker A-1-1", submarkerA11.getName());
assertEquals("A-1-1 %d", submarkerA11.getLabel());
assertEquals("submarker.a.1.1", submarkerA11.getId());
assertEquals("#000000", submarkerA11.getColor());
assertEquals(Range.closed(0L, 99L), submarkerA11.getRange());
assertEquals(1, submarkerA11.getSubMarkers().size());
SplitMarker submarkerA111 = (SplitMarker) submarkerA11.getSubMarkers().get(0);
assertEquals("Submarker A-1-1-1", submarkerA111.getName());
assertEquals("A-1-1-1 %d", submarkerA111.getLabel());
assertEquals("submarker.a.1.1.1", submarkerA111.getId());
assertEquals("#000000", submarkerA111.getColor());
assertEquals(Range.closed(0L, 9L), submarkerA111.getRange());
assertEquals(0, submarkerA111.getSubMarkers().size());
PeriodicMarker markerA2 = (PeriodicMarker) setA.getMarkers().get(1);
assertEquals("Marker A-2", markerA2.getName());
assertEquals("A-2 %d", markerA2.getLabel());
assertEquals("marker.a.2", markerA2.getId());
assertEquals("ref.a.2", markerA2.getReferenceId());
assertEquals("#ff0000", markerA2.getColor());
assertEquals(20.0, markerA2.getPeriod(), 0);
assertEquals("us", markerA2.getUnit());
assertEquals(Range.atLeast(0L), markerA2.getRange());
assertEquals(0, markerA2.getOffset());
assertEquals(0, markerA2.getSubMarkers().size());
PeriodicMarker markerA3 = (PeriodicMarker) setA.getMarkers().get(2);
assertEquals("Marker A-3", markerA3.getName());
assertEquals("A-3 %d", markerA3.getLabel());
assertEquals("marker.a.3", markerA3.getId());
assertEquals("ref.a.3", markerA3.getReferenceId());
assertEquals("#00ff00", markerA3.getColor());
assertEquals(2.5, markerA3.getPeriod(), 0);
assertEquals("ns", markerA3.getUnit());
assertEquals(Range.atLeast(0L), markerA3.getRange());
assertEquals(0, markerA3.getOffset());
assertEquals(1, markerA3.getSubMarkers().size());
WeightedMarker submarkerA31 = (WeightedMarker) markerA3.getSubMarkers().get(0);
assertEquals("Submarker A-3-1", submarkerA31.getName());
assertEquals(0, submarkerA31.getSubMarkers().size());
assertEquals(2, submarkerA31.getSegments().size());
MarkerSegment submarkerA31a = submarkerA31.getSegments().get(0);
assertEquals(null, submarkerA31a.getName());
assertEquals("A-3-1-a %d", submarkerA31a.getLabel());
assertEquals("marker.a.3.1.a", submarkerA31a.getId());
assertEquals("#aaaaaa", submarkerA31a.getColor());
assertEquals(1, submarkerA31a.getLength());
assertEquals(0, submarkerA31a.getSubMarkers().size());
MarkerSegment submarkerA31b = submarkerA31.getSegments().get(1);
assertEquals(null, submarkerA31b.getName());
assertEquals("A-3-1-b %d", submarkerA31b.getLabel());
assertEquals("marker.a.3.1.b", submarkerA31b.getId());
assertEquals("#bbbbbb", submarkerA31b.getColor());
assertEquals(2, submarkerA31b.getLength());
assertEquals(0, submarkerA31b.getSubMarkers().size());
MarkerSet setB = markerSets.get(1);
assertEquals("Set B", setB.getName());
assertEquals("set.b", setB.getId());
assertEquals(1, setB.getMarkers().size());
PeriodicMarker markerB1 = (PeriodicMarker) setB.getMarkers().get(0);
assertEquals("Marker B-1", markerB1.getName());
assertEquals("B-1 %d", markerB1.getLabel());
assertEquals("marker.b.1", markerB1.getId());
assertEquals("ref.b.1", markerB1.getReferenceId());
assertEquals("#010203", markerB1.getColor());
assertEquals(1000.0, markerB1.getPeriod(), 0);
assertEquals("cycles", markerB1.getUnit());
assertEquals(Range.atLeast(1L), markerB1.getRange());
assertEquals(5, markerB1.getOffset());
assertEquals(2, markerB1.getSubMarkers().size());
SplitMarker submarkerB11 = (SplitMarker) markerB1.getSubMarkers().get(0);
assertEquals("Submarker B-1-1", submarkerB11.getName());
assertEquals("submarker.b.1.1", submarkerB11.getId());
assertEquals("#010203", submarkerB11.getColor());
assertEquals(Range.closed(1L, 10L), submarkerB11.getRange());
assertEquals(0, submarkerB11.getSubMarkers().size());
SplitMarker submarkerB12 = (SplitMarker) markerB1.getSubMarkers().get(1);
assertEquals("Submarker B-1-2", submarkerB12.getName());
assertEquals("submarker.b.1.2", submarkerB12.getId());
assertEquals("#010203", submarkerB12.getColor());
assertEquals(Range.closed(1L, 100L), submarkerB12.getRange());
assertEquals(0, submarkerB12.getSubMarkers().size());
} finally {
file.delete();
}
}
/**
* Test the parse method with a non-existing file
*/
@Test
public void testParseInvalidFile() {
File file = new File("invalid");
List<MarkerSet> markerSets = MarkerConfigXmlParser.parse(file.getAbsolutePath());
assertEquals(0, markerSets.size());
}
/**
* Test the parse method with invalid content
*
* @throws IOException if an exception occurs
*/
@Test
public void testParseInvalidContent() throws IOException {
testParseInvalidContent(XML_CONTENT_INVALID_PERIOD_STRING);
testParseInvalidContent(XML_CONTENT_INVALID_PERIOD_ZERO);
testParseInvalidContent(XML_CONTENT_INVALID_PERIOD_NEGATIVE);
testParseInvalidContent(XML_CONTENT_INVALID_UNIT);
testParseInvalidContent(XML_CONTENT_INVALID_RANGE);
testParseInvalidContent(XML_CONTENT_INVALID_OFFSET);
testParseInvalidContent(XML_CONTENT_INVALID_SUBMARKER_RANGE);
testParseInvalidContent(XML_CONTENT_INVALID_SEGMENT_COUNT);
testParseInvalidContent(XML_CONTENT_INVALID_SEGMENT_LENGTH);
}
private static void testParseInvalidContent(String content) throws IOException {
File file = File.createTempFile("markers", "xml");
try (FileWriter fw = new FileWriter(file)) {
fw.write(content);
fw.flush();
List<MarkerSet> markerSets = MarkerConfigXmlParser.parse(file.getAbsolutePath());
assertEquals(0, markerSets.size());
} finally {
file.delete();
}
}
/**
* Test that the definitions from the extension point are loaded.
*/
@Test
public void testExtensionPoint() {
List<MarkerSet> markerSet = MarkerConfigXmlParser.getMarkerSets();
assertEquals("Extension point markers should be loaded", 1, markerSet.size());
MarkerSet set = markerSet.get(0);
assertEquals("Wrong MarkerSet name", "Example", set.getName());
assertEquals("Wrong MarkerSet Id", "example.id", set.getId());
}
}