mirror of
https://github.com/flutter/flutter
synced 2024-10-13 19:52:53 +00:00
[web] Serve dart files correctly when running "flutter test" in Chrome (#49325)
This commit is contained in:
parent
da0a7d8b2e
commit
8366b2721a
|
@ -9,6 +9,9 @@ import 'dart:typed_data';
|
||||||
|
|
||||||
import 'package:async/async.dart';
|
import 'package:async/async.dart';
|
||||||
import 'package:http_multi_server/http_multi_server.dart';
|
import 'package:http_multi_server/http_multi_server.dart';
|
||||||
|
import 'package:meta/meta.dart';
|
||||||
|
import 'package:package_config/discovery.dart';
|
||||||
|
import 'package:package_config/packages.dart';
|
||||||
import 'package:path/path.dart' as p; // ignore: package_path_import
|
import 'package:path/path.dart' as p; // ignore: package_path_import
|
||||||
import 'package:pool/pool.dart';
|
import 'package:pool/pool.dart';
|
||||||
import 'package:shelf/shelf.dart' as shelf;
|
import 'package:shelf/shelf.dart' as shelf;
|
||||||
|
@ -50,14 +53,6 @@ class FlutterWebPlatform extends PlatformPlugin {
|
||||||
String shellPath,
|
String shellPath,
|
||||||
this.updateGoldens,
|
this.updateGoldens,
|
||||||
}) {
|
}) {
|
||||||
// Look up the location of the testing resources.
|
|
||||||
final Map<String, Uri> packageMap = PackageMap(globals.fs.path.join(
|
|
||||||
Cache.flutterRoot,
|
|
||||||
'packages',
|
|
||||||
'flutter_tools',
|
|
||||||
'.packages',
|
|
||||||
)).map;
|
|
||||||
testUri = packageMap['test'];
|
|
||||||
final shelf.Cascade cascade = shelf.Cascade()
|
final shelf.Cascade cascade = shelf.Cascade()
|
||||||
.add(_webSocketHandler.handler)
|
.add(_webSocketHandler.handler)
|
||||||
.add(packagesDirHandler())
|
.add(packagesDirHandler())
|
||||||
|
@ -66,11 +61,18 @@ class FlutterWebPlatform extends PlatformPlugin {
|
||||||
globals.fs.path.join(Cache.flutterRoot, 'packages', 'flutter_tools'),
|
globals.fs.path.join(Cache.flutterRoot, 'packages', 'flutter_tools'),
|
||||||
serveFilesOutsidePath: true,
|
serveFilesOutsidePath: true,
|
||||||
))
|
))
|
||||||
.add(createStaticHandler(_config.suiteDefaults.precompiledPath,
|
.add(createStaticHandler(
|
||||||
serveFilesOutsidePath: true))
|
_config.suiteDefaults.precompiledPath,
|
||||||
|
serveFilesOutsidePath: true,
|
||||||
|
))
|
||||||
.add(_handleStaticArtifact)
|
.add(_handleStaticArtifact)
|
||||||
.add(_goldenFileHandler)
|
.add(_goldenFileHandler)
|
||||||
.add(_wrapperHandler);
|
.add(_wrapperHandler)
|
||||||
|
.add(createStaticHandler(
|
||||||
|
p.join(p.current, 'test'),
|
||||||
|
serveFilesOutsidePath: true,
|
||||||
|
))
|
||||||
|
.add(_packageFilesHandler);
|
||||||
_server.mount(cascade.handler);
|
_server.mount(cascade.handler);
|
||||||
|
|
||||||
_testGoldenComparator = TestGoldenComparator(
|
_testGoldenComparator = TestGoldenComparator(
|
||||||
|
@ -97,14 +99,30 @@ class FlutterWebPlatform extends PlatformPlugin {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Uri testUri;
|
final Future<Packages> _packagesFuture = loadPackagesFile(Uri.base.resolve('.packages'));
|
||||||
|
|
||||||
|
final PackageMap _flutterToolsPackageMap = PackageMap(p.join(
|
||||||
|
Cache.flutterRoot,
|
||||||
|
'packages',
|
||||||
|
'flutter_tools',
|
||||||
|
'.packages',
|
||||||
|
));
|
||||||
|
|
||||||
|
/// Uri of the test package.
|
||||||
|
Uri get testUri => _flutterToolsPackageMap.map['test'];
|
||||||
|
|
||||||
/// The test runner configuration.
|
/// The test runner configuration.
|
||||||
final Configuration _config;
|
final Configuration _config;
|
||||||
|
|
||||||
|
@visibleForTesting
|
||||||
|
Configuration get config => _config;
|
||||||
|
|
||||||
/// The underlying server.
|
/// The underlying server.
|
||||||
final shelf.Server _server;
|
final shelf.Server _server;
|
||||||
|
|
||||||
|
@visibleForTesting
|
||||||
|
shelf.Server get server => _server;
|
||||||
|
|
||||||
/// The URL for this server.
|
/// The URL for this server.
|
||||||
Uri get url => _server.url;
|
Uri get url => _server.url;
|
||||||
|
|
||||||
|
@ -193,6 +211,31 @@ class FlutterWebPlatform extends PlatformPlugin {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FutureOr<shelf.Response> _packageFilesHandler(shelf.Request request) async {
|
||||||
|
if (request.requestedUri.pathSegments.first == 'packages') {
|
||||||
|
final Packages packages = await _packagesFuture;
|
||||||
|
final Uri fileUri = packages.resolve(Uri(
|
||||||
|
scheme: 'package',
|
||||||
|
pathSegments: request.requestedUri.pathSegments.skip(1),
|
||||||
|
));
|
||||||
|
final String dirname = p.dirname(fileUri.toFilePath());
|
||||||
|
final String basename = p.basename(fileUri.toFilePath());
|
||||||
|
final shelf.Handler handler = createStaticHandler(dirname);
|
||||||
|
final shelf.Request modifiedRequest = shelf.Request(
|
||||||
|
request.method,
|
||||||
|
request.requestedUri.replace(path: basename),
|
||||||
|
protocolVersion: request.protocolVersion,
|
||||||
|
headers: request.headers,
|
||||||
|
handlerPath: request.handlerPath,
|
||||||
|
url: request.url.replace(path: basename),
|
||||||
|
encoding: request.encoding,
|
||||||
|
context: request.context,
|
||||||
|
);
|
||||||
|
return handler(modifiedRequest);
|
||||||
|
}
|
||||||
|
return shelf.Response.notFound('Not Found');
|
||||||
|
}
|
||||||
|
|
||||||
final bool updateGoldens;
|
final bool updateGoldens;
|
||||||
TestGoldenComparator _testGoldenComparator;
|
TestGoldenComparator _testGoldenComparator;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue