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
.linuxtools
.tmf
.core
.tests
.analysis
;
16 import java
.util
.ArrayList
;
17 import java
.util
.List
;
20 import org
.eclipse
.linuxtools
.tmf
.core
.analysis
.TmfAnalysisRequirement
;
21 import org
.eclipse
.linuxtools
.tmf
.core
.analysis
.TmfAnalysisRequirement
.ValuePriorityLevel
;
23 import static org
.junit
.Assert
.assertEquals
;
24 import static org
.junit
.Assert
.assertFalse
;
25 import static org
.junit
.Assert
.assertNull
;
26 import static org
.junit
.Assert
.assertTrue
;
28 import org
.junit
.Test
;
31 * Test suite for the {@link TmfAnalysisRequirement} class.
33 * @author Guilliano Molaire
34 * @author Mathieu Rail
36 public class AnalysisRequirementTest
{
38 /* Requirements used in the tests */
39 private TmfAnalysisRequirement fRequirement
;
40 private TmfAnalysisRequirement fSubRequirement
;
42 /* Types of requirement type strings */
43 private static final String TYPE_A
= "Test Type A";
44 private static final String TYPE_B
= "Test Type B";
46 /* Requirement value name strings */
47 private static final String VALUE_A
= "Test Value A";
48 private static final String VALUE_B
= "Test Value B";
49 private static final String VALUE_C
= "Test Value C";
50 private static final String VALUE_D
= "Test Value D";
51 private static final String VALUE_E
= "Test Value E";
52 private static final String VALUE_F
= "Test Value F";
54 /* Requirement information strings */
55 private static final String INFO_A
= "This is an information.";
56 private static final String INFO_B
= "This is another information.";
57 private static final String INFO_C
= "This is the last information.";
60 * Test suite for the {@link TmfAnalysisRequirement#addInformation} and the
61 * {@link TmfAnalysisRequirement#getInformation} methods.
64 public void testAddAndGetInformation() {
65 fRequirement
= new TmfAnalysisRequirement(TYPE_A
);
67 fRequirement
.addInformation(INFO_A
);
68 fRequirement
.addInformation(INFO_B
);
69 fRequirement
.addInformation(INFO_B
);
71 Set
<String
> information
= fRequirement
.getInformation();
73 assertEquals(2, information
.size());
75 assertTrue(information
.contains(INFO_A
));
76 assertTrue(information
.contains(INFO_B
));
80 * Test suite for the {@link TmfAnalysisRequirement#addValues} and the
81 * {@link TmfAnalysisRequirement#addValue} methods.
84 public void testAddValuesToRequirement() {
85 fRequirement
= new TmfAnalysisRequirement(TYPE_A
);
87 assertEquals(0, fRequirement
.getValues().size());
89 List
<String
> values
= new ArrayList
<>();
96 * Add values to the requirement with the same level, Value C should
99 fRequirement
.addValues(values
, ValuePriorityLevel
.MANDATORY
);
100 assertEquals(3, fRequirement
.getValues().size());
103 * The new value should only exist once and its level should be
106 fRequirement
.addValue(VALUE_D
, ValuePriorityLevel
.OPTIONAL
);
107 fRequirement
.addValue(VALUE_D
, ValuePriorityLevel
.MANDATORY
);
109 assertEquals(4, fRequirement
.getValues().size());
110 assertEquals(ValuePriorityLevel
.MANDATORY
, fRequirement
.getValueLevel(VALUE_D
));
114 * Test suite for the {@link TmfAnalysisRequirement#getValueLevel} method.
117 public void testGetValueLevel() {
118 fRequirement
= new TmfAnalysisRequirement(TYPE_A
);
119 fRequirement
.addValue(VALUE_A
, ValuePriorityLevel
.OPTIONAL
);
121 /* Try to get the level of a value */
122 assertEquals(ValuePriorityLevel
.OPTIONAL
, fRequirement
.getValueLevel(VALUE_A
));
124 /* Try to get the level of a value that doesn't exist */
125 assertNull(fRequirement
.getValueLevel(VALUE_B
));
129 * Test suite for the {@link TmfAnalysisRequirement#merge} method with the
130 * parameter value MANDATORY.
133 public void testMergeMandatory() {
134 initMergeRequirements(TYPE_A
, TYPE_A
);
136 assertTrue(fRequirement
.merge(fSubRequirement
, ValuePriorityLevel
.MANDATORY
));
138 assertEquals(fRequirement
.getValues().size(), 6);
140 assertEquals(ValuePriorityLevel
.MANDATORY
, fRequirement
.getValueLevel(VALUE_A
));
141 assertEquals(ValuePriorityLevel
.MANDATORY
, fRequirement
.getValueLevel(VALUE_B
));
143 assertEquals(ValuePriorityLevel
.MANDATORY
, fRequirement
.getValueLevel(VALUE_C
));
144 assertEquals(ValuePriorityLevel
.OPTIONAL
, fRequirement
.getValueLevel(VALUE_D
));
146 assertEquals(ValuePriorityLevel
.MANDATORY
, fRequirement
.getValueLevel(VALUE_E
));
147 assertEquals(ValuePriorityLevel
.OPTIONAL
, fRequirement
.getValueLevel(VALUE_F
));
149 Set
<String
> information
= fRequirement
.getInformation();
151 assertEquals(3, information
.size());
153 assertTrue(information
.contains(INFO_A
));
154 assertTrue(information
.contains(INFO_B
));
155 assertTrue(information
.contains(INFO_C
));
159 * Test suite for the {@link TmfAnalysisRequirement#merge} method with the
160 * parameter value OPTIONAL.
163 public void testMergeOptional() {
164 initMergeRequirements(TYPE_A
, TYPE_A
);
166 assertTrue(fRequirement
.merge(fSubRequirement
, ValuePriorityLevel
.OPTIONAL
));
168 assertEquals(6, fRequirement
.getValues().size());
170 assertEquals(ValuePriorityLevel
.MANDATORY
, fRequirement
.getValueLevel(VALUE_A
));
171 assertEquals(ValuePriorityLevel
.MANDATORY
, fRequirement
.getValueLevel(VALUE_B
));
173 assertEquals(ValuePriorityLevel
.OPTIONAL
, fRequirement
.getValueLevel(VALUE_C
));
174 assertEquals(ValuePriorityLevel
.OPTIONAL
, fRequirement
.getValueLevel(VALUE_D
));
176 assertEquals(ValuePriorityLevel
.OPTIONAL
, fRequirement
.getValueLevel(VALUE_E
));
177 assertEquals(ValuePriorityLevel
.OPTIONAL
, fRequirement
.getValueLevel(VALUE_F
));
179 Set
<String
> information
= fRequirement
.getInformation();
181 assertEquals(3, information
.size());
183 assertTrue(information
.contains(INFO_A
));
184 assertTrue(information
.contains(INFO_B
));
185 assertTrue(information
.contains(INFO_C
));
189 * Test suite for the {@link TmfAnalysisRequirement#merge} method with
190 * different requirement types.
193 public void testMergeDifferentTypes() {
194 initMergeRequirements(TYPE_A
, TYPE_B
);
196 assertFalse(fRequirement
.merge(fSubRequirement
, ValuePriorityLevel
.OPTIONAL
));
200 * Test suite for the {@link TmfAnalysisRequirement#isSameType} method.
203 public void testIsSameRequirementType() {
204 fRequirement
= new TmfAnalysisRequirement(TYPE_A
);
206 assertTrue(fRequirement
.isSameType(new TmfAnalysisRequirement(TYPE_A
)));
207 assertFalse(fRequirement
.isSameType(new TmfAnalysisRequirement(TYPE_B
)));
211 * Initialize the requirement and sub-requirement for the merge tests.
214 * The type of the first requirement
216 * The type of the second requirement
218 private void initMergeRequirements(String typeA
, String typeB
) {
219 fRequirement
= new TmfAnalysisRequirement(typeA
);
220 fRequirement
.addValue(VALUE_A
, ValuePriorityLevel
.MANDATORY
);
221 fRequirement
.addValue(VALUE_B
, ValuePriorityLevel
.MANDATORY
);
223 fRequirement
.addValue(VALUE_C
, ValuePriorityLevel
.OPTIONAL
);
224 fRequirement
.addValue(VALUE_D
, ValuePriorityLevel
.OPTIONAL
);
226 fRequirement
.addInformation(INFO_A
);
227 fRequirement
.addInformation(INFO_B
);
229 /* This sub-requirement will be merged into requirement */
230 fSubRequirement
= new TmfAnalysisRequirement(typeB
);
231 fSubRequirement
.addValue(VALUE_A
, ValuePriorityLevel
.MANDATORY
);
232 fSubRequirement
.addValue(VALUE_B
, ValuePriorityLevel
.OPTIONAL
);
234 fSubRequirement
.addValue(VALUE_C
, ValuePriorityLevel
.MANDATORY
);
235 fSubRequirement
.addValue(VALUE_D
, ValuePriorityLevel
.OPTIONAL
);
237 fSubRequirement
.addValue(VALUE_E
, ValuePriorityLevel
.MANDATORY
);
238 fSubRequirement
.addValue(VALUE_F
, ValuePriorityLevel
.OPTIONAL
);
240 fSubRequirement
.addInformation(INFO_B
);
241 fSubRequirement
.addInformation(INFO_C
);