Chromium Code Reviews

Side by Side Diff: sdk/lib/_internal/pub/test/serve/utils.dart

Issue 23625002: Support loading transformer plugins from pub. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Re-upload Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | | Annotate | Revision Log
OLDNEW
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 8
9 import 'package:http/http.dart' as http; 9 import 'package:http/http.dart' as http;
10 import 'package:scheduled_test/scheduled_process.dart'; 10 import 'package:scheduled_test/scheduled_process.dart';
11 import 'package:scheduled_test/scheduled_test.dart'; 11 import 'package:scheduled_test/scheduled_test.dart';
12 12
13 import '../test_pub.dart'; 13 import '../test_pub.dart';
14 14
15 /// The pub process running "pub serve". 15 /// The pub process running "pub serve".
16 ScheduledProcess _pubServer; 16 ScheduledProcess _pubServer;
17 17
18 /// The ephemeral port assigned to the running server. 18 /// The ephemeral port assigned to the running server.
19 int _port; 19 int _port;
20 20
21 /// The code for a transformer that renames ".txt" files to ".out" and adds a
22 /// ".out" suffix.
23 const REWRITE_TRANSFORMER = """
24 import 'dart:async';
25
26 import 'package:barback/barback.dart';
27
28 class RewriteTransformer extends Transformer {
29 RewriteTransformer();
30
31 String get allowedExtensions => '.txt';
32
33 Future apply(Transform transform) {
34 return transform.primaryInput
35 .then((input) => input.readAsString())
36 .then((contents) {
37 var id = transform.primaryId.changeExtension(".out");
38 transform.addOutput(new Asset.fromString(id, "\$contents.out"));
39 });
40 }
41 }
42 """;
43
21 /// Schedules starting the "pub serve" process. 44 /// Schedules starting the "pub serve" process.
22 /// 45 ///
23 /// If [shouldInstallFirst] is `true`, validates that pub install is run first. 46 /// If [shouldInstallFirst] is `true`, validates that pub install is run first.
24 void startPubServe({bool shouldInstallFirst: false}) { 47 ///
48 /// Returns the `pub serve` process.
49 ScheduledProcess startPubServe({bool shouldInstallFirst: false}) {
25 // Use port 0 to get an ephemeral port. 50 // Use port 0 to get an ephemeral port.
26 _pubServer = startPub(args: ["serve", "--port=0"]); 51 _pubServer = startPub(args: ["serve", "--port=0"]);
27 52
28 if (shouldInstallFirst) { 53 if (shouldInstallFirst) {
29 expect(_pubServer.nextLine(), 54 expect(_pubServer.nextLine(),
30 completion(startsWith("Dependencies have changed"))); 55 completion(startsWith("Dependencies have changed")));
31 expect(_pubServer.nextLine(), 56 expect(_pubServer.nextLine(),
32 completion(startsWith("Resolving dependencies..."))); 57 completion(startsWith("Resolving dependencies...")));
33 expect(_pubServer.nextLine(), 58 expect(_pubServer.nextLine(),
34 completion(equals("Dependencies installed!"))); 59 completion(equals("Dependencies installed!")));
35 } 60 }
36 61
37 expect(_pubServer.nextLine().then(_parsePort), completes); 62 expect(_pubServer.nextLine().then(_parsePort), completes);
63 return _pubServer;
38 } 64 }
39 65
40 /// Parses the port number from the "Serving blah on localhost:1234" line 66 /// Parses the port number from the "Serving blah on localhost:1234" line
41 /// printed by pub serve. 67 /// printed by pub serve.
42 void _parsePort(String line) { 68 void _parsePort(String line) {
43 var match = new RegExp(r"localhost:(\d+)").firstMatch(line); 69 var match = new RegExp(r"localhost:(\d+)").firstMatch(line);
44 assert(match != null); 70 assert(match != null);
45 _port = int.parse(match[1]); 71 _port = int.parse(match[1]);
46 } 72 }
47 73
(...skipping 14 matching lines...)
62 /// Schedules an HTTP request to the running pub server with [urlPath] and 88 /// Schedules an HTTP request to the running pub server with [urlPath] and
63 /// verifies that it responds with a 404. 89 /// verifies that it responds with a 404.
64 void requestShould404(String urlPath) { 90 void requestShould404(String urlPath) {
65 schedule(() { 91 schedule(() {
66 return http.get("http://localhost:$_port/$urlPath").then((response) { 92 return http.get("http://localhost:$_port/$urlPath").then((response) {
67 expect(response.statusCode, equals(404)); 93 expect(response.statusCode, equals(404));
68 }); 94 });
69 }, "request $urlPath"); 95 }, "request $urlPath");
70 } 96 }
71 97
98 /// Schedules an HTTP POST to the running pub server with [urlPath] and verifies
99 /// that it responds with a 405.
100 void postShould405(String urlPath) {
101 schedule(() {
102 return http.post("http://localhost:$_port/$urlPath").then((response) {
103 expect(response.statusCode, equals(405));
104 });
105 }, "request $urlPath");
106 }
107
72 /// Reads lines from pub serve's stdout until it prints the build success 108 /// Reads lines from pub serve's stdout until it prints the build success
73 /// message. 109 /// message.
74 /// 110 ///
75 /// The schedule will not proceed until the output is found. If not found, it 111 /// The schedule will not proceed until the output is found. If not found, it
76 /// will eventually time out. 112 /// will eventually time out.
77 void waitForBuildSuccess() { 113 void waitForBuildSuccess() {
78 nextLine() { 114 nextLine() {
79 return _pubServer.nextLine().then((line) { 115 return _pubServer.nextLine().then((line) {
80 if (line.contains("successfully")) return; 116 if (line.contains("successfully")) return;
81 117
82 // This line wasn't it, so ignore it and keep trying. 118 // This line wasn't it, so ignore it and keep trying.
83 return nextLine(); 119 return nextLine();
84 }); 120 });
85 } 121 }
86 122
87 schedule(nextLine); 123 schedule(nextLine);
88 } 124 }
OLDNEW

Powered by Google App Engine