@@ -133,6 +133,52 @@ public void testOutput() throws Exception {
133133 tester .finish ();
134134 }
135135
136+ @ Test
137+ public void testOutputEarly () throws Exception {
138+ Source source1 = Source .newBuilder (InstrumentationTestLanguage .ID , "ROOT(\n " +
139+ " PRINT(OUT, \" Prologue to stdout\n \" ),\n " +
140+ " PRINT(ERR, \" Prologue to stderr\n \" )" +
141+ ")\n " , "TestOutput1.itl" ).internal (true ).build ();
142+ Source source2 = Source .newBuilder (InstrumentationTestLanguage .ID , "ROOT(\n " +
143+ " PRINT(OUT, \" Text to stdout\n \" ),\n " +
144+ " PRINT(ERR, \" Text to stderr\n \" )" +
145+ ")\n " , "TestOutput2.itl" ).build ();
146+ Source source3 = Source .newBuilder (InstrumentationTestLanguage .ID , "ROOT(\n " +
147+ " PRINT(OUT, \" Epilogue to stdout\n \" ),\n " +
148+ " PRINT(ERR, \" Epilogue to stderr\n \" )" +
149+ ")\n " , "TestOutput3.itl" ).build ();
150+ tester = DAPTester .start (false , context -> context .eval (source1 ));
151+ tester .sendMessage (
152+ "{\" command\" :\" initialize\" ,\" arguments\" :{\" clientID\" :\" DAPTester\" ,\" clientName\" :\" DAP Tester\" ,\" adapterID\" :\" graalvm\" ,\" pathFormat\" :\" path\" ,\" linesStartAt1\" :true,\" columnsStartAt1\" :true," +
153+ "\" supportsVariableType\" :true,\" supportsVariablePaging\" :true,\" supportsRunInTerminalRequest\" :true,\" locale\" :\" en-us\" ,\" supportsProgressReporting\" :true},\" type\" :\" request\" ,\" seq\" :1}" );
154+ tester .compareReceivedMessages (
155+ "{\" event\" :\" initialized\" ,\" type\" :\" event\" }" ,
156+ "{\" success\" :true,\" type\" :\" response\" ,\" body\" :{\" supportsConditionalBreakpoints\" :true,\" supportsLoadedSourcesRequest\" :true,\" supportsFunctionBreakpoints\" :true,\" supportsExceptionInfoRequest\" :true," +
157+ "\" supportsBreakpointLocationsRequest\" :true,\" supportsHitConditionalBreakpoints\" :true,\" supportsLogPoints\" :true,\" supportsSetVariable\" :true,\" supportsConfigurationDoneRequest\" :true," +
158+ "\" exceptionBreakpointFilters\" :[{\" filter\" :\" all\" ,\" label\" :\" All Exceptions\" },{\" filter\" :\" uncaught\" ,\" label\" :\" Uncaught Exceptions\" }]},\" request_seq\" :1,\" command\" :\" initialize\" }" );
159+ tester .sendMessage (
160+ "{\" command\" :\" attach\" ,\" arguments\" :{\" type\" :\" graalvm\" ,\" request\" :\" attach\" ,\" name\" :\" Attach\" ,\" port\" :9229,\" protocol\" :\" debugAdapter\" },\" type\" :\" request\" ,\" seq\" :2}" );
161+ tester .compareReceivedMessages ("{\" event\" :\" output\" ,\" body\" :{\" output\" :\" Debugger attached.\" ,\" category\" :\" stderr\" },\" type\" :\" event\" }" ,
162+ "{\" success\" :true,\" type\" :\" response\" ,\" request_seq\" :2,\" command\" :\" attach\" }" );
163+ tester .sendMessage ("{\" command\" :\" loadedSources\" ,\" type\" :\" request\" ,\" seq\" :3}" );
164+ tester .compareReceivedMessages ("{\" success\" :true,\" body\" :{\" sources\" :[]},\" type\" :\" response\" ,\" request_seq\" :3,\" command\" :\" loadedSources\" ,\" seq\" :5}" );
165+ tester .sendMessage ("{\" command\" :\" configurationDone\" ,\" type\" :\" request\" ,\" seq\" :4}" );
166+ tester .compareReceivedMessages ("{\" success\" :true,\" type\" :\" response\" ,\" request_seq\" :4,\" command\" :\" configurationDone\" ,\" seq\" :6}" );
167+ tester .eval (source2 );
168+ tester .compareReceivedMessages ("{\" event\" :\" thread\" ,\" body\" :{\" threadId\" :2,\" reason\" :\" started\" },\" type\" :\" event\" ,\" seq\" :7}" );
169+ tester .compareReceivedMessages (
170+ "{\" event\" :\" loadedSource\" ,\" body\" :{\" reason\" :\" new\" ,\" source\" :{\" sourceReference\" :1,\" name\" :\" TestOutput2.itl\" }},\" type\" :\" event\" ,\" seq\" :8}" );
171+ tester .compareReceivedMessages (
172+ "{\" event\" :\" output\" ,\" body\" :{\" output\" :\" Text to stdout\\ n\" ,\" category\" :\" stdout\" },\" type\" :\" event\" ,\" seq\" :9}" );
173+ tester .compareReceivedMessages (
174+ "{\" event\" :\" output\" ,\" body\" :{\" output\" :\" Text to stderr\\ n\" ,\" category\" :\" stderr\" },\" type\" :\" event\" ,\" seq\" :10}" );
175+ tester .sendMessage ("{\" command\" :\" disconnect\" ,\" arguments\" :{\" restart\" :false},\" type\" :\" request\" ,\" seq\" :11}" );
176+ tester .compareReceivedMessages (
177+ "{\" success\" :true,\" type\" :\" response\" ,\" request_seq\" :11,\" command\" :\" disconnect\" ,\" seq\" :11}" );
178+ tester .finish ();
179+ tester .getContext ().eval (source3 );
180+ }
181+
136182 @ Test
137183 public void testMultiThreading () throws Exception {
138184 Source source = Source .newBuilder (InstrumentationTestLanguage .ID , new URL ("file:///path/TestThreads.itl" )).content ("ROOT(\n " +
0 commit comments