Skip to content

Commit 6a3b8e1

Browse files
committed
rework in casts tests
1 parent 0d695a3 commit 6a3b8e1

2 files changed

Lines changed: 255 additions & 21 deletions

File tree

src/test/java/bsh/CastTest.java

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package bsh;
22

3+
import static org.junit.Assert.assertArrayEquals;
34
import static org.junit.Assert.assertEquals;
45
import static org.junit.Assert.assertNotNull;
56
import static org.junit.Assert.assertNull;
@@ -341,38 +342,22 @@ public void test_invalid_cast() throws Throwable {
341342
public void test_cast_array_1() throws Exception {
342343
Object result = TestUtil.eval("(long[]) new byte[] { 14, 10, 45, 2 }");
343344
assertTrue(result instanceof long[]);
344-
345-
long[] array = (long[]) result;
346-
assertEquals(4, array.length);
347-
assertEquals(14, array[0]);
348-
assertEquals(10, array[1]);
349-
assertEquals(45, array[2]);
350-
assertEquals(2, array[3]);
345+
long[] expected = new long[] { 14, 10, 45, 2 };
346+
assertArrayEquals(expected, (long[]) result);
351347
}
352348

353349
@Test
354350
public void test_cast_array_2() throws Exception {
355351
Object result = TestUtil.eval("(List<Integer>[]) new List[] { null, new ArrayList(), Arrays.asList(10, 43, 76) }");
356352
assertTrue(result instanceof List[]);
357-
358-
List<Integer>[] array = (List<Integer>[]) result;
359-
assertEquals(3, array.length);
360-
assertEquals(null, array[0]);
361-
assertEquals(new ArrayList<>(), array[1]);
362-
assertEquals(Arrays.asList(10, 43, 76), array[2]);
353+
assertArrayEquals(new List[] { null, new ArrayList<>(), Arrays.asList(10, 43, 76) }, (List[]) result);
363354
}
364355

365356
@Test
366357
public void test_cast_matrix() throws Exception {
367358
Object result = TestUtil.eval("(byte[][]) new int[][] { { 14, 10 }, { 45, 2, 34 } }");
368359
assertTrue(result instanceof byte[][]);
369-
370-
byte[][] array = (byte[][]) result;
371-
assertEquals(2, array.length);
372-
assertEquals((byte) 14, array[0][0]);
373-
assertEquals((byte) 10, array[0][1]);
374-
assertEquals((byte) 45, array[1][0]);
375-
assertEquals((byte) 2, array[1][1]);
376-
assertEquals((byte) 34, array[1][2]);
360+
byte[][] expected = new byte[][] { { 14, 10 }, { 45, 2, 34 } };
361+
assertArrayEquals(expected, (byte[][]) result);
377362
}
378363
}
Lines changed: 249 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,249 @@
1+
#!/bin/java bsh.Interpreter
2+
3+
source("TestHarness.bsh");
4+
source("Assert.bsh");
5+
6+
f=(float) 5;
7+
assertEquals(5f, f, 1);
8+
assertEquals(0i, (int) 0.5);
9+
10+
a=0.3;
11+
assertEquals(0i, (int) a);
12+
13+
d=(double) +1;
14+
assertEquals(1.0d, d, 1);
15+
16+
// this is ok of course
17+
String s = null;
18+
assertNull(s);
19+
// but this should be as well
20+
String s2 = (String) null;
21+
assertNull(s2);
22+
assertNull((Object) null);
23+
assertNotNull((int) null);
24+
25+
// cast null to primitive default value
26+
assertEquals(0o, (byte) null);
27+
assertEquals(0s, (short) null);
28+
assertEquals(0i, (int) null);
29+
assertEquals(0l, (long) null);
30+
assertEquals(0.0f, (float) null, 1);
31+
assertEquals(0.0d, (double) null, 1);
32+
assertEquals(false, (boolean) null);
33+
assertEquals('\000', (char) null);
34+
35+
int x = (int) 'a';
36+
assertEquals(97i, x);
37+
38+
// can't cast void to anything
39+
assert( isEvalError("Cannot cast void value to int", "(int) xyz"));
40+
assert( isEvalError("Cannot cast void value to Object", "(Object) xyz"));
41+
42+
// cast primitives to object types get boxed
43+
assertThat((Object) 5o, instanceOf(Byte.class));
44+
assertThat((Object) 5s, instanceOf(Short.class));
45+
assertThat((Object) 5i, instanceOf(Integer.class));
46+
assertThat((Object) 5l, instanceOf(Long.class));
47+
assertThat((Object) 5f, instanceOf(Float.class));
48+
assertThat((Object) 5d, instanceOf(Double.class));
49+
assertThat((Object) '5', instanceOf(Character.class));
50+
assertThat((Object) true, instanceOf(Boolean.class));
51+
// cast boxed types to primitives
52+
assertEquals('a', (char) Character.valueOf('a'));
53+
assertEquals(1o, (byte) Byte.valueOf(1o));
54+
assertEquals(2s, (short) Short.valueOf(2s));
55+
assertEquals(3i, (int) Integer.valueOf(3i));
56+
assertEquals(4l, (long) Long.valueOf(4l));
57+
assertEquals(5.0f, (float) Float.valueOf(5f), 1);
58+
assertEquals(6.0d, (double) Double.valueOf(6d), 1);
59+
assertEquals(true, (boolean) Boolean.TRUE);
60+
61+
// boolean can be cast to numbers
62+
assertEquals('\000', (char) false);
63+
assertEquals(0o, (byte) false);
64+
assertEquals(0s, (short) false);
65+
assertEquals(0i, (int) false);
66+
assertEquals(0l, (long) false);
67+
assertEquals(0.0f, (float) false, 1);
68+
assertEquals(0.0d, (double) false, 1);
69+
assertEquals('\001', (char) true);
70+
assertEquals(1o, (byte) true);
71+
assertEquals(1s, (short) true);
72+
assertEquals(1i, (int) true);
73+
assertEquals(1l, (long) true);
74+
assertEquals(1.0f, (float) true, 1);
75+
assertEquals(1.0d, (double) true, 1);
76+
77+
// cast string to number
78+
assertEquals('a', (char) "97");
79+
assertEquals(1i, (int) "1.0");
80+
assertEquals(3o, (byte) "3");
81+
assertEquals(2s, (short) "2");
82+
assertEquals(1i, (int) "1.0");
83+
assertEquals(0l, (long) "0");
84+
assertEquals(-1.0f, (float) "-1", 1);
85+
assertEquals(-2.0d, (double) "-2.0", 1);
86+
87+
// cast to boolean
88+
// 0, null, or empty string is false
89+
assertEquals(false, (boolean) false);
90+
assertEquals(false, (boolean) '\000');
91+
assertEquals(false, (boolean) 0o);
92+
assertEquals(false, (boolean) 0s);
93+
assertEquals(false, (boolean) 0i);
94+
assertEquals(false, (boolean) 0l);
95+
assertEquals(false, (boolean) 0.0f);
96+
assertEquals(false, (boolean) 0.0d);
97+
assertEquals(false, (boolean) "");
98+
assertEquals(false, (boolean) null);
99+
// not 0, not null, or not empty string is true
100+
assertEquals(true, (boolean) true);
101+
assertEquals(true, (boolean) ' ');
102+
assertEquals(true, (boolean) 3o);
103+
assertEquals(true, (boolean) 2s);
104+
assertEquals(true, (boolean) 1i);
105+
assertEquals(true, (boolean) -1l);
106+
assertEquals(true, (boolean) -2.0f);
107+
assertEquals(true, (boolean) -3.0d);
108+
assertEquals(true, (boolean) "not empty");
109+
assertEquals(true, (boolean) new Object());
110+
assertEquals(true, (boolean) Class.class);
111+
112+
// typed variable assignment
113+
byte b;
114+
assertEquals(0o, b);
115+
assertEquals(0o, b = null);
116+
assertEquals(0o, b = '\000');
117+
assertEquals(0o, b = false);
118+
assertEquals(1o, b = true);
119+
assertEquals(123o, b = "123");
120+
Byte B;
121+
assertNull(B);
122+
assertNull(B = null);
123+
assertEquals(0o, B = '\000');
124+
assertEquals(0o, B = false);
125+
assertEquals(1o, B = true);
126+
assertEquals(123o, B = "123");
127+
short ss;
128+
assertEquals(0s, ss);
129+
assertEquals(0s, ss = null);
130+
assertEquals(0s, ss = '\000');
131+
assertEquals(0s, ss = false);
132+
assertEquals(1s, ss = true);
133+
assertEquals(123s, ss = "123");
134+
Short S;
135+
assertNull(S);
136+
assertNull(S = null);
137+
assertEquals(0s, S = '\000');
138+
assertEquals(0s, S = false);
139+
assertEquals(1s, S = true);
140+
assertEquals(123s, S = "123");
141+
int i;
142+
assertEquals(0i, i);
143+
assertEquals(0i, i = null);
144+
assertEquals(0i, i = '\000');
145+
assertEquals(0i, i = false);
146+
assertEquals(1i, i = true);
147+
assertEquals(123i, i = "123");
148+
Integer I;
149+
assertNull(I);
150+
assertNull(I = null);
151+
assertEquals(0i, I = '\000');
152+
assertEquals(0i, I = false);
153+
assertEquals(1i, I = true);
154+
assertEquals(123i, I = "123");
155+
long l;
156+
assertEquals(0l, l);
157+
assertEquals(0l, l = null);
158+
assertEquals(0l, l = '\000');
159+
assertEquals(0l, l = false);
160+
assertEquals(1l, l = true);
161+
assertEquals(123l, l = "123");
162+
Long L;
163+
assertNull(L);
164+
assertNull(L = null);
165+
assertEquals(0l, L = '\000');
166+
assertEquals(0l, L = false);
167+
assertEquals(1l, L = true);
168+
assertEquals(123l, L = "123");
169+
float f;
170+
assertEquals(0.0f, f, 1);
171+
assertEquals(0.0f, f = null, 1);
172+
assertEquals(0.0f, f = '\000', 1);
173+
assertEquals(0.0f, f = false, 1);
174+
assertEquals(1.0f, f = true, 1);
175+
assertEquals(123.0f, f = "123", 1);
176+
Float F;
177+
assertNull(F);
178+
assertNull(F = null);
179+
assertEquals(0.0f, F = '\000', 1);
180+
assertEquals(0.0f, F = false, 1);
181+
assertEquals(1.0f, F = true, 1);
182+
assertEquals(123.0f, F = "123", 1);
183+
double d;
184+
assertEquals(0.0d, d, 1);
185+
assertEquals(0.0d, d = null, 1);
186+
assertEquals(0.0d, d = '\000', 1);
187+
assertEquals(0.0d, d = false, 1);
188+
assertEquals(1.0d, d = true, 1);
189+
assertEquals(123.0d, d = "123", 1);
190+
Double D;
191+
assertNull(D);
192+
assertNull(D = null);
193+
assertEquals(0.0d, D = '\000', 1);
194+
assertEquals(0.0d, D = false, 1);
195+
assertEquals(1.0d, D = true, 1);
196+
assertEquals(123.0d, D = "123", 1);
197+
boolean bb;
198+
assertFalse(bb);
199+
assertFalse(bb = null);
200+
assertFalse(bb = 0);
201+
assertFalse(bb = "");
202+
assertFalse(bb = '\000');
203+
assertFalse(bb = false);
204+
assertTrue(bb = Boolean.TYPE);
205+
assertTrue(bb = 123);
206+
assertTrue(bb = "tick");
207+
assertTrue(bb = 'a');
208+
assertTrue(bb = true);
209+
Boolean BB;
210+
assertNull(BB);
211+
assertNull(BB = null);
212+
assertFalse(BB = 0);
213+
assertFalse(BB = "");
214+
assertFalse(BB = '\000');
215+
assertFalse(BB = false);
216+
assertTrue(BB = Boolean.class);
217+
assertTrue(BB = 123);
218+
assertTrue(BB = "tick");
219+
assertTrue(BB = 'a');
220+
assertTrue(BB = true);
221+
222+
// can't cast non parseable strings to number
223+
assert( isEvalError('Cannot cast String with value "foo" to int', '(int) "foo"'));
224+
assert( isEvalError('cannot cast string "" to number', '(short) ""'));
225+
assert( isEvalError('Cannot cast String with value "foo" to Integer', '(Integer) "foo";'));
226+
227+
// cast error throws ClassCastException which can be caught
228+
try {
229+
i=(Integer) "foo";
230+
} catch ( ArithmeticException e0 ) {
231+
assert(false); // just checking
232+
} catch ( ClassCastException e ) {
233+
flag();
234+
}
235+
assertEquals(1, flag());
236+
237+
arr = (long[]) new byte[] { 14, 10, 45, 2 };
238+
assertTrue(arr instanceof long[]);
239+
assertArrayEquals(new long[] { 14, 10, 45, 2 }, arr);
240+
241+
arr = (List<Integer>[]) new List[] { null, new ArrayList(), Arrays.asList(10, 43, 76) };
242+
assertTrue(arr instanceof List[]);
243+
assertArrayEquals(new List[] { null, new ArrayList<>(), Arrays.asList(10, 43, 76) }, arr);
244+
245+
arr = (byte[][]) new int[][] { { 14, 10 }, { 45, 2, 34 } };
246+
assertTrue(arr instanceof byte[][]);
247+
assertArrayEquals(new byte[][] { { 14, 10 }, { 45, 2, 34 } }, arr);
248+
249+
complete();

0 commit comments

Comments
 (0)