dart-sass/test/cli/dart_test.dart

68 lines
1.8 KiB
Dart
Raw Normal View History

// Copyright 2016 Google Inc. Use of this source code is governed by an
// MIT-style license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT.
2017-07-07 02:36:15 +02:00
@TestOn('vm')
2017-05-25 23:23:48 +02:00
import 'dart:async';
import 'dart:io';
import 'package:path/path.dart' as p;
2017-05-25 23:23:48 +02:00
import 'package:test/test.dart';
import 'package:test_descriptor/test_descriptor.dart' as d;
import 'package:test_process/test_process.dart';
import '../io.dart';
import 'shared.dart';
/// Paths where snapshots of the Sass binary might exist, in order of
/// preference.
final _snapshotPaths = [
p.absolute("build/sass.dart.app.snapshot"),
p.absolute("build/sass.dart.snapshot")
];
void main() {
setUpAll(ensureSnapshotUpToDate);
sharedTests(runSass);
2016-12-03 02:30:09 +01:00
2017-05-25 23:23:48 +02:00
test("--version prints the Sass version", () async {
var sass = await runSass(["--version"]);
2018-11-16 00:16:24 +01:00
expect(sass.stdout, emits(matches(RegExp(r"^\d+\.\d+\.\d+"))));
2017-05-25 23:23:48 +02:00
await sass.shouldExit(0);
2016-12-03 02:30:09 +01:00
});
}
2016-12-03 02:30:09 +01:00
/// Ensures that the snapshot of the Dart executable used by [runSass] is
/// up-to-date, if one has been generated.
void ensureSnapshotUpToDate() {
for (var path in _snapshotPaths) {
2018-11-16 00:16:24 +01:00
if (File(path).existsSync()) {
ensureUpToDate(path, "pub run grinder app-snapshot");
return;
}
}
}
Future<TestProcess> runSass(Iterable<String> arguments,
{Map<String, String> environment}) {
2018-11-16 00:16:24 +01:00
var executable = _snapshotPaths.firstWhere((path) => File(path).existsSync(),
orElse: () => p.absolute("bin/sass.dart"));
return TestProcess.start(
Platform.executable,
[
"--enable-asserts",
// Work around dart-lang/sdk#33622.
if (Platform.isWindows)
"--packages=${p.absolute('.packages')}",
executable,
...arguments
],
workingDirectory: d.sandbox,
environment: environment,
description: "sass");
}