Skip to content

Commit 76e4135

Browse files
committed
Test foreign exception to string conversion.
1 parent 06e400d commit 76e4135

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

graal-js/src/com.oracle.truffle.js.test/js/interop/foreign_error_prototype.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ try {
3838
assertSame(message, e.message);
3939
assertTrue(e.stack.includes('foreign_error_prototype'));
4040
assertTrue(e.stack.includes('throwJavaError'));
41-
assertSame('Error: ' + message, Error.prototype.toString.call(e));
41+
assertSame('java.lang.RuntimeException: ' + message, Error.prototype.toString.call(e));
4242

4343
assertSame(undefined, e.cause);
4444
}
@@ -55,7 +55,7 @@ try {
5555
assertSame(otherMessage, e.message);
5656
assertTrue(e.stack.includes('foreign_error_prototype'));
5757
assertTrue(e.stack.includes('throwJavaErrorWithCause'));
58-
assertSame('Error: ' + otherMessage, Error.prototype.toString.call(e));
58+
assertSame('java.lang.RuntimeException: ' + otherMessage, Error.prototype.toString.call(e));
5959

6060
assertSame(cause, e.cause);
6161

@@ -64,7 +64,7 @@ try {
6464
assertSame(message, e.message);
6565
assertTrue(e.stack.includes('foreign_error_prototype'));
6666
assertTrue(e.stack.includes('throwJavaError'));
67-
assertSame('Error: ' + message, Error.prototype.toString.call(e));
67+
assertSame('java.lang.RuntimeException: ' + message, Error.prototype.toString.call(e));
6868

6969
assertSame(undefined, e.cause);
7070
}
@@ -96,7 +96,7 @@ try {
9696
assertSame(message, e.message);
9797
assertTrue(e.stack.includes('foreign_error_prototype'));
9898
assertTrue(e.stack.includes('throwJavaError'));
99-
assertSame('Error: ' + message, Error.prototype.toString.call(e));
99+
assertSame('java.lang.RuntimeException: ' + message, Error.prototype.toString.call(e));
100100

101101
assertSame(undefined, e.cause);
102102
}
@@ -115,7 +115,10 @@ try {
115115
assertTrue(e.stack.includes('foreign_error_prototype'));
116116
assertTrue(e.stack.includes('throwJavaErrorFromJava'));
117117
assertTrue(e.stack.includes('java.util.Objects.requireNonNull'));
118-
assertSame('Error: ' + message, Error.prototype.toString.call(e));
118+
assertSame('java.lang.NullPointerException: ' + message, Error.prototype.toString.call(e));
119119

120120
assertSame(undefined, e.cause);
121121
}
122+
123+
assertSame('java.lang.RuntimeException', String(new java.lang.RuntimeException()));
124+
assertSame('java.lang.RuntimeException: ' + message, String(new java.lang.RuntimeException(message)));

graal-js/src/com.oracle.truffle.js.test/src/com/oracle/truffle/js/test/interop/JavaScriptHostInteropTest.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -293,6 +293,23 @@ public void explicitMethodOverloadTest() {
293293
}
294294
}
295295

296+
@Test
297+
public void hostExceptionToString() {
298+
// No host access to Throwable.toString().
299+
try (Context context = JSTest.newContextBuilder().allowHostAccess(HostAccess.EXPLICIT).build()) {
300+
Value toString = context.eval(ID, "String");
301+
302+
String message = "someMessage";
303+
var exceptionWithoutMessage = new RuntimeException();
304+
var exceptionWithMessage = new RuntimeException(message);
305+
306+
assertFalse(context.asValue(exceptionWithMessage).hasMember("toString"));
307+
assertFalse(context.asValue(exceptionWithMessage).hasMember("toString"));
308+
assertEquals(exceptionWithoutMessage.getClass().getName(), toString.execute(exceptionWithoutMessage).asString());
309+
assertEquals(exceptionWithMessage.getClass().getName() + ": " + message, toString.execute(exceptionWithMessage).asString());
310+
}
311+
}
312+
296313
public static class ExceptionVerifier implements Consumer<PolyglotException> {
297314
private final String[] substrings;
298315

0 commit comments

Comments
 (0)