blob: 12a840653118838dffe439314f56dba3654ef1cb [file] [log] [blame]
/*******************************************************************************
* 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 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
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.TmfAbstractAnalysisRequirement;
import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAbstractAnalysisRequirement.PriorityLevel;
import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAnalysisEventRequirement;
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.After;
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<? extends @NonNull ITmfEventType> getContainedEventTypes() {
return ImmutableSet.of(
new ITmfEventType() {
@Override
public @NonNull String getName() {
return EVENT1;
}
@Override
public ITmfEventField getRootField() {
return null;
}
@Override
public Collection<String> getFieldNames() {
return null;
}
},
new ITmfEventType() {
@Override
public @NonNull String getName() {
return EVENT2;
}
@Override
public ITmfEventField getRootField() {
return null;
}
@Override
public Collection<String> getFieldNames() {
return null;
}
});
}
}
private final @NonNull TmfTrace fTrace = new TraceWithEvents();
/**
* Clean up
*/
@After
public void cleanup() {
fTrace.dispose();
}
/**
* Test with optional requirements
*/
@Test
public void testOptionalRequirements() {
/* Test optional requirement */
TmfAbstractAnalysisRequirement req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1));
assertTrue(req.test(fTrace));
req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1, EVENT3));
assertTrue(req.test(fTrace));
/* FIXME: if no optional requirement is fulfilled it should fail */
req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT3));
assertTrue(req.test(fTrace));
}
/**
* Test with mandatory requirements
*/
@Test
public void testMandatoryRequirements() {
/* Test mandatory requirement */
TmfAbstractAnalysisRequirement req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1), PriorityLevel.MANDATORY);
assertTrue(req.test(fTrace));
req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1, EVENT2), PriorityLevel.MANDATORY);
assertTrue(req.test(fTrace));
/* Event 3 is not an event of the trace */
req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1, EVENT2, EVENT3), PriorityLevel.MANDATORY);
assertFalse(req.test(fTrace));
req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT3), PriorityLevel.MANDATORY);
assertFalse(req.test(fTrace));
}
/**
* Test with {@link PriorityLevel#AT_LEAST_ONE} requirements
*/
@Test
public void testAtLeastOneRequirements() {
/* Test mandatory requirement */
TmfAbstractAnalysisRequirement req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1), PriorityLevel.AT_LEAST_ONE);
assertTrue(req.test(fTrace));
req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1, EVENT2), PriorityLevel.AT_LEAST_ONE);
assertTrue(req.test(fTrace));
/* Event 3 is not an event of the trace */
req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1, EVENT2, EVENT3), PriorityLevel.AT_LEAST_ONE);
assertTrue(req.test(fTrace));
req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT3), PriorityLevel.AT_LEAST_ONE);
assertFalse(req.test(fTrace));
}
/**
* Test with {@link PriorityLevel#ALL_OR_NOTHING} requirements
*/
@Test
public void testAllOrNothingRequirements() {
/* Test mandatory requirement */
TmfAbstractAnalysisRequirement req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1), PriorityLevel.ALL_OR_NOTHING);
assertTrue(req.test(fTrace));
req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1, EVENT2), PriorityLevel.ALL_OR_NOTHING);
assertTrue(req.test(fTrace));
/* Event 3 is not an event of the trace */
req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1, EVENT2, EVENT3), PriorityLevel.ALL_OR_NOTHING);
assertFalse(req.test(fTrace));
req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT3), PriorityLevel.ALL_OR_NOTHING);
assertTrue(req.test(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();
TmfAbstractAnalysisRequirement req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1, EVENT3), PriorityLevel.MANDATORY);
assertTrue(req.test(traceNoEvents));
req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1, EVENT2), PriorityLevel.OPTIONAL);
assertTrue(req.test(traceNoEvents));
traceNoEvents.dispose();
}
}