|
23 | 23 | import org.elasticsearch.painless.Definition.Type; |
24 | 24 | import org.elasticsearch.test.ESTestCase; |
25 | 25 |
|
| 26 | +import java.util.Collections; |
| 27 | + |
| 28 | +import static org.elasticsearch.painless.Definition.DEFINITION_FILES; |
| 29 | + |
26 | 30 | public class AnalyzerCasterTests extends ESTestCase { |
27 | 31 |
|
| 32 | + private static final Definition definition = new Definition( |
| 33 | + Collections.singletonList(WhitelistLoader.loadFromResourceFiles(Definition.class, DEFINITION_FILES))); |
| 34 | + |
28 | 35 | private static void assertCast(Type actual, Type expected, boolean mustBeExplicit) { |
29 | 36 | Location location = new Location("dummy", 0); |
30 | 37 |
|
31 | 38 | if (actual.equals(expected)) { |
32 | 39 | assertFalse(mustBeExplicit); |
33 | | - assertNull(Definition.DEFINITION.caster.getLegalCast(location, actual, expected, false, false)); |
34 | | - assertNull(Definition.DEFINITION.caster.getLegalCast(location, actual, expected, true, false)); |
| 40 | + assertNull(definition.caster.getLegalCast(location, actual, expected, false, false)); |
| 41 | + assertNull(definition.caster.getLegalCast(location, actual, expected, true, false)); |
35 | 42 | return; |
36 | 43 | } |
37 | 44 |
|
38 | | - Cast cast = Definition.DEFINITION.caster.getLegalCast(location, actual, expected, true, false); |
| 45 | + Cast cast = definition.caster.getLegalCast(location, actual, expected, true, false); |
39 | 46 | assertEquals(actual, cast.from); |
40 | 47 | assertEquals(expected, cast.to); |
41 | 48 |
|
42 | 49 | if (mustBeExplicit) { |
43 | 50 | ClassCastException error = expectThrows(ClassCastException.class, |
44 | | - () -> Definition.DEFINITION.caster.getLegalCast(location, actual, expected, false, false)); |
| 51 | + () -> definition.caster.getLegalCast(location, actual, expected, false, false)); |
45 | 52 | assertTrue(error.getMessage().startsWith("Cannot cast")); |
46 | 53 | } else { |
47 | | - cast = Definition.DEFINITION.caster.getLegalCast(location, actual, expected, false, false); |
| 54 | + cast = definition.caster.getLegalCast(location, actual, expected, false, false); |
48 | 55 | assertEquals(actual, cast.from); |
49 | 56 | assertEquals(expected, cast.to); |
50 | 57 | } |
51 | 58 | } |
52 | 59 |
|
53 | 60 | public void testNumericCasts() { |
54 | | - assertCast(Definition.DEFINITION.byteType, Definition.DEFINITION.byteType, false); |
55 | | - assertCast(Definition.DEFINITION.byteType, Definition.DEFINITION.shortType, false); |
56 | | - assertCast(Definition.DEFINITION.byteType, Definition.DEFINITION.intType, false); |
57 | | - assertCast(Definition.DEFINITION.byteType, Definition.DEFINITION.longType, false); |
58 | | - assertCast(Definition.DEFINITION.byteType, Definition.DEFINITION.floatType, false); |
59 | | - assertCast(Definition.DEFINITION.byteType, Definition.DEFINITION.doubleType, false); |
60 | | - |
61 | | - assertCast(Definition.DEFINITION.shortType, Definition.DEFINITION.byteType, true); |
62 | | - assertCast(Definition.DEFINITION.shortType, Definition.DEFINITION.shortType, false); |
63 | | - assertCast(Definition.DEFINITION.shortType, Definition.DEFINITION.intType, false); |
64 | | - assertCast(Definition.DEFINITION.shortType, Definition.DEFINITION.longType, false); |
65 | | - assertCast(Definition.DEFINITION.shortType, Definition.DEFINITION.floatType, false); |
66 | | - assertCast(Definition.DEFINITION.shortType, Definition.DEFINITION.doubleType, false); |
67 | | - |
68 | | - assertCast(Definition.DEFINITION.intType, Definition.DEFINITION.byteType, true); |
69 | | - assertCast(Definition.DEFINITION.intType, Definition.DEFINITION.shortType, true); |
70 | | - assertCast(Definition.DEFINITION.intType, Definition.DEFINITION.intType, false); |
71 | | - assertCast(Definition.DEFINITION.intType, Definition.DEFINITION.longType, false); |
72 | | - assertCast(Definition.DEFINITION.intType, Definition.DEFINITION.floatType, false); |
73 | | - assertCast(Definition.DEFINITION.intType, Definition.DEFINITION.doubleType, false); |
74 | | - |
75 | | - assertCast(Definition.DEFINITION.longType, Definition.DEFINITION.byteType, true); |
76 | | - assertCast(Definition.DEFINITION.longType, Definition.DEFINITION.shortType, true); |
77 | | - assertCast(Definition.DEFINITION.longType, Definition.DEFINITION.intType, true); |
78 | | - assertCast(Definition.DEFINITION.longType, Definition.DEFINITION.longType, false); |
79 | | - assertCast(Definition.DEFINITION.longType, Definition.DEFINITION.floatType, false); |
80 | | - assertCast(Definition.DEFINITION.longType, Definition.DEFINITION.doubleType, false); |
81 | | - |
82 | | - assertCast(Definition.DEFINITION.floatType, Definition.DEFINITION.byteType, true); |
83 | | - assertCast(Definition.DEFINITION.floatType, Definition.DEFINITION.shortType, true); |
84 | | - assertCast(Definition.DEFINITION.floatType, Definition.DEFINITION.intType, true); |
85 | | - assertCast(Definition.DEFINITION.floatType, Definition.DEFINITION.longType, true); |
86 | | - assertCast(Definition.DEFINITION.floatType, Definition.DEFINITION.floatType, false); |
87 | | - assertCast(Definition.DEFINITION.floatType, Definition.DEFINITION.doubleType, false); |
88 | | - |
89 | | - assertCast(Definition.DEFINITION.doubleType, Definition.DEFINITION.byteType, true); |
90 | | - assertCast(Definition.DEFINITION.doubleType, Definition.DEFINITION.shortType, true); |
91 | | - assertCast(Definition.DEFINITION.doubleType, Definition.DEFINITION.intType, true); |
92 | | - assertCast(Definition.DEFINITION.doubleType, Definition.DEFINITION.longType, true); |
93 | | - assertCast(Definition.DEFINITION.doubleType, Definition.DEFINITION.floatType, true); |
94 | | - assertCast(Definition.DEFINITION.doubleType, Definition.DEFINITION.doubleType, false); |
| 61 | + assertCast(definition.byteType, definition.byteType, false); |
| 62 | + assertCast(definition.byteType, definition.shortType, false); |
| 63 | + assertCast(definition.byteType, definition.intType, false); |
| 64 | + assertCast(definition.byteType, definition.longType, false); |
| 65 | + assertCast(definition.byteType, definition.floatType, false); |
| 66 | + assertCast(definition.byteType, definition.doubleType, false); |
| 67 | + |
| 68 | + assertCast(definition.shortType, definition.byteType, true); |
| 69 | + assertCast(definition.shortType, definition.shortType, false); |
| 70 | + assertCast(definition.shortType, definition.intType, false); |
| 71 | + assertCast(definition.shortType, definition.longType, false); |
| 72 | + assertCast(definition.shortType, definition.floatType, false); |
| 73 | + assertCast(definition.shortType, definition.doubleType, false); |
| 74 | + |
| 75 | + assertCast(definition.intType, definition.byteType, true); |
| 76 | + assertCast(definition.intType, definition.shortType, true); |
| 77 | + assertCast(definition.intType, definition.intType, false); |
| 78 | + assertCast(definition.intType, definition.longType, false); |
| 79 | + assertCast(definition.intType, definition.floatType, false); |
| 80 | + assertCast(definition.intType, definition.doubleType, false); |
| 81 | + |
| 82 | + assertCast(definition.longType, definition.byteType, true); |
| 83 | + assertCast(definition.longType, definition.shortType, true); |
| 84 | + assertCast(definition.longType, definition.intType, true); |
| 85 | + assertCast(definition.longType, definition.longType, false); |
| 86 | + assertCast(definition.longType, definition.floatType, false); |
| 87 | + assertCast(definition.longType, definition.doubleType, false); |
| 88 | + |
| 89 | + assertCast(definition.floatType, definition.byteType, true); |
| 90 | + assertCast(definition.floatType, definition.shortType, true); |
| 91 | + assertCast(definition.floatType, definition.intType, true); |
| 92 | + assertCast(definition.floatType, definition.longType, true); |
| 93 | + assertCast(definition.floatType, definition.floatType, false); |
| 94 | + assertCast(definition.floatType, definition.doubleType, false); |
| 95 | + |
| 96 | + assertCast(definition.doubleType, definition.byteType, true); |
| 97 | + assertCast(definition.doubleType, definition.shortType, true); |
| 98 | + assertCast(definition.doubleType, definition.intType, true); |
| 99 | + assertCast(definition.doubleType, definition.longType, true); |
| 100 | + assertCast(definition.doubleType, definition.floatType, true); |
| 101 | + assertCast(definition.doubleType, definition.doubleType, false); |
95 | 102 | } |
96 | 103 |
|
97 | 104 | } |
0 commit comments