Unverified Commit dd49e57b authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

[flutter_tools] more test fixes (#60144)

Fixes additional bugs uncovered by tester, style fixes to prevent suggested imports.
parent 850ea6d2
...@@ -837,7 +837,8 @@ class ReleaseAssetServer { ...@@ -837,7 +837,8 @@ class ReleaseAssetServer {
} else { } else {
for (final Uri uri in _searchPaths) { for (final Uri uri in _searchPaths) {
final Uri potential = uri.resolve(request.url.path); final Uri potential = uri.resolve(request.url.path);
if (potential == null || !globals.fs.isFileSync(potential.toFilePath())) { if (potential == null || !globals.fs.isFileSync(
potential.toFilePath(windows: globals.platform.isWindows))) {
continue; continue;
} }
fileUri = potential; fileUri = potential;
......
...@@ -186,7 +186,9 @@ class TestCompiler { ...@@ -186,7 +186,9 @@ class TestCompiler {
// The idea is to keep the cache file up-to-date and include as // The idea is to keep the cache file up-to-date and include as
// much as possible in an effort to re-use as many packages as // much as possible in an effort to re-use as many packages as
// possible. // possible.
globals.fsUtils.ensureDirectoryExists(testFilePath); if (!testCache.parent.existsSync()) {
testCache.parent.createSync(recursive: true);
}
await outputFile.copy(testFilePath); await outputFile.copy(testFilePath);
} }
request.result.complete(kernelReadyToRun.path); request.result.complete(kernelReadyToRun.path);
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter_tools/src/artifacts.dart';
import 'package:flutter_tools/src/base/io.dart'; import 'package:flutter_tools/src/base/io.dart';
import 'package:flutter_tools/src/base/platform.dart'; import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/base/terminal.dart'; import 'package:flutter_tools/src/base/terminal.dart';
...@@ -74,6 +75,7 @@ void main() { ...@@ -74,6 +75,7 @@ void main() {
ProcessManager: () => mockProcessManager, ProcessManager: () => mockProcessManager,
OutputPreferences: () => OutputPreferences(showColor: false), OutputPreferences: () => OutputPreferences(showColor: false),
Platform: kNoColorTerminalPlatform, Platform: kNoColorTerminalPlatform,
Artifacts: () => Artifacts.test(),
}); });
testUsingContext('passes correct AOT config to kernel compiler in aot/profile mode', () async { testUsingContext('passes correct AOT config to kernel compiler in aot/profile mode', () async {
...@@ -108,6 +110,7 @@ void main() { ...@@ -108,6 +110,7 @@ void main() {
ProcessManager: () => mockProcessManager, ProcessManager: () => mockProcessManager,
OutputPreferences: () => OutputPreferences(showColor: false), OutputPreferences: () => OutputPreferences(showColor: false),
Platform: kNoColorTerminalPlatform, Platform: kNoColorTerminalPlatform,
Artifacts: () => Artifacts.test(),
}); });
...@@ -143,6 +146,7 @@ void main() { ...@@ -143,6 +146,7 @@ void main() {
ProcessManager: () => mockProcessManager, ProcessManager: () => mockProcessManager,
OutputPreferences: () => OutputPreferences(showColor: false), OutputPreferences: () => OutputPreferences(showColor: false),
Platform: kNoColorTerminalPlatform, Platform: kNoColorTerminalPlatform,
Artifacts: () => Artifacts.test(),
}); });
testUsingContext('batch compile single dart failed compilation', () async { testUsingContext('batch compile single dart failed compilation', () async {
...@@ -169,6 +173,7 @@ void main() { ...@@ -169,6 +173,7 @@ void main() {
ProcessManager: () => mockProcessManager, ProcessManager: () => mockProcessManager,
OutputPreferences: () => OutputPreferences(showColor: false), OutputPreferences: () => OutputPreferences(showColor: false),
Platform: kNoColorTerminalPlatform, Platform: kNoColorTerminalPlatform,
Artifacts: () => Artifacts.test(),
}); });
testUsingContext('batch compile single dart abnormal compiler termination', () async { testUsingContext('batch compile single dart abnormal compiler termination', () async {
...@@ -197,6 +202,7 @@ void main() { ...@@ -197,6 +202,7 @@ void main() {
ProcessManager: () => mockProcessManager, ProcessManager: () => mockProcessManager,
OutputPreferences: () => OutputPreferences(showColor: false), OutputPreferences: () => OutputPreferences(showColor: false),
Platform: kNoColorTerminalPlatform, Platform: kNoColorTerminalPlatform,
Artifacts: () => Artifacts.test(),
}); });
testUsingContext('passes dartDefines to the kernel compiler', () async { testUsingContext('passes dartDefines to the kernel compiler', () async {
...@@ -220,6 +226,7 @@ void main() { ...@@ -220,6 +226,7 @@ void main() {
ProcessManager: () => mockProcessManager, ProcessManager: () => mockProcessManager,
OutputPreferences: () => OutputPreferences(showColor: false), OutputPreferences: () => OutputPreferences(showColor: false),
Platform: kNoColorTerminalPlatform, Platform: kNoColorTerminalPlatform,
Artifacts: () => Artifacts.test(),
}); });
} }
......
...@@ -61,7 +61,7 @@ void main() { ...@@ -61,7 +61,7 @@ void main() {
testWithoutContext('can launch chrome and connect to the devtools', () async { testWithoutContext('can launch chrome and connect to the devtools', () async {
expect( expect(
() async => await testLaunchChrome( () async => await _testLaunchChrome(
'/.tmp_rand0/flutter_tools_chrome_device.rand0', '/.tmp_rand0/flutter_tools_chrome_device.rand0',
processManager, processManager,
chromeLauncher, chromeLauncher,
...@@ -71,14 +71,14 @@ void main() { ...@@ -71,14 +71,14 @@ void main() {
}); });
testWithoutContext('cannot have two concurrent instances of chrome', () async { testWithoutContext('cannot have two concurrent instances of chrome', () async {
await testLaunchChrome( await _testLaunchChrome(
'/.tmp_rand0/flutter_tools_chrome_device.rand0', '/.tmp_rand0/flutter_tools_chrome_device.rand0',
processManager, processManager,
chromeLauncher, chromeLauncher,
); );
expect( expect(
() async => await testLaunchChrome( () async => await _testLaunchChrome(
'/.tmp_rand0/flutter_tools_chrome_device.rand1', '/.tmp_rand0/flutter_tools_chrome_device.rand1',
processManager, processManager,
chromeLauncher, chromeLauncher,
...@@ -88,7 +88,7 @@ void main() { ...@@ -88,7 +88,7 @@ void main() {
}); });
testWithoutContext('can launch new chrome after stopping a previous chrome', () async { testWithoutContext('can launch new chrome after stopping a previous chrome', () async {
final Chromium chrome = await testLaunchChrome( final Chromium chrome = await _testLaunchChrome(
'/.tmp_rand0/flutter_tools_chrome_device.rand0', '/.tmp_rand0/flutter_tools_chrome_device.rand0',
processManager, processManager,
chromeLauncher, chromeLauncher,
...@@ -96,7 +96,7 @@ void main() { ...@@ -96,7 +96,7 @@ void main() {
await chrome.close(); await chrome.close();
expect( expect(
() async => await testLaunchChrome( () async => await _testLaunchChrome(
'/.tmp_rand0/flutter_tools_chrome_device.rand1', '/.tmp_rand0/flutter_tools_chrome_device.rand1',
processManager, processManager,
chromeLauncher, chromeLauncher,
...@@ -221,7 +221,7 @@ void main() { ...@@ -221,7 +221,7 @@ void main() {
class MockOperatingSystemUtils extends Mock implements OperatingSystemUtils {} class MockOperatingSystemUtils extends Mock implements OperatingSystemUtils {}
Future<Chromium> testLaunchChrome(String userDataDir, FakeProcessManager processManager, ChromiumLauncher chromeLauncher) { Future<Chromium> _testLaunchChrome(String userDataDir, FakeProcessManager processManager, ChromiumLauncher chromeLauncher) {
processManager.addCommand(FakeCommand( processManager.addCommand(FakeCommand(
command: <String>[ command: <String>[
'example_chrome', 'example_chrome',
......
...@@ -2,13 +2,15 @@ ...@@ -2,13 +2,15 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
import 'package:file/memory.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/io.dart'; import 'package:flutter_tools/src/base/io.dart';
import 'package:flutter_tools/src/globals.dart' as globals; import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/build_runner/devfs_web.dart'; import 'package:flutter_tools/src/build_runner/devfs_web.dart';
import 'package:shelf/shelf.dart'; import 'package:shelf/shelf.dart';
import '../../src/common.dart'; import '../../src/common.dart';
import '../../src/testbed.dart'; import '../../src/context.dart';
const List<int> kTransparentImage = <int>[ const List<int> kTransparentImage = <int>[
0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49,
...@@ -18,30 +20,34 @@ const List<int> kTransparentImage = <int>[ ...@@ -18,30 +20,34 @@ const List<int> kTransparentImage = <int>[
0x0A, 0x2D, 0xB4, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x0A, 0x2D, 0xB4, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE,
]; ];
final Platform platform = FakePlatform(
operatingSystem: 'linux',
environment: <String, String>{
'HOME': '/'
},
);
void main() { void main() {
Testbed testbed; FileSystem fileSystem;
setUp(() { setUp(() {
testbed = Testbed( fileSystem = MemoryFileSystem.test();
setup: () { fileSystem.file('lib/main.dart')
globals.fs.file(globals.fs.path.join('lib', 'main.dart')) .createSync(recursive: true);
.createSync(recursive: true); fileSystem.file('web/index.html')
globals.fs.file(globals.fs.path.join('web', 'index.html')) ..createSync(recursive: true)
..createSync(recursive: true) ..writeAsStringSync('hello');
..writeAsStringSync('hello'); fileSystem.file('build/flutter_assets/foo.png')
globals.fs.file(globals.fs.path.join('build', 'flutter_assets', 'foo.png')) ..createSync(recursive: true)
..createSync(recursive: true) ..writeAsBytesSync(kTransparentImage);
..writeAsBytesSync(kTransparentImage); fileSystem.file('build/flutter_assets/bar')
globals.fs.file(globals.fs.path.join('build', 'flutter_assets', 'bar')) ..createSync(recursive: true)
..createSync(recursive: true) ..writeAsBytesSync(<int>[1, 2, 3]);
..writeAsBytesSync(<int>[1, 2, 3]);
}
);
}); });
test('release asset server serves correct mime type and content length for png', () => testbed.run(() async { testUsingContext('release asset server serves correct mime type and content length for png', () async {
final ReleaseAssetServer assetServer = ReleaseAssetServer(Uri.base); final ReleaseAssetServer assetServer = ReleaseAssetServer(Uri.base);
globals.fs.file(globals.fs.path.join('build', 'web', 'assets', 'foo.png')) fileSystem.file('build/web/assets/foo.png')
..createSync(recursive: true) ..createSync(recursive: true)
..writeAsBytesSync(kTransparentImage); ..writeAsBytesSync(kTransparentImage);
final Response response = await assetServer final Response response = await assetServer
...@@ -51,11 +57,15 @@ void main() { ...@@ -51,11 +57,15 @@ void main() {
'Content-Type': 'image/png', 'Content-Type': 'image/png',
'content-length': '64', 'content-length': '64',
}); });
})); }, overrides: <Type, Generator>{
FileSystem: () => fileSystem,
Platform: () => platform,
ProcessManager: () => FakeProcessManager.any(),
});
test('release asset server serves correct mime type and content length for JavaScript', () => testbed.run(() async { testUsingContext('release asset server serves correct mime type and content length for JavaScript', () async {
final ReleaseAssetServer assetServer = ReleaseAssetServer(Uri.base); final ReleaseAssetServer assetServer = ReleaseAssetServer(Uri.base);
globals.fs.file(globals.fs.path.join('build', 'web', 'assets', 'foo.js')) fileSystem.file('build/web/assets/foo.js')
..createSync(recursive: true) ..createSync(recursive: true)
..writeAsStringSync('function main() {}'); ..writeAsStringSync('function main() {}');
final Response response = await assetServer final Response response = await assetServer
...@@ -65,11 +75,15 @@ void main() { ...@@ -65,11 +75,15 @@ void main() {
'Content-Type': 'application/javascript', 'Content-Type': 'application/javascript',
'content-length': '18', 'content-length': '18',
}); });
})); }, overrides: <Type, Generator>{
FileSystem: () => fileSystem,
Platform: () => platform,
ProcessManager: () => FakeProcessManager.any(),
});
test('release asset server serves correct mime type and content length for html', () => testbed.run(() async { testUsingContext('release asset server serves correct mime type and content length for html', () async {
final ReleaseAssetServer assetServer = ReleaseAssetServer(Uri.base); final ReleaseAssetServer assetServer = ReleaseAssetServer(Uri.base);
globals.fs.file(globals.fs.path.join('build', 'web', 'assets', 'foo.html')) fileSystem.file('build/web/assets/foo.html')
..createSync(recursive: true) ..createSync(recursive: true)
..writeAsStringSync('<!doctype html><html></html>'); ..writeAsStringSync('<!doctype html><html></html>');
final Response response = await assetServer final Response response = await assetServer
...@@ -79,27 +93,39 @@ void main() { ...@@ -79,27 +93,39 @@ void main() {
'Content-Type': 'text/html', 'Content-Type': 'text/html',
'content-length': '28', 'content-length': '28',
}); });
})); }, overrides: <Type, Generator>{
FileSystem: () => fileSystem,
Platform: () => platform,
ProcessManager: () => FakeProcessManager.any(),
});
test('release asset server serves content from flutter root', () => testbed.run(() async { testUsingContext('release asset server serves content from flutter root', () async {
final ReleaseAssetServer assetServer = ReleaseAssetServer(Uri.base); final ReleaseAssetServer assetServer = ReleaseAssetServer(Uri.base);
globals.fs.file(globals.fs.path.join('flutter', 'bar.dart')) fileSystem.file('flutter/bar.dart')
..createSync(recursive: true) ..createSync(recursive: true)
..writeAsStringSync('void main() { }'); ..writeAsStringSync('void main() { }');
final Response response = await assetServer final Response response = await assetServer
.handle(Request('GET', Uri.parse('http://localhost:8080/flutter/bar.dart'))); .handle(Request('GET', Uri.parse('http://localhost:8080/flutter/bar.dart')));
expect(response.statusCode, HttpStatus.ok); expect(response.statusCode, HttpStatus.ok);
})); }, overrides: <Type, Generator>{
FileSystem: () => fileSystem,
Platform: () => platform,
ProcessManager: () => FakeProcessManager.any(),
});
test('release asset server serves content from project directory', () => testbed.run(() async { testUsingContext('release asset server serves content from project directory', () async {
final ReleaseAssetServer assetServer = ReleaseAssetServer(Uri.base); final ReleaseAssetServer assetServer = ReleaseAssetServer(Uri.base);
globals.fs.file(globals.fs.path.join('bar.dart')) fileSystem.file('bar.dart')
..createSync(recursive: true) ..createSync(recursive: true)
..writeAsStringSync('void main() { }'); ..writeAsStringSync('void main() { }');
final Response response = await assetServer final Response response = await assetServer
.handle(Request('GET', Uri.parse('http://localhost:8080/bar.dart'))); .handle(Request('GET', Uri.parse('http://localhost:8080/bar.dart')));
expect(response.statusCode, HttpStatus.ok); expect(response.statusCode, HttpStatus.ok);
})); }, overrides: <Type, Generator>{
FileSystem: () => fileSystem,
Platform: () => platform,
ProcessManager: () => FakeProcessManager.any(),
});
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment