blob: 85938b63296fb13634f27caa1b25e1fde6e67ff0 [file] [log] [blame]
// 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() {
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 {
var handler = packagesHandler();
var request = 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', () {
PackageResolver resolver;
setUp(() => resolver = PackageResolver.root(p.toUri(dir)));
test('looks up a real file', () async {
var handler = packagesHandler(resolver: resolver);
var request =
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 =
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', () {
PackageResolver resolver;
setUp(() {
resolver = PackageResolver.config({'foo': p.toUri('$dir/foo')});
});
test('looks up a real file', () async {
var handler = packagesHandler(resolver: resolver);
var request =
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 =
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 =
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 = 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 = 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 = 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 = Request(
'GET',
Uri.parse('http://example.com/packages/shelf_packages_handler/'
'non_existent.dart'));
var response = await handler(request);
expect(response.statusCode, equals(404));
});
});
}