| OLD | NEW |
| (Empty) | |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 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. |
| 4 // |
| 5 |
| 6 #import("dart:io"); |
| 7 #import("dart:isolate"); |
| 8 |
| 9 class Handler1 implements RequestHandler { |
| 10 void onRequest(HttpRequest request, HttpResponse response) { |
| 11 response.outputStream.writeString("Handler 1"); |
| 12 response.outputStream.close(); |
| 13 } |
| 14 } |
| 15 |
| 16 class Handler2 implements RequestHandler { |
| 17 void onRequest(HttpRequest request, HttpResponse response) { |
| 18 response.outputStream.writeString("Handler 2"); |
| 19 response.outputStream.close(); |
| 20 } |
| 21 } |
| 22 |
| 23 class French404Handler implements RequestHandler { |
| 24 void onRequest(HttpRequest request, HttpResponse response) { |
| 25 response.statusCode = HttpStatus.NOT_FOUND; |
| 26 response.reasonPhrase = "Non Trouvé"; |
| 27 response.outputStream.close(); |
| 28 } |
| 29 } |
| 30 |
| 31 class Server { |
| 32 Server() { |
| 33 server = new HttpServer(); |
| 34 server.listen("127.0.0.1", 0); |
| 35 port = server.port; |
| 36 server.onError = (e) { |
| 37 Expect.fail("No server errors expected: $e"); |
| 38 }; |
| 39 } |
| 40 |
| 41 void addHandler(Function matcher, handler) { |
| 42 server.addRequestHandler(matcher, handler); |
| 43 } |
| 44 |
| 45 void set defaultHandler(handler) { |
| 46 server.defaultRequestHandler = handler; |
| 47 } |
| 48 |
| 49 void close() { |
| 50 server.close(); |
| 51 } |
| 52 |
| 53 int port; |
| 54 HttpServer server; |
| 55 } |
| 56 |
| 57 void testDefaultHandler() { |
| 58 Server server = new Server(); |
| 59 HttpClient client = new HttpClient(); |
| 60 |
| 61 void done() { |
| 62 server.close(); |
| 63 client.shutdown(); |
| 64 } |
| 65 |
| 66 void error(e) { |
| 67 Expect.fail("No client error expected $e"); |
| 68 done(); |
| 69 }; |
| 70 |
| 71 void german404(HttpRequest request, HttpResponse response) { |
| 72 response.statusCode = HttpStatus.NOT_FOUND; |
| 73 response.reasonPhrase = "Nicht Gefunden"; |
| 74 response.outputStream.close(); |
| 75 } |
| 76 |
| 77 // Test the standard default handler. |
| 78 HttpClientConnection conn = client.get("127.0.0.1", server.port, "/"); |
| 79 conn.onResponse = (HttpClientResponse response) { |
| 80 Expect.equals(HttpStatus.NOT_FOUND, response.statusCode); |
| 81 Expect.equals("Not Found", response.reasonPhrase); |
| 82 |
| 83 // Install a default handler. |
| 84 server.defaultHandler = german404; |
| 85 HttpClientConnection conn = client.get("127.0.0.1", server.port, "/"); |
| 86 conn.onResponse = (HttpClientResponse response) { |
| 87 Expect.equals(HttpStatus.NOT_FOUND, response.statusCode); |
| 88 Expect.equals("Nicht Gefunden", response.reasonPhrase); |
| 89 |
| 90 // Install another default handler. |
| 91 server.defaultHandler = new French404Handler(); |
| 92 HttpClientConnection conn = client.get("127.0.0.1", server.port, "/"); |
| 93 conn.onResponse = (HttpClientResponse response) { |
| 94 Expect.equals(HttpStatus.NOT_FOUND, response.statusCode); |
| 95 Expect.equals("Non Trouvé", response.reasonPhrase); |
| 96 done(); |
| 97 }; |
| 98 conn.onError = error; |
| 99 }; |
| 100 conn.onError = error; |
| 101 }; |
| 102 conn.onError = error; |
| 103 } |
| 104 |
| 105 void testHandlers() { |
| 106 Server server = new Server(); |
| 107 HttpClient client = new HttpClient(); |
| 108 int requests = 0; |
| 109 int doneCount = 0; |
| 110 |
| 111 void done() { |
| 112 doneCount++; |
| 113 if (doneCount == requests) { |
| 114 server.close(); |
| 115 client.shutdown(); |
| 116 } |
| 117 } |
| 118 |
| 119 void error(e) { |
| 120 Expect.fail("No client error expected $e"); |
| 121 done(); |
| 122 }; |
| 123 |
| 124 void handler3(HttpRequest request, HttpResponse response) { |
| 125 response.statusCode = HttpStatus.OK; |
| 126 response.outputStream.writeString("Handler 3"); |
| 127 response.outputStream.close(); |
| 128 } |
| 129 |
| 130 void handler4(HttpRequest request, HttpResponse response) { |
| 131 response.statusCode = HttpStatus.OK; |
| 132 response.outputStream.writeString("Handler 4"); |
| 133 response.outputStream.close(); |
| 134 } |
| 135 |
| 136 void checkBody(HttpClientResponse response, String expected) { |
| 137 StringBuffer sb = new StringBuffer(); |
| 138 StringInputStream stream = new StringInputStream(response.inputStream); |
| 139 stream.onData = () { |
| 140 sb.add(stream.read()); |
| 141 }; |
| 142 stream.onClosed = () { |
| 143 Expect.equals(expected, sb.toString()); |
| 144 done(); |
| 145 }; |
| 146 } |
| 147 |
| 148 server.addHandler( |
| 149 (request) => request.path.startsWith("/xxx/yyy/"), new Handler1()); |
| 150 server.addHandler( |
| 151 (request) => new RegExp("^/xxx").hasMatch(request.path), new Handler2()); |
| 152 server.addHandler( |
| 153 (request) => request.path == "/yyy.dat", handler3); |
| 154 server.addHandler( |
| 155 (request) => request.path.endsWith(".dat"), handler4); |
| 156 |
| 157 void testRequest(String path, int expectedStatus, String expectedBody) { |
| 158 HttpClientConnection conn = |
| 159 client.get("127.0.0.1", server.port, path); |
| 160 requests++; |
| 161 conn.onResponse = (HttpClientResponse response) { |
| 162 Expect.equals(expectedStatus, response.statusCode); |
| 163 checkBody(response, expectedBody); |
| 164 }; |
| 165 conn.onError = error; |
| 166 } |
| 167 |
| 168 testRequest("/xxx/yyy/zzz", HttpStatus.OK, "Handler 1"); |
| 169 testRequest("/xxx/zzz", HttpStatus.OK, "Handler 2"); |
| 170 testRequest("/yyy.dat", HttpStatus.OK, "Handler 3"); |
| 171 testRequest("/abc.dat", HttpStatus.OK, "Handler 4"); |
| 172 testRequest("/abcdat", HttpStatus.NOT_FOUND, ""); |
| 173 testRequest("/xxx.dat", HttpStatus.OK, "Handler 2"); |
| 174 } |
| 175 |
| 176 main() { |
| 177 testDefaultHandler(); |
| 178 testHandlers(); |
| 179 } |
| OLD | NEW |