2019-07-11 23:53:17 +00:00
|
|
|
// Copyright 2019 The Chromium Authors. All rights reserved.
|
|
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
|
|
// found in the LICENSE file.
|
|
|
|
|
|
|
|
import 'package:args/command_runner.dart';
|
2019-08-22 06:44:39 +00:00
|
|
|
import 'package:flutter_tools/src/base/common.dart';
|
2019-07-31 23:19:22 +00:00
|
|
|
import 'package:flutter_tools/src/base/file_system.dart';
|
2019-07-11 23:53:17 +00:00
|
|
|
import 'package:flutter_tools/src/base/logger.dart';
|
|
|
|
import 'package:flutter_tools/src/build_system/build_system.dart';
|
|
|
|
import 'package:flutter_tools/src/cache.dart';
|
|
|
|
import 'package:flutter_tools/src/commands/assemble.dart';
|
|
|
|
import 'package:flutter_tools/src/globals.dart';
|
|
|
|
import 'package:mockito/mockito.dart';
|
|
|
|
|
2019-07-13 18:51:44 +00:00
|
|
|
import '../../src/common.dart';
|
|
|
|
import '../../src/testbed.dart';
|
2019-07-11 23:53:17 +00:00
|
|
|
|
|
|
|
void main() {
|
2019-07-25 15:50:03 +00:00
|
|
|
Testbed testbed;
|
|
|
|
MockBuildSystem mockBuildSystem;
|
2019-11-08 22:38:44 +00:00
|
|
|
Cache.disableLocking();
|
2019-07-11 23:53:17 +00:00
|
|
|
|
2019-07-25 15:50:03 +00:00
|
|
|
setUp(() {
|
|
|
|
mockBuildSystem = MockBuildSystem();
|
|
|
|
testbed = Testbed(overrides: <Type, Generator>{
|
|
|
|
BuildSystem: () => mockBuildSystem,
|
2019-11-08 22:38:44 +00:00
|
|
|
Cache: () => FakeCache(),
|
2019-07-11 23:53:17 +00:00
|
|
|
});
|
2019-07-25 15:50:03 +00:00
|
|
|
});
|
2019-07-11 23:53:17 +00:00
|
|
|
|
2019-07-25 15:50:03 +00:00
|
|
|
test('Can run a build', () => testbed.run(() async {
|
|
|
|
when(mockBuildSystem.build(any, any, buildSystemConfig: anyNamed('buildSystemConfig')))
|
2019-09-24 19:03:37 +00:00
|
|
|
.thenAnswer((Invocation invocation) async {
|
|
|
|
return BuildResult(success: true);
|
|
|
|
});
|
2019-07-25 15:50:03 +00:00
|
|
|
final CommandRunner<void> commandRunner = createTestCommandRunner(AssembleCommand());
|
2019-08-28 05:52:51 +00:00
|
|
|
await commandRunner.run(<String>['assemble', '-o Output', 'debug_macos_bundle_flutter_assets']);
|
2019-07-25 15:50:03 +00:00
|
|
|
final BufferLogger bufferLogger = logger;
|
2019-07-11 23:53:17 +00:00
|
|
|
|
2019-11-08 20:41:24 +00:00
|
|
|
expect(bufferLogger.traceText, contains('build succeeded.'));
|
2019-07-31 23:19:22 +00:00
|
|
|
}));
|
|
|
|
|
2019-08-28 05:52:51 +00:00
|
|
|
test('Throws ToolExit if not provided with output', () => testbed.run(() async {
|
|
|
|
when(mockBuildSystem.build(any, any, buildSystemConfig: anyNamed('buildSystemConfig')))
|
2019-09-24 19:03:37 +00:00
|
|
|
.thenAnswer((Invocation invocation) async {
|
|
|
|
return BuildResult(success: true);
|
|
|
|
});
|
2019-08-28 05:52:51 +00:00
|
|
|
final CommandRunner<void> commandRunner = createTestCommandRunner(AssembleCommand());
|
|
|
|
|
|
|
|
expect(commandRunner.run(<String>['assemble', 'debug_macos_bundle_flutter_assets']), throwsA(isInstanceOf<ToolExit>()));
|
|
|
|
}));
|
|
|
|
|
2019-08-22 06:44:39 +00:00
|
|
|
test('Throws ToolExit if called with non-existent rule', () => testbed.run(() async {
|
|
|
|
when(mockBuildSystem.build(any, any, buildSystemConfig: anyNamed('buildSystemConfig')))
|
2019-09-24 19:03:37 +00:00
|
|
|
.thenAnswer((Invocation invocation) async {
|
|
|
|
return BuildResult(success: true);
|
|
|
|
});
|
2019-08-22 06:44:39 +00:00
|
|
|
final CommandRunner<void> commandRunner = createTestCommandRunner(AssembleCommand());
|
|
|
|
|
2019-08-28 05:52:51 +00:00
|
|
|
expect(commandRunner.run(<String>['assemble', '-o Output', 'undefined']), throwsA(isInstanceOf<ToolExit>()));
|
2019-08-22 06:44:39 +00:00
|
|
|
}));
|
2019-08-28 05:52:51 +00:00
|
|
|
|
2019-07-31 23:19:22 +00:00
|
|
|
test('Only writes input and output files when the values change', () => testbed.run(() async {
|
|
|
|
when(mockBuildSystem.build(any, any, buildSystemConfig: anyNamed('buildSystemConfig')))
|
2019-09-24 19:03:37 +00:00
|
|
|
.thenAnswer((Invocation invocation) async {
|
|
|
|
return BuildResult(
|
|
|
|
success: true,
|
|
|
|
inputFiles: <File>[fs.file('foo')..createSync()],
|
|
|
|
outputFiles: <File>[fs.file('bar')..createSync()],
|
|
|
|
);
|
|
|
|
});
|
2019-07-31 23:19:22 +00:00
|
|
|
|
|
|
|
final CommandRunner<void> commandRunner = createTestCommandRunner(AssembleCommand());
|
2019-08-28 05:52:51 +00:00
|
|
|
await commandRunner.run(<String>['assemble', '-o Output', '--build-outputs=outputs', '--build-inputs=inputs', 'debug_macos_bundle_flutter_assets']);
|
2019-07-31 23:19:22 +00:00
|
|
|
|
|
|
|
final File inputs = fs.file('inputs');
|
|
|
|
final File outputs = fs.file('outputs');
|
|
|
|
expect(inputs.readAsStringSync(), contains('foo'));
|
|
|
|
expect(outputs.readAsStringSync(), contains('bar'));
|
|
|
|
|
|
|
|
final DateTime theDistantPast = DateTime(1991, 8, 23);
|
|
|
|
inputs.setLastModifiedSync(theDistantPast);
|
|
|
|
outputs.setLastModifiedSync(theDistantPast);
|
2019-08-28 05:52:51 +00:00
|
|
|
await commandRunner.run(<String>['assemble', '-o Output', '--build-outputs=outputs', '--build-inputs=inputs', 'debug_macos_bundle_flutter_assets']);
|
2019-07-31 23:19:22 +00:00
|
|
|
|
|
|
|
expect(inputs.lastModifiedSync(), theDistantPast);
|
|
|
|
expect(outputs.lastModifiedSync(), theDistantPast);
|
|
|
|
|
|
|
|
|
|
|
|
when(mockBuildSystem.build(any, any, buildSystemConfig: anyNamed('buildSystemConfig')))
|
2019-09-24 19:03:37 +00:00
|
|
|
.thenAnswer((Invocation invocation) async {
|
|
|
|
return BuildResult(
|
|
|
|
success: true,
|
|
|
|
inputFiles: <File>[fs.file('foo'), fs.file('fizz')..createSync()],
|
|
|
|
outputFiles: <File>[fs.file('bar'), fs.file(fs.path.join('.dart_tool', 'fizz2'))..createSync(recursive: true)]);
|
|
|
|
});
|
2019-08-28 05:52:51 +00:00
|
|
|
await commandRunner.run(<String>['assemble', '-o Output', '--build-outputs=outputs', '--build-inputs=inputs', 'debug_macos_bundle_flutter_assets']);
|
2019-07-31 23:19:22 +00:00
|
|
|
|
|
|
|
expect(inputs.readAsStringSync(), contains('foo'));
|
|
|
|
expect(inputs.readAsStringSync(), contains('fizz'));
|
|
|
|
expect(inputs.lastModifiedSync(), isNot(theDistantPast));
|
2019-07-25 15:50:03 +00:00
|
|
|
}));
|
2019-07-11 23:53:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
class MockBuildSystem extends Mock implements BuildSystem {}
|