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

Unified Diff: LayoutTests/dart/inspector/utils.dart

Issue 300393002: Merge DevTools Refactor CL to Blink36 (Closed) Base URL: svn://svn.chromium.org/blink/branches/dart/1985
Patch Set: PTAL Created 6 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
« no previous file with comments | « LayoutTests/dart/inspector/scope-variables.html ('k') | LayoutTests/dart/inspector/utils.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: LayoutTests/dart/inspector/utils.dart
diff --git a/LayoutTests/dart/inspector/utils.dart b/LayoutTests/dart/inspector/utils.dart
new file mode 100644
index 0000000000000000000000000000000000000000..b832a4e91b8687f5420f5cd50783bd3eee461de5
--- /dev/null
+++ b/LayoutTests/dart/inspector/utils.dart
@@ -0,0 +1,329 @@
+// 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.
+
+/**
+ * Tests for utility class used to extract debugger data defined in
+ * native_DOMImplementation.dart
+ */
+library utilsTest;
+
+import 'package:expect/expect.dart';
+import 'package:unittest/html_config.dart';
+import 'package:unittest/unittest.dart';
+import 'dart:html';
+
+import 'sample_library.dart';
+
+import 'dart:mirrors';
+
+/**
+ * Wrapper around the [dart:html] [_Utils] class that lets us invoke its
+ * methods from a different library.
+ */
+class UtilsWrapper {
+ ClassMirror _receiver;
+
+ UtilsWrapper() {
+ var html = currentMirrorSystem().libraries[Uri.parse('dart:html')];
+ _receiver = html.declarations[MirrorSystem.getSymbol('_Utils', html)];
+ }
+
+ noSuchMethod(Invocation msg) =>
+ _receiver.invoke(msg.memberName,
+ msg.positionalArguments,
+ msg.namedArguments).reflectee;
+}
+
+/**
+ * Helper class to convert the packed property structure used by Dartium back
+ * to a more human readable form.
+ */
+class _Property {
+ _Property(List input, int offset) :
+ name = input[offset],
+ setter = input[offset + 1],
+ getter = input[offset + 2],
+ value = input[offset + 3],
+ hasValue = input[offset + 4],
+ writable = input[offset + 5],
+ isMethod = input[offset + 6],
+ isOwn = input[offset + 7],
+ wasThrown = input[offset + 8];
+
+ final String name;
+ final Function setter;
+ final Function getter;
+ final value;
+ final bool hasValue;
+ final bool writable;
+ final bool isMethod;
+ final bool isOwn;
+ final bool wasThrown;
+}
+
+var _Utils = new UtilsWrapper();
+
+_Property findObjectClassProperty(o, String name) =>
+ findProperty(_Utils.getObjectClassProperties(o, true, false), name);
+
+_Property findProperty(List properties, String name) {
+ for (int i = 0; i < properties.length; i += 9) {
+ if (properties[i] == name) return new _Property(properties, i);
+ }
+ return null;
+}
+
+main() {
+ useHtmlConfiguration(true);
+
+ var sampleLibraryUrl = reflectClass(Foo).owner.uri.toString();
+
+ group('completions', () {
+
+ test('object', () {
+ expect(_Utils.getObjectCompletions(new Foo(), sampleLibraryUrl),
+ orderedEquals(['_fooPrivate1', '_fooPrivate2', 'blaProp', 'field1',
+ 'field2', 'hashCode', 'member1', 'member2', 'noSuchMethod',
+ 'prop1', 'prop2', 'runtimeType', 'toString']));
+
+ expect(_Utils.getObjectCompletions(new Baz(), sampleLibraryUrl),
+ orderedEquals(['_fooPrivate1', '_fooPrivate2', 'bazField', 'blaProp',
+ 'field1', 'field2', 'hashCode', 'member1', 'member2',
+ 'noSuchMethod', 'prop1', 'prop2', 'runtimeType', 'toString']));
+
+ // Should not display any privates as a different library is specified.
+ expect(_Utils.getObjectCompletions(new Foo(), 'dart:html'),
+ orderedEquals(['blaProp', 'field1', 'field2', 'hashCode', 'member1',
+ 'member2', 'noSuchMethod', 'prop1', 'prop2', 'runtimeType',
+ 'toString']));
+
+ expect(_Utils.getObjectCompletions(new Object(), sampleLibraryUrl),
+ orderedEquals(
+ ['hashCode', 'noSuchMethod', 'runtimeType', 'toString']));
+
+ // We don't want to make the test depend on exactly what private members
+ // Object has but it is safe to assume that Object will have some private
+ // members.
+ expect(_Utils.getObjectCompletions(new Object(), 'dart:core').length,
+ greaterThan(4));
+ });
+
+ test('class', () {
+ expect(_Utils.getObjectCompletions(Foo, sampleLibraryUrl),
+ orderedEquals(['namedConstructor1', 'namedFactoryConstructor1',
+ 'staticField1', 'staticField2', 'staticMember1']));
+ expect(_Utils.getObjectCompletions(Bar, sampleLibraryUrl),
+ orderedEquals(['barConst1', 'barStaticMethod', 'barStaticProp']));
+ });
+
+ test('library', () {
+ expect(_Utils.getLibraryCompletions('dart:core'),
+ contains('Object'));
+
+ var completions = _Utils.getLibraryCompletions(sampleLibraryUrl);
+ expect(completions, contains('Foo'));
+ expect(completions, contains('exampleStaticMethod'));
+ expect(completions, contains('_examplePrivateStaticMethod'));
+ expect(completions, contains('_exampleProp2'));
+ expect(completions, contains('exampleProp2'));
+ // Contained only in the imported dart:html library.
+ expect(completions, isNot(contains('Node')));
+ expect(completions, isNot(contains('js')));
+
+ completions = _Utils.getLibraryCompletionsIncludingImports(sampleLibraryUrl);
+ expect(completions, contains('Node'));
+ expect(completions, contains('js'));
+ });
+ });
+
+ group('getProperties', () {
+
+ test('treat property as field', () {
+ expect(_Utils.treatPropertyAsField(
+ reflectClass(Foo).declarations[MirrorSystem.getSymbol('prop1')],
+ reflectClass(Foo).owner),
+ isFalse);
+
+ // Insure that dart:html properties are treated as fields.
+ expect(_Utils.treatPropertyAsField(
+ reflectClass(Node).declarations[MirrorSystem.getSymbol('text')],
+ reflectClass(Node).owner),
+ true);
+ });
+
+ test('describe function', () {
+ var b = new Bar();
+ expect(_Utils.describeFunction(b.barMember1), equals('barMember1() => 42;'));
+ // Invocation trampoline for function barMember1.
+ var barMember1 = findObjectClassProperty(b, 'barMember1').value;
+ expect(_Utils.describeFunction(barMember1), equals('barMember1() => 42;'));
+
+ var details = _Utils.getInvocationTrampolineDetails(barMember1);
+ expect(details[0], equals(62)); // Line number.
+ expect(details[1], equals(3)); // Column number.
+ expect(details[2], endsWith('sample_library.dart')); // File name.
+ expect(details[3], equals('barMember1')); // Method name.
+ });
+
+ test('object properties', () {
+ var o = new Bar();
+ var property;
+ var properties = _Utils.getObjectProperties(o, true, false);
+
+ property = findProperty(properties, 'barField1');
+ expect(property.value, equals(9));
+ expect(property.setter, isNull);
+ expect(property.getter, isNull);
+ expect(property.hasValue, isTrue);
+ expect(property.writable, isTrue);
+ expect(property.isMethod, isFalse);
+ expect(property.isOwn, isTrue);
+ expect(property.wasThrown, isFalse);
+
+ property = findProperty(properties, 'barFinalField');
+ expect(property.value, equals(12));
+ expect(property.setter, isNull);
+ expect(property.getter, isNull);
+ expect(property.hasValue, isTrue);
+ expect(property.writable, isFalse);
+ expect(property.isMethod, isFalse);
+ expect(property.isOwn, isTrue);
+ expect(property.wasThrown, isFalse);
+
+ // verify that properties don't show up.
+ expect(findProperty(properties, "barProp1"), isNull);
+
+ properties = _Utils.getObjectClassProperties(o, true, true);
+ property = findProperty(properties, 'barProp1');
+ expect(property.value, isNull);
+ expect(property.setter, isNull);
+ expect(property.getter(), equals('bar1'));
+ expect(property.hasValue, isFalse);
+ expect(property.writable, isFalse);
+ expect(property.isMethod, isFalse);
+ expect(property.isOwn, isTrue);
+ expect(property.wasThrown, isFalse);
+
+ property = findProperty(properties, 'barProp2');
+ expect(property.value, isNull);
+ expect(property.writable, isTrue);
+ expect(property.setter is Function, isTrue);
+ expect(property.getter(), equals(11));
+ property.setter(55);
+ expect(property.getter(), equals(55));
+ expect(property.hasValue, isFalse);
+ expect(property.isMethod, isFalse);
+ expect(property.isOwn, isTrue);
+ expect(property.wasThrown, isFalse);
+ });
+
+ test('class properties', () {
+ var properties = _Utils.getClassProperties(Bar, true, false);
+ var property = findProperty(properties, 'barStaticMethod');
+ expect(property.value(10), equals(30));
+ expect(property.setter, isNull);
+ expect(property.getter, isNull);
+ expect(property.hasValue, isTrue);
+ expect(property.writable, isFalse);
+ expect(property.isMethod, isTrue);
+ expect(property.isOwn, isTrue);
+ expect(property.wasThrown, isFalse);
+
+ property = findProperty(properties, 'barConst1');
+ expect(property.value, equals(9));
+ expect(property.setter, isNull);
+ expect(property.getter, isNull);
+ expect(property.hasValue, isTrue);
+ expect(property.writable, isFalse);
+ expect(property.isMethod, isFalse);
+ expect(property.isOwn, isTrue);
+ expect(property.wasThrown, isFalse);
+
+ properties = _Utils.getClassProperties(Bar, true, true);
+ expect(findProperty(properties, 'barStaticMethod'), isNull);
+
+ property = findProperty(properties, 'barStaticProp');
+ expect(property.value, isNull);
+ expect(property.setter, isNull);
+ expect(property.getter(), equals('staticProp'));
+ expect(property.hasValue, isFalse);
+ expect(property.writable, isFalse);
+ expect(property.isMethod, isFalse);
+ expect(property.isOwn, isTrue);
+ expect(property.wasThrown, isFalse);
+ });
+
+ test('safe get property', () {
+ expect(_Utils.getObjectPropertySafe(new Bar(), "_barProp2"), equals(11));
+ expect(_Utils.getObjectPropertySafe(new Bar(), "_fooPrivate2"), equals(2));
+ });
+
+ test('library properties', () {
+ var properties = _Utils.getLibraryProperties(sampleLibraryUrl, true, false);
+ var property = findProperty(properties, 'exampleStaticMethod');
+ expect(property.value(10), equals(20));
+ expect(property.setter, isNull);
+ expect(property.getter, isNull);
+ expect(property.hasValue, isTrue);
+ expect(property.writable, isFalse);
+ expect(property.isMethod, isTrue);
+ expect(property.isOwn, isTrue);
+ expect(property.wasThrown, isFalse);
+
+ property = findProperty(properties, 'exampleField');
+ expect(property.value, equals(8));
+ expect(property.setter, isNull);
+ expect(property.getter, isNull);
+ expect(property.hasValue, isTrue);
+ expect(property.writable, isTrue);
+ expect(property.isMethod, isFalse);
+ expect(property.isOwn, isTrue);
+ expect(property.wasThrown, isFalse);
+
+ property = findProperty(properties, 'exampleFinalField');
+ expect(property.value, equals(16));
+ expect(property.setter, isNull);
+ expect(property.getter, isNull);
+ expect(property.hasValue, isTrue);
+ expect(property.writable, isFalse);
+ expect(property.isMethod, isFalse);
+ expect(property.isOwn, isTrue);
+ expect(property.wasThrown, isFalse);
+
+ property = findProperty(properties, 'Foo');
+ expect(property.value.toString(), "Foo");
+ expect(property.value is Type, isTrue);
+ expect(property.setter, isNull);
+ expect(property.getter, isNull);
+ expect(property.hasValue, isTrue);
+ expect(property.writable, isFalse);
+ expect(property.isMethod, isFalse);
+ expect(property.isOwn, isTrue);
+ expect(property.wasThrown, isFalse);
+
+ properties = _Utils.getLibraryProperties(sampleLibraryUrl, true, true);
+ property = findProperty(properties, 'exampleProp1');
+ expect(property.value, isNull);
+ expect(property.setter, isNull);
+ expect(property.getter(), equals(30));
+ expect(property.hasValue, isFalse);
+ expect(property.writable, isFalse);
+ expect(property.isMethod, isFalse);
+ expect(property.isOwn, isTrue);
+ expect(property.wasThrown, isFalse);
+
+ property = findProperty(properties, 'exampleProp2');
+ expect(property.value, isNull);
+ expect(property.writable, isTrue);
+ expect(property.setter is Function, isTrue);
+ expect(property.getter(), equals(10));
+ property.setter(20);
+ expect(property.getter(), equals(20));
+ expect(property.hasValue, isFalse);
+ expect(property.isMethod, isFalse);
+ expect(property.isOwn, isTrue);
+ expect(property.wasThrown, isFalse);
+ });
+ });
+}
« no previous file with comments | « LayoutTests/dart/inspector/scope-variables.html ('k') | LayoutTests/dart/inspector/utils.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698