1 package org.opentrafficsim.xml.bindings;
2
3 import static org.junit.Assert.assertEquals;
4
5 import javax.xml.bind.JAXBException;
6
7 import org.djunits.unit.LengthUnit;
8 import org.djunits.value.vdouble.scalar.Length;
9 import org.djutils.exceptions.Try;
10 import org.opentrafficsim.xml.bindings.types.LengthBeginEnd;
11
12
13
14
15
16
17
18
19
20 public class LengthBeginEndAdapterTest
21 {
22
23 LengthUnit[] units = new LengthUnit[] {LengthUnit.MILLIMETER, LengthUnit.CENTIMETER, LengthUnit.DECIMETER, LengthUnit.METER,
24 LengthUnit.DECAMETER, LengthUnit.HECTOMETER, LengthUnit.KILOMETER, LengthUnit.MILE, LengthUnit.YARD,
25 LengthUnit.FOOT};
26
27
28 String[] unitStrings = new String[] {"mm", "cm", "dm", "m", "dam", "hm", "km", "mi", "yd", "ft"};
29
30
31
32
33
34 public void testLengthBeginEndAdapter() throws JAXBException
35 {
36 LengthBeginEndAdapter lbeAdapter = new LengthBeginEndAdapter();
37
38 LengthBeginEnd lbeBegin = new LengthBeginEnd(true, Length.ZERO);
39 LengthBeginEnd lbeEnd = new LengthBeginEnd(false, Length.ZERO);
40
41 assertEquals(lbeBegin, lbeAdapter.unmarshal("BEGIN"));
42 assertEquals(lbeEnd, lbeAdapter.unmarshal("END"));
43
44 assertEquals("BEGIN", lbeAdapter.marshal(lbeBegin));
45 assertEquals("END", lbeAdapter.marshal(lbeEnd));
46
47 LengthBeginEnd lbeFraction00 = new LengthBeginEnd(0.0);
48 LengthBeginEnd lbeFraction05 = new LengthBeginEnd(0.5);
49 LengthBeginEnd lbeFraction10 = new LengthBeginEnd(1.0);
50
51 assertEquals(lbeFraction00, lbeAdapter.unmarshal("0.0"));
52 assertEquals(lbeFraction00, lbeAdapter.unmarshal(".0"));
53 assertEquals(lbeFraction00, lbeAdapter.unmarshal("0"));
54 assertEquals(lbeFraction00, lbeAdapter.unmarshal("0.00"));
55
56 assertEquals(lbeFraction05, lbeAdapter.unmarshal("0.5"));
57 assertEquals(lbeFraction05, lbeAdapter.unmarshal(".5"));
58 assertEquals(lbeFraction05, lbeAdapter.unmarshal("0.50"));
59
60 assertEquals(lbeFraction10, lbeAdapter.unmarshal("1.0"));
61 assertEquals(lbeFraction10, lbeAdapter.unmarshal("1"));
62 assertEquals(lbeFraction10, lbeAdapter.unmarshal("1.00"));
63
64 assertEquals(lbeFraction00, lbeAdapter.unmarshal("0.0%"));
65 assertEquals(lbeFraction00, lbeAdapter.unmarshal(".0%"));
66 assertEquals(lbeFraction00, lbeAdapter.unmarshal("0%"));
67 assertEquals(lbeFraction00, lbeAdapter.unmarshal("0.00%"));
68
69 assertEquals(lbeFraction00, lbeAdapter.unmarshal("0.0 %"));
70 assertEquals(lbeFraction00, lbeAdapter.unmarshal(".0 %"));
71 assertEquals(lbeFraction00, lbeAdapter.unmarshal("0 %"));
72 assertEquals(lbeFraction00, lbeAdapter.unmarshal("0.00 %"));
73
74 assertEquals(lbeFraction05, lbeAdapter.unmarshal("50%"));
75 assertEquals(lbeFraction05, lbeAdapter.unmarshal("50.0%"));
76
77 assertEquals(lbeFraction05, lbeAdapter.unmarshal("50 %"));
78 assertEquals(lbeFraction05, lbeAdapter.unmarshal("50.0 %"));
79
80 assertEquals(lbeFraction10, lbeAdapter.unmarshal("100%"));
81 assertEquals(lbeFraction10, lbeAdapter.unmarshal("100.0%"));
82
83 assertEquals(lbeFraction10, lbeAdapter.unmarshal("100 %"));
84 assertEquals(lbeFraction10, lbeAdapter.unmarshal("100.0 %"));
85
86 assertEquals("0.0", lbeAdapter.marshal(lbeFraction00));
87 assertEquals("0.5", lbeAdapter.marshal(lbeFraction05));
88 assertEquals("1.0", lbeAdapter.marshal(lbeFraction10));
89
90 Try.testFail(() -> lbeAdapter.unmarshal("XYZ"));
91 Try.testFail(() -> lbeAdapter.unmarshal("BEGIN XYZ"));
92 Try.testFail(() -> lbeAdapter.unmarshal("END XYZ"));
93 Try.testFail(() -> lbeAdapter.unmarshal("END-XYZ"));
94 Try.testFail(() -> lbeAdapter.unmarshal("END-100"));
95 Try.testFail(() -> lbeAdapter.unmarshal("-0.5"));
96 Try.testFail(() -> lbeAdapter.unmarshal("-50%"));
97 Try.testFail(() -> lbeAdapter.unmarshal("END+10m"));
98
99 for (boolean begin : new boolean[] {false, true})
100 {
101 System.out.println(begin);
102 for (int i = 0; i < this.units.length; i++)
103 {
104 final LengthUnit unit = this.units[i];
105 final String us = this.unitStrings[i];
106 final String prefix = begin ? "" : "END-";
107 final LengthBeginEnd lbe23 = new LengthBeginEnd(begin, new Length(2.3, unit));
108 final LengthBeginEnd lbe00 = new LengthBeginEnd(begin, new Length(0.0, unit));
109
110 assertEquals(lbe23, lbeAdapter.unmarshal(prefix + "2.3 " + us));
111 assertEquals(lbe23, lbeAdapter.unmarshal(prefix + "2.3" + us));
112 Try.testFail(() -> lbeAdapter.unmarshal(prefix + "-2.3 " + us));
113 Try.testFail(() -> lbeAdapter.unmarshal(prefix + "-2.3" + us));
114
115 assertEquals(prefix + "2.3 " + us, lbeAdapter.marshal(lbe23));
116 Try.testFail(() -> lbeAdapter.marshal(new LengthBeginEnd(begin, new Length(-2.3, unit))));
117
118 assertEquals(lbe00, lbeAdapter.unmarshal(prefix + "0.0 " + us));
119 assertEquals(lbe00, lbeAdapter.unmarshal(prefix + "0.0" + us));
120 Try.testFail(() -> lbeAdapter.unmarshal(prefix + "-0.0 " + us));
121 Try.testFail(() -> lbeAdapter.unmarshal(prefix + "-0.0" + us));
122
123 assertEquals(begin ? "BEGIN" : "END", lbeAdapter.marshal(lbe00));
124 Try.testFail(() -> lbeAdapter.marshal(new LengthBeginEnd(begin, new Length(-0.0, unit))));
125 }
126 }
127 }
128
129 }