blob: 6232cefb8ec9fc38bd36bc5c4073d16e416bb08e [file]
// Copyright (c) 2023, 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:io';
import 'package:file/local.dart';
import 'package:hooks_runner/hooks_runner.dart';
import 'package:hooks_runner/src/build_runner/build_planner.dart';
import 'package:test/test.dart';
import '../helpers.dart';
import 'helpers.dart';
void main() async {
test('build dependency graph fromPackageRoot', () async {
await inTempDir((tempUri) async {
await copyTestProjects(targetUri: tempUri);
final nativeAddUri = tempUri.resolve('native_add/');
// First, run `pub get`, we need pub to resolve our dependencies.
await runPubGet(workingDirectory: nativeAddUri, logger: logger);
final packageLayout = await PackageLayout.fromWorkingDirectory(
const LocalFileSystem(),
nativeAddUri,
'native_add',
includeDevDependencies: false,
);
final nativeAssetsBuildPlanner =
await NativeAssetsBuildPlanner.fromPackageConfigUri(
packageConfigUri: nativeAddUri.resolve(
'.dart_tool/package_config.json',
),
dartExecutable: Uri.file(Platform.resolvedExecutable),
logger: logger,
packageLayout: packageLayout,
fileSystem: const LocalFileSystem(),
);
final packagesWithHook = await nativeAssetsBuildPlanner.packagesWithHook(
.build,
);
expect(packagesWithHook.length, 1);
final buildPlan = await nativeAssetsBuildPlanner.makeBuildHookPlan();
expect(buildPlan.success.length, 1);
expect(buildPlan.success.single.name, 'native_add');
});
});
for (final existing in [true, false]) {
final runPackageName = existing ? 'ffigen' : 'does_not_exist';
test('runPackageName $runPackageName', () async {
await inTempDir((tempUri) async {
await copyTestProjects(targetUri: tempUri);
final nativeAddUri = tempUri.resolve('native_add/');
// First, run `pub get`, we need pub to resolve our dependencies.
await runPubGet(workingDirectory: nativeAddUri, logger: logger);
final packageLayout = await PackageLayout.fromWorkingDirectory(
const LocalFileSystem(),
nativeAddUri,
runPackageName,
includeDevDependencies: false,
);
final nativeAssetsBuildPlanner =
await NativeAssetsBuildPlanner.fromPackageConfigUri(
packageConfigUri: nativeAddUri.resolve(
'.dart_tool/package_config.json',
),
dartExecutable: Uri.file(Platform.resolvedExecutable),
logger: logger,
packageLayout: packageLayout,
fileSystem: const LocalFileSystem(),
);
final buildPlan = await nativeAssetsBuildPlanner.makeBuildHookPlan();
expect(buildPlan.success.length, 0);
});
});
}
for (final includeDevDependencies in [true, false]) {
test('includeDevDependencies $includeDevDependencies', () async {
const runPackageName = 'dev_dependency_with_hook';
await inTempDir((tempUri) async {
await copyTestProjects(targetUri: tempUri);
final nativeAddUri = tempUri.resolve('$runPackageName/');
// First, run `pub get`, we need pub to resolve our dependencies.
await runPubGet(workingDirectory: nativeAddUri, logger: logger);
final packageLayout = await PackageLayout.fromWorkingDirectory(
const LocalFileSystem(),
nativeAddUri,
runPackageName,
includeDevDependencies: includeDevDependencies,
);
final nativeAssetsBuildPlanner =
await NativeAssetsBuildPlanner.fromPackageConfigUri(
packageConfigUri: nativeAddUri.resolve(
'.dart_tool/package_config.json',
),
dartExecutable: Uri.file(Platform.resolvedExecutable),
logger: logger,
packageLayout: packageLayout,
fileSystem: const LocalFileSystem(),
);
final buildPlan = await nativeAssetsBuildPlanner.makeBuildHookPlan();
expect(buildPlan.success.length, includeDevDependencies ? 1 : 0);
});
});
}
}