Index: runtime/bin/vmservice/observatory/test/inbound_references_test.dart |
diff --git a/runtime/bin/vmservice/observatory/test/inbound_references_test.dart b/runtime/bin/vmservice/observatory/test/inbound_references_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1d1f460ac99e90211d9c96df721544722fe2657f |
--- /dev/null |
+++ b/runtime/bin/vmservice/observatory/test/inbound_references_test.dart |
@@ -0,0 +1,58 @@ |
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+library inbound_references_test; |
+ |
+import 'dart:async' show Future; |
+import 'package:observatory/service_io.dart'; |
+import 'package:unittest/unittest.dart'; |
+import 'test_helper.dart'; |
+ |
+class Node { |
+ var edge; |
+} |
+ |
+class Edge { } |
+ |
+var n, e, array; |
+ |
+void script() { |
+ n = new Node(); |
+ e = new Edge(); |
+ n.edge = e; |
+ array = new List(2); |
+ array[0] = n; |
+ array[1] = e; |
+} |
+ |
+var tests = [ |
+ |
+(Isolate isolate) => |
+ isolate.rootLib.load().then((Library lib) { |
+ ServiceMap e = lib.variables.where((v) => v.name == 'e').single['value']; |
+ var id = e['id']; |
+ return isolate.get('/$id/inbound_references?limit=100').then( |
+ (ServiceMap response) { |
+ List references = response['references']; |
+ hasReferenceSuchThat(predicate) { |
+ expect(references.any(predicate), isTrue); |
+ } |
+ |
+ // Assert e is referenced by at least n, array, and the top-level |
+ // field e. |
+ hasReferenceSuchThat((r) => r['slot'] is Map && |
+ r['slot']['type']=='@Field' && |
+ r['slot']['name']=='edge' && |
+ r['source']['type']=='@Instance' && |
+ r['source']['class'].name=='Node'); |
+ hasReferenceSuchThat((r) => r['slot']==1 && |
+ r['source']['type']=='@Array'); |
+ hasReferenceSuchThat((r) => r['slot']=='<unknown>' && |
+ r['source']['type']=='@Field'); |
+ }); |
+}), |
+ |
+]; |
+ |
+main(args) => runIsolateTests(args, tests, testeeBefore: script); |