Skip to content

Commit

Permalink
split dart test runner per platform
Browse files Browse the repository at this point in the history
  • Loading branch information
alextekartik committed Nov 27, 2024
1 parent e197e97 commit b70c2b4
Show file tree
Hide file tree
Showing 5 changed files with 163 additions and 64 deletions.
4 changes: 4 additions & 0 deletions dev_build/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 1.1.0+3

* Split dart test runner per platform

## 1.1.0+2

* menu: Make prompt not nullable (kind of breaking change, sorry...)
Expand Down
61 changes: 60 additions & 1 deletion dev_build/lib/src/package/test_config.dart
Original file line number Diff line number Diff line change
@@ -1,15 +1,63 @@
import 'package:meta/meta.dart';

/// Config line
class TestConfigLine {
/// Compiler (vm, dart2js, dart2wasm)
final String? compiler;

/// Platform (vm, chrome, node)
final String? platform;

/// Config line
TestConfigLine({this.platform, this.compiler, List<String>? compilers}) {
if (platform != null) {
args.addAll(['--platform', platform!]);
}
if (compilers != null) {
for (var compiler in compilers) {
args.addAll(['--compiler', compiler]);
}
} else if (compiler != null) {
args.addAll(['--compiler', compiler!]);
}
}

/// List of arguments
final args = <String>[];

/// true is non empty.
bool get isNotEmpty => args.isNotEmpty;

/// To command line argument.
String toCommandLineArgument() =>
'${args.isEmpty ? '' : ' '}${args.join(' ')}';
}

