blob: 7b742ed476d7068cc88e2206b7d90a586e5ac126 [file] [log] [blame]
import 'dart:async';
import 'dart:typed_data';
import 'package:test/test.dart';
import 'package:tar/tar.dart' as tar;
import 'system_tar.dart';
void main() {
test('writes long file names', () async {
final name = '${'very' * 30} long name.txt';
final withLongName = tar.TarEntry.data(
tar.TarHeader(name: name, mode: 0, size: 0),
Uint8List(0),
);
final proc = await writeToTar(['--list'], Stream.value(withLongName));
expect(proc.lines, emits(name));
});
test('writes headers', () async {
final date = DateTime.parse('2020-12-30 12:34');
final entry = tar.TarEntry.data(
tar.TarHeader(
name: 'hello_dart.txt',
mode: int.parse('744', radix: 8),
size: 0,
userId: 3,
groupId: 4,
userName: 'my_user',
groupName: 'long group that exceeds 32 characters',
modified: date,
),
Uint8List(0),
);
final proc = await writeToTar(['--list', '--verbose'], Stream.value(entry));
expect(
proc.lines,
emits(
allOf(
contains('-rwxr--r--'),
contains('my_user/long group that exceeds 32 characters'),
contains('2020-12-30 12:34'),
),
),
);
});
test('writes huge files', () async {
const oneMbSize = 1024 * 1024;
const tenGbSize = oneMbSize * 1024 * 10;
final oneMb = Uint8List(oneMbSize);
const count = tenGbSize ~/ oneMbSize;
final entry = tar.TarEntry(
tar.TarHeader(
name: 'file.blob',
mode: 0,
size: tenGbSize,
),
Stream<List<int>>.fromIterable(Iterable.generate(count, (i) => oneMb)),
);
final proc = await writeToTar(['--list', '--verbose'], Stream.value(entry));
expect(proc.lines, emits(contains(tenGbSize.toString())));
});
}