Skip to content

Commit b54d53d

Browse files
committed
Refactor test root nodes and materialize exc message
1 parent be0a93d commit b54d53d

File tree

4 files changed

+65
-112
lines changed

4 files changed

+65
-112
lines changed

graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/builtins/modules/ConversionNodeTests.java

Lines changed: 57 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -40,47 +40,78 @@
4040
*/
4141
package com.oracle.graal.python.builtins.modules;
4242

43-
import org.hamcrest.CoreMatchers;
44-
import org.hamcrest.Description;
45-
import org.hamcrest.Matcher;
46-
import org.hamcrest.TypeSafeMatcher;
4743
import org.junit.Rule;
4844
import org.junit.rules.ExpectedException;
4945

46+
import com.oracle.graal.python.PythonLanguage;
47+
import com.oracle.graal.python.builtins.objects.frame.PFrame;
48+
import com.oracle.graal.python.builtins.objects.function.PArguments;
49+
import com.oracle.graal.python.builtins.objects.function.Signature;
50+
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
51+
import com.oracle.graal.python.nodes.PRootNode;
52+
import com.oracle.graal.python.nodes.call.CallTargetInvokeNode;
53+
import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentCastNode.ArgumentCastNodeWithRaise;
54+
import com.oracle.graal.python.runtime.ExecutionContext.CalleeContext;
55+
import com.oracle.graal.python.runtime.ExecutionContext.IndirectCalleeContext;
56+
import com.oracle.graal.python.runtime.PythonContext;
5057
import com.oracle.graal.python.runtime.exception.PException;
51-
import com.oracle.graal.python.test.PythonTests;
58+
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
59+
import com.oracle.truffle.api.RootCallTarget;
60+
import com.oracle.truffle.api.Truffle;
61+
import com.oracle.truffle.api.frame.VirtualFrame;
5262