/// Test running configuration.
class TestConfig {
final _lines = <TestConfigLine>[];

/// List of arguments
final args = <String>[];

/// true is non empty.
bool get isNotEmpty => args.isNotEmpty;
bool get isNotEmpty => args.isNotEmpty || _lines.isNotEmpty;

/// DEPRECATED: use toDartTestCommandLineArgument
///
/// To command line argument.
/// @Deprecated('use toDartTestCommandLineArgument')
String toCommandLineArgument() =>
'${args.isEmpty ? '' : ' '}${args.join(' ')}';

/// Config lines
List<TestConfigLine> get configLines => _lines;

/// Config lines (trimmed) for testing
@visibleForTesting
List<String> get configLineTexts =>
configLines.map((e) => e.toCommandLineArgument().trim()).toList();

/// true if has node supports in test.
bool hasNode = false;
}
Expand Down Expand Up @@ -70,10 +118,17 @@ TestConfig buildTestConfig(
for (var compiler in dartWebCompilers) {
testConfig.args.add('--compiler $compiler');
}
testConfig.configLines.add(
TestConfigLine(compilers: dartWebCompilers, platform: platform));
testConfig.args.add('--platform $platform');
} else {
if (platform == 'node') {
testConfig.hasNode = true;
// Force dart2js
testConfig.configLines
.add(TestConfigLine(platform: platform, compiler: 'dart2js'));
} else {
testConfig.configLines.add(TestConfigLine(platform: platform));
}
testConfig.args.add('--platform $platform');
}
Expand All @@ -86,7 +141,11 @@ TestConfig buildTestConfig(
if (platforms.isNotEmpty) {
for (var platform in platforms) {
testConfig.args.add('--platform $platform');
testConfig.configLines.add(TestConfigLine(platform: platform));
}
} else {
// Generic (no args)
testConfig.configLines.add(TestConfigLine());
}
}
return testConfig;
Expand Down
6 changes: 5 additions & 1 deletion dev_build/lib/src/run_ci.dart
Original file line number Diff line number Diff line change
Expand Up @@ -439,7 +439,11 @@ Future<void> singlePackageRunCiImpl(
stderr.writeln('(ignored) Error setting up node: $e');
}
}
if (testConfig.isNotEmpty) {
if (testConfig.configLines.isNotEmpty) {
for (var line in testConfig.configLines) {
await runScript('dart test${line.toCommandLineArgument()}'); //
}
} else if (testConfig.args.isNotEmpty) {
await runScript('''
# Test
dart test${testConfig.toCommandLineArgument()}
Expand Down
2 changes: 1 addition & 1 deletion dev_build/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: dev_build
version: 1.1.0+2
version: 1.1.0+3
description: Development utilities for dart and flutter packages. CI and build helpers.
repository: https://github.com/tekartik/dev_test.dart/tree/master/dev_build

Expand Down
154 changes: 93 additions & 61 deletions dev_build/test/test_config_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,83 +3,112 @@ import 'package:test/test.dart';

void main() {
test('test_config', () {
expect(buildTestConfig(platforms: []).toCommandLineArgument(), '');
var testConfig = buildTestConfig(platforms: ['vm']);
var testConfig = buildTestConfig(platforms: []);
expect(testConfig.toCommandLineArgument(), '');
expect(testConfig.configLineTexts, ['']);
testConfig = buildTestConfig(platforms: ['vm']);
expect(testConfig.toCommandLineArgument(), ' --platform vm');
expect(testConfig.configLineTexts, ['--platform vm']);
expect(testConfig.hasNode, isFalse);
expect(buildTestConfig(platforms: ['vm', 'chrome']).toCommandLineArgument(),
' --platform vm --platform chrome');
testConfig = buildTestConfig(platforms: ['vm', 'chrome']);
expect(
buildTestConfig(platforms: [
'vm',
'chrome'
], dartTestMap: {
'platforms': ['chrome']
}).toCommandLineArgument(),
' --platform chrome');
expect(
buildTestConfig(platforms: [
'vm',
'chrome'
], dartTestMap: {
'compilers': ['dart2js', 'dart2wasm']
}).toCommandLineArgument(),
' --platform vm --compiler dart2js --compiler dart2wasm --platform chrome');
expect(
buildTestConfig(platforms: [
'vm',
'chrome'
], dartTestMap: {
'platforms': ['vm', 'chrome'],
'compilers': ['dart2js', 'dart2wasm']
}).toCommandLineArgument(),
testConfig.toCommandLineArgument(), ' --platform vm --platform chrome');
expect(testConfig.configLineTexts, ['--platform vm', '--platform chrome']);

testConfig = buildTestConfig(platforms: [
'vm',
'chrome'
], dartTestMap: {
'platforms': ['chrome']
});
expect(testConfig.toCommandLineArgument(), ' --platform chrome');
expect(testConfig.configLineTexts, ['--platform chrome']);

testConfig = buildTestConfig(platforms: [
'vm',
'chrome'
], dartTestMap: {
'compilers': ['dart2js', 'dart2wasm']
});
expect(testConfig.toCommandLineArgument(),
' --platform vm --compiler dart2js --compiler dart2wasm --platform chrome');
expect(testConfig.configLineTexts, [
'--platform vm',
'--platform chrome --compiler dart2js --compiler dart2wasm'
]);
testConfig = buildTestConfig(platforms: [
'vm',
'chrome'
], dartTestMap: {
'platforms': ['vm', 'chrome'],
'compilers': ['dart2js', 'dart2wasm']
});

expect(
buildTestConfig(platforms: [
'vm',
'chrome'
], dartTestMap: {
'platforms': ['chrome'],
'compilers': ['dart2js', 'dart2wasm']
}).toCommandLineArgument(),
expect(testConfig.toCommandLineArgument(),
' --platform vm --compiler dart2js --compiler dart2wasm --platform chrome');
expect(testConfig.configLineTexts, [
'--platform vm',
'--platform chrome --compiler dart2js --compiler dart2wasm'
]);
testConfig = buildTestConfig(platforms: [
'vm',
'chrome'
], dartTestMap: {
'platforms': ['chrome'],
'compilers': ['dart2js', 'dart2wasm']
});
expect(testConfig.toCommandLineArgument(),
' --compiler dart2js --compiler dart2wasm --platform chrome');

expect(
buildTestConfig(platforms: [
'vm',
'chrome'
], dartTestMap: {
'platforms': ['chrome'],
'compilers': ['dart2js', 'dart2wasm']
}, noWasm: true)
.toCommandLineArgument(),
expect(testConfig.configLineTexts,
['--platform chrome --compiler dart2js --compiler dart2wasm']);
testConfig = buildTestConfig(platforms: [
'vm',
'chrome'
], dartTestMap: {
'platforms': ['chrome'],
'compilers': ['dart2js', 'dart2wasm']
}, noWasm: true);
expect(testConfig.toCommandLineArgument(),
' --compiler dart2js --platform chrome');
expect(
testConfig.configLineTexts, ['--platform chrome --compiler dart2js']);

testConfig = buildTestConfig(platforms: [
'chrome',
'node',
'vm',
], dartTestMap: {
'platforms': ['chrome', 'vm', 'node'],
'compilers': ['dart2js', 'dart2wasm']
});
expect(
buildTestConfig(platforms: [
'chrome',
'node',
'vm',
], dartTestMap: {
'platforms': ['chrome', 'vm', 'node'],
'compilers': ['dart2js', 'dart2wasm']
}).toCommandLineArgument(),
testConfig.toCommandLineArgument(),
' --compiler dart2js --compiler dart2wasm --platform chrome'
' --platform node'
' --platform vm');
expect(testConfig.configLineTexts, [
'--platform chrome --compiler dart2js --compiler dart2wasm',
'--platform node --compiler dart2js',
'--platform vm'
]);
testConfig = buildTestConfig(supportedPlatforms: [
'chrome',
'node',
'vm',
], dartTestMap: {
'platforms': ['chrome', 'vm', 'node'],
'compilers': ['dart2js', 'dart2wasm']
});
expect(
buildTestConfig(supportedPlatforms: [
'chrome',
'node',
'vm',
], dartTestMap: {
'platforms': ['chrome', 'vm', 'node'],
'compilers': ['dart2js', 'dart2wasm']
}).toCommandLineArgument(),
testConfig.toCommandLineArgument(),
' --compiler dart2js --compiler dart2wasm --platform chrome'
' --platform vm'
' --platform node');
expect(testConfig.configLineTexts, [
'--platform chrome --compiler dart2js --compiler dart2wasm',
'--platform vm',
'--platform node --compiler dart2js',
]);

testConfig = buildTestConfig(supportedPlatforms: [
'vm',
Expand All @@ -90,5 +119,8 @@ void main() {
});
expect(testConfig.toCommandLineArgument(), ' --platform node');
expect(testConfig.hasNode, isTrue);
expect(testConfig.configLineTexts, [
'--platform node --compiler dart2js',
]);
});
}

0 comments on commit b70c2b4

Please sign in to comment.