diff --git a/.gitignore b/.gitignore index 0716c03d..f6b15678 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.dart_tool .packages .pub packages @@ -26,3 +27,4 @@ test_reports/ /test_fixtures/dart_x_only/doc/api/ /test_fixtures/docs/docs/doc/api/ /test_fixtures/format/changes_needed_temp/ +/test_fixtures/needs_build_runner/.dart_tool \ No newline at end of file diff --git a/lib/src/tasks/test/api.dart b/lib/src/tasks/test/api.dart index e25aeeea..47ba9654 100644 --- a/lib/src/tasks/test/api.dart +++ b/lib/src/tasks/test/api.dart @@ -24,12 +24,13 @@ import 'package:dart_dev/src/util.dart' show dartMajorVersion, dartiumExpirationOverrideEnv; import 'package:dart_dev/util.dart' show hasImmediateDependency; -TestTask test( - {int concurrency, - List platforms: const [], - List presets: const [], - List testArgs: const [], - List tests: const []}) { +TestTask test({ + int concurrency, + List platforms: const [], + List presets: const [], + List testArgs: const [], + List tests: const [], +}) { final executable = 'pub'; final args = []; @@ -43,7 +44,12 @@ TestTask test( } if (hasImmediateDependency('build_test')) { - args.addAll(['run', 'build_runner', 'test', '--']); + args.addAll([ + 'run', + 'build_runner', + 'test', + '--', + ]); } else { args.addAll(['run', 'test']); } diff --git a/lib/src/tasks/test/cli.dart b/lib/src/tasks/test/cli.dart index a68248c0..8b48e1fe 100644 --- a/lib/src/tasks/test/cli.dart +++ b/lib/src/tasks/test/cli.dart @@ -55,6 +55,8 @@ class TestCli extends TaskCli { 'Implies --concurrency=1 and --timeout=none.\n' 'Currently only supported for browser tests.', negatable: false) + ..addFlag('delete-conflicting-outputs', + help: 'Deletes conflicting outputs during the build', negatable: false) ..addOption('pub-serve-port', help: 'Port used by the Pub server for browser tests. The default value will randomly select an open port to use.') @@ -93,6 +95,7 @@ class TestCli extends TaskCli { final testArgs = []; List tests = []; + List buildArgs = []; if (!color) { testArgs.add('--no-color'); @@ -123,6 +126,11 @@ class TestCli extends TaskCli { List presets = TaskCli.valueOf('preset', parsedArgs, const []); + bool deleteConflictingOutputs = TaskCli.valueOf( + 'delete-conflicting-outputs', + parsedArgs, + config.test.deleteConflictingOutputs); + // CLI user can specify individual test files to run. bool individualTestsSpecified = parsedArgs.rest.isNotEmpty; @@ -184,9 +192,13 @@ class TestCli extends TaskCli { testArgs.add('--pause-after-load'); } + if (deleteConflictingOutputs) { + buildArgs.add('--delete-conflicting-outputs'); + } + if (dartMajorVersion == 2 && hasImmediateDependency('build_test')) { - final buildProcess = - new TaskProcess('pub', ['run', 'build_runner', 'build']); + var args = ['run', 'build_runner', 'build']..addAll(buildArgs); + final buildProcess = new TaskProcess('pub', args); reporter.logGroup('pub run build_runner build', outputStream: buildProcess.stdout, errorStream: buildProcess.stderr); final buildExitCode = await buildProcess.exitCode; diff --git a/lib/src/tasks/test/config.dart b/lib/src/tasks/test/config.dart index 782dd2dc..0603495b 100644 --- a/lib/src/tasks/test/config.dart +++ b/lib/src/tasks/test/config.dart @@ -19,6 +19,7 @@ import 'package:dart_dev/src/tasks/config.dart'; const List defaultAfterFunctional = const []; const List defaultBeforeFunctional = const []; const int defaultConcurrency = 4; +const bool defaultDeleteConflictingOutputs = false; const bool defaultPauseAfterLoad = false; const bool defaultPubServe = false; const bool defaultDisableServeStdOut = false; @@ -35,6 +36,7 @@ class TestConfig extends TaskConfig { List afterFunctionalTests = defaultAfterFunctional; List beforeFunctionalTests = defaultBeforeFunctional; int concurrency = defaultConcurrency; + bool deleteConflictingOutputs = defaultDeleteConflictingOutputs; List functionalTests = defaultFunctionalTests; List integrationTests = defaultIntegrationTests; List platforms = defaultPlatforms;