Chromium Code Reviews| 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 |
| index fdcbaa129edca9e7215aaef66837f0b819e0ce2e..c8bc0ffcec6d03104a4589c0744e1d0696c8053f 100644 |
| --- a/runtime/observatory/tests/service/get_object_rpc_test.dart |
| +++ b/runtime/observatory/tests/service/get_object_rpc_test.dart |
| @@ -5,7 +5,9 @@ |
| library get_object_rpc_test; |
| +import 'dart:typed_data'; |
| import 'package:observatory/service_io.dart'; |
| +import 'package:observatory/base64.dart'; |
|
Cutch
2015/10/14 17:58:09
dart:convert has a base64 converter now.
turnidge
2015/10/14 18:02:42
Ok -- will switch over when the rest of Observator
|
| import 'package:unittest/unittest.dart'; |
| import 'test_helper.dart'; |
| @@ -33,6 +35,9 @@ eval(Isolate isolate, String expression) async { |
| return await isolate.invokeRpcNoUpgrade('evaluate', params); |
| } |
| +var uint8List = new Uint8List.fromList([3, 2, 1]); |
| +var uint64List = new Uint64List.fromList([3, 2, 1]); |
| + |
| var tests = [ |
| // null object. |
| (Isolate isolate) async { |
| @@ -99,16 +104,108 @@ var tests = [ |
| expect(result['class']['name'], equals('_GrowableList')); |
| expect(result['size'], isPositive); |
| expect(result['fields'], isEmpty); |
| + expect(result['length'], equals(3)); |
| + expect(result['offset'], isNull); |
| + expect(result['count'], isNull); |
| expect(result['elements'].length, equals(3)); |
| expect(result['elements'][0]['type'], equals('@Instance')); |
| expect(result['elements'][0]['kind'], equals('Int')); |
| expect(result['elements'][0]['valueAsString'], equals('3')); |
| + expect(result['elements'][1]['type'], equals('@Instance')); |
| + expect(result['elements'][1]['kind'], equals('Int')); |
| + expect(result['elements'][1]['valueAsString'], equals('2')); |
| + expect(result['elements'][2]['type'], equals('@Instance')); |
| + expect(result['elements'][2]['kind'], equals('Int')); |
| + expect(result['elements'][2]['valueAsString'], equals('1')); |
| + }, |
| + |
| + // List prefix. |
| + (Isolate isolate) async { |
| + // Call eval to get a Dart list. |
| + var evalResult = await eval(isolate, '[3, 2, 1]'); |
| + var params = { |
| + 'objectId': evalResult['id'], |
| + 'count': 2, |
| + }; |
| + var result = await isolate.invokeRpcNoUpgrade('getObject', params); |
| + expect(result['type'], equals('Instance')); |
| + expect(result['kind'], 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['length'], equals(3)); |
| + expect(result['offset'], isNull); |
| + expect(result['count'], equals(2)); |
| + expect(result['elements'].length, equals(2)); |
| + expect(result['elements'][0]['type'], equals('@Instance')); |
| + expect(result['elements'][0]['kind'], equals('Int')); |
| + expect(result['elements'][0]['valueAsString'], equals('3')); |
| + expect(result['elements'][1]['type'], equals('@Instance')); |
| + expect(result['elements'][1]['kind'], equals('Int')); |
| + expect(result['elements'][1]['valueAsString'], equals('2')); |
| + }, |
| + |
| + // List suffix. |
| + (Isolate isolate) async { |
| + // Call eval to get a Dart list. |
| + var evalResult = await eval(isolate, '[3, 2, 1]'); |
| + var params = { |
| + 'objectId': evalResult['id'], |
| + 'offset': 2, |
| + 'count': 2, |
| + }; |
| + var result = await isolate.invokeRpcNoUpgrade('getObject', params); |
| + expect(result['type'], equals('Instance')); |
| + expect(result['kind'], 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['length'], equals(3)); |
| + expect(result['offset'], equals(2)); |
| + expect(result['count'], equals(1)); |
| + expect(result['elements'].length, equals(1)); |
| + expect(result['elements'][0]['type'], equals('@Instance')); |
| + expect(result['elements'][0]['kind'], equals('Int')); |
| + expect(result['elements'][0]['valueAsString'], equals('1')); |
| + }, |
| + |
| + // List with wacky offset. |
| + (Isolate isolate) async { |
| + // Call eval to get a Dart list. |
| + var evalResult = await eval(isolate, '[3, 2, 1]'); |
| + var params = { |
| + 'objectId': evalResult['id'], |
| + 'offset': 100, |
| + 'count': 2, |
| + }; |
| + var result = await isolate.invokeRpcNoUpgrade('getObject', params); |
| + expect(result['type'], equals('Instance')); |
| + expect(result['kind'], 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['length'], equals(3)); |
| + expect(result['offset'], equals(3)); |
| + expect(result['count'], equals(0)); |
| + expect(result['elements'], isEmpty); |
| }, |
| // A built-in Map. |
| (Isolate isolate) async { |
| // Call eval to get a Dart map. |
| - var evalResult = await eval(isolate, '{"x": 3, "y": 4}'); |
| + var evalResult = await eval(isolate, '{"x": 3, "y": 4, "z": 5}'); |
| var params = { |
| 'objectId': evalResult['id'], |
| }; |
| @@ -122,6 +219,51 @@ var tests = [ |
| expect(result['class']['name'], equals('_InternalLinkedHashMap')); |
| expect(result['size'], isPositive); |
| expect(result['fields'], isEmpty); |
| + expect(result['length'], equals(3)); |
| + expect(result['offset'], isNull); |
| + expect(result['count'], isNull); |
| + expect(result['associations'].length, equals(3)); |
| + expect(result['associations'][0]['key']['type'], equals('@Instance')); |
| + expect(result['associations'][0]['key']['kind'], equals('String')); |
| + expect(result['associations'][0]['key']['valueAsString'], equals('x')); |
| + expect(result['associations'][0]['value']['type'], equals('@Instance')); |
| + expect(result['associations'][0]['value']['kind'], equals('Int')); |
| + expect(result['associations'][0]['value']['valueAsString'], equals('3')); |
| + expect(result['associations'][1]['key']['type'], equals('@Instance')); |
| + expect(result['associations'][1]['key']['kind'], equals('String')); |
| + expect(result['associations'][1]['key']['valueAsString'], equals('y')); |
| + expect(result['associations'][1]['value']['type'], equals('@Instance')); |
| + expect(result['associations'][1]['value']['kind'], equals('Int')); |
| + expect(result['associations'][1]['value']['valueAsString'], equals('4')); |
| + expect(result['associations'][2]['key']['type'], equals('@Instance')); |
| + expect(result['associations'][2]['key']['kind'], equals('String')); |
| + expect(result['associations'][2]['key']['valueAsString'], equals('z')); |
| + expect(result['associations'][2]['value']['type'], equals('@Instance')); |
| + expect(result['associations'][2]['value']['kind'], equals('Int')); |
| + expect(result['associations'][2]['value']['valueAsString'], equals('5')); |
| + }, |
| + |
| + // Map prefix. |
| + (Isolate isolate) async { |
| + // Call eval to get a Dart map. |
| + var evalResult = await eval(isolate, '{"x": 3, "y": 4, "z": 5}'); |
| + var params = { |
| + 'objectId': evalResult['id'], |
| + 'count': 2, |
| + }; |
| + var result = await isolate.invokeRpcNoUpgrade('getObject', params); |
| + expect(result['type'], equals('Instance')); |
| + expect(result['kind'], equals('Map')); |
| + expect(result['_vmType'], equals('LinkedHashMap')); |
| + expect(result['id'], startsWith('objects/')); |
| + expect(result['valueAsString'], isNull); |
| + expect(result['class']['type'], equals('@Class')); |
| + expect(result['class']['name'], equals('_InternalLinkedHashMap')); |
| + expect(result['size'], isPositive); |
| + expect(result['fields'], isEmpty); |
| + expect(result['length'], equals(3)); |
| + expect(result['offset'], isNull); |
| + expect(result['count'], equals(2)); |
| expect(result['associations'].length, equals(2)); |
| expect(result['associations'][0]['key']['type'], equals('@Instance')); |
| expect(result['associations'][0]['key']['kind'], equals('String')); |
| @@ -137,6 +279,268 @@ var tests = [ |
| expect(result['associations'][1]['value']['valueAsString'], equals('4')); |
| }, |
| + // Map suffix. |
| + (Isolate isolate) async { |
| + // Call eval to get a Dart map. |
| + var evalResult = await eval(isolate, '{"x": 3, "y": 4, "z": 5}'); |
| + var params = { |
| + 'objectId': evalResult['id'], |
| + 'offset': 2, |
| + 'count': 2, |
| + }; |
| + var result = await isolate.invokeRpcNoUpgrade('getObject', params); |
| + expect(result['type'], equals('Instance')); |
| + expect(result['kind'], equals('Map')); |
| + expect(result['_vmType'], equals('LinkedHashMap')); |
| + expect(result['id'], startsWith('objects/')); |
| + expect(result['valueAsString'], isNull); |
| + expect(result['class']['type'], equals('@Class')); |
| + expect(result['class']['name'], equals('_InternalLinkedHashMap')); |
| + expect(result['size'], isPositive); |
| + expect(result['fields'], isEmpty); |
| + expect(result['length'], equals(3)); |
| + expect(result['offset'], equals(2)); |
| + expect(result['count'], equals(1)); |
| + expect(result['associations'].length, equals(1)); |
| + expect(result['associations'][0]['key']['type'], equals('@Instance')); |
| + expect(result['associations'][0]['key']['kind'], equals('String')); |
| + expect(result['associations'][0]['key']['valueAsString'], equals('z')); |
| + expect(result['associations'][0]['value']['type'], equals('@Instance')); |
| + expect(result['associations'][0]['value']['kind'], equals('Int')); |
| + expect(result['associations'][0]['value']['valueAsString'], equals('5')); |
| + }, |
| + |
| + // Map with wacky offset |
| + (Isolate isolate) async { |
| + // Call eval to get a Dart map. |
| + var evalResult = await eval(isolate, '{"x": 3, "y": 4, "z": 5}'); |
| + var params = { |
| + 'objectId': evalResult['id'], |
| + 'offset': 100, |
| + 'count': 2, |
| + }; |
| + var result = await isolate.invokeRpcNoUpgrade('getObject', params); |
| + expect(result['type'], equals('Instance')); |
| + expect(result['kind'], equals('Map')); |
| + expect(result['_vmType'], equals('LinkedHashMap')); |
| + expect(result['id'], startsWith('objects/')); |
| + expect(result['valueAsString'], isNull); |
| + expect(result['class']['type'], equals('@Class')); |
| + expect(result['class']['name'], equals('_InternalLinkedHashMap')); |
| + expect(result['size'], isPositive); |
| + expect(result['fields'], isEmpty); |
| + expect(result['length'], equals(3)); |
| + expect(result['offset'], equals(3)); |
| + expect(result['count'], equals(0)); |
| + expect(result['associations'], isEmpty); |
| + }, |
| + |
| + // Uint8List. |
| + (Isolate isolate) async { |
| + // Call eval to get a Dart list. |
| + var evalResult = await eval(isolate, 'uint8List'); |
| + var params = { |
| + 'objectId': evalResult['id'], |
| + }; |
| + var result = await isolate.invokeRpcNoUpgrade('getObject', params); |
| + expect(result['type'], equals('Instance')); |
| + expect(result['kind'], equals('Uint8List')); |
| + expect(result['_vmType'], equals('TypedData')); |
| + expect(result['id'], startsWith('objects/')); |
| + expect(result['valueAsString'], isNull); |
| + expect(result['class']['type'], equals('@Class')); |
| + expect(result['class']['name'], equals('_Uint8Array')); |
| + expect(result['size'], isPositive); |
| + expect(result['fields'], isEmpty); |
| + expect(result['length'], equals(3)); |
| + expect(result['offset'], isNull); |
| + expect(result['count'], isNull); |
| + expect(result['bytes'], equals('AwIB')); |
| + var bytes = decodeBase64(result['bytes']); |
| + expect(bytes.buffer.asUint8List().toString(), equals('[3, 2, 1]')); |
| + }, |
| + |
| + // Uint8List prefix. |
| + (Isolate isolate) async { |
| + // Call eval to get a Dart list. |
| + var evalResult = await eval(isolate, 'uint8List'); |
| + var params = { |
| + 'objectId': evalResult['id'], |
| + 'count' : 2, |
| + }; |
| + var result = await isolate.invokeRpcNoUpgrade('getObject', params); |
| + expect(result['type'], equals('Instance')); |
| + expect(result['kind'], equals('Uint8List')); |
| + expect(result['_vmType'], equals('TypedData')); |
| + expect(result['id'], startsWith('objects/')); |
| + expect(result['valueAsString'], isNull); |
| + expect(result['class']['type'], equals('@Class')); |
| + expect(result['class']['name'], equals('_Uint8Array')); |
| + expect(result['size'], isPositive); |
| + expect(result['fields'], isEmpty); |
| + expect(result['length'], equals(3)); |
| + expect(result['offset'], isNull); |
| + expect(result['count'], equals(2)); |
| + expect(result['bytes'], equals('AwI=')); |
| + var bytes = decodeBase64(result['bytes']); |
| + expect(bytes.buffer.asUint8List().toString(), equals('[3, 2]')); |
| + }, |
| + |
| + // Uint8List suffix. |
| + (Isolate isolate) async { |
| + // Call eval to get a Dart list. |
| + var evalResult = await eval(isolate, 'uint8List'); |
| + var params = { |
| + 'objectId': evalResult['id'], |
| + 'offset' : 2, |
| + 'count' : 2, |
| + }; |
| + var result = await isolate.invokeRpcNoUpgrade('getObject', params); |
| + expect(result['type'], equals('Instance')); |
| + expect(result['kind'], equals('Uint8List')); |
| + expect(result['_vmType'], equals('TypedData')); |
| + expect(result['id'], startsWith('objects/')); |
| + expect(result['valueAsString'], isNull); |
| + expect(result['class']['type'], equals('@Class')); |
| + expect(result['class']['name'], equals('_Uint8Array')); |
| + expect(result['size'], isPositive); |
| + expect(result['fields'], isEmpty); |
| + expect(result['length'], equals(3)); |
| + expect(result['offset'], equals(2)); |
| + expect(result['count'], equals(1)); |
| + expect(result['bytes'], equals('AQ==')); |
| + var bytes = decodeBase64(result['bytes']); |
| + expect(bytes.buffer.asUint8List().toString(), equals('[1]')); |
| + }, |
| + |
| + // Uint8List with wacky offset. |
| + (Isolate isolate) async { |
| + // Call eval to get a Dart list. |
| + var evalResult = await eval(isolate, 'uint8List'); |
| + var params = { |
| + 'objectId': evalResult['id'], |
| + 'offset' : 100, |
| + 'count' : 2, |
| + }; |
| + var result = await isolate.invokeRpcNoUpgrade('getObject', params); |
| + expect(result['type'], equals('Instance')); |
| + expect(result['kind'], equals('Uint8List')); |
| + expect(result['_vmType'], equals('TypedData')); |
| + expect(result['id'], startsWith('objects/')); |
| + expect(result['valueAsString'], isNull); |
| + expect(result['class']['type'], equals('@Class')); |
| + expect(result['class']['name'], equals('_Uint8Array')); |
| + expect(result['size'], isPositive); |
| + expect(result['fields'], isEmpty); |
| + expect(result['length'], equals(3)); |
| + expect(result['offset'], equals(3)); |
| + expect(result['count'], equals(0)); |
| + expect(result['bytes'], equals('')); |
| + }, |
| + |
| + // Uint64List. |
| + (Isolate isolate) async { |
| + // Call eval to get a Dart list. |
| + var evalResult = await eval(isolate, 'uint64List'); |
| + var params = { |
| + 'objectId': evalResult['id'], |
| + }; |
| + var result = await isolate.invokeRpcNoUpgrade('getObject', params); |
| + expect(result['type'], equals('Instance')); |
| + expect(result['kind'], equals('Uint64List')); |
| + expect(result['_vmType'], equals('TypedData')); |
| + expect(result['id'], startsWith('objects/')); |
| + expect(result['valueAsString'], isNull); |
| + expect(result['class']['type'], equals('@Class')); |
| + expect(result['class']['name'], equals('_Uint64Array')); |
| + expect(result['size'], isPositive); |
| + expect(result['fields'], isEmpty); |
| + expect(result['length'], equals(3)); |
| + expect(result['offset'], isNull); |
| + expect(result['count'], isNull); |
| + expect(result['bytes'], equals('AwAAAAAAAAACAAAAAAAAAAEAAAAAAAAA')); |
| + var bytes = decodeBase64(result['bytes']); |
| + expect(bytes.buffer.asUint64List().toString(), equals('[3, 2, 1]')); |
| + }, |
| + |
| + // Uint64List prefix. |
| + (Isolate isolate) async { |
| + // Call eval to get a Dart list. |
| + var evalResult = await eval(isolate, 'uint64List'); |
| + var params = { |
| + 'objectId': evalResult['id'], |
| + 'count' : 2, |
| + }; |
| + var result = await isolate.invokeRpcNoUpgrade('getObject', params); |
| + expect(result['type'], equals('Instance')); |
| + expect(result['kind'], equals('Uint64List')); |
| + expect(result['_vmType'], equals('TypedData')); |
| + expect(result['id'], startsWith('objects/')); |
| + expect(result['valueAsString'], isNull); |
| + expect(result['class']['type'], equals('@Class')); |
| + expect(result['class']['name'], equals('_Uint64Array')); |
| + expect(result['size'], isPositive); |
| + expect(result['fields'], isEmpty); |
| + expect(result['length'], equals(3)); |
| + expect(result['offset'], isNull); |
| + expect(result['count'], equals(2)); |
| + expect(result['bytes'], equals('AwAAAAAAAAACAAAAAAAAAA==')); |
| + var bytes = decodeBase64(result['bytes']); |
| + expect(bytes.buffer.asUint64List().toString(), equals('[3, 2]')); |
| + }, |
| + |
| + // Uint64List suffix. |
| + (Isolate isolate) async { |
| + // Call eval to get a Dart list. |
| + var evalResult = await eval(isolate, 'uint64List'); |
| + var params = { |
| + 'objectId': evalResult['id'], |
| + 'offset' : 2, |
| + 'count' : 2, |
| + }; |
| + var result = await isolate.invokeRpcNoUpgrade('getObject', params); |
| + expect(result['type'], equals('Instance')); |
| + expect(result['kind'], equals('Uint64List')); |
| + expect(result['_vmType'], equals('TypedData')); |
| + expect(result['id'], startsWith('objects/')); |
| + expect(result['valueAsString'], isNull); |
| + expect(result['class']['type'], equals('@Class')); |
| + expect(result['class']['name'], equals('_Uint64Array')); |
| + expect(result['size'], isPositive); |
| + expect(result['fields'], isEmpty); |
| + expect(result['length'], equals(3)); |
| + expect(result['offset'], equals(2)); |
| + expect(result['count'], equals(1)); |
| + expect(result['bytes'], equals('AQAAAAAAAAA=')); |
| + var bytes = decodeBase64(result['bytes']); |
| + expect(bytes.buffer.asUint64List().toString(), equals('[1]')); |
| + }, |
| + |
| + // Uint64List with wacky offset. |
| + (Isolate isolate) async { |
| + // Call eval to get a Dart list. |
| + var evalResult = await eval(isolate, 'uint64List'); |
| + var params = { |
| + 'objectId': evalResult['id'], |
| + 'offset' : 100, |
| + 'count' : 2, |
| + }; |
| + var result = await isolate.invokeRpcNoUpgrade('getObject', params); |
| + expect(result['type'], equals('Instance')); |
| + expect(result['kind'], equals('Uint64List')); |
| + expect(result['_vmType'], equals('TypedData')); |
| + expect(result['id'], startsWith('objects/')); |
| + expect(result['valueAsString'], isNull); |
| + expect(result['class']['type'], equals('@Class')); |
| + expect(result['class']['name'], equals('_Uint64Array')); |
| + expect(result['size'], isPositive); |
| + expect(result['fields'], isEmpty); |
| + expect(result['length'], equals(3)); |
| + expect(result['offset'], equals(3)); |
| + expect(result['count'], equals(0)); |
| + expect(result['bytes'], equals('')); |
| + }, |
| + |
| // An expired object. |
| (Isolate isolate) async { |
| var params = { |