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

[flutter_tools] resolve requests to web directory in debug mode (#51995)

parent 374f85c9
...@@ -588,6 +588,7 @@ Future<void> _runWebIntegrationTests() async { ...@@ -588,6 +588,7 @@ Future<void> _runWebIntegrationTests() async {
await _runWebStackTraceTest('profile'); await _runWebStackTraceTest('profile');
await _runWebStackTraceTest('release'); await _runWebStackTraceTest('release');
await _runWebDebugTest('lib/stack_trace.dart'); await _runWebDebugTest('lib/stack_trace.dart');
await _runWebDebugTest('lib/web_directory_loading.dart');
await _runWebDebugTest('test/test.dart'); await _runWebDebugTest('test/test.dart');
} }
......
// Copyright 2014 The Flutter 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 'dart:html' as html;
// Attempt to load a file that is hosted in the applications's `web/` directory.
Future<void> main() async {
try {
final html.HttpRequest request = await html.HttpRequest.request(
'/example',
method: 'GET',
);
final String body = request.responseText;
if (body == 'This is an Example') {
print('--- TEST SUCCEEDED ---');
} else {
print('--- TEST FAILED ---');
}
} catch (err) {
print(err);
print('--- TEST FAILED ---');
}
}
This is an Example
\ No newline at end of file
...@@ -190,10 +190,16 @@ class WebAssetServer implements AssetReader { ...@@ -190,10 +190,16 @@ class WebAssetServer implements AssetReader {
// Try and resolve the path relative to the built asset directory. // Try and resolve the path relative to the built asset directory.
if (!file.existsSync()) { if (!file.existsSync()) {
final Uri potential = globals.fs.directory(getAssetBuildDirectory()) final Uri potential = globals.fs.directory(getAssetBuildDirectory())
.uri.resolve( requestPath.replaceFirst('/assets/', '')); .uri.resolve(requestPath.replaceFirst('/assets/', ''));
file = globals.fs.file(potential); file = globals.fs.file(potential);
} }
if (!file.existsSync()) {
final String webPath = globals.fs.path.join(
globals.fs.currentDirectory.childDirectory('web').path, requestPath.substring(1));
file = globals.fs.file(webPath);
}
if (!file.existsSync()) { if (!file.existsSync()) {
return shelf.Response.notFound(''); return shelf.Response.notFound('');
} }
......
...@@ -191,6 +191,21 @@ void main() { ...@@ -191,6 +191,21 @@ void main() {
])); ]));
expect((await response.read().toList()).first, source.readAsBytesSync()); expect((await response.read().toList()).first, source.readAsBytesSync());
})); }));
test('serves files from web directory', () => testbed.run(() async {
final File source = globals.fs.file(globals.fs.path.join('web', 'foo.png'))
..createSync(recursive: true)
..writeAsBytesSync(kTransparentImage);
final Response response = await webAssetServer
.handleRequest(Request('GET', Uri.parse('http://foobar/foo.png')));
expect(response.headers, allOf(<Matcher>[
containsPair(HttpHeaders.contentLengthHeader, source.lengthSync().toString()),
containsPair(HttpHeaders.contentTypeHeader, 'image/png'),
containsPair(HttpHeaders.etagHeader, isNotNull),
containsPair(HttpHeaders.cacheControlHeader, 'max-age=0, must-revalidate')
]));
expect((await response.read().toList()).first, source.readAsBytesSync());
}));
test('serves asset files from in filesystem with known mime type on Windows', () => testbed.run(() async { test('serves asset files from in filesystem with known mime type on Windows', () => testbed.run(() async {
final File source = globals.fs.file(globals.fs.path.join('build', 'flutter_assets', 'foo.png')) final File source = globals.fs.file(globals.fs.path.join('build', 'flutter_assets', 'foo.png'))
......
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