OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 @TestOn("vm") | 5 @TestOn("vm") |
6 | 6 |
7 import "dart:convert"; | 7 import "dart:convert"; |
8 import "dart:io"; | 8 import "dart:io"; |
9 | 9 |
10 import "package:resource/resource.dart"; | 10 import "package:resource/resource.dart"; |
11 import "package:test/test.dart"; | 11 import "package:test/test.dart"; |
12 | 12 |
13 const content = "Rødgrød med fløde"; | 13 const content = "Rødgrød med fløde"; |
14 | 14 |
15 main() { | 15 main() { |
16 var server; | 16 var server; |
17 var uri; | 17 var uri; |
18 setUp(() async { | 18 setUp(() async { |
19 server = await HttpServer.bind(InternetAddress.LOOPBACK_IP_V4, 0); | 19 server = await HttpServer.bind(InternetAddress.LOOPBACK_IP_V4, 0); |
20 int port = server.port; | 20 int port = server.port; |
21 uri = Uri.parse("http://localhost:$port/default.html"); | 21 uri = Uri.parse("http://localhost:$port/default.html"); |
22 server.forEach((HttpRequest request) { | 22 server.forEach((HttpRequest request) { |
| 23 if (request.uri.path.endsWith(".not")) { |
| 24 request.response |
| 25 ..statusCode = HttpStatus.NOT_FOUND |
| 26 ..close(); |
| 27 return; |
| 28 } |
23 var encodings = request.headers[HttpHeaders.ACCEPT_CHARSET]; | 29 var encodings = request.headers[HttpHeaders.ACCEPT_CHARSET]; |
24 var encoding = parseAcceptCharset(encodings); | 30 var encoding = parseAcceptCharset(encodings); |
25 request.response.headers.contentType = | 31 request.response.headers.contentType = |
26 new ContentType("text", "plain", charset: encoding.name); | 32 new ContentType("text", "plain", charset: encoding.name); |
27 request.response..write(content) | 33 request.response..write(content) |
28 ..close(); | 34 ..close(); |
29 }).catchError(print); | 35 }).catchError(print); |
30 }); | 36 }); |
31 | 37 |
32 test("Default encoding", () async { | 38 test("Default encoding", () async { |
(...skipping 21 matching lines...) Expand all Loading... |
54 }); | 60 }); |
55 | 61 |
56 test("byte stream", () async { | 62 test("byte stream", () async { |
57 var loader = ResourceLoader.defaultLoader; | 63 var loader = ResourceLoader.defaultLoader; |
58 var bytes = loader.openRead(uri); // Sender uses Latin-1. | 64 var bytes = loader.openRead(uri); // Sender uses Latin-1. |
59 var buffer = []; | 65 var buffer = []; |
60 await bytes.forEach(buffer.addAll); | 66 await bytes.forEach(buffer.addAll); |
61 expect(buffer, content.codeUnits); | 67 expect(buffer, content.codeUnits); |
62 }); | 68 }); |
63 | 69 |
| 70 test("not found - String", () async { |
| 71 var loader = ResourceLoader.defaultLoader; |
| 72 var badUri = uri.resolve("file.not"); // .not makes server fail. |
| 73 expect(loader.readAsString(badUri), throws); |
| 74 }); |
| 75 |
| 76 test("not found - bytes", () async { |
| 77 var loader = ResourceLoader.defaultLoader; |
| 78 var badUri = uri.resolve("file.not"); // .not makes server fail. |
| 79 expect(loader.readAsBytes(badUri), throws); |
| 80 }); |
| 81 |
| 82 test("not found - byte stream", () async { |
| 83 var loader = ResourceLoader.defaultLoader; |
| 84 var badUri = uri.resolve("file.not"); // .not makes server fail. |
| 85 expect(loader.openRead(badUri).length, throws); |
| 86 }); |
| 87 |
64 tearDown(() { | 88 tearDown(() { |
65 server.close(); | 89 server.close(); |
66 server = null; | 90 server = null; |
67 }); | 91 }); |
68 } | 92 } |
69 | 93 |
70 | 94 |
71 Encoding parseAcceptCharset(List<String> headers) { | 95 Encoding parseAcceptCharset(List<String> headers) { |
72 var encoding = LATIN1; | 96 var encoding = LATIN1; |
73 if (headers != null) { | 97 if (headers != null) { |
74 var weight = 0.0; | 98 var weight = 0.0; |
75 var pattern = new RegExp(r"([\w-]+)(;\s*q=[\d.]+)?"); | 99 var pattern = new RegExp(r"([\w-]+)(;\s*q=[\d.]+)?"); |
76 for (var acceptCharset in headers) { | 100 for (var acceptCharset in headers) { |
77 for (var match in pattern.allMatches(acceptCharset)) { | 101 for (var match in pattern.allMatches(acceptCharset)) { |
78 var e = Encoding.getByName(match[1]); | 102 var e = Encoding.getByName(match[1]); |
79 if (e == null) continue; | 103 if (e == null) continue; |
80 var w = 1.0; | 104 var w = 1.0; |
81 if (match[2] != null) { | 105 if (match[2] != null) { |
82 w = double.parse(match[2]); | 106 w = double.parse(match[2]); |
83 } | 107 } |
84 if (w > weight) { | 108 if (w > weight) { |
85 weight = w; | 109 weight = w; |
86 encoding = e; | 110 encoding = e; |
87 } | 111 } |
88 } | 112 } |
89 } | 113 } |
90 } | 114 } |
91 return encoding; | 115 return encoding; |
92 } | 116 } |
OLD | NEW |