blob: 86487f2ac938818f46b8519abc850155d57e039a [file] [log] [blame]
// Copyright 2024, 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 'package:file/file.dart';
import 'package:file/memory.dart';
import 'package:test/test.dart';
import 'package:deps/package.dart';
import 'package:deps/useful_directory.dart';
class TestPackage extends Package {
TestPackage(String name, Uri source, {this.checkResult = true})
: super(name, source);
late Directory artifacts;
bool checkResult;
@override
Future<List<FileSystemEntity>> fetch(Directory workingDir) async {
final file = await workingDir.resolveFile('file').create();
final directory = await workingDir.resolve('directory').create();
return [file, directory];
}
@override
Future<Directory> build(
List<FileSystemEntity> inputs, Directory workingDir) async {
final output = await workingDir.resolve('build').create();
for (var input in inputs) {
final path =
'${input.uri.pathSegments.lastWhere((s) => s.isNotEmpty)}.out';
if (input is Directory) {
await output.resolve(path).create();
} else {
await output.resolveFile(path).create();
}
}
return output;
}
@override
Future<bool> check(Directory artifacts) async => checkResult;
@override
Future<void> upload(Directory artifacts, bool provenance) async {
expect(checkResult, isTrue);
this.artifacts = artifacts;
}
}
void main() {
test('create', () async {
final fileSystem = MemoryFileSystem.test();
final temp = await fileSystem.directory('/temp').create();
final package = TestPackage('dart/test', Uri.parse('scheme://path'));
await package.create(temp, false);
expect(
temp.listSync(recursive: true).map((f) => f.path),
unorderedEquals([
'/temp/dart',
'/temp/dart/test',
'/temp/dart/test/file',
'/temp/dart/test/directory',
'/temp/dart/test/build',
'/temp/dart/test/build/file.out',
'/temp/dart/test/build/directory.out',
]));
expect(
package.artifacts.listSync(recursive: true).map((f) => f.path),
unorderedEquals([
'/temp/dart/test/build/file.out',
'/temp/dart/test/build/directory.out',
]));
});
test('check', () async {
final fileSystem = MemoryFileSystem.test();
final temp = await fileSystem.directory('/temp').create();
final package = TestPackage('dart/test', Uri.parse('scheme://path'),
checkResult: false);
expect(package.create(temp, false), throwsStateError);
});
test('dry run', () {
final package = TestPackage('dart/test', Uri.parse('scheme://path'));
expect(package.isDryRun, false);
expect(dryRun(() => package.isDryRun, true), isTrue);
});
}