forked from open-feature/java-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathValueTest.java
145 lines (124 loc) · 4.76 KB
/
ValueTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
package dev.openfeature.sdk;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import org.junit.jupiter.api.Test;
public class ValueTest {
@Test public void noArgShouldContainNull() {
Value value = new Value();
assertTrue(value.isNull());
}
@Test public void objectArgShouldContainObject() {
try {
// int is a special case, see intObjectArgShouldConvertToInt()
List<Object> list = new ArrayList<>();
list.add(true);
list.add("val");
list.add(.5);
list.add(new MutableStructure());
list.add(new ArrayList<Value>());
list.add(Instant.now());
int i = 0;
for (Object l: list) {
Value value = new Value(l);
assertEquals(list.get(i), value.asObject());
i++;
}
} catch (Exception e) {
fail("No exception expected.");
}
}
@Test public void intObjectArgShouldConvertToInt() {
try {
Object innerValue = 1;
Value value = new Value(innerValue);
assertEquals(innerValue, value.asInteger());
} catch (Exception e) {
fail("No exception expected.");
}
}
@Test public void invalidObjectArgShouldThrow() {
class Something {}
assertThrows(InstantiationException.class, () -> {
new Value(new Something());
});
}
@Test public void boolArgShouldContainBool() {
boolean innerValue = true;
Value value = new Value(innerValue);
assertTrue(value.isBoolean());
assertEquals(innerValue, value.asBoolean());
}
@Test public void numericArgShouldReturnDoubleOrInt() {
double innerDoubleValue = 1.75;
Value doubleValue = new Value(innerDoubleValue);
assertTrue(doubleValue.isNumber());
assertEquals(1, doubleValue.asInteger()); // the double value represented by this object converted to type int
assertEquals(1.75, doubleValue.asDouble());
int innerIntValue = 100;
Value intValue = new Value(innerIntValue);
assertTrue(intValue.isNumber());
assertEquals(innerIntValue, intValue.asInteger());
assertEquals(innerIntValue, intValue.asDouble());
}
@Test public void stringArgShouldContainString() {
String innerValue = "hi!";
Value value = new Value(innerValue);
assertTrue(value.isString());
assertEquals(innerValue, value.asString());
}
@Test public void dateShouldContainDate() {
Instant innerValue = Instant.now();
Value value = new Value(innerValue);
assertTrue(value.isInstant());
assertEquals(innerValue, value.asInstant());
}
@Test public void structureShouldContainStructure() {
String INNER_KEY = "key";
String INNER_VALUE = "val";
MutableStructure innerValue = new MutableStructure().add(INNER_KEY, INNER_VALUE);
Value value = new Value(innerValue);
assertTrue(value.isStructure());
assertEquals(INNER_VALUE, value.asStructure().getValue(INNER_KEY).asString());
}
@Test public void listArgShouldContainList() {
String ITEM_VALUE = "val";
List<Value> innerValue = new ArrayList<Value>();
innerValue.add(new Value(ITEM_VALUE));
Value value = new Value(innerValue);
assertTrue(value.isList());
assertEquals(ITEM_VALUE, value.asList().get(0).asString());
}
@Test public void listMustBeOfValues() {
String item = "item";
List<String> list = new ArrayList<>();
list.add(item);
try {
new Value((Object) list);
fail("Should fail due to creation of list of non-values.");
} catch (InstantiationException e) {
assertEquals("Invalid value type: class java.util.ArrayList", e.getMessage());
}
}
@Test public void emptyListAllowed() {
List<String> list = new ArrayList<>();
try {
Value value = new Value((Object) list);
assertTrue(value.isList());
List<Value> values = value.asList();
assertTrue(values.isEmpty());
} catch (Exception e) {
fail("Unexpected exception occurred.", e);
}
}
@Test public void valueConstructorValidateListInternals() {
List<Object> list = new ArrayList<>();
list.add(new Value("item"));
list.add("item");
assertThrows(InstantiationException.class, ()-> new Value(list));
}
}