Skip to content

Commit 64274ca

Browse files
committed
add test coverage
1 parent a99cfc8 commit 64274ca

File tree

3 files changed

+220
-3
lines changed

3 files changed

+220
-3
lines changed

Diff for: src/classes/JsepTest.cls

+69
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ private class JsepTest {
2727
private static void assignmentTest() {
2828
Jsep.AssignmentExpressionNode node = (Jsep.AssignmentExpressionNode)new Jsep('a = b').parse();
2929
System.assertEquals('=', node.operator);
30+
System.assertEquals(node.getType(), Jsep.ASSIGNMENT_EXP);
3031
}
3132

3233
@IsTest
@@ -39,12 +40,14 @@ private class JsepTest {
3940
private static void callTest() {
4041
Jsep.CallExpressionNode node = (Jsep.CallExpressionNode)new Jsep('a(b)').parse();
4142
System.assertEquals(1, node.arguments.size());
43+
System.assertEquals(node.getType(), Jsep.CALL_EXP);
4244
}
4345

4446
@IsTest
4547
private static void memberTest() {
4648
Jsep.MemberExpressionNode node = (Jsep.MemberExpressionNode)new Jsep('a.b').parse();
4749
System.assertEquals(false, node.computed);
50+
System.assertEquals(node.getType(), Jsep.MEMBER_EXP);
4851

4952
node = (Jsep.MemberExpressionNode)new Jsep('a[b]').parse();
5053
System.assertEquals(true, node.computed);
@@ -54,24 +57,29 @@ private class JsepTest {
5457
private static void conditionalTest() {
5558
Jsep.ConditionalExpressionNode node = (Jsep.ConditionalExpressionNode)new Jsep('a ? b : c').parse();
5659
System.assert(node != null);
60+
System.assertEquals(node.getType(), Jsep.CONDITIONAL_EXP);
5761
}
5862

5963
@IsTest
6064
private static void binaryTest() {
6165
Jsep.BinaryExpressionNode node = (Jsep.BinaryExpressionNode)new Jsep('a + b').parse();
6266
System.assertEquals('+', node.operator);
67+
System.assertEquals(node.getType(), Jsep.BINARY_EXP);
6368
}
6469

6570
@IsTest
6671
private static void logicalTest() {
6772
Jsep.LogicalExpressionNode node = (Jsep.LogicalExpressionNode)new Jsep('a && b').parse();
6873
System.assertEquals('&&', node.operator);
74+
System.assertEquals(node.getType(), Jsep.LOGICAL_EXP);
6975
}
7076

7177
@IsTest
7278
private static void unaryTest() {
7379
Jsep.UnaryExpressionNode node = (Jsep.UnaryExpressionNode)new Jsep('-a').parse();
7480
System.assertEquals('-', node.operator);
81+
System.assertEquals(node.getType(), Jsep.UNARY_EXP);
82+
7583
Jsep.IdentifierNode node1 = (Jsep.IdentifierNode)node.argument;
7684
System.assertEquals('a', node1.name);
7785
}
@@ -80,24 +88,28 @@ private class JsepTest {
8088
private static void identifierTest() {
8189
Jsep.IdentifierNode node = (Jsep.IdentifierNode)new Jsep('name').parse();
8290
System.assertEquals('name', node.name);
91+
System.assertEquals(node.getType(), Jsep.IDENTIFIER);
8392
}
8493

8594
@IsTest
8695
private static void compoundTest() {
8796
Jsep.CompoundNode node = (Jsep.CompoundNode)new Jsep('1, 2').parse();
8897
System.assertEquals(2, node.body.size());
98+
System.assertEquals(node.getType(), Jsep.COMPOUND);
8999
}
90100

91101
@IsTest
92102
private static void thisTest() {
93103
Jsep.ThisExpressionNode node = (Jsep.ThisExpressionNode)new Jsep('this').parse();
94104
System.assert(node != null);
105+
System.assertEquals(node.getType(), Jsep.THIS_EXP);
95106
}
96107

97108
@IsTest
98109
private static void literalTest() {
99110
Jsep.LiteralNode node = (Jsep.LiteralNode)new Jsep('1').parse();
100111
System.assertEquals(node.value, 1);
112+
System.assertEquals(node.getType(), Jsep.LITERAL);
101113

102114
node = (Jsep.LiteralNode)new Jsep('true').parse();
103115
System.assertEquals(node.value, true);
@@ -110,7 +122,64 @@ private class JsepTest {
110122
private static void arrayTest() {
111123
Jsep.ArrayExpressionNode node = (Jsep.ArrayExpressionNode)new Jsep('[ 1, 2, 3 ]').parse();
112124
System.assertEquals(3, node.elements.size());
125+
System.assertEquals(node.getType(), Jsep.ARRAY_EXP);
113126
Jsep.LiteralNode node1 = (Jsep.LiteralNode)node.elements.get(0);
114127
System.assertEquals(1, node1.value);
115128
}
129+
130+
@IsTest
131+
private static void objectTest() {
132+
Jsep.ObjectExpressionNode node = (Jsep.ObjectExpressionNode)new Jsep('{ name: "test" }').parse();
133+
System.assertEquals(node.getType(), Jsep.OBJECT_EXP);
134+
}
135+
136+
@IsTest
137+
private static void addBinaryOpTest() {
138+
Jsep.addBinaryOp('**', 10);
139+
Jsep.Node node = (Jsep.Node)new Jsep('1 ** 1').parse();
140+
System.assert(node != null);
141+
}
142+
143+
@IsTest
144+
private static void addUnaryOpTest() {
145+
Jsep.addUnaryOp('^');
146+
Jsep.Node node = (Jsep.Node)new Jsep('^a').parse();
147+
System.assert(node != null);
148+
}
149+
150+
@IsTest
151+
private static void addLiteralTest() {
152+
Jsep.addLiteral('msg', 'msg');
153+
Jsep.Node node = (Jsep.Node)new Jsep('msg').parse();
154+
System.assert(node != null);
155+
}
156+
157+
@IsTest
158+
private static void removeUnaryOpTest() {
159+
Jsep.removeUnaryOp('!');
160+
try {
161+
new Jsep('!a').parse();
162+
System.assertEquals(true, false);
163+
}
164+
catch(Exception e) {
165+
}
166+
}
167+
168+
@IsTest
169+
private static void removeBinaryOpTest() {
170+
Jsep.removeBinaryOp('*');
171+
try {
172+
new Jsep('1 * 2').parse();
173+
System.assertEquals(true, false);
174+
}
175+
catch(Exception e) {
176+
}
177+
}
178+
179+
@IsTest
180+
private static void removeLiteralTest() {
181+
Jsep.removeLiteral('true');
182+
Jsep.Node node = new Jsep('true').parse();
183+
System.assertEquals(node.getType(), JSep.IDENTIFIER);
184+
}
116185
}

Diff for: src/classes/ScriptEngine.cls

+3-3
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public virtual class ScriptEngine {
5151
return ((Map<String, Object>)target).get(property);
5252
}
5353
else if(target instanceof String && isInteger(property)) {
54-
return ((String)target).charAt(Integer.valueOf(property));
54+
return ((String)target).split('').get(Integer.valueOf(property));
5555
}
5656
else if(target instanceof SObject) {
5757
return ((SObject)target).get(property);
@@ -359,8 +359,8 @@ public virtual class ScriptEngine {
359359
}
360360
}
361361
else if(operator == '%') {
362-
if(left instanceof Long && right instanceof Long) {
363-
return Math.mod(((Long)left), ((Long)right));
362+
if(left instanceof Decimal && right instanceof Decimal) {
363+
return Math.mod(((Decimal)left).longValue(), ((Decimal)right).longValue());
364364
}
365365
else {
366366
throw new EvalException('Failed to execute "%" on objects');

Diff for: src/classes/ScriptEngineTest.cls

+148
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,18 @@ private class ScriptEngineTest {
124124
3,
125125
ScriptEngine.getInstance().eval(node, new Map<String, Object>{ 'a' => new List<Object>{ 3 } })
126126
);
127+
128+
node = new Jsep('a[0]').parse();
129+
System.assertEquals(
130+
'3',
131+
ScriptEngine.getInstance().eval(node, new Map<String, Object>{ 'a' => '345' })
132+
);
133+
134+
node = new Jsep('a.Description').parse();
135+
System.assertEquals(
136+
'desc',
137+
ScriptEngine.getInstance().eval(node, new Map<String, Object>{ 'a' => new Account(Description = 'desc')})
138+
);
127139
}
128140

129141
@IsTest
@@ -153,4 +165,140 @@ private class ScriptEngineTest {
153165
private static void instanceTest() {
154166
System.assert(ScriptEngine.getInstance() != null);
155167
}
168+
169+
@IsTest
170+
private static void evalTest() {
171+
System.assertEquals('abc', ScriptEngine.getInstance().eval('"a" + "b" + "c"'));
172+
}
173+
174+
@IsTest
175+
private static void evalContextTest() {
176+
Map<String, Object> context = new Map<String, Object>{
177+
'a' => true,
178+
'b' => false
179+
};
180+
System.assertEquals(false, ScriptEngine.getInstance().eval('a && b', context));
181+
System.assertEquals(true, ScriptEngine.getInstance().eval('a || b', context));
182+
}
183+
184+
@IsTest
185+
private static void callTest() {
186+
System.assertEquals(null, ScriptEngine.getInstance().eval('test(1)'));
187+
}
188+
189+
@IsTest
190+
private static void assignmentTest() {
191+
System.assertEquals(null, ScriptEngine.getInstance().eval('a = 1'));
192+
}
193+
194+
@IsTest
195+
private static void moreUnaryTest() {
196+
System.assertEquals(-1, ScriptEngine.getInstance().eval('-1'));
197+
198+
System.assertEquals(1, ScriptEngine.getInstance().eval('+1'));
199+
200+
System.assertEquals(false, ScriptEngine.getInstance().eval('!true'));
201+
202+
System.assertEquals(2, ScriptEngine.getInstance().eval('++1'));
203+
204+
System.assertEquals(0, ScriptEngine.getInstance().eval('--1'));
205+
}
206+
207+
@IsTest
208+
private static void moreBinaryTest() {
209+
System.assertEquals(true, ScriptEngine.getInstance().eval(' 1 == 1'));
210+
System.assertEquals(true, ScriptEngine.getInstance().eval(' 1 != 2'));
211+
System.assertEquals(true, ScriptEngine.getInstance().eval(' 1 < 2'));
212+
System.assertEquals(true, ScriptEngine.getInstance().eval(' 3 > 2'));
213+
System.assertEquals(true, ScriptEngine.getInstance().eval(' 1 <= 2'));
214+
System.assertEquals(true, ScriptEngine.getInstance().eval(' 3 >= 2'));
215+
216+
System.assertEquals(1, ScriptEngine.getInstance().eval('1 + 0'));
217+
System.assertEquals(1, ScriptEngine.getInstance().eval('1 - 0'));
218+
System.assertEquals(1, ScriptEngine.getInstance().eval('1 * 1'));
219+
System.assertEquals(1, ScriptEngine.getInstance().eval('1 / 1'));
220+
System.assertEquals(1, ScriptEngine.getInstance().eval('1 % 2'));
221+
222+
System.assertEquals(true, ScriptEngine.getInstance().eval('"a" == "a"'));
223+
System.assertEquals(true, ScriptEngine.getInstance().eval('"a" != "b"'));
224+
System.assertEquals(true, ScriptEngine.getInstance().eval('"a" < "b"'));
225+
System.assertEquals(true, ScriptEngine.getInstance().eval('"c" > "b"'));
226+
System.assertEquals(true, ScriptEngine.getInstance().eval('"a" <= "b"'));
227+
System.assertEquals(true, ScriptEngine.getInstance().eval('"c" >= "b"'));
228+
229+
System.assertEquals(true, ScriptEngine.getInstance().eval('a == b', new Map<String, Object>{
230+
'a' => Datetime.newInstance(2018, 1, 1, 1, 0, 0).date(),
231+
'b' => Datetime.newInstance(2018, 1, 1, 1, 0, 0).date()
232+
}));
233+
System.assertEquals(true, ScriptEngine.getInstance().eval('a != b', new Map<String, Object>{
234+
'a' => Datetime.newInstance(2018, 1, 1, 1, 0, 0).date(),
235+
'b' => Datetime.newInstance(2018, 1, 2, 2, 0, 0).date()
236+
}));
237+
System.assertEquals(true, ScriptEngine.getInstance().eval('a < b', new Map<String, Object>{
238+
'a' => Datetime.newInstance(2018, 1, 1, 1, 0, 0).date(),
239+
'b' => Datetime.newInstance(2018, 1, 2, 2, 0, 0).date()
240+
}));
241+
System.assertEquals(true, ScriptEngine.getInstance().eval('a <= b', new Map<String, Object>{
242+
'a' => Datetime.newInstance(2018, 1, 1, 1, 0, 0).date(),
243+
'b' => Datetime.newInstance(2018, 1, 2, 2, 0, 0).date()
244+
}));
245+
System.assertEquals(true, ScriptEngine.getInstance().eval('a > b', new Map<String, Object>{
246+
'a' => Datetime.newInstance(2018, 1, 3, 3, 0, 0).date(),
247+
'b' => Datetime.newInstance(2018, 1, 2, 2, 0, 0).date()
248+
}));
249+
System.assertEquals(true, ScriptEngine.getInstance().eval('a >= b', new Map<String, Object>{
250+
'a' => Datetime.newInstance(2018, 1, 3, 3, 0, 0).date(),
251+
'b' => Datetime.newInstance(2018, 1, 2, 2, 0, 0).date()
252+
}));
253+
254+
System.assertEquals(true, ScriptEngine.getInstance().eval('a == b', new Map<String, Object>{
255+
'a' => Datetime.newInstance(2018, 1, 1, 1, 0, 0).time(),
256+
'b' => Datetime.newInstance(2018, 1, 1, 1, 0, 0).time()
257+
}));
258+
System.assertEquals(true, ScriptEngine.getInstance().eval('a != b', new Map<String, Object>{
259+
'a' => Datetime.newInstance(2018, 1, 1, 1, 0, 0).time(),
260+
'b' => Datetime.newInstance(2018, 1, 2, 2, 0, 0).time()
261+
}));
262+
System.assertEquals(true, ScriptEngine.getInstance().eval('a < b', new Map<String, Object>{
263+
'a' => Datetime.newInstance(2018, 1, 1, 1, 0, 0).time(),
264+
'b' => Datetime.newInstance(2018, 1, 2, 2, 0, 0).time()
265+
}));
266+
System.assertEquals(true, ScriptEngine.getInstance().eval('a <= b', new Map<String, Object>{
267+
'a' => Datetime.newInstance(2018, 1, 1, 1, 0, 0).time(),
268+
'b' => Datetime.newInstance(2018, 1, 2, 2, 0, 0).time()
269+
}));
270+
System.assertEquals(true, ScriptEngine.getInstance().eval('a > b', new Map<String, Object>{
271+
'a' => Datetime.newInstance(2018, 1, 3, 3, 0, 0).time(),
272+
'b' => Datetime.newInstance(2018, 1, 2, 2, 0, 0).time()
273+
}));
274+
System.assertEquals(true, ScriptEngine.getInstance().eval('a >= b', new Map<String, Object>{
275+
'a' => Datetime.newInstance(2018, 1, 3, 3, 0, 0).time(),
276+
'b' => Datetime.newInstance(2018, 1, 2, 2, 0, 0).time()
277+
}));
278+
279+
System.assertEquals(true, ScriptEngine.getInstance().eval('a == b', new Map<String, Object>{
280+
'a' => Datetime.newInstance(2018, 1, 1, 1, 0, 0),
281+
'b' => Datetime.newInstance(2018, 1, 1, 1, 0, 0)
282+
}));
283+
System.assertEquals(true, ScriptEngine.getInstance().eval('a != b', new Map<String, Object>{
284+
'a' => Datetime.newInstance(2018, 1, 1, 1, 0, 0),
285+
'b' => Datetime.newInstance(2018, 1, 2, 2, 0, 0)
286+
}));
287+
System.assertEquals(true, ScriptEngine.getInstance().eval('a < b', new Map<String, Object>{
288+
'a' => Datetime.newInstance(2018, 1, 1, 1, 0, 0),
289+
'b' => Datetime.newInstance(2018, 1, 2, 2, 0, 0)
290+
}));
291+
System.assertEquals(true, ScriptEngine.getInstance().eval('a <= b', new Map<String, Object>{
292+
'a' => Datetime.newInstance(2018, 1, 1, 1, 0, 0),
293+
'b' => Datetime.newInstance(2018, 1, 2, 2, 0, 0)
294+
}));
295+
System.assertEquals(true, ScriptEngine.getInstance().eval('a > b', new Map<String, Object>{
296+
'a' => Datetime.newInstance(2018, 1, 3, 3, 0, 0),
297+
'b' => Datetime.newInstance(2018, 1, 2, 2, 0, 0)
298+
}));
299+
System.assertEquals(true, ScriptEngine.getInstance().eval('a >= b', new Map<String, Object>{
300+
'a' => Datetime.newInstance(2018, 1, 3, 3, 0, 0),
301+
'b' => Datetime.newInstance(2018, 1, 2, 2, 0, 0)
302+
}));
303+
}
156304
}

0 commit comments

Comments
 (0)