1 /*******************************************************************************
2 * Copyright (c) 2013, 2014 Ericsson
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
9 * Matthew Khouzam - Initial API and implementation
10 *******************************************************************************/
12 package org
.eclipse
.linuxtools
.ctf
.core
.tests
.types
;
14 import static org
.junit
.Assert
.assertEquals
;
15 import static org
.junit
.Assert
.assertNotNull
;
16 import static org
.junit
.Assert
.assertNull
;
18 import java
.nio
.ByteBuffer
;
19 import java
.nio
.ByteOrder
;
21 import org
.eclipse
.jdt
.annotation
.NonNull
;
22 import org
.eclipse
.linuxtools
.ctf
.core
.event
.io
.BitBuffer
;
23 import org
.eclipse
.linuxtools
.ctf
.core
.event
.scope
.IDefinitionScope
;
24 import org
.eclipse
.linuxtools
.ctf
.core
.event
.types
.ArrayDeclaration
;
25 import org
.eclipse
.linuxtools
.ctf
.core
.event
.types
.ArrayDefinition
;
26 import org
.eclipse
.linuxtools
.ctf
.core
.event
.types
.Definition
;
27 import org
.eclipse
.linuxtools
.ctf
.core
.event
.types
.Encoding
;
28 import org
.eclipse
.linuxtools
.ctf
.core
.event
.types
.EnumDeclaration
;
29 import org
.eclipse
.linuxtools
.ctf
.core
.event
.types
.EnumDefinition
;
30 import org
.eclipse
.linuxtools
.ctf
.core
.event
.types
.FloatDeclaration
;
31 import org
.eclipse
.linuxtools
.ctf
.core
.event
.types
.IntegerDeclaration
;
32 import org
.eclipse
.linuxtools
.ctf
.core
.event
.types
.IntegerDefinition
;
33 import org
.eclipse
.linuxtools
.ctf
.core
.event
.types
.SequenceDefinition
;
34 import org
.eclipse
.linuxtools
.ctf
.core
.event
.types
.StringDeclaration
;
35 import org
.eclipse
.linuxtools
.ctf
.core
.event
.types
.StringDefinition
;
36 import org
.eclipse
.linuxtools
.ctf
.core
.event
.types
.StructDeclaration
;
37 import org
.eclipse
.linuxtools
.ctf
.core
.event
.types
.StructDefinition
;
38 import org
.eclipse
.linuxtools
.ctf
.core
.event
.types
.VariantDeclaration
;
39 import org
.eclipse
.linuxtools
.ctf
.core
.event
.types
.VariantDefinition
;
40 import org
.eclipse
.linuxtools
.ctf
.core
.trace
.CTFReaderException
;
41 import org
.junit
.Before
;
42 import org
.junit
.Test
;
44 import com
.google
.common
.collect
.ImmutableList
;
47 * The class <code>VariantDefinitionTest</code> contains tests for the class
48 * <code>{@link VariantDefinition}</code>.
51 * @version $Revision: 1.0 $
53 public class VariantDefinitionTest
{
55 private VariantDefinition fixture
;
57 StructDefinition fStructDefinition
;
58 @NonNull private static final String TEST_STRUCT_ID
= "testStruct";
60 @NonNull private static final String ENUM_7
= "g";
61 @NonNull private static final String ENUM_6
= "f";
62 @NonNull private static final String ENUM_5
= "e";
63 @NonNull private static final String ENUM_4
= "d";
64 @NonNull private static final String ENUM_3
= "c";
65 @NonNull private static final String ENUM_2
= "b";
66 @NonNull private static final String ENUM_1
= "a";
68 @NonNull private static final String TAG_ID
= "a";
70 @NonNull private static final String LENGTH_SEQ
= "_len";
71 @NonNull private static final String VAR_FIELD_NAME
= "var";
72 private static final String ENUM_8
= null;
75 * Perform pre-test initialization.
77 * Not sure it needs to be that complicated, oh well...
79 * @throws CTFReaderException
83 public void setUp() throws CTFReaderException
{
84 StructDeclaration sDec
= new StructDeclaration(12);
85 StructDeclaration smallStruct
= new StructDeclaration(8);
86 IntegerDeclaration iDec
= IntegerDeclaration
.createDeclaration(32, false, 32, ByteOrder
.BIG_ENDIAN
, Encoding
.NONE
, "", 8);
87 IntegerDeclaration lenDec
= IntegerDeclaration
.createDeclaration(8, false, 8, ByteOrder
.BIG_ENDIAN
, Encoding
.NONE
, "", 8);
88 StringDeclaration strDec
= new StringDeclaration();
89 EnumDeclaration enDec
= new EnumDeclaration(iDec
);
90 VariantDeclaration varDec
= new VariantDeclaration();
91 EnumDeclaration tagDec
= new EnumDeclaration(iDec
);
92 ArrayDeclaration arrDec
= new ArrayDeclaration(2, iDec
);
93 FloatDeclaration fDec
= new FloatDeclaration(8, 24, ByteOrder
.BIG_ENDIAN
, 8);
94 tagDec
.add(0, 1, ENUM_1
);
95 tagDec
.add(2, 3, ENUM_2
);
96 tagDec
.add(4, 5, ENUM_3
);
97 tagDec
.add(8, 9, ENUM_5
);
98 tagDec
.add(10, 11, ENUM_6
);
99 tagDec
.add(12, 13, ENUM_7
);
100 varDec
.addField(ENUM_4
, lenDec
);
101 varDec
.addField(ENUM_7
, fDec
);
102 varDec
.addField(ENUM_6
, smallStruct
);
103 varDec
.addField(ENUM_5
, enDec
);
104 varDec
.addField(ENUM_3
, arrDec
);
105 varDec
.addField(ENUM_2
, iDec
);
106 varDec
.addField(ENUM_1
, strDec
);
108 sDec
.addField(TAG_ID
, tagDec
);
109 sDec
.addField(LENGTH_SEQ
, lenDec
);
111 sDec
.addField(VAR_FIELD_NAME
, varDec
);
112 varDec
.setTag(TAG_ID
);
114 ByteBuffer byteBuffer
= ByteBuffer
.allocate(100);
115 BitBuffer bb
= new BitBuffer(byteBuffer
);
117 byteBuffer
.putInt(1);
118 byteBuffer
.putInt(2);
119 byteBuffer
.putInt(3);
121 fStructDefinition
= sDec
.createDefinition(null, TEST_STRUCT_ID
, bb
);
122 fixture
= (VariantDefinition
) fStructDefinition
.getDefinition(VAR_FIELD_NAME
);
126 * Run the VariantDefinition(VariantDeclaration,DefinitionScope,String)
128 * @throws CTFReaderException
132 public void testVariantDefinition() throws CTFReaderException
{
133 VariantDeclaration declaration
= new VariantDeclaration();
134 declaration
.setTag("");
135 VariantDeclaration variantDeclaration
= new VariantDeclaration();
136 variantDeclaration
.addField("", new EnumDeclaration(IntegerDeclaration
.INT_32B_DECL
));
137 variantDeclaration
.addField("a", IntegerDeclaration
.INT_64B_DECL
);
138 declaration
.addField(ENUM_3
, new StringDeclaration());
139 variantDeclaration
.setTag("a");
141 byte[] bytes
= new byte[128];
142 ByteBuffer byb
= ByteBuffer
.wrap(bytes
);
145 byb
.putShort((short) 2);
146 byb
.put(new String("hello").getBytes());
148 BitBuffer bb
= new BitBuffer(byb
);
149 VariantDefinition variantDefinition
= variantDeclaration
.createDefinition(fStructDefinition
, "field", bb
);
150 EnumDeclaration declaration2
= new EnumDeclaration(IntegerDeclaration
.INT_8_DECL
);
151 declaration2
.add(0, 2, ENUM_3
);
152 EnumDefinition enumDefinition
= new EnumDefinition(
156 new IntegerDefinition(
157 IntegerDeclaration
.INT_8_DECL
,
162 IDefinitionScope definitionScope
= new StructDefinition(
163 new StructDeclaration(1L),
166 ImmutableList
.<String
> of("", "variant"),
167 new Definition
[] { enumDefinition
, variantDefinition
}
169 String fieldName
= "";
170 declaration
.setTag("");
171 VariantDefinition result
= declaration
.createDefinition(definitionScope
, fieldName
, bb
);
172 assertNotNull(result
);
176 * Run the Definition getCurrentField() method test.
179 public void testGetCurrentField() {
180 Definition result
= fixture
.getCurrentField();
181 assertNotNull(result
);
185 * Run the String getCurrentFieldName() method test.
188 public void testGetCurrentFieldName() {
189 String result
= fixture
.getCurrentFieldName();
190 assertNotNull(result
);
194 * Run the VariantDeclaration getDeclaration() method test.
197 public void testGetDeclaration() {
198 VariantDeclaration result
= fixture
.getDeclaration();
199 assertNotNull(result
);
203 * Run the HashMap<String, Definition> getDefinitions() method test.
206 public void testGetDefinitions() {
207 Definition result
= fixture
.getCurrentField();
208 assertNotNull(result
);
212 * Run the String getPath() method test.
215 public void testGetPath() {
216 String result
= fixture
.getScopePath().toString();
217 assertNotNull(result
);
221 * Run the ArrayDefinition lookupArray(String) method test.
224 public void testLookupArray() {
225 ArrayDefinition result
= fixture
.lookupArray(ENUM_3
);
230 * Run the Definition lookupDefinition(String) method test.
233 public void testLookupDefinition() {
234 Definition result
= fixture
.lookupDefinition(ENUM_1
);
235 assertNotNull(result
);
236 assertEquals("a", ((EnumDefinition
) result
).getStringValue());
240 * Run the EnumDefinition lookupEnum(String) method test.
243 public void testLookupEnum() {
244 EnumDefinition result
= fixture
.lookupEnum(ENUM_5
);
249 * Run the IntegerDefinition lookupInteger(String) method test.
252 public void testLookupInteger() {
253 IntegerDefinition result
= fixture
.lookupInteger(ENUM_2
);
258 * Run the SequenceDefinition lookupSequence(String) method test.
261 public void testLookupSequence_1() {
262 SequenceDefinition result
= fixture
.lookupSequence(ENUM_4
);
267 * Run the StringDefinition lookupString(String) method test.
270 public void testLookupString() {
271 StringDefinition result
= fixture
.lookupString(ENUM_1
);
276 * Run the StructDefinition lookupStruct(String) method test.
279 public void testLookupStruct() {
280 StructDefinition result
= fixture
.lookupStruct(ENUM_6
);
285 * Run the VariantDefinition lookupVariant(String) method test.
288 public void testLookupVariant() {
289 VariantDefinition result
= fixture
.lookupVariant(ENUM_8
);
294 * Run the String toString() method test.
297 public void testToString() {
298 String result
= fixture
.toString();
299 assertEquals("{ a = \"\" }", result
);