}
public VSCodeResult Request(Request command, int timeout = -1)
{
- EventsAddedOnLastRequestPos = -1;
string stringJSON = JsonConvert.SerializeObject(command,
Formatting.None,
new JsonSerializerSettings {
return new VSCodeResult((bool)GetResponsePropertyValue(line, "success"), line);
} else {
Logger.LogLine("<- (E) " + line);
- if (EventsAddedOnLastRequestPos == -1) {
- EventsAddedOnLastRequestPos = EventList.Count;
- }
- EventList.Add(line);
+ EventQueue.Enqueue(line);
}
}
}
- public string Receive(int timeout = -1)
+ void ReceiveEvents(int timeout = -1)
{
- if (EventsAddedOnLastRequestPos != -1 && EventsAddedOnLastRequestPos < EventList.Count) {
- string line = EventList[EventsAddedOnLastRequestPos];
- EventsAddedOnLastRequestPos++;
- return line;
- }
-
while (true) {
string[] response = Debuggee.DebuggerClient.Receive(timeout);
if (response == null) {
string line = response[0];
Logger.LogLine("<- (E) " + line);
- EventList.Add(line);
+ EventQueue.Enqueue(line);
foreach (var Event in StopEvents) {
if (isResponseContainProperty(line, "event", Event)) {
- return line;
+ return;
}
}
}
}
- public List<string> EventList = new List<string>();
- int EventsAddedOnLastRequestPos = -1;
+ public bool IsEventReceived(Func<string, bool> filter)
+ {
+ // check previously received events first
+ while (EventQueue.Count > 0) {
+ if (filter(EventQueue.Dequeue()))
+ return true;
+ }
+
+ // receive new events and check them
+ ReceiveEvents();
+ while (EventQueue.Count > 0) {
+ if (filter(EventQueue.Dequeue()))
+ return true;
+ }
+
+ return false;
+ }
+
+ Queue<string> EventQueue = new Queue<string>();
string[] StopEvents = {"stopped",
"terminated"};
}
public string text;
public bool ?allThreadsStopped;
}
+
+ public class ExitedEvent : Event {
+ public ExitedEventBody body;
+ }
+
+ public class ExitedEventBody {
+ public int exitCode;
+ }
}
public static void WasEntryPointHit()
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "entry"));
-
- foreach (var Event in VSCodeDebugger.EventList) {
- if (VSCodeDebugger.isResponseContainProperty(Event, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(Event, "reason", "entry")) {
- threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(Event, "threadId"));
- break;
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
+ && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "entry")) {
+ threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(resJSON, "threadId"));
+ return true;
}
- }
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
}
public static void WasExit()
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated"));
+ bool wasExited = false;
+ int ?exitCode = null;
+ bool wasTerminated = false;
+
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "exited")) {
+ wasExited = true;
+ ExitedEvent exitedEvent = JsonConvert.DeserializeObject<ExitedEvent>(resJSON);
+ exitCode = exitedEvent.body.exitCode;
+ }
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated")) {
+ wasTerminated = true;
+ }
+ if (wasExited && exitCode == 0 && wasTerminated)
+ return true;
+
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
}
public static void DebuggerExit()
public static void WasBreakpointHit(Breakpoint breakpoint)
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "breakpoint"));
-
- foreach (var Event in VSCodeDebugger.EventList) {
- if (VSCodeDebugger.isResponseContainProperty(Event, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(Event, "reason", "breakpoint")) {
- threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(Event, "threadId"));
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
+ && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "breakpoint")) {
+ threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(resJSON, "threadId"));
+ return true;
}
- }
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
StackTraceRequest stackTraceRequest = new StackTraceRequest();
stackTraceRequest.arguments.threadId = threadId;
public static void WasExit()
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated"));
+ bool wasExited = false;
+ int ?exitCode = null;
+ bool wasTerminated = false;
+
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "exited")) {
+ wasExited = true;
+ ExitedEvent exitedEvent = JsonConvert.DeserializeObject<ExitedEvent>(resJSON);
+ exitCode = exitedEvent.body.exitCode;
+ }
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated")) {
+ wasTerminated = true;
+ }
+ if (wasExited && exitCode == 0 && wasTerminated)
+ return true;
+
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
}
public static void DebuggerExit()
public static void WasBreakpointHit(Breakpoint breakpoint)
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "breakpoint"));
-
- foreach (var Event in VSCodeDebugger.EventList) {
- if (VSCodeDebugger.isResponseContainProperty(Event, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(Event, "reason", "breakpoint")) {
- threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(Event, "threadId"));
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
+ && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "breakpoint")) {
+ threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(resJSON, "threadId"));
+ return true;
}
- }
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
StackTraceRequest stackTraceRequest = new StackTraceRequest();
stackTraceRequest.arguments.threadId = threadId;
public static void WasEntryPointHit()
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "entry"));
-
- foreach (var Event in VSCodeDebugger.EventList) {
- if (VSCodeDebugger.isResponseContainProperty(Event, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(Event, "reason", "entry")) {
- threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(Event, "threadId"));
- break;
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
+ && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "entry")) {
+ threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(resJSON, "threadId"));
+ return true;
}
- }
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
}
public static void WasExit()
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated"));
+ bool wasExited = false;
+ int ?exitCode = null;
+ bool wasTerminated = false;
+
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "exited")) {
+ wasExited = true;
+ ExitedEvent exitedEvent = JsonConvert.DeserializeObject<ExitedEvent>(resJSON);
+ exitCode = exitedEvent.body.exitCode;
+ }
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated")) {
+ wasTerminated = true;
+ }
+ if (wasExited && exitCode == 0 && wasTerminated)
+ return true;
+
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
}
public static void DebuggerExit()
public static void WasBreakpointHit(Breakpoint breakpoint)
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "breakpoint"));
-
- foreach (var Event in VSCodeDebugger.EventList) {
- if (VSCodeDebugger.isResponseContainProperty(Event, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(Event, "reason", "breakpoint")) {
- threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(Event, "threadId"));
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
+ && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "breakpoint")) {
+ threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(resJSON, "threadId"));
+ return true;
}
- }
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
StackTraceRequest stackTraceRequest = new StackTraceRequest();
stackTraceRequest.arguments.threadId = threadId;
public static void WasEntryPointHit()
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "entry"));
-
- foreach (var Event in VSCodeDebugger.EventList) {
- if (VSCodeDebugger.isResponseContainProperty(Event, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(Event, "reason", "entry")) {
- threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(Event, "threadId"));
- break;
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
+ && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "entry")) {
+ threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(resJSON, "threadId"));
+ return true;
}
- }
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
}
public static void Continue()
public static void WasExit()
{
bool wasExited = false;
+ int ?exitCode = null;
bool wasTerminated = false;
- foreach (var Event in VSCodeDebugger.EventList) {
- if (VSCodeDebugger.isResponseContainProperty(Event, "event", "exited")) {
+
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "exited")) {
wasExited = true;
+ ExitedEvent exitedEvent = JsonConvert.DeserializeObject<ExitedEvent>(resJSON);
+ exitCode = exitedEvent.body.exitCode;
}
- if (VSCodeDebugger.isResponseContainProperty(Event, "event", "terminated")) {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated")) {
wasTerminated = true;
}
- }
- Assert.True(wasExited && wasTerminated);
+ if (wasExited && exitCode == 0 && wasTerminated)
+ return true;
+
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
}
public static void DebuggerExit()
public static void WasEntryPointHit()
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "entry"));
-
- foreach (var Event in VSCodeDebugger.EventList) {
- if (VSCodeDebugger.isResponseContainProperty(Event, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(Event, "reason", "entry")) {
- threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(Event, "threadId"));
- break;
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
+ && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "entry")) {
+ threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(resJSON, "threadId"));
+ return true;
}
- }
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
}
public static void WasExit()
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated"));
+ bool wasExited = false;
+ int ?exitCode = null;
+ bool wasTerminated = false;
+
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "exited")) {
+ wasExited = true;
+ ExitedEvent exitedEvent = JsonConvert.DeserializeObject<ExitedEvent>(resJSON);
+ exitCode = exitedEvent.body.exitCode;
+ }
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated")) {
+ wasTerminated = true;
+ }
+ if (wasExited && exitCode == 0 && wasTerminated)
+ return true;
+
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
}
public static void DebuggerExit()
public static void WasBreakpointHit(Breakpoint breakpoint)
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "breakpoint"));
-
- foreach (var Event in VSCodeDebugger.EventList) {
- if (VSCodeDebugger.isResponseContainProperty(Event, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(Event, "reason", "breakpoint")) {
- threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(Event, "threadId"));
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
+ && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "breakpoint")) {
+ threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(resJSON, "threadId"));
+ return true;
}
- }
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
StackTraceRequest stackTraceRequest = new StackTraceRequest();
stackTraceRequest.arguments.threadId = threadId;
public static void WasEntryPointHit()
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "entry"));
-
- foreach (var Event in VSCodeDebugger.EventList) {
- if (VSCodeDebugger.isResponseContainProperty(Event, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(Event, "reason", "entry")) {
- threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(Event, "threadId"));
- break;
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
+ && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "entry")) {
+ threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(resJSON, "threadId"));
+ return true;
}
- }
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
}
public static void WasExit()
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated"));
+ bool wasExited = false;
+ int ?exitCode = null;
+ bool wasTerminated = false;
+
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "exited")) {
+ wasExited = true;
+ ExitedEvent exitedEvent = JsonConvert.DeserializeObject<ExitedEvent>(resJSON);
+ exitCode = exitedEvent.body.exitCode;
+ }
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated")) {
+ wasTerminated = true;
+ }
+ if (wasExited && exitCode == 0 && wasTerminated)
+ return true;
+
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
}
public static void DebuggerExit()
public static void WasBreakpointHit(Breakpoint breakpoint)
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "breakpoint"));
-
- foreach (var Event in VSCodeDebugger.EventList) {
- if (VSCodeDebugger.isResponseContainProperty(Event, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(Event, "reason", "breakpoint")) {
- threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(Event, "threadId"));
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
+ && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "breakpoint")) {
+ threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(resJSON, "threadId"));
+ return true;
}
- }
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
StackTraceRequest stackTraceRequest = new StackTraceRequest();
stackTraceRequest.arguments.threadId = threadId;
public static void WasEntryPointHit()
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "entry"));
-
- foreach (var Event in VSCodeDebugger.EventList) {
- if (VSCodeDebugger.isResponseContainProperty(Event, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(Event, "reason", "entry")) {
- threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(Event, "threadId"));
- break;
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
+ && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "entry")) {
+ threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(resJSON, "threadId"));
+ return true;
}
- }
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
}
public static void WasExit()
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated"));
+ bool wasExited = false;
+ int ?exitCode = null;
+ bool wasTerminated = false;
+
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "exited")) {
+ wasExited = true;
+ ExitedEvent exitedEvent = JsonConvert.DeserializeObject<ExitedEvent>(resJSON);
+ exitCode = exitedEvent.body.exitCode;
+ }
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated")) {
+ wasTerminated = true;
+ }
+ if (wasExited && exitCode == 0 && wasTerminated)
+ return true;
+
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
}
public static void DebuggerExit()
public static void WasPaused()
{
- foreach (var Event in VSCodeDebugger.EventList) {
- if (VSCodeDebugger.isResponseContainProperty(Event, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(Event, "reason", "pause")) {
- return;
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
+ && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "pause")) {
+ return true;
}
- }
- throw new NetcoreDbgTestCore.ResultNotSuccessException();
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
}
static VSCodeDebugger VSCodeDebugger = new VSCodeDebugger();
public static void WasEntryPointHit()
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "entry"));
-
- foreach (var Event in VSCodeDebugger.EventList) {
- if (VSCodeDebugger.isResponseContainProperty(Event, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(Event, "reason", "entry")) {
- threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(Event, "threadId"));
- break;
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
+ && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "entry")) {
+ threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(resJSON, "threadId"));
+ return true;
}
- }
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
}
public static void WasExit()
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated"));
+ bool wasExited = false;
+ int ?exitCode = null;
+ bool wasTerminated = false;
+
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "exited")) {
+ wasExited = true;
+ ExitedEvent exitedEvent = JsonConvert.DeserializeObject<ExitedEvent>(resJSON);
+ exitCode = exitedEvent.body.exitCode;
+ }
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated")) {
+ wasTerminated = true;
+ }
+ if (wasExited && exitCode == 0 && wasTerminated)
+ return true;
+
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
}
public static void DebuggerExit()
public static void WasStopped(string Reason, Breakpoint breakpoint)
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", Reason));
-
- foreach (var Event in VSCodeDebugger.EventList) {
- if (VSCodeDebugger.isResponseContainProperty(Event, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(Event, "reason", "breakpoint")) {
- threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(Event, "threadId"));
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
+ && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", Reason)) {
+ if (Reason == "breakpoint")
+ threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(resJSON, "threadId"));
+
+ return true;
}
- }
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
StackTraceRequest stackTraceRequest = new StackTraceRequest();
stackTraceRequest.arguments.threadId = threadId;
Assert.True(VSCodeDebugger.Request(configurationDoneRequest).Success);
}
- public static void WasEntryPointHit()
+ public static void WasEntryPointHitWithProperThreadID()
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "entry"));
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
+ && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "entry")) {
+ threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(resJSON, "threadId"));
+ return true;
+ }
+ return false;
+ };
threadId = -1;
- foreach (var Event in VSCodeDebugger.EventList) {
- if (VSCodeDebugger.isResponseContainProperty(Event, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(Event, "reason", "entry")) {
- threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(Event, "threadId"));
- break;
- }
- }
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
+
Assert.True(isThredInThreadsList(threadId));
}
public static void WasExit()
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated"));
+ bool wasExited = false;
+ int ?exitCode = null;
+ bool wasTerminated = false;
+
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "exited")) {
+ wasExited = true;
+ ExitedEvent exitedEvent = JsonConvert.DeserializeObject<ExitedEvent>(resJSON);
+ exitCode = exitedEvent.body.exitCode;
+ }
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated")) {
+ wasTerminated = true;
+ }
+ if (wasExited && exitCode == 0 && wasTerminated)
+ return true;
+
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
}
public static void DebuggerExit()
Assert.True(VSCodeDebugger.Request(setBreakpointsRequest).Success);
}
- public static void WasBreakpointHit(Breakpoint breakpoint)
+ public static void WasBreakpointHitWithProperThreadID(Breakpoint breakpoint)
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "breakpoint"));
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
+ && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "breakpoint")) {
+ threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(resJSON, "threadId"));
+ return true;
+ }
+ return false;
+ };
threadId = -1;
- foreach (var Event in VSCodeDebugger.EventList) {
- if (VSCodeDebugger.isResponseContainProperty(Event, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(Event, "reason", "breakpoint")) {
- threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(Event, "threadId"));
- }
- }
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
+
Assert.True(isThredInThreadsList(threadId));
StackTraceRequest stackTraceRequest = new StackTraceRequest();
Context.AddBreakpoint("bp");
Context.SetBreakpoints();
Context.PrepareEnd();
- Context.WasEntryPointHit();
+ Context.WasEntryPointHitWithProperThreadID();
Context.Continue();
});
Console.WriteLine("A breakpoint \"bp\" is set on this line"); Label.Breakpoint("bp");
Label.Checkpoint("bp_test", "finish", () => {
- Context.WasBreakpointHit(DebuggeeInfo.Breakpoints["bp"]);
+ Context.WasBreakpointHitWithProperThreadID(DebuggeeInfo.Breakpoints["bp"]);
Context.Continue();
});
public static void WasEntryPointHit()
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "entry"));
-
- foreach (var Event in VSCodeDebugger.EventList) {
- if (VSCodeDebugger.isResponseContainProperty(Event, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(Event, "reason", "entry")) {
- threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(Event, "threadId"));
- break;
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
+ && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "entry")) {
+ threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(resJSON, "threadId"));
+ return true;
}
- }
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
}
public static void WasExit()
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated"));
+ bool wasExited = false;
+ int ?exitCode = null;
+ bool wasTerminated = false;
+
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "exited")) {
+ wasExited = true;
+ ExitedEvent exitedEvent = JsonConvert.DeserializeObject<ExitedEvent>(resJSON);
+ exitCode = exitedEvent.body.exitCode;
+ }
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated")) {
+ wasTerminated = true;
+ }
+ if (wasExited && exitCode == 0 && wasTerminated)
+ return true;
+
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
}
public static void DebuggerExit()
public static void WasBreakpointHit(Breakpoint breakpoint)
{
- string resJSON = VSCodeDebugger.Receive(-1);
- Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "breakpoint"));
-
- foreach (var Event in VSCodeDebugger.EventList) {
- if (VSCodeDebugger.isResponseContainProperty(Event, "event", "stopped")
- && VSCodeDebugger.isResponseContainProperty(Event, "reason", "breakpoint")) {
- threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(Event, "threadId"));
+ Func<string, bool> filter = (resJSON) => {
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")
+ && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "breakpoint")) {
+ threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(resJSON, "threadId"));
+ return true;
}
- }
+ return false;
+ };
+
+ if (!VSCodeDebugger.IsEventReceived(filter))
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();
StackTraceRequest stackTraceRequest = new StackTraceRequest();
stackTraceRequest.arguments.threadId = threadId;