LEFT | RIGHT |
1 /* | 1 /* |
2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
3 * Copyright (C) 2006-2016 Eyeo GmbH | 3 * Copyright (C) 2006-2016 Eyeo GmbH |
4 * | 4 * |
5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
8 * | 8 * |
9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 * GNU General Public License for more details. | 12 * GNU General Public License for more details. |
13 * | 13 * |
14 * You should have received a copy of the GNU General Public License | 14 * You should have received a copy of the GNU General Public License |
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
16 */ | 16 */ |
17 | 17 |
18 package org.adblockplus.libadblockplus.tests; | 18 package org.adblockplus.libadblockplus.tests; |
19 | 19 |
20 import org.adblockplus.libadblockplus.AdblockPlusException; | 20 import org.adblockplus.libadblockplus.AdblockPlusException; |
21 import org.adblockplus.libadblockplus.EventCallback; | 21 import org.adblockplus.libadblockplus.EventCallback; |
22 import org.adblockplus.libadblockplus.JsValue; | 22 import org.adblockplus.libadblockplus.JsValue; |
23 | 23 |
24 import org.junit.Test; | 24 import org.junit.Test; |
25 | 25 |
26 import java.util.List; | 26 import java.util.List; |
27 | 27 |
28 public class JsEngineTest extends BaseJsTest { | 28 public class JsEngineTest extends BaseJsTest |
| 29 { |
| 30 @Test |
| 31 public void testEvaluate() |
| 32 { |
| 33 jsEngine.evaluate("function hello() { return 'Hello'; }"); |
| 34 JsValue result = jsEngine.evaluate("hello()"); |
| 35 assertTrue(result.isString()); |
| 36 assertEquals("Hello", result.asString()); |
| 37 } |
29 | 38 |
30 @Test | 39 @Test |
31 public void testEvaluate() { | 40 public void testRuntimeExceptionIsThrown() |
32 jsEngine.evaluate("function hello() { return 'Hello'; }"); | 41 { |
33 JsValue result = jsEngine.evaluate("hello()"); | 42 try |
34 assertTrue(result.isString()); | 43 { |
35 assertEquals("Hello", result.asString()); | 44 jsEngine.evaluate("doesnotexist()"); |
| 45 fail(); |
36 } | 46 } |
| 47 catch (AdblockPlusException e) |
| 48 { |
| 49 // ignored |
| 50 } |
| 51 } |
37 | 52 |
38 @Test | 53 @Test |
39 public void testRuntimeExceptionIsThrown() { | 54 public void testCompileTimeExceptionIsThrown() |
40 try { | 55 { |
41 jsEngine.evaluate("doesnotexist()"); | 56 try |
42 fail(); | 57 { |
43 } catch (AdblockPlusException e) { | 58 jsEngine.evaluate("'foo'bar'"); |
44 // ignored | 59 fail(); |
45 } | |
46 } | 60 } |
| 61 catch (AdblockPlusException e) |
| 62 { |
| 63 // ignored |
| 64 } |
| 65 } |
47 | 66 |
48 @Test | 67 @Test |
49 public void testCompileTimeExceptionIsThrown() { | 68 public void testValueCreation() |
50 try { | 69 { |
51 jsEngine.evaluate("'foo'bar'"); | 70 JsValue value; |
52 fail(); | 71 |
53 } catch (AdblockPlusException e) { | 72 final String STRING_VALUE = "foo"; |
54 // ignored | 73 value = jsEngine.newValue(STRING_VALUE); |
55 } | 74 assertTrue(value.isString()); |
| 75 assertEquals(STRING_VALUE, value.asString()); |
| 76 |
| 77 final long LONG_VALUE = 12345678901234l; |
| 78 value = jsEngine.newValue(LONG_VALUE); |
| 79 assertTrue(value.isNumber()); |
| 80 assertEquals(LONG_VALUE, value.asLong()); |
| 81 |
| 82 final boolean BOOLEAN_VALUE = true; |
| 83 value = jsEngine.newValue(BOOLEAN_VALUE); |
| 84 assertTrue(value.isBoolean()); |
| 85 assertEquals(BOOLEAN_VALUE, value.asBoolean()); |
| 86 } |
| 87 |
| 88 private boolean callbackCalled; |
| 89 private List<JsValue> callbackParams; |
| 90 private EventCallback callback = new EventCallback() |
| 91 { |
| 92 @Override |
| 93 public void eventCallback(List<JsValue> params) |
| 94 { |
| 95 callbackCalled = true; |
| 96 callbackParams = params; |
56 } | 97 } |
| 98 }; |
57 | 99 |
58 @Test | 100 @Test |
59 public void testValueCreation() { | 101 public void testEventCallbacks() |
60 JsValue value; | 102 { |
| 103 callbackCalled = false; |
61 | 104 |
62 final String STRING_VALUE = "foo"; | 105 // Trigger event without a callback |
63 value = jsEngine.newValue(STRING_VALUE); | 106 callbackCalled = false; |
64 assertTrue(value.isString()); | 107 jsEngine.evaluate("_triggerEvent('foobar')"); |
65 assertEquals(STRING_VALUE, value.asString()); | 108 assertFalse(callbackCalled); |
66 | 109 |
67 final long LONG_VALUE = 12345678901234l; | 110 // Set callback |
68 value = jsEngine.newValue(LONG_VALUE); | 111 final String EVENT_NAME = "foobar"; |
69 assertTrue(value.isNumber()); | 112 jsEngine.setEventCallback(EVENT_NAME, callback); |
70 assertEquals(LONG_VALUE, value.asLong()); | 113 callbackCalled = false; |
| 114 jsEngine.evaluate("_triggerEvent('foobar', 1, 'x', true)"); |
| 115 assertTrue(callbackCalled); |
| 116 assertNotNull(callbackParams); |
| 117 assertEquals(3, callbackParams.size()); |
| 118 assertEquals(1, callbackParams.get(0).asLong()); |
| 119 assertEquals("x", callbackParams.get(1).asString()); |
| 120 assertTrue(callbackParams.get(2).asBoolean()); |
71 | 121 |
72 final boolean BOOLEAN_VALUE = true; | 122 // Trigger a different event |
73 value = jsEngine.newValue(BOOLEAN_VALUE); | 123 callbackCalled = false; |
74 assertTrue(value.isBoolean()); | 124 jsEngine.evaluate("_triggerEvent('barfoo')"); |
75 assertEquals(BOOLEAN_VALUE, value.asBoolean()); | 125 assertFalse(callbackCalled); |
76 } | |
77 | 126 |
78 private boolean callbackCalled; | 127 // Remove callback |
79 private List<JsValue> callbackParams; | 128 jsEngine.removeEventCallback(EVENT_NAME); |
80 private EventCallback callback = new EventCallback() { | 129 callbackCalled = false; |
81 @Override | 130 jsEngine.evaluate("_triggerEvent('foobar')"); |
82 public void eventCallback(List<JsValue> params) { | 131 assertFalse(callbackCalled); |
83 callbackCalled = true; | 132 } |
84 callbackParams = params; | |
85 } | |
86 }; | |
87 | |
88 @Test | |
89 public void testEventCallbacks() { | |
90 callbackCalled = false; | |
91 | |
92 // Trigger event without a callback | |
93 callbackCalled = false; | |
94 jsEngine.evaluate("_triggerEvent('foobar')"); | |
95 assertFalse(callbackCalled); | |
96 | |
97 // Set callback | |
98 final String EVENT_NAME = "foobar"; | |
99 jsEngine.setEventCallback(EVENT_NAME, callback); | |
100 callbackCalled = false; | |
101 jsEngine.evaluate("_triggerEvent('foobar', 1, 'x', true)"); | |
102 assertTrue(callbackCalled); | |
103 assertNotNull(callbackParams); | |
104 assertEquals(3, callbackParams.size()); | |
105 assertEquals(1, callbackParams.get(0).asLong()); | |
106 assertEquals("x", callbackParams.get(1).asString()); | |
107 assertTrue(callbackParams.get(2).asBoolean()); | |
108 | |
109 // Trigger a different event | |
110 callbackCalled = false; | |
111 jsEngine.evaluate("_triggerEvent('barfoo')"); | |
112 assertFalse(callbackCalled); | |
113 | |
114 // Remove callback | |
115 jsEngine.removeEventCallback(EVENT_NAME); | |
116 callbackCalled = false; | |
117 jsEngine.evaluate("_triggerEvent('foobar')"); | |
118 assertFalse(callbackCalled); | |
119 } | |
120 } | 133 } |
LEFT | RIGHT |