Skip to content

Commit 5af0147

Browse files
committed
[GR-21025] Further increase coverage in sonarqube.
PullRequest: js/1364
2 parents e45a671 + 5963912 commit 5af0147

File tree

3 files changed

+140
-1
lines changed

3 files changed

+140
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
/*
2+
* Copyright (c) 2020, 2020, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* The Universal Permissive License (UPL), Version 1.0
6+
*
7+
* Subject to the condition set forth below, permission is hereby granted to any
8+
* person obtaining a copy of this software, associated documentation and/or
9+
* data (collectively the "Software"), free of charge and under any and all
10+
* copyright rights in the Software, and any and all patent rights owned or
11+
* freely licensable by each licensor hereunder covering either (i) the
12+
* unmodified Software as contributed to or provided by such licensor, or (ii)
13+
* the Larger Works (as defined below), to deal in both
14+
*
15+
* (a) the Software, and
16+
*
17+
* (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if
18+
* one is included with the Software each a "Larger Work" to which the Software
19+
* is contributed by such licensors),
20+
*
21+
* without restriction, including without limitation the rights to copy, create
22+
* derivative works of, display, perform, and distribute the Software and make,
23+
* use, sell, offer for sale, import, export, have made, and have sold the
24+
* Software and the Larger Work(s), and to sublicense the foregoing rights on
25+
* either these or other terms.
26+
*
27+
* This license is subject to the following condition:
28+
*
29+
* The above copyright notice and either this complete permission notice or at a
30+
* minimum a reference to the UPL must be included in all copies or substantial
31+
* portions of the Software.
32+
*
33+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
34+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
35+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
36+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
37+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
38+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
39+
* SOFTWARE.
40+
*/
41+
package com.oracle.truffle.js.test.builtins;
42+
43+
import static org.junit.Assert.assertEquals;
44+
45+
import org.junit.Test;
46+
47+
import com.oracle.truffle.js.test.JSTest;
48+
import com.oracle.truffle.js.test.polyglot.ForeignTestMap;
49+
50+
/**
51+
* Tests for the delete keyword.
52+
*/
53+
public class DeleteTest extends JSTest {
54+
55+
@Test
56+
public void testDeleteGlobalVariable() {
57+
assertEquals(false, testHelper.run("var a = 'foo'; delete a;"));
58+
}
59+
60+
@Test
61+
public void testDeleteSymbol() {
62+
assertEquals(true, testHelper.run("var s = Symbol('foo'); delete s.nonExistentProperty;"));
63+
assertEquals(true, testHelper.run("var s = Symbol('foo'); s.bar='bar'; delete s.bar"));
64+
}
65+
66+
@Test
67+
public void testDeleteBigInt() {
68+
assertEquals(true, testHelper.run("var bi = BigInt(1234567890); delete bi.nonExistentProperty;"));
69+
assertEquals(true, testHelper.run("var bi = BigInt(1234567890); bi.bar='yes'; delete bi.bar;"));
70+
}
71+
72+
@Test
73+
public void testDeleteLargeInteger() {
74+
assertEquals(true, testHelper.run("var li = 2147483647; li+=li; delete li.nonExistentProperty;"));
75+
assertEquals(true, testHelper.run("var li = 2147483647; li+=li; li.bar='yes'; delete li.bar;"));
76+
}
77+
78+
@Test
79+
public void testDeleteString() {
80+
assertEquals(true, testHelper.run("var str='str'; delete str.nonExistentProperty;"));
81+
assertEquals(true, testHelper.run("var str='str'; str.bar='yes'; delete str.bar;"));
82+
assertEquals(false, testHelper.run("var str='str'; delete str[1];"));
83+
assertEquals(true, testHelper.run("var str='str'; delete str[-1];"));
84+
assertEquals(true, testHelper.run("var str='str'; delete str[10];"));
85+
}
86+
87+
@Test
88+
public void testDeleteForeign() {
89+
final ForeignTestMap map = new ForeignTestMap();
90+
map.getContainer().put("foo", 42);
91+
map.getContainer().put("bar", "test");
92+
map.getContainer().put("1", "test");
93+
map.getContainer().put("1.5", "test");
94+
testHelper.getPolyglotContext().getBindings("js").putMember("foreign", map);
95+
96+
assertEquals(false, testHelper.run("delete foreign.nonExistentProperty;"));
97+
assertEquals(true, testHelper.run("delete foreign.foo;"));
98+
assertEquals(false, testHelper.run("delete foreign[1];"));
99+
assertEquals(false, testHelper.run("delete foreign[1.5];"));
100+
assertEquals(false, testHelper.run("delete foreign[foreign];"));
101+
assertEquals(false, testHelper.run("delete foreign[new String('test')];"));
102+
assertEquals(false, testHelper.run("delete foreign[new Number(123)];"));
103+
}
104+
}

