| Index: utils/tests/archive/reader_test.dart
|
| diff --git a/utils/tests/archive/reader_test.dart b/utils/tests/archive/reader_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..79d15692d725c8dd5af9330d13e8fc1af651f25a
|
| --- /dev/null
|
| +++ b/utils/tests/archive/reader_test.dart
|
| @@ -0,0 +1,181 @@
|
| +// Copyright (c) 2012, 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.
|
| +
|
| +#library('reader_test');
|
| +
|
| +#import('dart:io');
|
| +#import('../../../lib/unittest/unittest.dart');
|
| +#import('../../archive/archive.dart');
|
| +
|
| +final String dataPath = "utils/tests/archive/data";
|
| +
|
| +main() {
|
| + test('reading a .tar.gz file', () {
|
| + var asyncDone = expectAsync0(() {});
|
| +
|
| + var reader = new ArchiveReader();
|
| + reader.format.tar = true;
|
| + reader.filter.gzip = true;
|
| +
|
| + var future = reader.openFilename("$dataPath/test-archive.tar.gz")
|
| + .transform((input) {
|
| + var log = <String>[];
|
| + input.onEntry = (entry) => guardAsync(() {
|
| + log.add("Entry: ${entry.pathname}");
|
| + var stream = new StringInputStream(entry.openInputStream());
|
| + stream.onData = () => log.add("Contents: ${stream.read().trim()}");
|
| + stream.onClosed = () => log.add("Closed: ${entry.pathname}");
|
| + });
|
| + input.onError = registerException;
|
| +
|
| + input.onClosed = () => guardAsync(() {
|
| + expect(log, orderedEquals([
|
| + "Entry: filename1",
|
| + "Contents: contents 1",
|
| + "Closed: filename1",
|
| +
|
| + "Entry: filename2",
|
| + "Contents: contents 2",
|
| + "Closed: filename2",
|
| +
|
| + "Entry: filename3",
|
| + "Contents: contents 3",
|
| + "Closed: filename3",
|
| + ]));
|
| + }, asyncDone);
|
| + });
|
| +
|
| + expect(future, completes);
|
| + });
|
| +
|
| + test('reading an in-memory .tar.gz', () {
|
| + var asyncDone = expectAsync0(() {});
|
| +
|
| + var reader = new ArchiveReader();
|
| + reader.format.tar = true;
|
| + reader.filter.gzip = true;
|
| +
|
| + var future = new File("$dataPath/test-archive.tar.gz").readAsBytes()
|
| + .chain((bytes) => reader.openData(bytes))
|
| + .transform((input) {
|
| + var log = <String>[];
|
| + input.onEntry = (entry) => guardAsync(() {
|
| + log.add("Entry: ${entry.pathname}");
|
| + var stream = new StringInputStream(entry.openInputStream());
|
| + stream.onData = () => log.add("Contents: ${stream.read().trim()}");
|
| + stream.onClosed = () => log.add("Closed: ${entry.pathname}");
|
| + });
|
| + input.onError = registerException;
|
| +
|
| + input.onClosed = () => guardAsync(() {
|
| + expect(log, orderedEquals([
|
| + "Entry: filename1",
|
| + "Contents: contents 1",
|
| + "Closed: filename1",
|
| +
|
| + "Entry: filename2",
|
| + "Contents: contents 2",
|
| + "Closed: filename2",
|
| +
|
| + "Entry: filename3",
|
| + "Contents: contents 3",
|
| + "Closed: filename3",
|
| + ]));
|
| + }, asyncDone);
|
| + });
|
| +
|
| + expect(future, completes);
|
| + });
|
| +
|
| + test("closing entries before they're read", () {
|
| + var asyncDone = expectAsync0(() {});
|
| +
|
| + var reader = new ArchiveReader();
|
| + reader.format.tar = true;
|
| + reader.filter.gzip = true;
|
| +
|
| + var future = reader.openFilename("$dataPath/test-archive.tar.gz")
|
| + .transform((input) {
|
| + var log = <String>[];
|
| + input.onEntry = (entry) => guardAsync(() {
|
| + log.add("Entry: ${entry.pathname}");
|
| + var underlyingStream = entry.openInputStream();
|
| + var stream = new StringInputStream(underlyingStream);
|
| + stream.onData = () => log.add("Contents: ${stream.read().trim()}");
|
| + stream.onClosed = () => log.add("Closed: ${entry.pathname}");
|
| + underlyingStream.close();
|
| + });
|
| + input.onError = registerException;
|
| +
|
| + input.onClosed = () => guardAsync(() {
|
| + expect(log, orderedEquals([
|
| + "Entry: filename1",
|
| + "Closed: filename1",
|
| +
|
| + "Entry: filename2",
|
| + "Closed: filename2",
|
| +
|
| + "Entry: filename3",
|
| + "Closed: filename3",
|
| + ]));
|
| + }, asyncDone);
|
| + });
|
| +
|
| + expect(future, completes);
|
| + });
|
| +
|
| + test("closing an archive stream before it's finished", () {
|
| + var asyncDone = expectAsync0(() {});
|
| +
|
| + var reader = new ArchiveReader();
|
| + reader.format.tar = true;
|
| + reader.filter.gzip = true;
|
| +
|
| + var future = reader.openFilename("$dataPath/test-archive.tar.gz")
|
| + .transform((input) {
|
| + var count = 0;
|
| +
|
| + var log = <String>[];
|
| + input.onEntry = (entry) => guardAsync(() {
|
| + count += 1;
|
| +
|
| + log.add("Entry: ${entry.pathname}");
|
| + var underlyingStream = entry.openInputStream();
|
| + var stream = new StringInputStream(underlyingStream);
|
| + stream.onData = () => log.add("Contents: ${stream.read().trim()}");
|
| + stream.onClosed = () => log.add("Closed: ${entry.pathname}");
|
| +
|
| + if (count == 2) {
|
| + input.close();
|
| + expect(input.closed);
|
| + }
|
| + });
|
| + input.onError = registerException;
|
| +
|
| + input.onClosed = () {
|
| + expect(log, orderedEquals([
|
| + "Entry: filename1",
|
| + "Contents: contents 1",
|
| + "Closed: filename1",
|
| +
|
| + "Entry: filename2",
|
| + "Closed: filename2",
|
| + ]));
|
| + asyncDone();
|
| + };
|
| + });
|
| +
|
| + expect(future, completes);
|
| + });
|
| +
|
| + test("opening a non-existent archive", () {
|
| + var reader = new ArchiveReader();
|
| + reader.format.tar = true;
|
| + reader.filter.gzip = true;
|
| +
|
| + expect(reader.openFilename("$dataPath/non-existent.tar.gz"),
|
| + throwsA((e) => e is ArchiveException));
|
| + });
|
| +}
|
| +
|
|
|