From: Geneviève Bastien Date: Tue, 8 Mar 2016 20:40:10 +0000 (-0500) Subject: tmf: Add an event names requirement X-Git-Url: http://git.efficios.com/?a=commitdiff_plain;h=ab5530a137aabff376983c2198e797f9b6f8c1b1;p=deliverable%2Ftracecompass.git tmf: Add an event names requirement It is preferable to use inheritance instead of String-typed values. Change-Id: I62eaa0f7a01ac459ed06c471379f8f20bcd9b4ef Signed-off-by: Geneviève Bastien Reviewed-on: https://git.eclipse.org/r/68014 Reviewed-by: Hudson CI Reviewed-by: Alexandre Montplaisir Reviewed-by: Matthew Khouzam --- diff --git a/tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/requirements/AnalysisEventRequirementTest.java b/tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/requirements/AnalysisEventRequirementTest.java new file mode 100644 index 0000000000..a54e1877b8 --- /dev/null +++ b/tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/requirements/AnalysisEventRequirementTest.java @@ -0,0 +1,142 @@ +/******************************************************************************* + * Copyright (c) 2016 École Polytechnique de Montréal + * + * 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.core.tests.analysis.requirements; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.Collection; +import java.util.Set; + +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAnalysisEventRequirement; +import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAnalysisRequirement; +import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAnalysisRequirement.ValuePriorityLevel; +import org.eclipse.tracecompass.tmf.core.event.ITmfEventField; +import org.eclipse.tracecompass.tmf.core.event.ITmfEventType; +import org.eclipse.tracecompass.tmf.core.trace.ITmfTraceWithPreDefinedEvents; +import org.eclipse.tracecompass.tmf.core.trace.TmfTrace; +import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub; +import org.junit.Test; + +import com.google.common.collect.ImmutableSet; + +/** + * Test the {@link TmfAnalysisEventRequirement} class + * + * @author Geneviève Bastien + */ +public class AnalysisEventRequirementTest { + + private static final @NonNull String EVENT1 = "abc"; + private static final @NonNull String EVENT2 = "def"; + private static final @NonNull String EVENT3 = "ghi"; + + /* A trace class with pre-defined events */ + private static class TraceWithEvents extends TmfTraceStub implements ITmfTraceWithPreDefinedEvents { + + @Override + public @NonNull Set getContainedEventTypes() { + return ImmutableSet.of( + new ITmfEventType() { + + @Override + public @NonNull String getName() { + return EVENT1; + } + + @Override + public ITmfEventField getRootField() { + return null; + } + + @Override + public Collection getFieldNames() { + return null; + } + }, + new ITmfEventType() { + + @Override + public @NonNull String getName() { + return EVENT2; + } + + @Override + public ITmfEventField getRootField() { + return null; + } + + @Override + public Collection getFieldNames() { + return null; + } + }); + } + + } + + private final @NonNull TmfTrace fTrace = new TraceWithEvents(); + + /** + * Test with optional requirements + */ + @Test + public void testOptionalRequirements() { + /* Test optional requirement */ + TmfAnalysisRequirement req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1)); + assertTrue(req.isFulfilled(fTrace)); + + req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1, EVENT3)); + assertTrue(req.isFulfilled(fTrace)); + + /* FIXME: if no optional requirement is fulfilled it should fail */ + req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT3)); + assertTrue(req.isFulfilled(fTrace)); + } + + /** + * Test with mandatory requirements + */ + @Test + public void testMandatoryRequirements() { + /* Test mandatory requirement */ + TmfAnalysisRequirement req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1), ValuePriorityLevel.MANDATORY); + assertTrue(req.isFulfilled(fTrace)); + + req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1, EVENT2), ValuePriorityLevel.MANDATORY); + assertTrue(req.isFulfilled(fTrace)); + + /* Event 3 is not an event of the trace */ + req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1, EVENT2, EVENT3), ValuePriorityLevel.MANDATORY); + assertFalse(req.isFulfilled(fTrace)); + + req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT3), ValuePriorityLevel.MANDATORY); + assertFalse(req.isFulfilled(fTrace)); + } + + /** + * Test event requirements on a trace with no pre-defined events. They + * should all pass + */ + @Test + public void testNoPreDefinedEvents() { + /* A simple trace with no pre-defined events */ + TmfTrace traceNoEvents = new TmfTraceStub(); + + TmfAnalysisRequirement req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1, EVENT3), ValuePriorityLevel.MANDATORY); + assertTrue(req.isFulfilled(traceNoEvents)); + + req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1, EVENT2), ValuePriorityLevel.OPTIONAL); + assertTrue(req.isFulfilled(traceNoEvents)); + + } + +} diff --git a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/requirements/TmfAnalysisEventRequirement.java b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/requirements/TmfAnalysisEventRequirement.java new file mode 100644 index 0000000000..dcc05a8e58 --- /dev/null +++ b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/requirements/TmfAnalysisEventRequirement.java @@ -0,0 +1,64 @@ +/******************************************************************************* + * Copyright (c) 2016 École Polytechnique de Montréal + * + * 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.core.analysis.requirements; + +import java.util.Set; + +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace; +import org.eclipse.tracecompass.tmf.core.trace.ITmfTraceWithPreDefinedEvents; +import org.eclipse.tracecompass.tmf.core.trace.TmfEventTypeCollectionHelper; + +/** + * An analysis requirement for event names + * + * @author Geneviève Bastien + * @since 2.0 + */ +public class TmfAnalysisEventRequirement extends TmfAnalysisRequirement { + + /** + * Constructor for an optional requirement + * + * TODO: The TYPE_EVENT should be removed and this class used instead + * + * @param eventNames + * The list of event names the trace must have + */ + public TmfAnalysisEventRequirement(Iterable eventNames) { + super(TmfAnalysisRequirement.TYPE_EVENT, eventNames, ValuePriorityLevel.OPTIONAL); + } + + /** + * Constructor. Instantiate a requirement object with a list of values of + * the same level + * + * @param eventNames + * The list of event names the trace must have + * @param level + * A level associated with all the values + */ + public TmfAnalysisEventRequirement(Iterable eventNames, ValuePriorityLevel level) { + super(TmfAnalysisRequirement.TYPE_EVENT, eventNames, level); + } + + @Override + public boolean isFulfilled(@NonNull ITmfTrace trace) { + + if (trace instanceof ITmfTraceWithPreDefinedEvents) { + Set traceEvents = TmfEventTypeCollectionHelper.getEventNames(((ITmfTraceWithPreDefinedEvents) trace).getContainedEventTypes()); + Set mandatoryValues = getValues(ValuePriorityLevel.MANDATORY); + return traceEvents.containsAll(mandatoryValues); + } + + return true; + } + +}