Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Unified Diff: tests/standalone/debugger/debug_lib.dart

Issue 17112010: Fix for an issue w/ breakpointResolved events not being sent. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tests/standalone/debugger/debug_lib.dart
===================================================================
--- tests/standalone/debugger/debug_lib.dart (revision 24149)
+++ tests/standalone/debugger/debug_lib.dart (working copy)
@@ -186,10 +186,16 @@
int frameIndex;
List<String> functionNames;
+ Map locals = {};
+
FrameMatcher(this.frameIndex, this.functionNames) {
template = {"id": 0, "command": "getStackTrace", "params": {"isolateId": 0}};
}
+ void matchLocal(String localName, String localValue) {
+ locals[localName] = localValue;
+ }
+
void matchResponse(Debugger debugger) {
super.matchResponse(debugger);
var msg = debugger.currentMessage;
@@ -218,6 +224,26 @@
return;
}
}
+
+ // verify locals
+ String functionName = frames[frameIndex]['functionName'];
+ List localsList = frames[frameIndex]['locals'];
+ Map reportedLocals = {};
+ localsList.forEach((local) => reportedLocals[local['name']] = local['value']);
+ for (String key in locals.keys) {
+ if (reportedLocals[key] == null) {
+ debugger.error("Error in $functionName(): no value reported for local "
+ "variable $key");
+ return;
+ }
+ String expected = locals[key];
+ String actual = reportedLocals[key]['text'];
+ if (expected != actual) {
+ debugger.error("Error in $functionName(): got '$actual' for local "
+ "variable $key, but expected '$expected'");
+ return;
+ }
+ }
}
}
@@ -231,6 +257,27 @@
}
+class EventMatcher {
+ String eventName;
+
+ EventMatcher(this.eventName);
+
+ void matchEvent(Debugger debugger, Map event) {
+ String actualName = event['event'];
+
+ if (eventName != actualName) {
+ debugger.error("Error: got event $actualName but expected event $eventName");
+ return;
+ }
+ }
+}
+
+
+ExpectEvent(String eventName) {
+ return new EventMatcher(eventName);
+}
+
+
class RunCommand extends Command {
RunCommand.resume() {
template = {"id": 0, "command": "resume", "params": {"isolateId": 0}};
@@ -285,6 +332,7 @@
entries.add(MatchFrame(0, "main"));
}
bool get isEmpty => entries.isEmpty;
+ bool get isNextEventMatcher => !isEmpty && currentEntry is EventMatcher;
get currentEntry => entries.last;
advance() => entries.removeLast();
add(entry) => entries.add(entry);
@@ -361,6 +409,12 @@
} else {
error("Error: unknown debugger event received");
}
+
+ if (script.isNextEventMatcher) {
+ EventMatcher matcher = script.currentEntry;
+ script.advance();
+ matcher.matchEvent(this, msg);
+ }
}
// Handle one JSON message object and match it to the

Powered by Google App Engine
This is Rietveld 408576698