| OLD | NEW | 
| (Empty) |  | 
 |    1 /* | 
 |    2  * This file is part of Adblock Plus <https://adblockplus.org/>, | 
 |    3  * Copyright (C) 2006-2016 Eyeo GmbH | 
 |    4  * | 
 |    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 | 
 |    7  * published by the Free Software Foundation. | 
 |    8  * | 
 |    9  * Adblock Plus is distributed in the hope that it will be useful, | 
 |   10  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 |   11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
 |   12  * GNU General Public License for more details. | 
 |   13  * | 
 |   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/>. | 
 |   16  */ | 
 |   17  | 
 |   18 package org.adblockplus.libadblockplus.tests; | 
 |   19  | 
 |   20 import org.adblockplus.libadblockplus.AdblockPlusException; | 
 |   21 import org.adblockplus.libadblockplus.JsValue; | 
 |   22  | 
 |   23 import org.junit.Test; | 
 |   24  | 
 |   25 import java.util.ArrayList; | 
 |   26 import java.util.List; | 
 |   27  | 
 |   28 public class JsTest extends BaseJsTest | 
 |   29 { | 
 |   30   @Test | 
 |   31   public void testUndefinedValue() | 
 |   32   { | 
 |   33     final JsValue value = jsEngine.evaluate("undefined"); | 
 |   34     assertTrue(value.isUndefined()); | 
 |   35     assertFalse(value.isNull()); | 
 |   36     assertFalse(value.isString()); | 
 |   37     assertFalse(value.isBoolean()); | 
 |   38     assertFalse(value.isNumber()); | 
 |   39     assertFalse(value.isObject()); | 
 |   40     assertFalse(value.isArray()); | 
 |   41     assertEquals("undefined", value.asString()); | 
 |   42     try | 
 |   43     { | 
 |   44       value.asList(); | 
 |   45       fail(AdblockPlusException.class.getSimpleName() + " is expected to be thro
     wn"); | 
 |   46     } | 
 |   47     catch (AdblockPlusException e) | 
 |   48     { | 
 |   49       // ignored | 
 |   50     } | 
 |   51     try | 
 |   52     { | 
 |   53       value.getProperty("foo"); | 
 |   54       fail(AdblockPlusException.class.getSimpleName() + " is expected to be thro
     wn"); | 
 |   55     } | 
 |   56     catch (AdblockPlusException e) | 
 |   57     { | 
 |   58       // ignored | 
 |   59     } | 
 |   60   } | 
 |   61  | 
 |   62   @Test | 
 |   63   public void testNullValue() | 
 |   64   { | 
 |   65     final JsValue value = jsEngine.evaluate("null"); | 
 |   66     assertFalse(value.isUndefined()); | 
 |   67     assertTrue(value.isNull()); | 
 |   68     assertFalse(value.isString()); | 
 |   69     assertFalse(value.isBoolean()); | 
 |   70     assertFalse(value.isNumber()); | 
 |   71     assertFalse(value.isObject()); | 
 |   72     assertFalse(value.isArray()); | 
 |   73     assertFalse(value.isFunction()); | 
 |   74     assertEquals("null", value.asString()); | 
 |   75     assertFalse(value.asBoolean()); | 
 |   76     try | 
 |   77     { | 
 |   78       value.asList(); | 
 |   79       fail(AdblockPlusException.class.getSimpleName() + " is expected to be thro
     wn"); | 
 |   80     } | 
 |   81     catch (AdblockPlusException e) | 
 |   82     { | 
 |   83       // ignored | 
 |   84     } | 
 |   85     try | 
 |   86     { | 
 |   87       value.getProperty("foo"); | 
 |   88       fail(AdblockPlusException.class.getSimpleName() + " is expected to be thro
     wn"); | 
 |   89     } | 
 |   90     catch (AdblockPlusException e) | 
 |   91     { | 
 |   92       // ignored | 
 |   93     } | 
 |   94   } | 
 |   95  | 
 |   96   @Test | 
 |   97   public void testStringValue() | 
 |   98   { | 
 |   99     JsValue value = jsEngine.evaluate("'123'"); | 
 |  100     assertFalse(value.isUndefined()); | 
 |  101     assertFalse(value.isNull()); | 
 |  102     assertTrue(value.isString()); | 
 |  103     assertFalse(value.isBoolean()); | 
 |  104     assertFalse(value.isNumber()); | 
 |  105     assertFalse(value.isObject()); | 
 |  106     assertFalse(value.isArray()); | 
 |  107     assertFalse(value.isFunction()); | 
 |  108     assertEquals("123", value.asString()); | 
 |  109     assertEquals(123l, value.asLong()); | 
 |  110     assertTrue(value.asBoolean()); | 
 |  111     try | 
 |  112     { | 
 |  113       value.asList(); | 
 |  114       fail(AdblockPlusException.class.getSimpleName() + " is expected to be thro
     wn"); | 
 |  115     } | 
 |  116     catch (AdblockPlusException e) | 
 |  117     { | 
 |  118       // ignored | 
 |  119     } | 
 |  120     try | 
 |  121     { | 
 |  122       value.getProperty("foo"); | 
 |  123       fail(AdblockPlusException.class.getSimpleName() + " is expected to be thro
     wn"); | 
 |  124     } | 
 |  125     catch (AdblockPlusException e) | 
 |  126     { | 
 |  127       // ignored | 
 |  128     } | 
 |  129   } | 
 |  130  | 
 |  131   @Test | 
 |  132   public void testLongValue() | 
 |  133   { | 
 |  134     JsValue value = jsEngine.evaluate("12345678901234"); | 
 |  135     assertFalse(value.isUndefined()); | 
 |  136     assertFalse(value.isNull()); | 
 |  137     assertFalse(value.isString()); | 
 |  138     assertFalse(value.isBoolean()); | 
 |  139     assertTrue(value.isNumber()); | 
 |  140     assertFalse(value.isObject()); | 
 |  141     assertFalse(value.isArray()); | 
 |  142     assertFalse(value.isFunction()); | 
 |  143     assertEquals("12345678901234", value.asString()); | 
 |  144     assertEquals(12345678901234l, value.asLong()); | 
 |  145     assertTrue(value.asBoolean()); | 
 |  146     try | 
 |  147     { | 
 |  148       value.asList(); | 
 |  149       fail(AdblockPlusException.class.getSimpleName() + " is expected to be thro
     wn"); | 
 |  150     } | 
 |  151     catch (AdblockPlusException e) | 
 |  152     { | 
 |  153       // ignored | 
 |  154     } | 
 |  155     try | 
 |  156     { | 
 |  157       value.getProperty("foo"); | 
 |  158       fail(AdblockPlusException.class.getSimpleName() + " is expected to be thro
     wn"); | 
 |  159     } | 
 |  160     catch (AdblockPlusException e) | 
 |  161     { | 
 |  162       // ignored | 
 |  163     } | 
 |  164   } | 
 |  165  | 
 |  166   @Test | 
 |  167   public void testBoolValue() | 
 |  168   { | 
 |  169     JsValue value = jsEngine.evaluate("true"); | 
 |  170     assertFalse(value.isUndefined()); | 
 |  171     assertFalse(value.isNull()); | 
 |  172     assertFalse(value.isString()); | 
 |  173     assertTrue(value.isBoolean()); | 
 |  174     assertFalse(value.isNumber()); | 
 |  175     assertFalse(value.isObject()); | 
 |  176     assertFalse(value.isArray()); | 
 |  177     assertFalse(value.isFunction()); | 
 |  178     assertEquals("true", value.asString()); | 
 |  179     assertTrue(value.asBoolean()); | 
 |  180     try | 
 |  181     { | 
 |  182       value.asList(); | 
 |  183       fail(AdblockPlusException.class.getSimpleName() + " is expected to be thro
     wn"); | 
 |  184     } | 
 |  185     catch (AdblockPlusException e) | 
 |  186     { | 
 |  187       // ignored | 
 |  188     } | 
 |  189     try | 
 |  190     { | 
 |  191       value.getProperty("foo"); | 
 |  192       fail(AdblockPlusException.class.getSimpleName() + " is expected to be thro
     wn"); | 
 |  193     } | 
 |  194     catch (AdblockPlusException e) | 
 |  195     { | 
 |  196       // ignored | 
 |  197     } | 
 |  198   } | 
 |  199  | 
 |  200   @Test | 
 |  201   public void testObjectValue() | 
 |  202   { | 
 |  203     final String source = | 
 |  204       "function Foo() {\n" + | 
 |  205         "   this.x = 2;\n" + | 
 |  206         "   this.toString = function() {return 'foo';};\n" + | 
 |  207         "   this.valueOf = function() {return 123;};\n" + | 
 |  208         "};\n" + | 
 |  209         "new Foo()"; | 
 |  210     JsValue value = jsEngine.evaluate(source); | 
 |  211     assertFalse(value.isUndefined()); | 
 |  212     assertFalse(value.isNull()); | 
 |  213     assertFalse(value.isString()); | 
 |  214     assertFalse(value.isBoolean()); | 
 |  215     assertFalse(value.isNumber()); | 
 |  216     assertTrue(value.isObject()); | 
 |  217     assertFalse(value.isArray()); | 
 |  218     assertFalse(value.isFunction()); | 
 |  219     assertEquals("foo", value.asString()); | 
 |  220     assertEquals(123l, value.asLong()); | 
 |  221     assertTrue(value.asBoolean()); | 
 |  222     try | 
 |  223     { | 
 |  224       value.asList(); | 
 |  225       fail(AdblockPlusException.class.getSimpleName() + " is expected to be thro
     wn"); | 
 |  226     } | 
 |  227     catch (AdblockPlusException e) | 
 |  228     { | 
 |  229       // ignored | 
 |  230     } | 
 |  231     assertEquals(2l, value.getProperty("x").asLong()); | 
 |  232   } | 
 |  233  | 
 |  234   @Test | 
 |  235   public void testArrayValue() | 
 |  236   { | 
 |  237     JsValue value = jsEngine.evaluate("[5,8,12]"); | 
 |  238     assertFalse(value.isUndefined()); | 
 |  239     assertFalse(value.isNull()); | 
 |  240     assertFalse(value.isString()); | 
 |  241     assertFalse(value.isBoolean()); | 
 |  242     assertFalse(value.isNumber()); | 
 |  243     assertTrue(value.isObject()); | 
 |  244     assertTrue(value.isArray()); | 
 |  245     assertEquals("5,8,12", value.asString()); | 
 |  246     assertTrue(value.asBoolean()); | 
 |  247     assertEquals(3l, value.asList().size()); | 
 |  248     assertEquals(5l, value.asList().get(0).asLong()); | 
 |  249     assertEquals(8l, value.asList().get(1).asLong()); | 
 |  250     assertEquals(12l, value.asList().get(2).asLong()); | 
 |  251     assertEquals(3l, value.getProperty("length").asLong()); | 
 |  252   } | 
 |  253  | 
 |  254   @Test | 
 |  255   public void testThrowingCoversion() | 
 |  256   { | 
 |  257     final String source = | 
 |  258       "function Foo() {\n" + | 
 |  259       "   this.toString = function() {throw 'test1';};\n" + | 
 |  260       "   this.valueOf = function() {throw 'test2';};\n" + | 
 |  261       "};\n" + | 
 |  262       "new Foo()"; | 
 |  263  | 
 |  264     JsValue value = jsEngine.evaluate(source); | 
 |  265     assertEquals("", value.asString()); | 
 |  266     assertEquals(0l, value.asLong()); | 
 |  267   } | 
 |  268 } | 
| OLD | NEW |