blob: 7a6047d2d1fdff33baf05f8570e870f065022205 [file] [log] [blame]
// 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.
import 'package:observatory_2/service_io.dart';
import 'package:test/test.dart';
import 'test_helper.dart';
class _TestClass {
_TestClass(this.x, this.y);
// Make sure these fields are not removed by the tree shaker.
@pragma("vm:entry-point")
var x;
@pragma("vm:entry-point")
var y;
}
var global;
void warmup() {
global = new _TestClass(new _TestClass(1, 2), null);
}
@pragma("vm:entry-point")
getGlobal() => global;
invoke(Isolate isolate, String selector) async {
Map params = {
'targetId': isolate.rootLibrary.id,
'selector': selector,
'argumentIds': <String>[],
};
return await isolate.invokeRpcNoUpgrade('invoke', params);
}
var tests = <IsolateTest>[
(Isolate isolate) async {
var obj = await invoke(isolate, 'getGlobal');
var params = {
'objectId': obj['class']['id'],
'limit': 4,
};
var result = await isolate.invokeRpcNoUpgrade('getInstances', params);
expect(result['type'], equals('InstanceSet'));
expect(result['totalCount'], equals(2));
expect(result['instances'].length, equals(2));
expect(result['instances'][0]['type'], equals('@Instance'));
// Limit is respected.
params = {
'objectId': obj['class']['id'],
'limit': 1,
};
result = await isolate.invokeRpcNoUpgrade('getInstances', params);
expect(result['type'], equals('InstanceSet'));
expect(result['totalCount'], equals(2));
expect(result['instances'].length, equals(1));
expect(result['instances'][0]['type'], equals('@Instance'));
// Try an object ID that isn't a class ID
params = {
'objectId': isolate.rootLibrary.id,
'limit': 1,
};
try {
await isolate.invokeRpcNoUpgrade('getInstances', params);
} on ServerRpcException catch (_) {
// Success.
} catch (e) {
fail('Failed with exception: $e');
}
},
];
main(args) async => runIsolateTests(args, tests, testeeBefore: warmup);