| // 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:package_resolver/package_resolver.dart'; |
| import 'package:path/path.dart' as p; |
| import 'package:shelf/shelf.dart'; |
| import 'package:shelf_packages_handler/shelf_packages_handler.dart'; |
| import 'package:test/test.dart'; |
| |
| void main() { |
| var dir; |
| setUp(() { |
| dir = |
| Directory.systemTemp.createTempSync("shelf_packages_handler_test").path; |
| new Directory(dir).createSync(); |
| new Directory("$dir/foo").createSync(); |
| new File("$dir/foo/foo.dart") |
| .writeAsStringSync("void main() => print('in foo');"); |
| }); |
| |
| tearDown(() { |
| new Directory(dir).deleteSync(recursive: true); |
| }); |
| |
| group("packagesHandler", () { |
| test("defaults to the current method of package resolution", () async { |
| var handler = packagesHandler(); |
| var request = new Request( |
| "GET", |
| Uri.parse("http://example.com/shelf_packages_handler/" |
| "shelf_packages_handler.dart")); |
| var response = await handler(request); |
| expect(response.statusCode, equals(200)); |
| expect( |
| await response.readAsString(), contains("Handler packagesHandler")); |
| }); |
| |
| group("with a package root", () { |
| var resolver; |
| setUp(() => resolver = new PackageResolver.root(p.toUri(dir))); |
| |
| test("looks up a real file", () async { |
| var handler = packagesHandler(resolver: resolver); |
| var request = |
| new Request("GET", Uri.parse("http://example.com/foo/foo.dart")); |
| var response = await handler(request); |
| expect(response.statusCode, equals(200)); |
| expect(await response.readAsString(), contains("in foo")); |
| }); |
| |
| test("404s for a nonexistent file", () async { |
| var handler = packagesHandler(resolver: resolver); |
| var request = |
| new Request("GET", Uri.parse("http://example.com/foo/bar.dart")); |
| var response = await handler(request); |
| expect(response.statusCode, equals(404)); |
| }); |
| }); |
| |
| group("with a package config", () { |
| var resolver; |
| setUp(() { |
| resolver = new PackageResolver.config({"foo": p.toUri("$dir/foo")}); |
| }); |
| |
| test("looks up a real file", () async { |
| var handler = packagesHandler(resolver: resolver); |
| var request = |
| new Request("GET", Uri.parse("http://example.com/foo/foo.dart")); |
| var response = await handler(request); |
| expect(response.statusCode, equals(200)); |
| expect(await response.readAsString(), contains("in foo")); |
| }); |
| |
| test("404s for a nonexistent package", () async { |
| var handler = packagesHandler(resolver: resolver); |
| var request = |
| new Request("GET", Uri.parse("http://example.com/bar/foo.dart")); |
| var response = await handler(request); |
| expect(response.statusCode, equals(404)); |
| }); |
| |
| test("404s for a nonexistent file", () async { |
| var handler = packagesHandler(resolver: resolver); |
| var request = |
| new Request("GET", Uri.parse("http://example.com/foo/bar.dart")); |
| var response = await handler(request); |
| expect(response.statusCode, equals(404)); |
| }); |
| }); |
| }); |
| |
| group("packagesDirHandler", () { |
| test("supports a directory at the root of the URL", () async { |
| var handler = packagesDirHandler(); |
| var request = new Request( |
| "GET", |
| Uri.parse("http://example.com/packages/shelf_packages_handler/" |
| "shelf_packages_handler.dart")); |
| var 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 { |
| var handler = packagesDirHandler(); |
| var request = new Request( |
| "GET", |
| Uri.parse("http://example.com/foo/bar/very/deep/packages/" |
| "shelf_packages_handler/shelf_packages_handler.dart")); |
| var 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 { |
| var handler = packagesDirHandler(); |
| var request = new Request( |
| "GET", |
| Uri.parse("http://example.com/shelf_packages_handler/" |
| "shelf_packages_handler.dart")); |
| var response = await handler(request); |
| expect(response.statusCode, equals(404)); |
| }); |
| |
| test("404s for a non-existent file within a packages directory", () async { |
| var handler = packagesDirHandler(); |
| var request = new Request( |
| "GET", |
| Uri.parse("http://example.com/packages/shelf_packages_handler/" |
| "non_existent.dart")); |
| var response = await handler(request); |
| expect(response.statusCode, equals(404)); |
| }); |
| }); |
| } |