1 package org.djutils.data;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertNotNull;
5 import static org.junit.Assert.assertNull;
6 import static org.junit.Assert.fail;
7
8 import org.djunits.unit.DirectionUnit;
9 import org.djunits.unit.DurationUnit;
10 import org.djunits.unit.LengthUnit;
11 import org.djunits.unit.TimeUnit;
12 import org.djunits.value.vdouble.scalar.Length;
13 import org.djunits.value.vdouble.scalar.Time;
14 import org.djunits.value.vfloat.scalar.FloatDirection;
15 import org.djunits.value.vfloat.scalar.FloatDuration;
16 import org.djutils.data.serialization.TextSerializationException;
17 import org.djutils.data.serialization.TextSerializer;
18 import org.junit.Test;
19
20
21
22
23
24
25
26
27
28
29
30
31 public class TestTextSerializers
32 {
33
34
35
36
37 @Test
38 public void testPrimitiveSerializers() throws TextSerializationException
39 {
40 int i = 10;
41 TextSerializer<?> serializer = TextSerializer.resolve(int.class);
42 assertEquals(i, serializer.deserialize(serializer.serialize(i)));
43
44 double d = 124.5;
45 serializer = TextSerializer.resolve(double.class);
46 assertEquals(d, serializer.deserialize(serializer.serialize(d)));
47
48 float f = 11.4f;
49 serializer = TextSerializer.resolve(float.class);
50 assertEquals(f, serializer.deserialize(serializer.serialize(f)));
51
52 long l = 100_456_678L;
53 serializer = TextSerializer.resolve(long.class);
54 assertEquals(l, serializer.deserialize(serializer.serialize(l)));
55
56 short s = (short) 12.34;
57 serializer = TextSerializer.resolve(short.class);
58 assertEquals(s, serializer.deserialize(serializer.serialize(s)));
59
60 byte b = (byte) 67;
61 serializer = TextSerializer.resolve(byte.class);
62 assertEquals(b, serializer.deserialize(serializer.serialize(b)));
63
64 char c = 'a';
65 serializer = TextSerializer.resolve(char.class);
66 assertEquals(c, serializer.deserialize(serializer.serialize(c)));
67
68 boolean t = true;
69 serializer = TextSerializer.resolve(boolean.class);
70 assertEquals(t, serializer.deserialize(serializer.serialize(t)));
71 }
72
73
74
75
76
77 @Test
78 public void testNumberSerializers() throws TextSerializationException
79 {
80 Integer i = 10;
81 TextSerializer<?> serializer = TextSerializer.resolve(i.getClass());
82 assertEquals(i, serializer.deserialize(serializer.serialize(i)));
83
84 Double d = 124.5;
85 serializer = TextSerializer.resolve(d.getClass());
86 assertEquals(d, serializer.deserialize(serializer.serialize(d)));
87
88 Float f = 11.4f;
89 serializer = TextSerializer.resolve(f.getClass());
90 assertEquals(f, serializer.deserialize(serializer.serialize(f)));
91
92 Long l = 100_456_678L;
93 serializer = TextSerializer.resolve(l.getClass());
94 assertEquals(l, serializer.deserialize(serializer.serialize(l)));
95
96 Short s = (short) 12.34;
97 serializer = TextSerializer.resolve(s.getClass());
98 assertEquals(s, serializer.deserialize(serializer.serialize(s)));
99
100 Byte b = (byte) 67;
101 serializer = TextSerializer.resolve(b.getClass());
102 assertEquals(b, serializer.deserialize(serializer.serialize(b)));
103
104 Character c = 'a';
105 serializer = TextSerializer.resolve(c.getClass());
106 assertEquals(c, serializer.deserialize(serializer.serialize(c)));
107
108 Boolean t = true;
109 serializer = TextSerializer.resolve(t.getClass());
110 assertEquals(t, serializer.deserialize(serializer.serialize(t)));
111 }
112
113
114
115
116
117 @Test
118 public void testStringSerializer() throws TextSerializationException
119 {
120 String s = "abc, &%#";
121 TextSerializer<?> serializer = TextSerializer.resolve(s.getClass());
122 assertEquals(s, serializer.deserialize(serializer.serialize(s)));
123 }
124
125
126
127
128
129 @Test
130 public void testSerializerErrors() throws TextSerializationException
131 {
132 try
133 {
134 TextSerializer.resolve(Object.class);
135 fail("resolving an unknown serializer should have raised an exception");
136 }
137 catch (TextSerializationException tse)
138 {
139
140 }
141
142 try
143 {
144 TextSerializer.resolve(null);
145 fail("null class should have raised an exception");
146 }
147 catch (NullPointerException npe)
148 {
149
150 }
151
152 Exception e = new TextSerializationException();
153 assertNull(e.getMessage());
154 assertNull(e.getCause());
155
156 e = new TextSerializationException("bla");
157 assertEquals("bla", e.getMessage());
158 assertNull(e.getCause());
159
160 e = new TextSerializationException(new IllegalArgumentException("abc"));
161 assertNotNull(e.getMessage());
162 assertEquals(IllegalArgumentException.class, e.getCause().getClass());
163 assertEquals("abc", e.getCause().getMessage());
164
165 e = new TextSerializationException("bla", new IllegalArgumentException("abc"));
166 assertEquals("bla", e.getMessage());
167 assertEquals(IllegalArgumentException.class, e.getCause().getClass());
168 assertEquals("abc", e.getCause().getMessage());
169 }
170
171
172
173
174
175 @Test
176 public void testScalarSerializers() throws TextSerializationException
177 {
178 Length length = new Length(20.0, LengthUnit.KILOMETER);
179 TextSerializer<?> serializer = TextSerializer.resolve(length.getClass());
180 assertEquals(length, serializer.deserialize(serializer.serialize(length)));
181
182
183 length = new Length(123.456, LengthUnit.MILE);
184 serializer = TextSerializer.resolve(length.getClass());
185 assertEquals(length, serializer.deserialize(serializer.serialize(length)));
186
187 Time time = new Time(10.0, TimeUnit.BASE_DAY);
188 serializer = TextSerializer.resolve(time.getClass());
189 assertEquals(time, serializer.deserialize(serializer.serialize(time)));
190
191 FloatDuration duration = new FloatDuration(12.5f, DurationUnit.WEEK);
192 serializer = TextSerializer.resolve(duration.getClass());
193 assertEquals(duration, serializer.deserialize(serializer.serialize(duration)));
194
195
196 duration = new FloatDuration(876.32f, DurationUnit.MINUTE);
197 serializer = TextSerializer.resolve(duration.getClass());
198 assertEquals(duration, serializer.deserialize(serializer.serialize(duration)));
199
200 FloatDirection direction = new FloatDirection(80.5, DirectionUnit.EAST_DEGREE);
201 serializer = TextSerializer.resolve(direction.getClass());
202 assertEquals(direction, serializer.deserialize(serializer.serialize(direction)));
203 }
204 }