/*******************************************************************************
* Copyright (c) 2016 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
* accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
******************************************************************************/
package org.eclipse.tracecompass.tmf.analysis.xml.core.tests.stateprovider;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
import java.io.File;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.model.ITmfXmlModelFactory;
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.model.TmfXmlPatternSegmentBuilder;
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.model.readwrite.TmfXmlReadWriteModelFactory;
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.module.XmlUtils;
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.segment.TmfXmlPatternSegment;
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.stateprovider.TmfXmlStrings;
import org.eclipse.tracecompass.tmf.analysis.xml.core.tests.common.TmfXmlTestFiles;
import org.eclipse.tracecompass.tmf.analysis.xml.core.tests.module.XmlUtilsTest;
import org.eclipse.tracecompass.tmf.analysis.xml.core.tests.stubs.PatternSegmentFactoryStub;
import org.eclipse.tracecompass.tmf.analysis.xml.core.tests.stubs.StateSystemContainerStub;
import org.junit.Before;
import org.junit.Test;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
* Test suite for the XML pattern segment builder. The builder should create the
* corresponding pattern segment :
*
* <p>
* -name : "test"
* </p>
* <p>
* -content :
* </p>
* <p>
* -field1 : 5
* </p>
* <p>
* -field2 : "test"
* </p>
* <p>
* -field3 : 1
* </p>
*
* @author Jean-Christian Kouame
*/
public class TmfXmlPatternSegmentBuilderTest {
private static final @NonNull String ANALYSIS_ID = "xml test pattern segment";
private final @NonNull StateSystemContainerStub fContainer = new StateSystemContainerStub();
private final @NonNull ITmfXmlModelFactory fModelFactory = TmfXmlReadWriteModelFactory.getInstance();
private File fTestXmlFile;
/**
* test the {@link XmlUtils#xmlValidate(File)} method
*/
@Before
public void testXmlValidate() {
fTestXmlFile = TmfXmlTestFiles.VALID_PATTERN_SEGMENT.getFile();
if ((fTestXmlFile == null) || !fTestXmlFile.exists()) {
fail("XML pattern test file does not exist");
}
IStatus status = XmlUtils.xmlValidate(fTestXmlFile);
if (!status.isOK()) {
fail(status.getMessage());
}
}
/**
* Create a pattern segment builder that will generate a pattern segment.
* This method test the data of the pattern segment created.
*/
@Test
public void testBuilder() {
Element doc = XmlUtils.getElementInFile(fTestXmlFile.getPath(), TmfXmlStrings.PATTERN, ANALYSIS_ID);
NodeList patternSegments = doc.getElementsByTagName(TmfXmlStrings.SEGMENT);
assertEquals("Number of pattern segments", 2, patternSegments.getLength());
final Node item2 = patternSegments.item(1);
assertNotNull("pattern segment 2", item2);
// create a pattern segment builder using the second pattern segment description in the XML pattern file
TmfXmlPatternSegmentBuilder builder = new TmfXmlPatternSegmentBuilder(fModelFactory, (Element) item2, fContainer);
assertNotNull("builder", builder);
//Create a pattern segment and test its content
TmfXmlPatternSegment segment = builder.generatePatternSegment(PatternSegmentFactoryStub.TEST_2_END_EVENT,
PatternSegmentFactoryStub.TEST_2_START_EVENT.getTimestamp(),
PatternSegmentFactoryStub.TEST_2_END_EVENT.getTimestamp(),
null);
XmlUtilsTest.testPatternSegmentData(PatternSegmentFactoryStub.TEST_2, segment);
}
}