5363
public class ConversionNodeTests {
64+
static final Signature SIGNATURE = new Signature(-1, false, -1, false, new String[]{"arg"}, null);
5465
@Rule public ExpectedException expectedException = ExpectedException.none();
5566

56-
static class PExceptionMessageMatcher extends
57-
TypeSafeMatcher<PException> {
67+
protected static Object call(Object arg, ArgumentCastNodeWithRaise castNode) {
68+
final PythonContext pythonContext = PythonLanguage.getContext();
69+
RootCallTarget callTarget = Truffle.getRuntime().createCallTarget(new PRootNode(null) {
70+
@Child private CalleeContext calleeContext = CalleeContext.create();
71+
@Child private ArgumentCastNodeWithRaise node = castNode;
5872

59-
private final Matcher<String> matcher;
73+
@Override
74+
public Object execute(VirtualFrame frame) {
75+
calleeContext.enter(frame);
76+
try {
77+
return node.execute(frame, PArguments.getArgument(frame, 0));
78+
} finally {
79+
calleeContext.exit(frame, this);
80+
}
81+
}
6082

61-
public PExceptionMessageMatcher(Matcher<String> matcher) {
62-
this.matcher = matcher;
63-
}
64-
65-
public void describeTo(Description description) {
66-
description.appendText("exception with message ");
67-
description.appendDescriptionOf(matcher);
68-
}
69-
70-
@Override
71-
protected boolean matchesSafely(PException item) {
72-
return matcher.matches(PythonTests.getExceptionMessage(item));
73-
}
83+
@Override
84+
public Signature getSignature() {
85+
return SIGNATURE;
86+
}
7487

75-
@Override
76-
protected void describeMismatchSafely(PException item, Description description) {
77-
description.appendText("message ");
78-
matcher.describeMismatch(PythonTests.getExceptionMessage(item), description);
88+
@Override
89+
public boolean isPythonInternal() {
90+
return true;
91+
}
92+
});
93+
try {
94+
Object[] arguments = PArguments.create(1);
95+
PArguments.setGlobals(arguments, PythonObjectFactory.getUncached().createDict());
96+
PArguments.setException(arguments, PException.NO_EXCEPTION);
97+
PArguments.setArgument(arguments, 0, arg);
98+
PFrame.Reference frameInfo = IndirectCalleeContext.enter(pythonContext, arguments, callTarget);
99+
try {
100+
return CallTargetInvokeNode.invokeUncached(callTarget, arguments);
101+
} finally {
102+
IndirectCalleeContext.exit(pythonContext, frameInfo);
103+
}
104+
} catch (PException e) {
105+
// materialize PException's error message since we are leaving Python
106+
PException exceptionForReraise = e.getExceptionForReraise();
107+
PythonObjectLibrary pythonObjectLibrary = PythonObjectLibrary.getUncached();
108+
exceptionForReraise.setMessage(exceptionForReraise.getUnreifiedException().getFormattedMessage(pythonObjectLibrary, pythonObjectLibrary));
109+
throw exceptionForReraise;
79110
}
80111
}
81112

82113
protected void expectPythonMessage(String expectedMessage) {
83114
expectedException.expect(PException.class);
84-
expectedException.expect(new PExceptionMessageMatcher(CoreMatchers.containsString(expectedMessage)));
115+
expectedException.expectMessage(expectedMessage);
85116
}
86117
}

graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/builtins/modules/DirFdConversionNodeTests.java

Lines changed: 2 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -52,18 +52,9 @@
5252
import org.junit.Before;
5353
import org.junit.Test;
5454

55-
import com.oracle.graal.python.builtins.modules.PosixModuleBuiltins.DirFdConversionNode;
5655
import com.oracle.graal.python.builtins.objects.PNone;
57-
import com.oracle.graal.python.builtins.objects.frame.PFrame;
58-
import com.oracle.graal.python.builtins.objects.function.PArguments;
59-
import com.oracle.graal.python.runtime.ExecutionContext;
60-
import com.oracle.graal.python.runtime.PythonContext;
6156
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
6257
import com.oracle.graal.python.test.PythonTests;
63-
import com.oracle.truffle.api.RootCallTarget;
64-
import com.oracle.truffle.api.Truffle;
65-
import com.oracle.truffle.api.frame.VirtualFrame;
66-
import com.oracle.truffle.api.nodes.RootNode;
6758

6859
public class DirFdConversionNodeTests extends ConversionNodeTests {
6960

@@ -156,25 +147,8 @@ public void unsupportedType1() {
156147
call(3.14);
157148
}
158149

159-
private static int call(Object arg) {
160-
RootCallTarget callTarget = Truffle.getRuntime().createCallTarget(new RootNode(null) {
161-
@Child private DirFdConversionNode node = PosixModuleBuiltinsFactory.DirFdConversionNodeGen.create();
162-
163-
@Override
164-
public Object execute(VirtualFrame frame) {
165-
Object[] arguments = PArguments.create(0);
166-
PythonContext pythonContext = getContext();
167-
PArguments.setGlobals(arguments, pythonContext.getCore().factory().createDict());
168-
PFrame.Reference frameInfo = ExecutionContext.IndirectCalleeContext.enterIndirect(pythonContext, arguments);
169-
PArguments.setCurrentFrameInfo(arguments, frameInfo);
170-
try {
171-
return node.execute(Truffle.getRuntime().createMaterializedFrame(arguments), arg);
172-
} finally {
173-
ExecutionContext.IndirectCalleeContext.exit(pythonContext, frameInfo);
174-
}
175-
}
176-
});
177-
Object result = callTarget.call();
150+
protected static int call(Object arg) {
151+
Object result = call(arg, PosixModuleBuiltinsFactory.DirFdConversionNodeGen.create());
178152
Assert.assertThat(result, CoreMatchers.instanceOf(Integer.class));
179153
return (int) result;
180154
}

graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/builtins/modules/FileDescriptorConversionNodeTests.java

Lines changed: 2 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -52,18 +52,9 @@
5252
import org.junit.Before;
5353
import org.junit.Test;
5454

55-
import com.oracle.graal.python.builtins.modules.PosixModuleBuiltins.FileDescriptorConversionNode;
5655
import com.oracle.graal.python.builtins.objects.PNone;
57-
import com.oracle.graal.python.builtins.objects.frame.PFrame;
58-
import com.oracle.graal.python.builtins.objects.function.PArguments;
59-
import com.oracle.graal.python.runtime.ExecutionContext;
60-
import com.oracle.graal.python.runtime.PythonContext;
6156
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
6257
import com.oracle.graal.python.test.PythonTests;
63-
import com.oracle.truffle.api.RootCallTarget;
64-
import com.oracle.truffle.api.Truffle;
65-
import com.oracle.truffle.api.frame.VirtualFrame;
66-
import com.oracle.truffle.api.nodes.RootNode;
6758

6859
public class FileDescriptorConversionNodeTests extends ConversionNodeTests {
6960

@@ -164,25 +155,8 @@ public void unsupportedType1() {
164155
call(3.14);
165156
}
166157

167-
private static int call(Object arg) {
168-
RootCallTarget callTarget = Truffle.getRuntime().createCallTarget(new RootNode(null) {
169-
@Child private FileDescriptorConversionNode node = PosixModuleBuiltinsFactory.FileDescriptorConversionNodeGen.create();
170-
171-
@Override
172-
public Object execute(VirtualFrame frame) {
173-
Object[] arguments = PArguments.create(0);
174-
PythonContext pythonContext = getContext();
175-
PArguments.setGlobals(arguments, pythonContext.getCore().factory().createDict());
176-
PFrame.Reference frameInfo = ExecutionContext.IndirectCalleeContext.enterIndirect(pythonContext, arguments);
177-
PArguments.setCurrentFrameInfo(arguments, frameInfo);
178-
try {
179-
return node.execute(Truffle.getRuntime().createMaterializedFrame(arguments), arg);
180-
} finally {
181-
ExecutionContext.IndirectCalleeContext.exit(pythonContext, frameInfo);
182-
}
183-
}
184-
});
185-
Object result = callTarget.call();
158+
protected static int call(Object arg) {
159+
Object result = call(arg, PosixModuleBuiltinsFactory.FileDescriptorConversionNodeGen.create());
186160
Assert.assertThat(result, CoreMatchers.instanceOf(Integer.class));
187161
return (int) result;
188162
}

graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/builtins/modules/PathConversionNodeTests.java

Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -56,23 +56,14 @@
5656
import org.junit.runners.Parameterized.Parameter;
5757
import org.junit.runners.Parameterized.Parameters;
5858

59-
import com.oracle.graal.python.builtins.modules.PosixModuleBuiltins.PathConversionNode;
6059
import com.oracle.graal.python.builtins.modules.PosixModuleBuiltins.PosixFd;
6160
import com.oracle.graal.python.builtins.modules.PosixModuleBuiltins.PosixPath;
6261
import com.oracle.graal.python.builtins.objects.PNone;
63-
import com.oracle.graal.python.builtins.objects.frame.PFrame;
64-
import com.oracle.graal.python.builtins.objects.function.PArguments;
6562
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
66-
import com.oracle.graal.python.runtime.ExecutionContext;
6763
import com.oracle.graal.python.runtime.PosixSupportLibrary.Buffer;
68-
import com.oracle.graal.python.runtime.PythonContext;
6964
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
7065
import com.oracle.graal.python.test.PythonTests;
7166
import com.oracle.graal.python.util.Function;
72-
import com.oracle.truffle.api.RootCallTarget;
73-
import com.oracle.truffle.api.Truffle;
74-
import com.oracle.truffle.api.frame.VirtualFrame;
75-
import com.oracle.truffle.api.nodes.RootNode;
7667

7768
@RunWith(Parameterized.class)
7869
public class PathConversionNodeTests extends ConversionNodeTests {
@@ -327,27 +318,6 @@ public void unsupportedType4() {
327318
call(false, false, 3.14);
328319
}
329320

330-
private static Object call(boolean nullable, boolean allowFd, Object arg) {
331-
RootCallTarget callTarget = Truffle.getRuntime().createCallTarget(new RootNode(null) {
332-
@Child private PathConversionNode node = PosixModuleBuiltinsFactory.PathConversionNodeGen.create("fun", "arg", nullable, allowFd);
333-
334-
@Override
335-
public Object execute(VirtualFrame frame) {
336-
Object[] arguments = PArguments.create(0);
337-
PythonContext pythonContext = getContext();
338-
PArguments.setGlobals(arguments, pythonContext.getCore().factory().createDict());
339-
PFrame.Reference frameInfo = ExecutionContext.IndirectCalleeContext.enterIndirect(pythonContext, arguments);
340-
PArguments.setCurrentFrameInfo(arguments, frameInfo);
341-
try {
342-
return node.execute(Truffle.getRuntime().createMaterializedFrame(arguments), arg);
343-
} finally {
344-
ExecutionContext.IndirectCalleeContext.exit(pythonContext, frameInfo);
345-
}
346-
}
347-
});
348-
return callTarget.call();
349-
}
350-
351321
private String callAndExpectPath(boolean nullable, boolean allowFd, Object arg, Object orig, boolean wasBufferLike) {
352322
Object result = call(nullable, allowFd, arg);
353323
Assert.assertThat(result, CoreMatchers.instanceOf(PosixPath.class));
@@ -376,6 +346,10 @@ private static int callAndExpectFd(Object arg) {
376346
return fd.fd;
377347
}
378348

349+
protected static Object call(boolean nullable, boolean allowFd, Object arg) {
350+
return call(arg, PosixModuleBuiltinsFactory.PathConversionNodeGen.create("fun", "arg", nullable, allowFd));
351+
}
352+
379353
private static PythonObjectFactory factory() {
380354
return PythonObjectFactory.getUncached();
381355
}

0 commit comments

Comments
 (0)