| OLD | NEW |
| 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 | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 library pub_tests; | 1 library pub_tests; |
| 6 | |
| 7 import 'package:scheduled_test/scheduled_test.dart'; | 2 import 'package:scheduled_test/scheduled_test.dart'; |
| 8 import 'package:scheduled_test/scheduled_stream.dart'; | 3 import 'package:scheduled_test/scheduled_stream.dart'; |
| 9 | |
| 10 import '../../lib/src/exit_codes.dart' as exit_codes; | 4 import '../../lib/src/exit_codes.dart' as exit_codes; |
| 11 import '../descriptor.dart' as d; | 5 import '../descriptor.dart' as d; |
| 12 import '../test_pub.dart'; | 6 import '../test_pub.dart'; |
| 13 | |
| 14 const SOURCE_MAPS_TRANSFORMER = """ | 7 const SOURCE_MAPS_TRANSFORMER = """ |
| 15 import 'dart:async'; | 8 import 'dart:async'; |
| 16 | 9 |
| 17 import 'package:barback/barback.dart'; | 10 import 'package:barback/barback.dart'; |
| 18 import 'package:source_maps/source_maps.dart'; | 11 import 'package:source_maps/source_maps.dart'; |
| 19 | 12 |
| 20 class RewriteTransformer extends Transformer { | 13 class RewriteTransformer extends Transformer { |
| 21 RewriteTransformer.asPlugin(); | 14 RewriteTransformer.asPlugin(); |
| 22 | 15 |
| 23 String get allowedExtensions => '.txt'; | 16 String get allowedExtensions => '.txt'; |
| 24 | 17 |
| 25 Future apply(Transform transform) { | 18 Future apply(Transform transform) { |
| 26 transform.logger.info('info!'); | 19 transform.logger.info('info!'); |
| 27 transform.logger.warning('Warning!', | 20 transform.logger.warning('Warning!', |
| 28 asset: transform.primaryInput.id.changeExtension('.foo')); | 21 asset: transform.primaryInput.id.changeExtension('.foo')); |
| 29 var sourceFile = new SourceFile.text( | 22 var sourceFile = new SourceFile.text( |
| 30 'http://fake.com/not_real.dart', | 23 'http://fake.com/not_real.dart', |
| 31 'not a real\\ndart file'); | 24 'not a real\\ndart file'); |
| 32 transform.logger.error('ERROR!', span: new FileSpan(sourceFile, 11)); | 25 transform.logger.error('ERROR!', span: new FileSpan(sourceFile, 11)); |
| 33 return transform.primaryInput.readAsString().then((contents) { | 26 return transform.primaryInput.readAsString().then((contents) { |
| 34 var id = transform.primaryInput.id.changeExtension(".out"); | 27 var id = transform.primaryInput.id.changeExtension(".out"); |
| 35 transform.addOutput(new Asset.fromString(id, "\$contents.out")); | 28 transform.addOutput(new Asset.fromString(id, "\$contents.out")); |
| 36 }); | 29 }); |
| 37 } | 30 } |
| 38 } | 31 } |
| 39 """; | 32 """; |
| 40 | |
| 41 const SOURCE_SPAN_TRANSFORMER = """ | 33 const SOURCE_SPAN_TRANSFORMER = """ |
| 42 import 'dart:async'; | 34 import 'dart:async'; |
| 43 | 35 |
| 44 import 'package:barback/barback.dart'; | 36 import 'package:barback/barback.dart'; |
| 45 import 'package:source_span/source_span.dart'; | 37 import 'package:source_span/source_span.dart'; |
| 46 | 38 |
| 47 class RewriteTransformer extends Transformer { | 39 class RewriteTransformer extends Transformer { |
| 48 RewriteTransformer.asPlugin(); | 40 RewriteTransformer.asPlugin(); |
| 49 | 41 |
| 50 String get allowedExtensions => '.txt'; | 42 String get allowedExtensions => '.txt'; |
| 51 | 43 |
| 52 Future apply(Transform transform) { | 44 Future apply(Transform transform) { |
| 53 transform.logger.info('info!'); | 45 transform.logger.info('info!'); |
| 54 transform.logger.warning('Warning!', | 46 transform.logger.warning('Warning!', |
| 55 asset: transform.primaryInput.id.changeExtension('.foo')); | 47 asset: transform.primaryInput.id.changeExtension('.foo')); |
| 56 var sourceFile = new SourceFile('not a real\\ndart file', | 48 var sourceFile = new SourceFile('not a real\\ndart file', |
| 57 url: 'http://fake.com/not_real.dart'); | 49 url: 'http://fake.com/not_real.dart'); |
| 58 transform.logger.error('ERROR!', span: sourceFile.span(11, 12)); | 50 transform.logger.error('ERROR!', span: sourceFile.span(11, 12)); |
| 59 return transform.primaryInput.readAsString().then((contents) { | 51 return transform.primaryInput.readAsString().then((contents) { |
| 60 var id = transform.primaryInput.id.changeExtension(".out"); | 52 var id = transform.primaryInput.id.changeExtension(".out"); |
| 61 transform.addOutput(new Asset.fromString(id, "\$contents.out")); | 53 transform.addOutput(new Asset.fromString(id, "\$contents.out")); |
| 62 }); | 54 }); |
| 63 } | 55 } |
| 64 } | 56 } |
| 65 """; | 57 """; |
| 66 | |
| 67 main() { | 58 main() { |
| 68 initConfig(); | 59 initConfig(); |
| 69 // This intentionally tests barback 0.14.2 with both transformers, since it | |
| 70 // supports both types of span. | |
| 71 withBarbackVersions("<0.15.0", () => runTest(SOURCE_MAPS_TRANSFORMER)); | 60 withBarbackVersions("<0.15.0", () => runTest(SOURCE_MAPS_TRANSFORMER)); |
| 72 withBarbackVersions(">=0.14.2", () => runTest(SOURCE_SPAN_TRANSFORMER)); | 61 withBarbackVersions(">=0.14.2", () => runTest(SOURCE_SPAN_TRANSFORMER)); |
| 73 } | 62 } |
| 74 | |
| 75 void runTest(String transformerText) { | 63 void runTest(String transformerText) { |
| 76 integration("can log messages", () { | 64 integration("can log messages", () { |
| 77 d.dir(appPath, [ | 65 d.dir(appPath, [d.pubspec({ |
| 78 d.pubspec({ | |
| 79 "name": "myapp", | 66 "name": "myapp", |
| 80 "transformers": ["myapp/src/transformer"] | 67 "transformers": ["myapp/src/transformer"] |
| 81 }), | 68 }), |
| 82 d.dir("lib", [d.dir("src", [ | 69 d.dir("lib", [d.dir("src", [d.file("transformer.dart", transformerText
)])]), |
| 83 d.file("transformer.dart", transformerText) | 70 d.dir("web", [d.file("foo.txt", "foo")])]).create(); |
| 84 ])]), | |
| 85 d.dir("web", [ | |
| 86 d.file("foo.txt", "foo") | |
| 87 ]) | |
| 88 ]).create(); | |
| 89 | |
| 90 createLockFile('myapp', pkg: ['barback']); | 71 createLockFile('myapp', pkg: ['barback']); |
| 91 | |
| 92 var pub = startPub(args: ["build"]); | 72 var pub = startPub(args: ["build"]); |
| 93 pub.stdout.expect(startsWith("Loading source assets...")); | 73 pub.stdout.expect(startsWith("Loading source assets...")); |
| 94 pub.stdout.expect(consumeWhile(matches("Loading .* transformers..."))); | 74 pub.stdout.expect(consumeWhile(matches("Loading .* transformers..."))); |
| 95 pub.stdout.expect(startsWith("Building myapp...")); | 75 pub.stdout.expect(startsWith("Building myapp...")); |
| 96 | |
| 97 pub.stdout.expect(emitsLines(""" | 76 pub.stdout.expect(emitsLines(""" |
| 98 [Rewrite on myapp|web/foo.txt]: | 77 [Rewrite on myapp|web/foo.txt]: |
| 99 info!""")); | 78 info!""")); |
| 100 | |
| 101 pub.stderr.expect(emitsLines(""" | 79 pub.stderr.expect(emitsLines(""" |
| 102 [Rewrite on myapp|web/foo.txt with input myapp|web/foo.foo]: | 80 [Rewrite on myapp|web/foo.txt with input myapp|web/foo.foo]: |
| 103 Warning! | 81 Warning! |
| 104 [Rewrite on myapp|web/foo.txt]:""")); | 82 [Rewrite on myapp|web/foo.txt]:""")); |
| 105 | 83 pub.stderr.expect( |
| 106 // The details of the analyzer's error message change pretty frequently, | 84 allOf( |
| 107 // so instead of validating the entire line, just look for a couple of | 85 [ |
| 108 // salient bits of information. | 86 contains("2"), |
| 109 pub.stderr.expect(allOf([ | 87 contains("1"), |
| 110 contains("2"), // The line number. | 88 contains("http://fake.com/not_real.dart"), |
| 111 contains("1"), // The column number. | 89 contains("ERROR")])); |
| 112 contains("http://fake.com/not_real.dart"), // The library. | |
| 113 contains("ERROR"), // That it's an error. | |
| 114 ])); | |
| 115 | |
| 116 // In barback >=0.15.0, the span will point to the location where the error | |
| 117 // occurred. | |
| 118 pub.stderr.expect(allow(inOrder(["d", "^"]))); | 90 pub.stderr.expect(allow(inOrder(["d", "^"]))); |
| 119 | |
| 120 pub.stderr.expect("Build failed."); | 91 pub.stderr.expect("Build failed."); |
| 121 | |
| 122 pub.shouldExit(exit_codes.DATA); | 92 pub.shouldExit(exit_codes.DATA); |
| 123 }); | 93 }); |
| 124 } | 94 } |
| OLD | NEW |