| 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:io'; | 7 import 'dart:io'; |
| 8 | 8 |
| 9 import 'package:path/path.dart' as p; | 9 import 'package:path/path.dart' as p; |
| 10 import 'package:test/src/util/io.dart'; | 10 import 'package:test/src/util/io.dart'; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 38 tearDown(() { | 38 tearDown(() { |
| 39 new Directory(_sandbox).deleteSync(recursive: true); | 39 new Directory(_sandbox).deleteSync(recursive: true); |
| 40 }); | 40 }); |
| 41 | 41 |
| 42 group("fails gracefully if", () { | 42 group("fails gracefully if", () { |
| 43 test("a test file fails to compile", () { | 43 test("a test file fails to compile", () { |
| 44 var testPath = p.join(_sandbox, "test.dart"); | 44 var testPath = p.join(_sandbox, "test.dart"); |
| 45 new File(testPath).writeAsStringSync("invalid Dart file"); | 45 new File(testPath).writeAsStringSync("invalid Dart file"); |
| 46 var result = _runTest(["-p", "chrome", "test.dart"]); | 46 var result = _runTest(["-p", "chrome", "test.dart"]); |
| 47 | 47 |
| 48 expect(result.stdout, | 48 var relativePath = p.relative(testPath, from: _sandbox); |
| 49 contains("Expected a declaration, but got 'invalid'")); | |
| 50 expect(result.stdout, allOf([ | 49 expect(result.stdout, allOf([ |
| 51 contains('-1: load error'), | 50 contains("Expected a declaration, but got 'invalid'"), |
| 52 contains( | 51 contains('-1: compiling $relativePath'), |
| 53 'Failed to load "${p.relative(testPath, from: _sandbox)}": dart2js ' | 52 contains('Failed to load "$relativePath": dart2js failed.') |
| 54 'failed.') | |
| 55 ])); | 53 ])); |
| 56 expect(result.exitCode, equals(1)); | 54 expect(result.exitCode, equals(1)); |
| 57 }); | 55 }); |
| 58 | 56 |
| 59 test("a test file throws", () { | 57 test("a test file throws", () { |
| 60 var testPath = p.join(_sandbox, "test.dart"); | 58 var testPath = p.join(_sandbox, "test.dart"); |
| 61 new File(testPath).writeAsStringSync("void main() => throw 'oh no';"); | 59 new File(testPath).writeAsStringSync("void main() => throw 'oh no';"); |
| 62 | 60 |
| 61 var relativePath = p.relative(testPath, from: _sandbox); |
| 63 var result = _runTest(["-p", "chrome", "test.dart"]); | 62 var result = _runTest(["-p", "chrome", "test.dart"]); |
| 64 expect(result.stdout, allOf([ | 63 expect(result.stdout, allOf([ |
| 65 contains('-1: load error'), | 64 contains('-1: compiling $relativePath'), |
| 66 contains( | 65 contains('Failed to load "$relativePath": oh no') |
| 67 'Failed to load "${p.relative(testPath, from: _sandbox)}": oh no') | |
| 68 ])); | 66 ])); |
| 69 expect(result.exitCode, equals(1)); | 67 expect(result.exitCode, equals(1)); |
| 70 }); | 68 }); |
| 71 | 69 |
| 72 test("a test file doesn't have a main defined", () { | 70 test("a test file doesn't have a main defined", () { |
| 73 var testPath = p.join(_sandbox, "test.dart"); | 71 var testPath = p.join(_sandbox, "test.dart"); |
| 74 new File(testPath).writeAsStringSync("void foo() {}"); | 72 new File(testPath).writeAsStringSync("void foo() {}"); |
| 75 | 73 |
| 74 var relativePath = p.relative(testPath, from: _sandbox); |
| 76 var result = _runTest(["-p", "chrome", "test.dart"]); | 75 var result = _runTest(["-p", "chrome", "test.dart"]); |
| 77 expect(result.stdout, allOf([ | 76 expect(result.stdout, allOf([ |
| 78 contains('-1: load error'), | 77 contains('-1: compiling $relativePath'), |
| 79 contains( | 78 contains('Failed to load "$relativePath": No top-level main() function ' |
| 80 'Failed to load "${p.relative(testPath, from: _sandbox)}": No ' | 79 'defined.') |
| 81 'top-level main() function defined.') | |
| 82 ])); | 80 ])); |
| 83 expect(result.exitCode, equals(1)); | 81 expect(result.exitCode, equals(1)); |
| 84 }); | 82 }); |
| 85 | 83 |
| 86 test("a test file has a non-function main", () { | 84 test("a test file has a non-function main", () { |
| 87 var testPath = p.join(_sandbox, "test.dart"); | 85 var testPath = p.join(_sandbox, "test.dart"); |
| 88 new File(testPath).writeAsStringSync("int main;"); | 86 new File(testPath).writeAsStringSync("int main;"); |
| 89 | 87 |
| 88 var relativePath = p.relative(testPath, from: _sandbox); |
| 90 var result = _runTest(["-p", "chrome", "test.dart"]); | 89 var result = _runTest(["-p", "chrome", "test.dart"]); |
| 91 expect(result.stdout, allOf([ | 90 expect(result.stdout, allOf([ |
| 92 contains('-1: load error'), | 91 contains('-1: compiling $relativePath'), |
| 93 contains( | 92 contains('Failed to load "$relativePath": Top-level main getter is not ' |
| 94 'Failed to load "${p.relative(testPath, from: _sandbox)}": ' | 93 'a function.\n') |
| 95 'Top-level main getter is not a function.\n') | |
| 96 ])); | 94 ])); |
| 97 expect(result.exitCode, equals(1)); | 95 expect(result.exitCode, equals(1)); |
| 98 }); | 96 }); |
| 99 | 97 |
| 100 test("a test file has a main with arguments", () { | 98 test("a test file has a main with arguments", () { |
| 101 var testPath = p.join(_sandbox, "test.dart"); | 99 var testPath = p.join(_sandbox, "test.dart"); |
| 102 new File(testPath).writeAsStringSync("void main(arg) {}"); | 100 new File(testPath).writeAsStringSync("void main(arg) {}"); |
| 103 | 101 |
| 102 var relativePath = p.relative(testPath, from: _sandbox); |
| 104 var result = _runTest(["-p", "chrome", "test.dart"]); | 103 var result = _runTest(["-p", "chrome", "test.dart"]); |
| 105 expect(result.stdout, allOf([ | 104 expect(result.stdout, allOf([ |
| 106 contains('-1: load error'), | 105 contains('-1: compiling $relativePath'), |
| 107 contains( | 106 contains('Failed to load "$relativePath": Top-level main() function ' |
| 108 'Failed to load "${p.relative(testPath, from: _sandbox)}": ' | 107 'takes arguments.\n') |
| 109 'Top-level main() function takes arguments.\n') | |
| 110 ])); | 108 ])); |
| 111 expect(result.exitCode, equals(1)); | 109 expect(result.exitCode, equals(1)); |
| 112 }); | 110 }); |
| 113 | 111 |
| 114 test("a custom HTML file has no script tag", () { | 112 test("a custom HTML file has no script tag", () { |
| 115 var testPath = p.join(_sandbox, "test.dart"); | 113 var testPath = p.join(_sandbox, "test.dart"); |
| 116 new File(testPath).writeAsStringSync("void main(arg) {}"); | 114 new File(testPath).writeAsStringSync("void main(arg) {}"); |
| 117 | 115 |
| 118 new File(p.join(_sandbox, "test.html")).writeAsStringSync(""" | 116 new File(p.join(_sandbox, "test.html")).writeAsStringSync(""" |
| 119 <html> | 117 <html> |
| 120 <head> | 118 <head> |
| 121 <link rel="x-dart-test" href="test.dart"> | 119 <link rel="x-dart-test" href="test.dart"> |
| 122 </head> | 120 </head> |
| 123 </html> | 121 </html> |
| 124 """); | 122 """); |
| 125 | 123 |
| 126 var relativePath = p.relative(testPath, from: _sandbox); | 124 var relativePath = p.relative(testPath, from: _sandbox); |
| 127 var result = _runTest(["-p", "content-shell", "test.dart"]); | 125 var result = _runTest(["-p", "content-shell", "test.dart"]); |
| 128 expect(result.stdout, allOf([ | 126 expect(result.stdout, allOf([ |
| 129 contains('-1: load error'), | 127 contains('-1: loading $relativePath'), |
| 130 contains( | 128 contains( |
| 131 'Failed to load "$relativePath": ' | 129 'Failed to load "$relativePath": ' |
| 132 '"${p.withoutExtension(relativePath)}.html" must contain ' | 130 '"${p.withoutExtension(relativePath)}.html" must contain ' |
| 133 '<script src="packages/test/dart.js"></script>.\n') | 131 '<script src="packages/test/dart.js"></script>.\n') |
| 134 ])); | 132 ])); |
| 135 expect(result.exitCode, equals(1)); | 133 expect(result.exitCode, equals(1)); |
| 136 }); | 134 }); |
| 137 | 135 |
| 138 test("a custom HTML file has no link", () { | 136 test("a custom HTML file has no link", () { |
| 139 var testPath = p.join(_sandbox, "test.dart"); | 137 var testPath = p.join(_sandbox, "test.dart"); |
| 140 new File(testPath).writeAsStringSync("void main(arg) {}"); | 138 new File(testPath).writeAsStringSync("void main(arg) {}"); |
| 141 | 139 |
| 142 new File(p.join(_sandbox, "test.html")).writeAsStringSync(""" | 140 new File(p.join(_sandbox, "test.html")).writeAsStringSync(""" |
| 143 <html> | 141 <html> |
| 144 <head> | 142 <head> |
| 145 <script src="packages/test/dart.js"></script> | 143 <script src="packages/test/dart.js"></script> |
| 146 </head> | 144 </head> |
| 147 </html> | 145 </html> |
| 148 """); | 146 """); |
| 149 | 147 |
| 148 var relativePath = p.relative(testPath, from: _sandbox); |
| 150 var result = _runTest(["-p", "content-shell", "test.dart"]); | 149 var result = _runTest(["-p", "content-shell", "test.dart"]); |
| 151 expect(result.stdout, allOf([ | 150 expect(result.stdout, allOf([ |
| 152 contains('-1: load error'), | 151 contains('-1: loading $relativePath'), |
| 153 contains( | 152 contains( |
| 154 'Failed to load "${p.relative(testPath, from: _sandbox)}": ' | 153 'Failed to load "$relativePath": ' |
| 155 'Expected exactly 1 <link rel="x-dart-test"> in test.html, ' | 154 'Expected exactly 1 <link rel="x-dart-test"> in test.html, ' |
| 156 'found 0.\n') | 155 'found 0.\n') |
| 157 ])); | 156 ])); |
| 158 expect(result.exitCode, equals(1)); | 157 expect(result.exitCode, equals(1)); |
| 159 }); | 158 }); |
| 160 | 159 |
| 161 test("a custom HTML file has too many links", () { | 160 test("a custom HTML file has too many links", () { |
| 162 var testPath = p.join(_sandbox, "test.dart"); | 161 var testPath = p.join(_sandbox, "test.dart"); |
| 163 new File(testPath).writeAsStringSync("void main(arg) {}"); | 162 new File(testPath).writeAsStringSync("void main(arg) {}"); |
| 164 | 163 |
| 165 new File(p.join(_sandbox, "test.html")).writeAsStringSync(""" | 164 new File(p.join(_sandbox, "test.html")).writeAsStringSync(""" |
| 166 <html> | 165 <html> |
| 167 <head> | 166 <head> |
| 168 <link rel='x-dart-test' href='test.dart'> | 167 <link rel='x-dart-test' href='test.dart'> |
| 169 <link rel='x-dart-test' href='test.dart'> | 168 <link rel='x-dart-test' href='test.dart'> |
| 170 <script src="packages/test/dart.js"></script> | 169 <script src="packages/test/dart.js"></script> |
| 171 </head> | 170 </head> |
| 172 </html> | 171 </html> |
| 173 """); | 172 """); |
| 174 | 173 |
| 174 var relativePath = p.relative(testPath, from: _sandbox); |
| 175 var result = _runTest(["-p", "content-shell", "test.dart"]); | 175 var result = _runTest(["-p", "content-shell", "test.dart"]); |
| 176 expect(result.stdout, allOf([ | 176 expect(result.stdout, allOf([ |
| 177 contains('-1: load error'), | 177 contains('-1: loading $relativePath'), |
| 178 contains( | 178 contains( |
| 179 'Failed to load "${p.relative(testPath, from: _sandbox)}": ' | 179 'Failed to load "$relativePath": ' |
| 180 'Expected exactly 1 <link rel="x-dart-test"> in test.html, ' | 180 'Expected exactly 1 <link rel="x-dart-test"> in test.html, ' |
| 181 'found 2.\n') | 181 'found 2.\n') |
| 182 ])); | 182 ])); |
| 183 expect(result.exitCode, equals(1)); | 183 expect(result.exitCode, equals(1)); |
| 184 }); | 184 }); |
| 185 | 185 |
| 186 test("a custom HTML file has no href in the link", () { | 186 test("a custom HTML file has no href in the link", () { |
| 187 var testPath = p.join(_sandbox, "test.dart"); | 187 var testPath = p.join(_sandbox, "test.dart"); |
| 188 new File(testPath).writeAsStringSync("void main(arg) {}"); | 188 new File(testPath).writeAsStringSync("void main(arg) {}"); |
| 189 | 189 |
| 190 new File(p.join(_sandbox, "test.html")).writeAsStringSync(""" | 190 new File(p.join(_sandbox, "test.html")).writeAsStringSync(""" |
| 191 <html> | 191 <html> |
| 192 <head> | 192 <head> |
| 193 <link rel='x-dart-test'> | 193 <link rel='x-dart-test'> |
| 194 <script src="packages/test/dart.js"></script> | 194 <script src="packages/test/dart.js"></script> |
| 195 </head> | 195 </head> |
| 196 </html> | 196 </html> |
| 197 """); | 197 """); |
| 198 | 198 |
| 199 var relativePath = p.relative(testPath, from: _sandbox); |
| 199 var result = _runTest(["-p", "content-shell", "test.dart"]); | 200 var result = _runTest(["-p", "content-shell", "test.dart"]); |
| 200 expect(result.stdout, allOf([ | 201 expect(result.stdout, allOf([ |
| 201 contains('-1: load error'), | 202 contains('-1: loading $relativePath'), |
| 202 contains( | 203 contains( |
| 203 'Failed to load "${p.relative(testPath, from: _sandbox)}": ' | 204 'Failed to load "$relativePath": ' |
| 204 'Expected <link rel="x-dart-test"> in test.html to have an ' | 205 'Expected <link rel="x-dart-test"> in test.html to have an ' |
| 205 '"href" attribute.\n') | 206 '"href" attribute.\n') |
| 206 ])); | 207 ])); |
| 207 expect(result.exitCode, equals(1)); | 208 expect(result.exitCode, equals(1)); |
| 208 }); | 209 }); |
| 209 | 210 |
| 210 test("a custom HTML file has an invalid test URL", () { | 211 test("a custom HTML file has an invalid test URL", () { |
| 211 var testPath = p.join(_sandbox, "test.dart"); | 212 var testPath = p.join(_sandbox, "test.dart"); |
| 212 new File(testPath).writeAsStringSync("void main(arg) {}"); | 213 new File(testPath).writeAsStringSync("void main(arg) {}"); |
| 213 | 214 |
| 214 new File(p.join(_sandbox, "test.html")).writeAsStringSync(""" | 215 new File(p.join(_sandbox, "test.html")).writeAsStringSync(""" |
| 215 <html> | 216 <html> |
| 216 <head> | 217 <head> |
| 217 <link rel='x-dart-test' href='wrong.dart'> | 218 <link rel='x-dart-test' href='wrong.dart'> |
| 218 <script src="packages/test/dart.js"></script> | 219 <script src="packages/test/dart.js"></script> |
| 219 </head> | 220 </head> |
| 220 </html> | 221 </html> |
| 221 """); | 222 """); |
| 222 | 223 |
| 224 var relativePath = p.relative(testPath, from: _sandbox); |
| 223 var result = _runTest(["-p", "content-shell", "test.dart"]); | 225 var result = _runTest(["-p", "content-shell", "test.dart"]); |
| 224 expect(result.stdout, allOf([ | 226 expect(result.stdout, allOf([ |
| 225 contains('-1: load error'), | 227 contains('-1: loading $relativePath'), |
| 226 contains( | 228 contains( |
| 227 'Failed to load "${p.relative(testPath, from: _sandbox)}": ' | 229 'Failed to load "$relativePath": ' |
| 228 'Failed to load script at ') | 230 'Failed to load script at ') |
| 229 ])); | 231 ])); |
| 230 expect(result.exitCode, equals(1)); | 232 expect(result.exitCode, equals(1)); |
| 231 }); | 233 }); |
| 232 | 234 |
| 233 // TODO(nweiz): test what happens when a test file is unreadable once issue | 235 // TODO(nweiz): test what happens when a test file is unreadable once issue |
| 234 // 15078 is fixed. | 236 // 15078 is fixed. |
| 235 }); | 237 }); |
| 236 | 238 |
| 237 group("runs successful tests", () { | 239 group("runs successful tests", () { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 251 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(_success); | 253 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(_success); |
| 252 var result = _runTest(["-p", "content-shell", "test.dart"]); | 254 var result = _runTest(["-p", "content-shell", "test.dart"]); |
| 253 expect(result.stdout, isNot(contains("Compiling"))); | 255 expect(result.stdout, isNot(contains("Compiling"))); |
| 254 expect(result.exitCode, equals(0)); | 256 expect(result.exitCode, equals(0)); |
| 255 }); | 257 }); |
| 256 | 258 |
| 257 test("on a JS and non-JS browser", () { | 259 test("on a JS and non-JS browser", () { |
| 258 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(_success); | 260 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(_success); |
| 259 var result = _runTest( | 261 var result = _runTest( |
| 260 ["-p", "content-shell", "-p", "chrome", "test.dart"]); | 262 ["-p", "content-shell", "-p", "chrome", "test.dart"]); |
| 261 expect("Compiling".allMatches(result.stdout), hasLength(1)); | 263 expect(result.stdout, contains("[Chrome] compiling")); |
| 264 expect(result.stdout, |
| 265 isNot(contains("[Dartium Content Shell] compiling"))); |
| 262 expect(result.exitCode, equals(0)); | 266 expect(result.exitCode, equals(0)); |
| 263 }); | 267 }); |
| 264 | 268 |
| 265 test("on a browser and the VM", () { | 269 test("on a browser and the VM", () { |
| 266 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(_success); | 270 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(_success); |
| 267 var result = _runTest(["-p", "content-shell", "-p", "vm", "test.dart"]); | 271 var result = _runTest(["-p", "content-shell", "-p", "vm", "test.dart"]); |
| 268 expect(result.exitCode, equals(0)); | 272 expect(result.exitCode, equals(0)); |
| 269 }); | 273 }); |
| 270 | 274 |
| 271 // Regression test; this broke in 0.12.0-beta.9. | 275 // Regression test; this broke in 0.12.0-beta.9. |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 422 expect(result.exitCode, equals(1)); | 426 expect(result.exitCode, equals(1)); |
| 423 }); | 427 }); |
| 424 | 428 |
| 425 test("on Chrome", () { | 429 test("on Chrome", () { |
| 426 var result = _runTest(["-p", "chrome", "test.dart"]); | 430 var result = _runTest(["-p", "chrome", "test.dart"]); |
| 427 expect(result.exitCode, equals(1)); | 431 expect(result.exitCode, equals(1)); |
| 428 }); | 432 }); |
| 429 }); | 433 }); |
| 430 }); | 434 }); |
| 431 | 435 |
| 436 test("the compiler uses colors if the test runner uses colors", () { |
| 437 var testPath = p.join(_sandbox, "test.dart"); |
| 438 new File(testPath).writeAsStringSync("String main() => 12;\n"); |
| 439 |
| 440 var result = _runTest(["--color", "-p", "chrome", "test.dart"]); |
| 441 expect(result.stdout, contains('\u001b[35m')); |
| 442 expect(result.exitCode, equals(1)); |
| 443 }); |
| 444 |
| 432 test("forwards prints from the browser test", () { | 445 test("forwards prints from the browser test", () { |
| 433 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(""" | 446 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(""" |
| 434 import 'dart:async'; | 447 import 'dart:async'; |
| 435 | 448 |
| 436 import 'package:test/test.dart'; | 449 import 'package:test/test.dart'; |
| 437 | 450 |
| 438 void main() { | 451 void main() { |
| 439 test("test", () { | 452 test("test", () { |
| 440 print("Hello,"); | 453 print("Hello,"); |
| 441 return new Future(() => print("world!")); | 454 return new Future(() => print("world!")); |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 650 '''); | 663 '''); |
| 651 | 664 |
| 652 var result = _runTest(["-p", "content-shell", "test.dart"]); | 665 var result = _runTest(["-p", "content-shell", "test.dart"]); |
| 653 expect(result.stdout, contains("+1: All tests passed!")); | 666 expect(result.stdout, contains("+1: All tests passed!")); |
| 654 }); | 667 }); |
| 655 }); | 668 }); |
| 656 } | 669 } |
| 657 | 670 |
| 658 ProcessResult _runTest(List<String> args) => | 671 ProcessResult _runTest(List<String> args) => |
| 659 runTest(args, workingDirectory: _sandbox); | 672 runTest(args, workingDirectory: _sandbox); |
| OLD | NEW |