use of org.graalvm.polyglot.Source in project graal by oracle.
the class SLInspectDebugTest method testBreakpointDeactivation.
@Test
public void testBreakpointDeactivation() throws Exception {
tester = InspectorTester.start(true);
Source source = Source.newBuilder("sl", CODE2, "SLTest.sl").build();
String slTestURI = ScriptsHandler.getNiceStringFromURI(source.getURI());
tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}");
tester.sendMessage("{\"id\":2,\"method\":\"Debugger.enable\"}");
String srcURL = ScriptsHandler.getNiceStringFromURI(source.getURI());
assertTrue(tester.compareReceivedMessages("{\"result\":{},\"id\":1}\n" + "{\"result\":{},\"id\":2}\n"));
tester.sendMessage("{\"id\":3,\"method\":\"Debugger.setBreakpointByUrl\",\"params\":{\"lineNumber\":9,\"url\":\"" + srcURL + "\",\"columnNumber\":0,\"condition\":\"\"}}");
assertEquals("{\"result\":{\"breakpointId\":\"1\",\"locations\":[]},\"id\":3}", tester.getMessages(true).trim());
tester.sendMessage("{\"id\":4,\"method\":\"Debugger.setBreakpointByUrl\",\"params\":{\"lineNumber\":10,\"url\":\"" + srcURL + "\",\"columnNumber\":0,\"condition\":\"\"}}");
assertEquals("{\"result\":{\"breakpointId\":\"2\",\"locations\":[]},\"id\":4}", tester.getMessages(true).trim());
// Deactivate the breakpoints:
tester.sendMessage("{\"id\":10,\"method\":\"Debugger.setBreakpointsActive\",\"params\":{\"active\":false}}");
assertEquals("{\"result\":{},\"id\":10}", tester.getMessages(true).trim());
tester.eval(source);
// Suspend at the beginning of the script:
long id = tester.getContextId();
assertTrue(tester.compareReceivedMessages("{\"method\":\"Debugger.scriptParsed\",\"params\":{\"endLine\":0,\"scriptId\":\"0\",\"endColumn\":0,\"startColumn\":0,\"startLine\":0,\"length\":0,\"executionContextId\":" + id + ",\"url\":\"" + SL_BUILTIN_URI + "\",\"hash\":\"ffffffffffffffffffffffffffffffffffffffff\"}}\n" + "{\"method\":\"Debugger.scriptParsed\",\"params\":{\"endLine\":11,\"scriptId\":\"1\",\"endColumn\":1,\"startColumn\":0,\"startLine\":0,\"length\":144,\"executionContextId\":" + id + ",\"url\":\"" + slTestURI + "\",\"hash\":\"ee148976fc7d6f36fc01da4bfba1c3f3ff485978\"}}\n" + "{\"method\":\"Debugger.breakpointResolved\",\"params\":{\"breakpointId\":\"1\",\"location\":{\"scriptId\":\"1\",\"columnNumber\":2,\"lineNumber\":9}}}\n" + "{\"method\":\"Debugger.breakpointResolved\",\"params\":{\"breakpointId\":\"2\",\"location\":{\"scriptId\":\"1\",\"columnNumber\":2,\"lineNumber\":10}}}\n" + "{\"method\":\"Debugger.paused\",\"params\":{\"reason\":\"other\",\"hitBreakpoints\":[]," + "\"callFrames\":[{\"callFrameId\":\"0\",\"functionName\":\"main\"," + "\"scopeChain\":[{\"name\":\"main\",\"type\":\"local\",\"object\":{\"description\":\"main\",\"type\":\"object\",\"objectId\":\"1\"}}," + "{\"name\":\"global\",\"type\":\"global\",\"object\":{\"description\":\"global\",\"type\":\"object\",\"objectId\":\"2\"}}]," + "\"functionLocation\":{\"scriptId\":\"1\",\"columnNumber\":9,\"lineNumber\":0}," + "\"location\":{\"scriptId\":\"1\",\"columnNumber\":2,\"lineNumber\":1}}]}}\n"));
// Step over to while cycle and over the method with breakpoints:
for (int numStep = 0; numStep < 4; numStep++) {
tester.sendMessage("{\"id\":" + (20 + numStep) + ",\"method\":\"Debugger.stepOver\"}");
int colNum = (numStep == 1) ? 9 : (numStep >= 2) ? 4 : 2;
assertTrue(tester.compareReceivedMessages("{\"result\":{},\"id\":" + (20 + numStep) + "}\n" + "{\"method\":\"Debugger.resumed\"}\n" + "{\"method\":\"Debugger.paused\",\"params\":{\"reason\":\"other\",\"hitBreakpoints\":[]," + "\"callFrames\":[{\"callFrameId\":\"0\",\"functionName\":\"main\"," + "\"scopeChain\":[{\"name\":\"main\",\"type\":\"local\",\"object\":{\"description\":\"main\",\"type\":\"object\",\"objectId\":\"" + (3 + 2 * numStep) + "\"}}," + "{\"name\":\"global\",\"type\":\"global\",\"object\":{\"description\":\"global\",\"type\":\"object\",\"objectId\":\"" + (4 + 2 * numStep) + "\"}}]," + "\"functionLocation\":{\"scriptId\":\"1\",\"columnNumber\":9,\"lineNumber\":0}," + "\"location\":{\"scriptId\":\"1\",\"columnNumber\":" + colNum + ",\"lineNumber\":" + (2 + numStep) + "}}]}}\n"));
}
// Step to while again
tester.sendMessage("{\"id\":28,\"method\":\"Debugger.stepOver\"}");
assertTrue(tester.compareReceivedMessages("{\"result\":{},\"id\":28}\n" + "{\"method\":\"Debugger.resumed\"}\n" + "{\"method\":\"Debugger.paused\",\"params\":{\"reason\":\"other\",\"hitBreakpoints\":[]," + "\"callFrames\":[{\"callFrameId\":\"0\",\"functionName\":\"main\"," + "\"scopeChain\":[{\"name\":\"main\",\"type\":\"local\",\"object\":{\"description\":\"main\",\"type\":\"object\",\"objectId\":\"11\"}}," + "{\"name\":\"global\",\"type\":\"global\",\"object\":{\"description\":\"global\",\"type\":\"object\",\"objectId\":\"12\"}}]," + "\"functionLocation\":{\"scriptId\":\"1\",\"columnNumber\":9,\"lineNumber\":0}," + "\"location\":{\"scriptId\":\"1\",\"columnNumber\":9,\"lineNumber\":3}}]}}\n"));
// Step to the method call with breakpoints again:
tester.sendMessage("{\"id\":29,\"method\":\"Debugger.stepOver\"}");
assertTrue(tester.compareReceivedMessages("{\"result\":{},\"id\":29}\n" + "{\"method\":\"Debugger.resumed\"}\n" + "{\"method\":\"Debugger.paused\",\"params\":{\"reason\":\"other\",\"hitBreakpoints\":[]," + "\"callFrames\":[{\"callFrameId\":\"0\",\"functionName\":\"main\"," + "\"scopeChain\":[{\"name\":\"main\",\"type\":\"local\",\"object\":{\"description\":\"main\",\"type\":\"object\",\"objectId\":\"13\"}}," + "{\"name\":\"global\",\"type\":\"global\",\"object\":{\"description\":\"global\",\"type\":\"object\",\"objectId\":\"14\"}}]," + "\"functionLocation\":{\"scriptId\":\"1\",\"columnNumber\":9,\"lineNumber\":0}," + "\"location\":{\"scriptId\":\"1\",\"columnNumber\":4,\"lineNumber\":4}}]}}\n"));
// Activate the breakpoints:
tester.sendMessage("{\"id\":30,\"method\":\"Debugger.setBreakpointsActive\",\"params\":{\"active\":true}}");
assertEquals("{\"result\":{},\"id\":30}", tester.getMessages(true).trim());
tester.sendMessage("{\"id\":31,\"method\":\"Debugger.stepOver\"}");
// Step over not finished, the first breakpoint is hit:
assertTrue(tester.compareReceivedMessages("{\"result\":{},\"id\":31}\n" + "{\"method\":\"Debugger.resumed\"}\n" + "{\"method\":\"Debugger.paused\",\"params\":{\"reason\":\"other\",\"hitBreakpoints\":[\"1\"]," + "\"callFrames\":[{\"callFrameId\":\"0\",\"functionName\":\"fceWithBP\"," + "\"scopeChain\":[{\"name\":\"fceWithBP\",\"type\":\"local\",\"object\":{\"description\":\"fceWithBP\",\"type\":\"object\",\"objectId\":\"15\"}}," + "{\"name\":\"global\",\"type\":\"global\",\"object\":{\"description\":\"global\",\"type\":\"object\",\"objectId\":\"16\"}}]," + "\"functionLocation\":{\"scriptId\":\"1\",\"columnNumber\":9,\"lineNumber\":8}," + "\"location\":{\"scriptId\":\"1\",\"columnNumber\":2,\"lineNumber\":9}}," + "{\"callFrameId\":\"1\",\"functionName\":\"main\"," + "\"scopeChain\":[{\"name\":\"main\",\"type\":\"local\",\"object\":{\"description\":\"main\",\"type\":\"object\",\"objectId\":\"17\"}}," + "{\"name\":\"global\",\"type\":\"global\",\"object\":{\"description\":\"global\",\"type\":\"object\",\"objectId\":\"18\"}}]," + "\"functionLocation\":{\"scriptId\":\"1\",\"columnNumber\":9,\"lineNumber\":0}," + "\"location\":{\"scriptId\":\"1\",\"columnNumber\":4,\"lineNumber\":4}}]}}\n"));
tester.sendMessage("{\"id\":32,\"method\":\"Debugger.stepOut\"}");
// Step out not finished, the second breakpoint is hit:
assertTrue(tester.compareReceivedMessages("{\"result\":{},\"id\":32}\n" + "{\"method\":\"Debugger.resumed\"}\n" + "{\"method\":\"Debugger.paused\",\"params\":{\"reason\":\"other\",\"hitBreakpoints\":[\"2\"]," + "\"callFrames\":[{\"callFrameId\":\"0\",\"functionName\":\"fceWithBP\"," + "\"scopeChain\":[{\"name\":\"fceWithBP\",\"type\":\"local\",\"object\":{\"description\":\"fceWithBP\",\"type\":\"object\",\"objectId\":\"19\"}}," + "{\"name\":\"global\",\"type\":\"global\",\"object\":{\"description\":\"global\",\"type\":\"object\",\"objectId\":\"20\"}}]," + "\"functionLocation\":{\"scriptId\":\"1\",\"columnNumber\":9,\"lineNumber\":8}," + "\"location\":{\"scriptId\":\"1\",\"columnNumber\":2,\"lineNumber\":10}}," + "{\"callFrameId\":\"1\",\"functionName\":\"main\"," + "\"scopeChain\":[{\"name\":\"main\",\"type\":\"local\",\"object\":{\"description\":\"main\",\"type\":\"object\",\"objectId\":\"21\"}}," + "{\"name\":\"global\",\"type\":\"global\",\"object\":{\"description\":\"global\",\"type\":\"object\",\"objectId\":\"22\"}}]," + "\"functionLocation\":{\"scriptId\":\"1\",\"columnNumber\":9,\"lineNumber\":0}," + "\"location\":{\"scriptId\":\"1\",\"columnNumber\":4,\"lineNumber\":4}}]}}\n"));
tester.sendMessage("{\"id\":33,\"method\":\"Debugger.stepOut\"}");
// Step out finished now:
assertTrue(tester.compareReceivedMessages("{\"result\":{},\"id\":33}\n" + "{\"method\":\"Debugger.resumed\"}\n" + "{\"method\":\"Debugger.paused\",\"params\":{\"reason\":\"other\",\"hitBreakpoints\":[]," + "\"callFrames\":[{\"callFrameId\":\"0\",\"functionName\":\"main\"," + "\"scopeChain\":[{\"name\":\"main\",\"type\":\"local\",\"object\":{\"description\":\"main\",\"type\":\"object\",\"objectId\":\"23\"}}," + "{\"name\":\"global\",\"type\":\"global\",\"object\":{\"description\":\"global\",\"type\":\"object\",\"objectId\":\"24\"}}]," + "\"functionLocation\":{\"scriptId\":\"1\",\"columnNumber\":9,\"lineNumber\":0}," + "\"location\":{\"scriptId\":\"1\",\"columnNumber\":4,\"lineNumber\":4}}]}}\n"));
// Deactivate the breakpoints again:
tester.sendMessage("{\"id\":40,\"method\":\"Debugger.setBreakpointsActive\",\"params\":{\"active\":false}}");
assertEquals("{\"result\":{},\"id\":40}", tester.getMessages(true).trim());
// Resume to finish:
tester.sendMessage("{\"id\":45,\"method\":\"Debugger.resume\"}");
assertTrue(tester.compareReceivedMessages("{\"result\":{},\"id\":45}\n" + "{\"method\":\"Debugger.resumed\"}\n"));
tester.finish();
}
use of org.graalvm.polyglot.Source in project graal by oracle.
the class SLInspectProfileTest method testDetailedCodeCoverage.
@Test
public void testDetailedCodeCoverage() throws Exception {
tester = InspectorTester.start(false);
Source source = Source.newBuilder("sl", CODE2, "SLTest.sl").build();
String slTestURI = ScriptsHandler.getNiceStringFromURI(source.getURI());
tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}");
assertEquals("{\"result\":{},\"id\":1}", tester.getMessages(true).trim());
tester.sendMessage("{\"id\":2,\"method\":\"Profiler.enable\"}");
assertEquals("{\"result\":{},\"id\":2}", tester.getMessages(true).trim());
tester.sendMessage("{\"id\":3,\"method\":\"Profiler.startPreciseCoverage\",\"params\":{\"detailed\":true}}");
assertEquals("{\"result\":{},\"id\":3}", tester.getMessages(true).trim());
tester.sendMessage("{\"id\":4,\"method\":\"Profiler.takePreciseCoverage\"}");
assertEquals("{\"result\":{\"result\":[]},\"id\":4}", tester.getMessages(true).trim());
tester.eval(source).get();
tester.sendMessage("{\"id\":5,\"method\":\"Profiler.takePreciseCoverage\"}");
assertEquals("{\"result\":{\"result\":[{\"scriptId\":\"1\",\"functions\":[" + "{\"ranges\":[{\"endOffset\":34,\"startOffset\":22,\"count\":2}],\"functionName\":\"add\",\"isBlockCoverage\":true}," + "{\"ranges\":[{\"endOffset\":66,\"startOffset\":57,\"count\":1},{\"endOffset\":90,\"startOffset\":69,\"count\":1}],\"functionName\":\"main\",\"isBlockCoverage\":true}]," + "\"url\":\"" + slTestURI + "\"}]},\"id\":5}", tester.getMessages(true).trim());
tester.sendMessage("{\"id\":6,\"method\":\"Profiler.takePreciseCoverage\"}");
assertEquals("{\"result\":{\"result\":[]},\"id\":6}", tester.getMessages(true).trim());
tester.sendMessage("{\"id\":7,\"method\":\"Profiler.stopPreciseCoverage\"}");
assertEquals("{\"result\":{},\"id\":7}", tester.getMessages(true).trim());
tester.sendMessage("{\"id\":8,\"method\":\"Profiler.disable\"}");
assertEquals("{\"result\":{},\"id\":8}", tester.getMessages(true).trim());
tester.finish();
}
use of org.graalvm.polyglot.Source in project graal by oracle.
the class SLInspectProfileTest method testCodeCoverage.
@Test
public void testCodeCoverage() throws Exception {
tester = InspectorTester.start(false);
Source source = Source.newBuilder("sl", CODE2, "SLTest.sl").build();
String slTestURI = ScriptsHandler.getNiceStringFromURI(source.getURI());
tester.sendMessage("{\"id\":1,\"method\":\"Runtime.enable\"}");
assertEquals("{\"result\":{},\"id\":1}", tester.getMessages(true).trim());
tester.sendMessage("{\"id\":2,\"method\":\"Profiler.enable\"}");
assertEquals("{\"result\":{},\"id\":2}", tester.getMessages(true).trim());
tester.sendMessage("{\"id\":3,\"method\":\"Profiler.startPreciseCoverage\"}");
assertEquals("{\"result\":{},\"id\":3}", tester.getMessages(true).trim());
tester.sendMessage("{\"id\":4,\"method\":\"Profiler.takePreciseCoverage\"}");
assertEquals("{\"result\":{\"result\":[]},\"id\":4}", tester.getMessages(true).trim());
tester.eval(source).get();
tester.sendMessage("{\"id\":5,\"method\":\"Profiler.takePreciseCoverage\"}");
assertEquals("{\"result\":{\"result\":[{\"scriptId\":\"1\",\"functions\":[" + "{\"ranges\":[{\"endOffset\":37,\"startOffset\":9,\"count\":2}],\"functionName\":\"add\",\"isBlockCoverage\":false}," + "{\"ranges\":[{\"endOffset\":93,\"startOffset\":47,\"count\":1}],\"functionName\":\"main\",\"isBlockCoverage\":false}]," + "\"url\":\"" + slTestURI + "\"}]},\"id\":5}", tester.getMessages(true).trim());
tester.sendMessage("{\"id\":6,\"method\":\"Profiler.takePreciseCoverage\"}");
assertEquals("{\"result\":{\"result\":[]},\"id\":6}", tester.getMessages(true).trim());
tester.sendMessage("{\"id\":7,\"method\":\"Profiler.stopPreciseCoverage\"}");
assertEquals("{\"result\":{},\"id\":7}", tester.getMessages(true).trim());
tester.sendMessage("{\"id\":8,\"method\":\"Profiler.disable\"}");
assertEquals("{\"result\":{},\"id\":8}", tester.getMessages(true).trim());
tester.finish();
}
use of org.graalvm.polyglot.Source in project graal by oracle.
the class BreakpointTest method testGlobalBreakpointsInMultipleSessions.
@Test
public void testGlobalBreakpointsInMultipleSessions() throws Throwable {
try {
Class.forName("java.beans.PropertyChangeListener");
} catch (ClassNotFoundException ex) {
// skip the test if running only with java.base JDK9 module
return;
}
final Source source = testSource("ROOT(\n" + " STATEMENT,\n" + " STATEMENT,\n" + " STATEMENT,\n" + " STATEMENT,\n" + " STATEMENT,\n" + " STATEMENT,\n" + " STATEMENT,\n" + " STATEMENT,\n" + " STATEMENT,\n" + " STATEMENT\n" + ")\n");
Debugger debugger = getDebugger();
Breakpoint globalBreakpoint1 = Breakpoint.newBuilder(getSourceImpl(source)).lineIs(2).build();
debugger.install(globalBreakpoint1);
Breakpoint globalBreakpoint2 = Breakpoint.newBuilder(getSourceImpl(source)).lineIs(4).build();
debugger.install(globalBreakpoint2);
Breakpoint globalBreakpoint3 = Breakpoint.newBuilder(getSourceImpl(source)).lineIs(6).build();
debugger.install(globalBreakpoint3);
Breakpoint globalBreakpoint4 = Breakpoint.newBuilder(getSourceImpl(source)).lineIs(8).build();
debugger.install(globalBreakpoint4);
// Breakpoints are in the install order:
List<Breakpoint> breakpoints = debugger.getBreakpoints();
Assert.assertEquals(4, breakpoints.size());
Assert.assertTrue(breakpoints.get(0).getLocationDescription().contains("line=2"));
Assert.assertTrue(breakpoints.get(1).getLocationDescription().contains("line=4"));
Assert.assertTrue(breakpoints.get(2).getLocationDescription().contains("line=6"));
DebuggerSession session1 = startSession();
// global breakpoints are not among session breakpoints
Assert.assertTrue(session1.getBreakpoints().isEmpty());
try (DebuggerSession session2 = startSession()) {
// global breakpoints are not among session breakpoints
Assert.assertTrue(session2.getBreakpoints().isEmpty());
startEval(source);
// Both sessions should break here:
expectSuspended((SuspendedEvent event) -> {
assertSame(session1, event.getSession());
checkState(event, 2, true, "STATEMENT").prepareContinue();
});
expectSuspended((SuspendedEvent event) -> {
assertSame(session2, event.getSession());
checkState(event, 2, true, "STATEMENT").prepareContinue();
});
// We close session2 after the next BP:
expectSuspended((SuspendedEvent event) -> {
assertSame(session1, event.getSession());
checkState(event, 4, true, "STATEMENT");
});
}
expectSuspended((SuspendedEvent event) -> {
assertNotSame(session1, event.getSession());
checkState(event, 4, true, "STATEMENT").prepareContinue();
});
// The last breakpoint is hit once only in the session1:
expectSuspended((SuspendedEvent event) -> {
assertSame(session1, event.getSession());
checkState(event, 6, true, "STATEMENT").prepareStepOver(1);
});
expectSuspended((SuspendedEvent event) -> {
assertSame(session1, event.getSession());
checkState(event, 7, true, "STATEMENT");
session1.close();
event.prepareContinue();
});
// Breakpoint at line 8 was not hit at all, the session was closed right before continue
// from line 7.
expectDone();
}
use of org.graalvm.polyglot.Source in project graal by oracle.
the class BreakpointTest method testBreakSource.
@Test
public void testBreakSource() throws Throwable {
final Source source = testSource("ROOT(\n" + " STATEMENT,\n" + " STATEMENT,\n" + // break here
" STATEMENT,\n" + " STATEMENT,\n" + " STATEMENT\n" + ")\n");
Breakpoint sessionBreakpoint = null;
try (DebuggerSession session = startSession()) {
Breakpoint breakpoint = session.install(Breakpoint.newBuilder(getSourceImpl(source)).lineIs(4).build());
sessionBreakpoint = breakpoint;
startEval(source);
expectSuspended((SuspendedEvent event) -> {
checkState(event, 4, true, "STATEMENT");
Assert.assertEquals(1, event.getBreakpoints().size());
Assert.assertSame(breakpoint, event.getBreakpoints().get(0));
});
Assert.assertEquals(1, breakpoint.getHitCount());
Assert.assertEquals(true, breakpoint.isEnabled());
Assert.assertEquals(true, breakpoint.isResolved());
expectDone();
}
Assert.assertEquals(false, sessionBreakpoint.isResolved());
}
Aggregations