Index: mojo/public/dart/third_party/shelf_static/test/sample_test.dart |
diff --git a/mojo/public/dart/third_party/shelf_static/test/sample_test.dart b/mojo/public/dart/third_party/shelf_static/test/sample_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ab7878f0b29b6196248010a8b4561ef96c26f2e1 |
--- /dev/null |
+++ b/mojo/public/dart/third_party/shelf_static/test/sample_test.dart |
@@ -0,0 +1,92 @@ |
+// Copyright (c) 2015, 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. |
+ |
+library shelf_static.sample_test; |
+ |
+import 'dart:async'; |
+import 'dart:io'; |
+ |
+import 'package:path/path.dart' as p; |
+import 'package:scheduled_test/scheduled_test.dart'; |
+ |
+import 'package:shelf/shelf.dart'; |
+import 'package:shelf_static/shelf_static.dart'; |
+ |
+import 'test_util.dart'; |
+ |
+void main() { |
+ group('/index.html', () { |
+ test('body is correct', () { |
+ return _testFileContents('index.html'); |
+ }); |
+ |
+ test('mimeType is text/html', () { |
+ return _requestFile('index.html').then((response) { |
+ expect(response.mimeType, 'text/html'); |
+ }); |
+ }); |
+ }); |
+ |
+ group('/favicon.ico', () { |
+ test('body is correct', () { |
+ return _testFileContents('favicon.ico'); |
+ }); |
+ |
+ test('mimeType is text/html', () { |
+ return _requestFile('favicon.ico').then((response) { |
+ expect(response.mimeType, 'image/x-icon'); |
+ }); |
+ }); |
+ }); |
+ |
+ group('/dart.png', () { |
+ test('body is correct', () { |
+ return _testFileContents('dart.png'); |
+ }); |
+ |
+ test('mimeType is image/png', () { |
+ return _requestFile('dart.png').then((response) { |
+ expect(response.mimeType, 'image/png'); |
+ }); |
+ }); |
+ }); |
+} |
+ |
+Future<Response> _requestFile(String filename) { |
+ var uri = Uri.parse('http://localhost/$filename'); |
+ |
+ return _request(new Request('GET', uri)); |
+} |
+ |
+Future _testFileContents(String filename) { |
+ var filePath = p.join(_samplePath, filename); |
+ var file = new File(filePath); |
+ var fileContents = file.readAsBytesSync(); |
+ var fileStat = file.statSync(); |
+ |
+ return _requestFile(filename).then((response) { |
+ expect(response.contentLength, fileStat.size); |
+ expect(response.lastModified, atSameTimeToSecond(fileStat.changed.toUtc())); |
+ return _expectCompletesWithBytes(response, fileContents); |
+ }); |
+} |
+ |
+Future _expectCompletesWithBytes(Response response, List<int> expectedBytes) { |
+ return response.read().toList().then((List<List<int>> bytes) { |
+ var flatBytes = bytes.expand((e) => e); |
+ expect(flatBytes, orderedEquals(expectedBytes)); |
+ }); |
+} |
+ |
+Future<Response> _request(Request request) { |
+ var handler = createStaticHandler(_samplePath); |
+ |
+ return new Future.sync(() => handler(request)); |
+} |
+ |
+String get _samplePath { |
+ var sampleDir = p.join(p.current, 'example', 'files'); |
+ assert(FileSystemEntity.isDirectorySync(sampleDir)); |
+ return sampleDir; |
+} |