Skip to content

Commit 8366b27

Browse files
authored
[web] Serve dart files correctly when running "flutter test" in Chrome (flutter#49325)
1 parent da0a7d8 commit 8366b27

File tree

1 file changed

+55
-12
lines changed

1 file changed

+55
-12
lines changed

packages/flutter_tools/lib/src/test/flutter_web_platform.dart

Lines changed: 55 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ import 'dart:typed_data';
99

1010
import 'package:async/async.dart';
1111
import 'package:http_multi_server/http_multi_server.dart';
12+
import 'package:meta/meta.dart';
13+
import 'package:package_config/discovery.dart';
14+
import 'package:package_config/packages.dart';
1215
import 'package:path/path.dart' as p; // ignore: package_path_import
1316
import 'package:pool/pool.dart';
1417
import 'package:shelf/shelf.dart' as shelf;
@@ -50,14 +53,6 @@ class FlutterWebPlatform extends PlatformPlugin {
5053
String shellPath,
5154
this.updateGoldens,
5255
}) {
53-
// Look up the location of the testing resources.
54-
final Map<String, Uri> packageMap = PackageMap(globals.fs.path.join(
55-
Cache.flutterRoot,
56-
'packages',
57-
'flutter_tools',
58-
'.packages',
59-
)).map;
60-
testUri = packageMap['test'];
6156
final shelf.Cascade cascade = shelf.Cascade()
6257
.add(_webSocketHandler.handler)
6358
.add(packagesDirHandler())
@@ -66,11 +61,18 @@ class FlutterWebPlatform extends PlatformPlugin {
6661
globals.fs.path.join(Cache.flutterRoot, 'packages', 'flutter_tools'),
6762
serveFilesOutsidePath: true,
6863
))
69-
.add(createStaticHandler(_config.suiteDefaults.precompiledPath,
70-
serveFilesOutsidePath: true))
64+
.add(createStaticHandler(
65+
_config.suiteDefaults.precompiledPath,
66+
serveFilesOutsidePath: true,
67+
))
7168
.add(_handleStaticArtifact)
7269
.add(_goldenFileHandler)
73-
.add(_wrapperHandler);
70+
.add(_wrapperHandler)
71+
.add(createStaticHandler(
72+
p.join(p.current, 'test'),
73+
serveFilesOutsidePath: true,
74+
))
75+
.add(_packageFilesHandler);
7476
_server.mount(cascade.handler);
7577

7678
_testGoldenComparator = TestGoldenComparator(
@@ -97,14 +99,30 @@ class FlutterWebPlatform extends PlatformPlugin {
9799
);
98100
}
99101

100-
Uri testUri;
102+
final Future<Packages> _packagesFuture = loadPackagesFile(Uri.base.resolve('.packages'));
103+
104+
final PackageMap _flutterToolsPackageMap = PackageMap(p.join(
105+
Cache.flutterRoot,
106+
'packages',
107+
'flutter_tools',
108+
'.packages',
109+
));
110+
111+
/// Uri of the test package.
112+
Uri get testUri => _flutterToolsPackageMap.map['test'];
101113

102114
/// The test runner configuration.
103115
final Configuration _config;
104116

117+
@visibleForTesting
118+
Configuration get config => _config;
119+
105120
/// The underlying server.
106121
final shelf.Server _server;
107122

123+
@visibleForTesting
124+
shelf.Server get server => _server;
125+
108126
/// The URL for this server.
109127
Uri get url => _server.url;
110128

@@ -193,6 +211,31 @@ class FlutterWebPlatform extends PlatformPlugin {
193211
}
194212
}
195213

214+
FutureOr<shelf.Response> _packageFilesHandler(shelf.Request request) async {
215+
if (request.requestedUri.pathSegments.first == 'packages') {
216+
final Packages packages = await _packagesFuture;
217+
final Uri fileUri = packages.resolve(Uri(
218+
scheme: 'package',
219+
pathSegments: request.requestedUri.pathSegments.skip(1),
220+
));
221+
final String dirname = p.dirname(fileUri.toFilePath());
222+
final String basename = p.basename(fileUri.toFilePath());
223+
final shelf.Handler handler = createStaticHandler(dirname);
224+
final shelf.Request modifiedRequest = shelf.Request(
225+
request.method,
226+
request.requestedUri.replace(path: basename),
227+
protocolVersion: request.protocolVersion,
228+
headers: request.headers,
229+
handlerPath: request.handlerPath,
230+
url: request.url.replace(path: basename),
231+
encoding: request.encoding,
232+
context: request.context,
233+
);
234+
return handler(modifiedRequest);
235+
}
236+
return shelf.Response.notFound('Not Found');
237+
}
238+
196239
final bool updateGoldens;
197240
TestGoldenComparator _testGoldenComparator;
198241

0 commit comments

Comments
 (0)