 Chromium Code Reviews
 Chromium Code Reviews Issue 26634003:
  Web Socket API for talking to Editor.  (Closed) 
  Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
    
  
    Issue 26634003:
  Web Socket API for talking to Editor.  (Closed) 
  Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart| OLD | NEW | 
|---|---|
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS d.file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS d.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 library pub_tests; | 5 library pub_tests; | 
| 6 | 6 | 
| 7 import 'dart:async'; | 7 import 'dart:async'; | 
| 8 import 'dart:convert'; | |
| 9 import 'dart:io'; | |
| 8 | 10 | 
| 9 import 'package:http/http.dart' as http; | 11 import 'package:http/http.dart' as http; | 
| 10 import 'package:scheduled_test/scheduled_process.dart'; | 12 import 'package:scheduled_test/scheduled_process.dart'; | 
| 11 import 'package:scheduled_test/scheduled_test.dart'; | 13 import 'package:scheduled_test/scheduled_test.dart'; | 
| 12 | 14 | 
| 13 import '../test_pub.dart'; | 15 import '../test_pub.dart'; | 
| 14 | 16 | 
| 15 /// The pub process running "pub serve". | 17 /// The pub process running "pub serve". | 
| 16 ScheduledProcess _pubServer; | 18 ScheduledProcess _pubServer; | 
| 17 | 19 | 
| 18 /// The ephemeral port assigned to the running server. | 20 /// The ephemeral port assigned to the running server. | 
| 19 int _port; | 21 int _port; | 
| 20 | 22 | 
| 23 /// The web socket connection to the running pub process, or `null` if no | |
| 24 /// connection has been made. | |
| 25 WebSocket _webSocket; | |
| 26 Stream _webSocketBroadcastStream; | |
| 27 | |
| 21 /// The code for a transformer that renames ".txt" files to ".out" and adds a | 28 /// The code for a transformer that renames ".txt" files to ".out" and adds a | 
| 22 /// ".out" suffix. | 29 /// ".out" suffix. | 
| 23 const REWRITE_TRANSFORMER = """ | 30 const REWRITE_TRANSFORMER = """ | 
| 24 import 'dart:async'; | 31 import 'dart:async'; | 
| 25 | 32 | 
| 26 import 'package:barback/barback.dart'; | 33 import 'package:barback/barback.dart'; | 
| 27 | 34 | 
| 28 class RewriteTransformer extends Transformer { | 35 class RewriteTransformer extends Transformer { | 
| 29 RewriteTransformer.asPlugin(); | 36 RewriteTransformer.asPlugin(); | 
| 30 | 37 | 
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 100 if (!dart2js) args.add("--no-dart2js"); | 107 if (!dart2js) args.add("--no-dart2js"); | 
| 101 | 108 | 
| 102 // Dart2js can take a long time to compile dart code, so we increase the | 109 // Dart2js can take a long time to compile dart code, so we increase the | 
| 103 // timeout to cope with that. | 110 // timeout to cope with that. | 
| 104 if (dart2js) { | 111 if (dart2js) { | 
| 105 currentSchedule.timeout = new Duration(seconds: 15); | 112 currentSchedule.timeout = new Duration(seconds: 15); | 
| 106 } | 113 } | 
| 107 | 114 | 
| 108 _pubServer = startPub(args: args); | 115 _pubServer = startPub(args: args); | 
| 109 | 116 | 
| 117 currentSchedule.onComplete.schedule(() { | |
| 118 if (_webSocket != null) { | |
| 119 _webSocket.close(); | |
| 120 _webSocket = null; | |
| 121 _webSocketBroadcastStream = null; | |
| 122 } | |
| 123 }); | |
| 124 | |
| 110 if (shouldGetFirst) { | 125 if (shouldGetFirst) { | 
| 111 expect(_pubServer.nextLine(), | 126 expect(_pubServer.nextLine(), | 
| 112 completion(anyOf( | 127 completion(anyOf( | 
| 113 startsWith("Your pubspec has changed"), | 128 startsWith("Your pubspec has changed"), | 
| 114 startsWith("You don't have a lockfile")))); | 129 startsWith("You don't have a lockfile")))); | 
| 115 expect(_pubServer.nextLine(), | 130 expect(_pubServer.nextLine(), | 
| 116 completion(startsWith("Resolving dependencies..."))); | 131 completion(startsWith("Resolving dependencies..."))); | 
| 117 expect(_pubServer.nextLine(), | 132 expect(_pubServer.nextLine(), | 
| 118 completion(equals("Got dependencies!"))); | 133 completion(equals("Got dependencies!"))); | 
| 119 } | 134 } | 
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 176 return _pubServer.nextLine().then((line) { | 191 return _pubServer.nextLine().then((line) { | 
| 177 if (line.contains("successfully")) return; | 192 if (line.contains("successfully")) return; | 
| 178 | 193 | 
| 179 // This line wasn't it, so ignore it and keep trying. | 194 // This line wasn't it, so ignore it and keep trying. | 
| 180 return nextLine(); | 195 return nextLine(); | 
| 181 }); | 196 }); | 
| 182 } | 197 } | 
| 183 | 198 | 
| 184 schedule(nextLine); | 199 schedule(nextLine); | 
| 185 } | 200 } | 
| 201 | |
| 202 /// Schedules opening a web socket connection to the currently running pub | |
| 203 /// serve. | |
| 204 Future _ensureWebSocket() { | |
| 205 // Use the existing one if already connected. | |
| 206 if (_webSocket != null) return new Future.value(); | |
| 207 | |
| 208 // Server should already be running. | |
| 209 assert(_pubServer != null); | |
| 210 assert(_port != null); | |
| 211 | |
| 212 return WebSocket.connect("ws://127.0.0.1:$_port").then((socket) { | |
| 213 _webSocket = socket; | |
| 214 // TODO(rnystrom): Works around #13913. | |
| 215 _webSocketBroadcastStream = _webSocket.asBroadcastStream(); | |
| 216 }); | |
| 217 } | |
| 218 | |
| 219 /// Sends [request] (an arbitrary JSON object) to the running pub serve's web | |
| 220 /// socket connection, waits for a reply, then verifies that the reply matches | |
| 221 /// [expectation]. | |
| 222 void webSocketShouldReply(request, expectation, {bool encodeRequest: true}) { | |
| 
nweiz
2013/10/09 19:16:37
Document the [encodeRequest] parameter.
 
Bob Nystrom
2013/10/11 20:50:10
Done.
 | |
| 223 schedule(() => _ensureWebSocket().then((_) { | |
| 224 if (encodeRequest) request = JSON.encode(request); | |
| 225 _webSocket.add(request); | |
| 226 return _webSocketBroadcastStream.first.then((value) { | |
| 227 expect(JSON.decode(value), expectation); | |
| 228 }); | |
| 229 }), "web socket should reply"); | |
| 
nweiz
2013/10/09 19:16:37
I'd prefer a more descriptive description here. At
 
Bob Nystrom
2013/10/11 20:50:10
Done.
 | |
| 230 } | |
| OLD | NEW |