| // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| // for details. 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:io'; |
| |
| import 'package:shelf/shelf.dart'; |
| import 'package:shelf_packages_handler/shelf_packages_handler.dart'; |
| import 'package:test/test.dart'; |
| |
| void main() { |
| String dir; |
| setUp(() { |
| dir = |
| Directory.systemTemp.createTempSync('shelf_packages_handler_test').path; |
| Directory(dir).createSync(); |
| Directory('$dir/foo').createSync(); |
| File('$dir/foo/foo.dart') |
| .writeAsStringSync("void main() => print('in foo');"); |
| }); |
| |
| tearDown(() { |
| Directory(dir).deleteSync(recursive: true); |
| }); |
| |
| group('packagesHandler', () { |
| test('defaults to the current method of package resolution', () async { |
| final handler = packagesHandler(); |
| final request = Request( |
| 'GET', |
| Uri.parse('http://example.com/shelf_packages_handler/' |
| 'shelf_packages_handler.dart')); |
| final response = await handler(request); |
| expect(response.statusCode, equals(200)); |
| expect( |
| await response.readAsString(), contains('Handler packagesHandler')); |
| }); |
| |
| group('with a package map', () { |
| Handler handler; |
| |
| setUp(() { |
| handler = packagesHandler(packageMap: { |
| 'foo': Uri.file('$dir/foo/'), |
| }); |
| }); |
| |
| test('looks up a real file', () async { |
| final request = |
| Request('GET', Uri.parse('http://example.com/foo/foo.dart')); |
| final response = await handler(request); |
| expect(response.statusCode, equals(200)); |
| expect(await response.readAsString(), contains('in foo')); |
| }); |
| |
| test('404s for a nonexistent package', () async { |
| final request = |
| Request('GET', Uri.parse('http://example.com/bar/foo.dart')); |
| final response = await handler(request); |
| expect(response.statusCode, equals(404)); |
| expect( |
| await response.readAsString(), contains('Package bar not found')); |
| }); |
| |
| test('404s for a nonexistent file', () async { |
| final request = |
| Request('GET', Uri.parse('http://example.com/foo/bar.dart')); |
| final response = await handler(request); |
| expect(response.statusCode, equals(404)); |
| }); |
| }); |
| }); |
| |
| group('packagesDirHandler', () { |
| test('supports a directory at the root of the URL', () async { |
| final handler = packagesDirHandler(); |
| final request = Request( |
| 'GET', |
| Uri.parse('http://example.com/packages/shelf_packages_handler/' |
| 'shelf_packages_handler.dart')); |
| final response = await handler(request); |
| expect(response.statusCode, equals(200)); |
| expect( |
| await response.readAsString(), contains('Handler packagesHandler')); |
| }); |
| |
| test('supports a directory deep in the URL', () async { |
| final handler = packagesDirHandler(); |
| final request = Request( |
| 'GET', |
| Uri.parse('http://example.com/foo/bar/very/deep/packages/' |
| 'shelf_packages_handler/shelf_packages_handler.dart')); |
| final response = await handler(request); |
| expect(response.statusCode, equals(200)); |
| expect( |
| await response.readAsString(), contains('Handler packagesHandler')); |
| }); |
| |
| test('404s for a URL without a packages directory', () async { |
| final handler = packagesDirHandler(); |
| final request = Request( |
| 'GET', |
| Uri.parse('http://example.com/shelf_packages_handler/' |
| 'shelf_packages_handler.dart')); |
| final response = await handler(request); |
| expect(response.statusCode, equals(404)); |
| }); |
| |
| test('404s for a non-existent file within a packages directory', () async { |
| final handler = packagesDirHandler(); |
| final request = Request( |
| 'GET', |
| Uri.parse('http://example.com/packages/shelf_packages_handler/' |
| 'non_existent.dart')); |
| final response = await handler(request); |
| expect(response.statusCode, equals(404)); |
| }); |
| }); |
| } |