// 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.
// VMOptions=--error_on_bad_type --error_on_bad_override

import 'dart:async';
import 'package:observatory/service_io.dart';
import 'package:unittest/unittest.dart';
import 'test_helper.dart';

var tests = [

(Isolate isolate) =>
  isolate.vm.invokeRpc('_echo', { 'text': 'hello'}).then((result) {
    expect(result['type'], equals('_EchoResponse'));
    expect(result['text'], equals('hello'));
  }),

(Isolate isolate) =>
  isolate.invokeRpc('_echo', { 'text': 'hello'}).then((result) {
    expect(result['type'], equals('_EchoResponse'));
    expect(result['text'], equals('hello'));
  }),

(Isolate isolate) async {
  Completer completer = new Completer();
  var stream = await isolate.vm.getEventStream('_Echo');
  var subscription;
  subscription = stream.listen((ServiceEvent event) {
    assert(event.kind == '_Echo');
    expect(event.data.lengthInBytes, equals(3));
    expect(event.data.getUint8(0), equals(0));
    expect(event.data.getUint8(1), equals(128));
    expect(event.data.getUint8(2), equals(255));
    subscription.cancel();
    completer.complete();
  });

  await isolate.invokeRpc('_triggerEchoEvent', { 'text': 'hello' });
  await completer.future;
},

];

main(args) => runIsolateTests(args, tests);
