1 /*******************************************************************************
2 * Copyright (c) 2014 École Polytechnique de Montréal
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
10 * Guilliano Molaire - Initial API and implementation
11 * Mathieu Rail - Initial API and implementation
12 *******************************************************************************/
14 package org
.eclipse
.tracecompass
.tmf
.core
.tests
.analysis
;
16 import java
.util
.ArrayList
;
17 import java
.util
.List
;
20 import org
.eclipse
.jdt
.annotation
.NonNull
;
21 import org
.eclipse
.tracecompass
.tmf
.core
.analysis
.TmfAnalysisRequirement
;
22 import org
.eclipse
.tracecompass
.tmf
.core
.analysis
.TmfAnalysisRequirement
.ValuePriorityLevel
;
24 import static org
.junit
.Assert
.assertEquals
;
25 import static org
.junit
.Assert
.assertFalse
;
26 import static org
.junit
.Assert
.assertNull
;
27 import static org
.junit
.Assert
.assertTrue
;
29 import org
.junit
.Test
;
32 * Test suite for the {@link TmfAnalysisRequirement} class.
34 * @author Guilliano Molaire
35 * @author Mathieu Rail
37 public class AnalysisRequirementTest
{
39 /* Requirements used in the tests */
40 private TmfAnalysisRequirement fRequirement
;
41 private TmfAnalysisRequirement fSubRequirement
;
43 /* Types of requirement type strings */
44 private static final String TYPE_A
= "Test Type A";
45 private static final String TYPE_B
= "Test Type B";
47 /* Requirement value name strings */
48 private static final String VALUE_A
= "Test Value A";
49 private static final String VALUE_B
= "Test Value B";
50 private static final String VALUE_C
= "Test Value C";
51 private static final String VALUE_D
= "Test Value D";
52 private static final String VALUE_E
= "Test Value E";
53 private static final String VALUE_F
= "Test Value F";
55 /* Requirement information strings */
56 private static final @NonNull String INFO_A
= "This is an information.";
57 private static final @NonNull String INFO_B
= "This is another information.";
58 private static final @NonNull String INFO_C
= "This is the last information.";
61 * Test suite for the {@link TmfAnalysisRequirement#addInformation} and the
62 * {@link TmfAnalysisRequirement#getInformation} methods.
65 public void testAddAndGetInformation() {
66 fRequirement
= new TmfAnalysisRequirement(TYPE_A
);
68 fRequirement
.addInformation(INFO_A
);
69 fRequirement
.addInformation(INFO_B
);
70 fRequirement
.addInformation(INFO_B
);
72 Set
<String
> information
= fRequirement
.getInformation();
74 assertEquals(2, information
.size());
76 assertTrue(information
.contains(INFO_A
));
77 assertTrue(information
.contains(INFO_B
));
81 * Test suite for the {@link TmfAnalysisRequirement#addValues} and the
82 * {@link TmfAnalysisRequirement#addValue} methods.
85 public void testAddValuesToRequirement() {
86 fRequirement
= new TmfAnalysisRequirement(TYPE_A
);
88 assertEquals(0, fRequirement
.getValues().size());
90 List
<String
> values
= new ArrayList
<>();
97 * Add values to the requirement with the same level, Value C should
100 fRequirement
.addValues(values
, ValuePriorityLevel
.MANDATORY
);
101 assertEquals(3, fRequirement
.getValues().size());
104 * The new value should only exist once and its level should be
107 fRequirement
.addValue(VALUE_D
, ValuePriorityLevel
.OPTIONAL
);
108 fRequirement
.addValue(VALUE_D
, ValuePriorityLevel
.MANDATORY
);
110 assertEquals(4, fRequirement
.getValues().size());
111 assertEquals(ValuePriorityLevel
.MANDATORY
, fRequirement
.getValueLevel(VALUE_D
));
115 * Test suite for the {@link TmfAnalysisRequirement#getValueLevel} method.
118 public void testGetValueLevel() {
119 fRequirement
= new TmfAnalysisRequirement(TYPE_A
);
120 fRequirement
.addValue(VALUE_A
, ValuePriorityLevel
.OPTIONAL
);
122 /* Try to get the level of a value */
123 assertEquals(ValuePriorityLevel
.OPTIONAL
, fRequirement
.getValueLevel(VALUE_A
));
125 /* Try to get the level of a value that doesn't exist */
126 assertNull(fRequirement
.getValueLevel(VALUE_B
));
130 * Test suite for the {@link TmfAnalysisRequirement#merge} method with the
131 * parameter value MANDATORY.
134 public void testMergeMandatory() {
135 initMergeRequirements(TYPE_A
, TYPE_A
);
137 assertTrue(fRequirement
.merge(fSubRequirement
, ValuePriorityLevel
.MANDATORY
));
139 assertEquals(fRequirement
.getValues().size(), 6);
141 assertEquals(ValuePriorityLevel
.MANDATORY
, fRequirement
.getValueLevel(VALUE_A
));
142 assertEquals(ValuePriorityLevel
.MANDATORY
, fRequirement
.getValueLevel(VALUE_B
));
144 assertEquals(ValuePriorityLevel
.MANDATORY
, fRequirement
.getValueLevel(VALUE_C
));
145 assertEquals(ValuePriorityLevel
.OPTIONAL
, fRequirement
.getValueLevel(VALUE_D
));
147 assertEquals(ValuePriorityLevel
.MANDATORY
, fRequirement
.getValueLevel(VALUE_E
));
148 assertEquals(ValuePriorityLevel
.OPTIONAL
, fRequirement
.getValueLevel(VALUE_F
));
150 Set
<String
> information
= fRequirement
.getInformation();
152 assertEquals(3, information
.size());
154 assertTrue(information
.contains(INFO_A
));
155 assertTrue(information
.contains(INFO_B
));
156 assertTrue(information
.contains(INFO_C
));
160 * Test suite for the {@link TmfAnalysisRequirement#merge} method with the
161 * parameter value OPTIONAL.
164 public void testMergeOptional() {
165 initMergeRequirements(TYPE_A
, TYPE_A
);
167 assertTrue(fRequirement
.merge(fSubRequirement
, ValuePriorityLevel
.OPTIONAL
));
169 assertEquals(6, fRequirement
.getValues().size());
171 assertEquals(ValuePriorityLevel
.MANDATORY
, fRequirement
.getValueLevel(VALUE_A
));
172 assertEquals(ValuePriorityLevel
.MANDATORY
, fRequirement
.getValueLevel(VALUE_B
));
174 assertEquals(ValuePriorityLevel
.OPTIONAL
, fRequirement
.getValueLevel(VALUE_C
));
175 assertEquals(ValuePriorityLevel
.OPTIONAL
, fRequirement
.getValueLevel(VALUE_D
));
177 assertEquals(ValuePriorityLevel
.OPTIONAL
, fRequirement
.getValueLevel(VALUE_E
));
178 assertEquals(ValuePriorityLevel
.OPTIONAL
, fRequirement
.getValueLevel(VALUE_F
));
180 Set
<String
> information
= fRequirement
.getInformation();
182 assertEquals(3, information
.size());
184 assertTrue(information
.contains(INFO_A
));
185 assertTrue(information
.contains(INFO_B
));
186 assertTrue(information
.contains(INFO_C
));
190 * Test suite for the {@link TmfAnalysisRequirement#merge} method with
191 * different requirement types.
194 public void testMergeDifferentTypes() {
195 initMergeRequirements(TYPE_A
, TYPE_B
);
197 assertFalse(fRequirement
.merge(fSubRequirement
, ValuePriorityLevel
.OPTIONAL
));
201 * Test suite for the {@link TmfAnalysisRequirement#isSameType} method.
204 public void testIsSameRequirementType() {
205 fRequirement
= new TmfAnalysisRequirement(TYPE_A
);
207 assertTrue(fRequirement
.isSameType(new TmfAnalysisRequirement(TYPE_A
)));
208 assertFalse(fRequirement
.isSameType(new TmfAnalysisRequirement(TYPE_B
)));
212 * Initialize the requirement and sub-requirement for the merge tests.
215 * The type of the first requirement
217 * The type of the second requirement
219 private void initMergeRequirements(String typeA
, String typeB
) {
220 fRequirement
= new TmfAnalysisRequirement(typeA
);
221 fRequirement
.addValue(VALUE_A
, ValuePriorityLevel
.MANDATORY
);
222 fRequirement
.addValue(VALUE_B
, ValuePriorityLevel
.MANDATORY
);
224 fRequirement
.addValue(VALUE_C
, ValuePriorityLevel
.OPTIONAL
);
225 fRequirement
.addValue(VALUE_D
, ValuePriorityLevel
.OPTIONAL
);
227 fRequirement
.addInformation(INFO_A
);
228 fRequirement
.addInformation(INFO_B
);
230 /* This sub-requirement will be merged into requirement */
231 fSubRequirement
= new TmfAnalysisRequirement(typeB
);
232 fSubRequirement
.addValue(VALUE_A
, ValuePriorityLevel
.MANDATORY
);
233 fSubRequirement
.addValue(VALUE_B
, ValuePriorityLevel
.OPTIONAL
);
235 fSubRequirement
.addValue(VALUE_C
, ValuePriorityLevel
.MANDATORY
);
236 fSubRequirement
.addValue(VALUE_D
, ValuePriorityLevel
.OPTIONAL
);
238 fSubRequirement
.addValue(VALUE_E
, ValuePriorityLevel
.MANDATORY
);
239 fSubRequirement
.addValue(VALUE_F
, ValuePriorityLevel
.OPTIONAL
);
241 fSubRequirement
.addInformation(INFO_B
);
242 fSubRequirement
.addInformation(INFO_C
);