| Index: runtime/observatory/tests/service/file_service_test.dart
|
| diff --git a/runtime/observatory/tests/service/file_service_test.dart b/runtime/observatory/tests/service/file_service_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..dbb8e530e7b73e3d719d6d051fc2531f7974f938
|
| --- /dev/null
|
| +++ b/runtime/observatory/tests/service/file_service_test.dart
|
| @@ -0,0 +1,101 @@
|
| +// 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 'dart:async';
|
| +import 'dart:convert';
|
| +import 'dart:developer';
|
| +import 'dart:io' as io;
|
| +import 'package:observatory/service_io.dart';
|
| +import 'package:unittest/unittest.dart';
|
| +import 'test_helper.dart';
|
| +
|
| +Future setupFiles() async {
|
| + var dir = await io.Directory.systemTemp.createTemp('file_service');
|
| + var writingFile;
|
| + var readingFile;
|
| +
|
| + void closeDown() {
|
| + if (writingFile != null) {
|
| + writingFile.closeSync();
|
| + }
|
| + if (readingFile != null) {
|
| + readingFile.closeSync();
|
| + }
|
| + dir.deleteSync(recursive: true);
|
| + }
|
| +
|
| + Future<ServiceExtensionResponse> cleanup(ignored_a, ignored_b) {
|
| + closeDown();
|
| + var result = JSON.encode({'type' : 'foobar'});
|
| + return new Future.value(new ServiceExtensionResponse.result(result));
|
| + }
|
| +
|
| + Future<ServiceExtensionResponse> setup(ignored_a, ignored_b) async {
|
| + try {
|
| + var filePath = dir.path + io.Platform.pathSeparator + "file";
|
| + var f = new io.File(filePath);
|
| + writingFile = await f.open(mode: io.FileMode.WRITE);
|
| + await writingFile.writeByte(42);
|
| + await writingFile.writeByte(42);
|
| + await writingFile.writeByte(42);
|
| +
|
| + var file = new io.File.fromUri(io.Platform.script);
|
| + readingFile = await file.open();
|
| + await readingFile.readByte();
|
| + await readingFile.readByte();
|
| + await readingFile.readByte();
|
| + await readingFile.readByte();
|
| + await readingFile.readByte();
|
| +
|
| + // The utility functions should close the files after them, so we
|
| + // don't expect the calls below to result in open files.
|
| + var writeTemp = dir.path + io.Platform.pathSeparator + "other_file";
|
| + var utilFile = new io.File(writeTemp);
|
| + await utilFile.writeAsString('foobar');
|
| + var readTemp = new io.File(writeTemp);
|
| + var result = await readTemp.readAsString();
|
| + expect(result, equals('foobar'));
|
| +
|
| + } catch (e) {
|
| + closeDown();
|
| + throw e;
|
| + }
|
| + var result = JSON.encode({'type' : 'foobar'});
|
| + return new Future.value(new ServiceExtensionResponse.result(result));
|
| + }
|
| + registerExtension('__cleanup', cleanup);
|
| + registerExtension('__setup', setup);
|
| +}
|
| +
|
| +var fileTests = [
|
| + (Isolate isolate) async {
|
| + await isolate.invokeRpcNoUpgrade('__setup', {});
|
| + try {
|
| + var result = await isolate.invokeRpcNoUpgrade('__getOpenFiles', {});
|
| + expect(result['type'], equals('_openfiles'));
|
| +
|
| + expect(result['data'].length, equals(2));
|
| + var writing = await isolate.invokeRpcNoUpgrade(
|
| + '__getFileByID', { 'id' : result['data'][0]['id'] });
|
| +
|
| + expect(writing['total_read'], equals(0));
|
| + expect(writing['read_count'], equals(0));
|
| + expect(writing['write_count'], equals(3));
|
| + expect(writing['total_written'], equals(3));
|
| +
|
| + var reading = await isolate.invokeRpcNoUpgrade(
|
| + '__getFileByID', { 'id' : result['data'][1]['id'] });
|
| +
|
| +
|
| + expect(reading['total_read'], equals(5));
|
| + expect(reading['read_count'], equals(5));
|
| + expect(reading['write_count'], equals(0));
|
| + expect(reading['total_written'], equals(0));
|
| + } finally {
|
| + await isolate.invokeRpcNoUpgrade('__cleanup', {});
|
| + }
|
| + },
|
| +];
|
| +
|
| +main(args) async => runIsolateTests(args, fileTests, testeeBefore:setupFiles);
|
|
|