graal-js/src/com.oracle.truffle.js.test/src/com/oracle/truffle/js/test/polyglot/ForeignTestMapTest.java

+20-1
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,16 @@
4040
*/
4141
package com.oracle.truffle.js.test.polyglot;
4242

43+
import static org.junit.Assert.assertEquals;
4344
import static org.junit.Assert.assertFalse;
4445
import static org.junit.Assert.assertTrue;
4546

4647
import org.junit.Test;
4748

4849
import com.oracle.truffle.js.runtime.JSRuntime;
50+
import com.oracle.truffle.js.test.JSTest;
4951

50-
public class ForeignTestMapTest {
52+
public class ForeignTestMapTest extends JSTest {
5153

5254
@Test
5355
public void equalTest() {
@@ -67,4 +69,21 @@ public void equalTest() {
6769
assertFalse(JSRuntime.equal(a, 0));
6870
assertFalse(JSRuntime.equal(a, true));
6971
}
72+
73+
@Test
74+
public void foreignTestMapTests() {
75+
ForeignTestMap map = new ForeignTestMap();
76+
map.getContainer().put("value", "boxed");
77+
78+
testHelper.getPolyglotContext().getBindings("js").putMember("foreign", map);
79+
80+
assertEquals("boxed", testHelper.run("foreign.value"));
81+
assertEquals(42, testHelper.run("foreign.othervalue=42"));
82+
assertEquals(42, testHelper.run("foreign.othervalue"));
83+
assertEquals(true, testHelper.run("delete foreign.othervalue"));
84+
assertEquals(true, testHelper.run("foreign.othervalue === undefined"));
85+
assertEquals(84, testHelper.run("foreign.fn = (a)=>{ return a+a; }; foreign.fn(42);"));
86+
87+
assertEquals(true, testHelper.run("foreign.length=10; foreign[0]=42; foreign[1]=41; Array.prototype.sort.call(foreign); foreign[0]===41 && foreign[1]===42 && foreign[2]===undefined;"));
88+
}
7089
}

graal-js/src/com.oracle.truffle.js.test/src/com/oracle/truffle/js/test/runtime/JSRuntimeTest.java

+16
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,15 @@
5252
import com.oracle.truffle.api.Truffle;
5353
import com.oracle.truffle.api.TruffleLanguage;
5454
import com.oracle.truffle.api.frame.VirtualFrame;
55+
import com.oracle.truffle.api.nodes.Node;
5556
import com.oracle.truffle.api.nodes.RootNode;
5657
import com.oracle.truffle.api.object.DynamicObject;
5758
import com.oracle.truffle.js.nodes.JavaScriptNode;
59+
import com.oracle.truffle.js.nodes.ScriptNode;
5860
import com.oracle.truffle.js.nodes.binary.JSEqualNode;
5961
import com.oracle.truffle.js.nodes.binary.JSIdenticalNode;
62+
import com.oracle.truffle.js.nodes.function.FunctionBodyNode;
63+
import com.oracle.truffle.js.nodes.function.FunctionRootNode;
6064
import com.oracle.truffle.js.nodes.unary.TypeOfNode;
6165
import com.oracle.truffle.js.runtime.BigInt;
6266
import com.oracle.truffle.js.runtime.JSArguments;
@@ -323,4 +327,16 @@ public void testConstruct() {
323327
assertTrue(ex.getMessage().contains("not a function"));
324328
}
325329
}
330+
331+
@Test
332+
public void testNodeToString() {
333+
ScriptNode scriptNode = testHelper.parse("1+2");
334+
Node node = scriptNode.getRootNode();
335+
FunctionRootNode frn = (FunctionRootNode) node;
336+
FunctionBodyNode fbn = (FunctionBodyNode) frn.getBody();
337+
JavaScriptNode jsnode = fbn.getBody();
338+
String str = jsnode.toString();
339+
assertTrue(str.contains("DualNode"));
340+
assertTrue(str.contains(":program"));
341+
}
326342
}

0 commit comments

Comments
 (0)