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

Unified Diff: runtime/observatory/tests/service/get_object_rpc_test.dart

Issue 1090293003: Kill service_test.cc tests in favor of dart tests for the service protocol. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: fix tests Created 5 years, 8 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: runtime/observatory/tests/service/get_object_rpc_test.dart
diff --git a/runtime/observatory/tests/service/get_object_rpc_test.dart b/runtime/observatory/tests/service/get_object_rpc_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..60e6fb0c20b8084923272de219a4ff5f0415a62d
--- /dev/null
+++ b/runtime/observatory/tests/service/get_object_rpc_test.dart
@@ -0,0 +1,369 @@
+// Copyright (c) 2015, 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.
+// VMOptions=--compile-all --error_on_bad_type --error_on_bad_override
+
+library get_object_rpc_test;
+
+import 'dart:async';
+
+import 'package:observatory/service_io.dart';
+import 'package:unittest/unittest.dart';
+
+import 'test_helper.dart';
+
+class _DummyClass {
+ static var dummyVar = 11;
+ void dummyFunction() {
+ }
+}
+
+class _DummySubClass extends _DummyClass {
+}
+
+void warmup() {
+ new _DummyClass().dummyFunction();
+}
+
+eval(Isolate isolate, String expression) async {
+ Map params = {
+ 'targetId': isolate.rootLib.id,
+ 'expression': expression,
+ };
+ return await isolate.invokeRpcNoUpgrade('eval', params);
+}
+
+var tests = [
+ // null object.
+ (Isolate isolate) async {
+ var params = {
+ 'objectId': 'objects/null',
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('null'));
+ expect(result['id'], equals('objects/null'));
+ expect(result['valueAsString'], equals('null'));
+ expect(result['class']['type'], equals('@Class'));
+ expect(result['class']['name'], equals('Null'));
+ expect(result['size'], isPositive);
+ },
+
+ // bool object.
+ (Isolate isolate) async {
+ var params = {
+ 'objectId': 'objects/bool-true',
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('bool'));
+ expect(result['id'], equals('objects/bool-true'));
+ expect(result['valueAsString'], equals('true'));
+ expect(result['class']['type'], equals('@Class'));
+ expect(result['class']['name'], equals('bool'));
+ expect(result['size'], isPositive);
+ expect(result['fields'], isEmpty);
+ },
+
+ // int object.
+ (Isolate isolate) async {
+ var params = {
+ 'objectId': 'objects/int-123',
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('int'));
+ expect(result['_vmType'], equals('Smi'));
+ expect(result['id'], equals('objects/int-123'));
+ expect(result['valueAsString'], equals('123'));
+ expect(result['class']['type'], equals('@Class'));
+ expect(result['class']['name'], equals('_Smi'));
+ expect(result['size'], isZero);
+ expect(result['fields'], isEmpty);
+ },
+
+ // A general Dart object.
+ (Isolate isolate) async {
+ // Call eval to get a Dart list.
+ var evalResult = await eval(isolate, '[3, 2, 1]');
+ var params = {
+ 'objectId': evalResult['id'],
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('List'));
+ expect(result['_vmType'], equals('GrowableObjectArray'));
+ expect(result['id'], startsWith('objects/'));
+ expect(result['valueAsString'], isNull);
+ expect(result['class']['type'], equals('@Class'));
+ expect(result['class']['name'], equals('_GrowableList'));
+ expect(result['size'], isPositive);
+ expect(result['fields'], isEmpty);
+ expect(result['elements'].length, equals(3));
+ expect(result['elements'][0]['index'], equals(0));
+ expect(result['elements'][0]['value']['type'], equals('@int'));
+ expect(result['elements'][0]['value']['valueAsString'], equals('3'));
+ },
+
+ // An expired object.
+ (Isolate isolate) async {
+ var params = {
+ 'objectId': 'objects/99999999',
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('Sentinel'));
+ expect(result['id'], startsWith('objects/expired'));
+ expect(result['valueAsString'], equals('<expired>'));
+ expect(result['class'], isNull);
+ expect(result['size'], isNull);
+ },
+
+ // library.
+ (Isolate isolate) async {
+ var params = {
+ 'objectId': isolate.rootLib.id,
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('Library'));
+ expect(result['id'], startsWith('libraries/'));
+ expect(result['name'], equals('get_object_rpc_test'));
+ expect(result['url'], startsWith('file:'));
+ expect(result['url'], endsWith('get_object_rpc_test.dart'));
+ expect(result['imports'].length, isPositive);
+ expect(result['imports'][0]['type'], equals('@Library'));
+ expect(result['scripts'].length, isPositive);
+ expect(result['scripts'][0]['type'], equals('@Script'));
+ expect(result['variables'].length, isPositive);
+ expect(result['variables'][0]['type'], equals('@Field'));
+ expect(result['functions'].length, isPositive);
+ expect(result['functions'][0]['type'], equals('@Function'));
+ expect(result['classes'].length, isPositive);
+ expect(result['classes'][0]['type'], equals('@Class'));
+ },
+
+ // invalid library.
+ (Isolate isolate) async {
+ var params = {
+ 'objectId': 'libraries/9999999',
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('Error'));
+ expect(result['message'], startsWith('Unrecognized object id'));
+ },
+
+ // script.
+ (Isolate isolate) async {
+ // Get the library first.
+ var params = {
+ 'objectId': isolate.rootLib.id,
+ };
+ var libResult = await isolate.invokeRpcNoUpgrade('getObject', params);
+ // Get the first script.
+ params = {
+ 'objectId': libResult['scripts'][0]['id'],
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('Script'));
+ expect(result['id'], startsWith('libraries/'));
+ expect(result['name'], startsWith('file:'));
+ expect(result['name'], endsWith('get_object_rpc_test.dart'));
+ expect(result['kind'], equals('script'));
+ expect(result['library']['type'], equals('@Library'));
+ expect(result['source'], startsWith('// Copyright (c)'));
+ expect(result['tokenPosTable'].length, isPositive);
+ expect(result['tokenPosTable'][0], new isInstanceOf<List>());
+ expect(result['tokenPosTable'][0].length, isPositive);
+ expect(result['tokenPosTable'][0][0], new isInstanceOf<int>());
+ },
+
+ // invalid script.
+ (Isolate isolate) async {
+ var params = {
+ 'objectId': 'scripts/9999999',
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('Error'));
+ expect(result['message'], startsWith('Unrecognized object id'));
+ },
+
+ // class
+ (Isolate isolate) async {
+ // Call eval to get a class id.
+ var evalResult = await eval(isolate, 'new _DummyClass()');
+ var params = {
+ 'objectId': evalResult['class']['id'],
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('Class'));
+ expect(result['id'], startsWith('classes/'));
+ expect(result['name'], equals('_DummyClass'));
+ expect(result['_vmName'], startsWith('_DummyClass@'));
+ expect(result['abstract'], equals(false));
+ expect(result['const'], equals(false));
+ expect(result['finalized'], equals(true));
+ expect(result['implemented'], equals(false));
+ expect(result['patch'], equals(false));
+ expect(result['library']['type'], equals('@Library'));
+ expect(result['script']['type'], equals('@Script'));
+ expect(result['super']['type'], equals('@Class'));
+ expect(result['interfaces'].length, isZero);
+ expect(result['fields'].length, isPositive);
+ expect(result['fields'][0]['type'], equals('@Field'));
+ expect(result['functions'].length, isPositive);
+ expect(result['functions'][0]['type'], equals('@Function'));
+ expect(result['subclasses'].length, isPositive);
+ expect(result['subclasses'][0]['type'], equals('@Class'));
+ },
+
+ // invalid class.
+ (Isolate isolate) async {
+ var params = {
+ 'objectId': 'classes/9999999',
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('Error'));
+ expect(result['message'], startsWith('Unrecognized object id'));
+ },
+
+ // type.
+ (Isolate isolate) async {
+ // Call eval to get a class id.
+ var evalResult = await eval(isolate, 'new _DummyClass()');
+ var id = "${evalResult['class']['id']}/types/0";
+ var params = {
+ 'objectId': id,
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('Type'));
+ expect(result['id'], equals(id));
+ expect(result['class']['type'], equals('@Class'));
+ expect(result['class']['name'], equals('_Type'));
+ expect(result['size'], isPositive);
+ expect(result['fields'], isEmpty);
+ expect(result['typeClass']['type'], equals('@Class'));
+ expect(result['typeClass']['name'], equals('_DummyClass'));
+ },
+
+ // invalid type.
+ (Isolate isolate) async {
+ var evalResult = await eval(isolate, 'new _DummyClass()');
+ var id = "${evalResult['class']['id']}/types/9999999";
+ var params = {
+ 'objectId': id,
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('Error'));
+ expect(result['message'], startsWith('Unrecognized object id'));
+ },
+
+ // function.
+ (Isolate isolate) async {
+ // Call eval to get a class id.
+ var evalResult = await eval(isolate, 'new _DummyClass()');
+ var id = "${evalResult['class']['id']}/functions/dummyFunction";
+ var params = {
+ 'objectId': id,
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('Function'));
+ expect(result['id'], equals(id));
+ expect(result['name'], equals('dummyFunction'));
+ expect(result['kind'], equals('RegularFunction'));
+ expect(result['static'], equals(false));
+ expect(result['const'], equals(false));
+ expect(result['script']['type'], equals('@Script'));
+ expect(result['tokenPos'], isPositive);
+ expect(result['code']['type'], equals('@Code'));
+ expect(result['_optimizable'], equals(true));
+ expect(result['_inlinable'], equals(true));
+ expect(result['_usageCounter'], isPositive);
+ expect(result['_optimizedCallSiteCount'], isZero);
+ expect(result['_deoptimizations'], isZero);
+ },
+
+ // invalid function.
+ (Isolate isolate) async {
+ // Call eval to get a class id.
+ var evalResult = await eval(isolate, 'new _DummyClass()');
+ var id = "${evalResult['class']['id']}/functions/invalid";
+ var params = {
+ 'objectId': id,
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('Error'));
+ expect(result['message'], startsWith('Unrecognized object id'));
+ },
+
+ // field
+ (Isolate isolate) async {
+ // Call eval to get a class id.
+ var evalResult = await eval(isolate, 'new _DummyClass()');
+ var id = "${evalResult['class']['id']}/fields/0";
+ var params = {
+ 'objectId': id,
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('Field'));
+ expect(result['id'], equals(id));
+ expect(result['name'], equals('dummyVar'));
+ expect(result['value']['valueAsString'], equals('11'));
+ expect(result['const'], equals(false));
+ expect(result['static'], equals(true));
+ expect(result['final'], equals(false));
+ expect(result['script']['type'], equals('@Script'));
+ expect(result['tokenPos'], isPositive);
+ expect(result['_guardNullable'], isNotNull);
+ expect(result['_guardClass'], isNotNull);
+ expect(result['_guardLength'], isNotNull);
+ },
+
+ // invalid field.
+ (Isolate isolate) async {
+ // Call eval to get a class id.
+ var evalResult = await eval(isolate, 'new _DummyClass()');
+ var id = "${evalResult['class']['id']}/fields/9999";
+ var params = {
+ 'objectId': id,
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('Error'));
+ expect(result['message'], startsWith('Unrecognized object id'));
+ },
+
+ // code.
+ (Isolate isolate) async {
+ // Call eval to get a class id.
+ var evalResult = await eval(isolate, 'new _DummyClass()');
+ var funcId = "${evalResult['class']['id']}/functions/dummyFunction";
+ var params = {
+ 'objectId': funcId,
+ };
+ var funcResult = await isolate.invokeRpcNoUpgrade('getObject', params);
+ params = {
+ 'objectId': funcResult['code']['id'],
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('Code'));
+ expect(result['name'], equals('_DummyClass.dummyFunction'));
+ expect(result['_vmName'], equals('dummyFunction'));
+ expect(result['kind'], equals('Dart'));
+ expect(result['_optimized'], new isInstanceOf<bool>());
+ expect(result['function']['type'], equals('@Function'));
+ expect(result['_startAddress'], new isInstanceOf<String>());
+ expect(result['_endAddress'], new isInstanceOf<String>());
+ expect(result['_objectPool'], isNotNull);
+ expect(result['_disassembly'], isNotNull);
+ expect(result['_descriptors'], isNotNull);
+ expect(result['_inlinedFunctions'], isNotNull);
+ expect(result['_inlinedIntervals'], isNotNull);
+ },
+
+ // invalid code.
+ (Isolate isolate) async {
+ // Call eval to get a class id.
+ var params = {
+ 'objectId': 'code/0',
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('Error'));
+ expect(result['message'], startsWith('Unrecognized object id'));
+ },
+];
+
+main(args) async => runIsolateTests(args, tests, testeeBefore:warmup);

Powered by Google App Engine
This is Rietveld 408576698