| // 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 '../../../pkg/unittest/lib/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") |
| .then((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 a .tar.gz file with readAll', () { |
| var reader = new ArchiveReader(); |
| reader.format.tar = true; |
| reader.filter.gzip = true; |
| |
| var future = reader.openFilename("$dataPath/test-archive.tar.gz") |
| .then((input) => input.readAll()) |
| .then((entries) { |
| entries = entries |
| .map((entry) => [entry.pathname, entry.contents.trim()]) |
| .toList(); |
| expect(entries[0], orderedEquals(["filename1", "contents 1"])); |
| expect(entries[1], orderedEquals(["filename2", "contents 2"])); |
| expect(entries[2], orderedEquals(["filename3", "contents 3"])); |
| }); |
| |
| 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() |
| .then((bytes) => reader.openData(bytes)) |
| .then((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") |
| .then((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") |
| .then((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)); |
| }); |
| } |
| |