OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 /// And end-to-end test that generates code and checks that the output matches | 5 /// And end-to-end test that generates code and checks that the output matches |
6 /// the code in `static_test.dart`. Techincally we could run the result in an | 6 /// the code in `static_test.dart`. Techincally we could run the result in an |
7 /// isolate, but instead we decided to split that up in two tests. This test | 7 /// isolate, but instead we decided to split that up in two tests. This test |
8 /// ensures that we generate the code as it was written in static_test, and | 8 /// ensures that we generate the code as it was written in static_test, and |
9 /// separately static_test ensures that the smoke.static library behaves as | 9 /// separately static_test ensures that the smoke.static library behaves as |
10 /// expected. | 10 /// expected. |
11 library smoke.test.codegen.end_to_end_test; | 11 library smoke.test.codegen.end_to_end_test; |
12 | 12 |
13 import 'dart:io'; | 13 import 'dart:io'; |
14 | 14 |
15 import 'package:analyzer/src/generated/element.dart'; | 15 import 'package:analyzer/src/generated/element.dart'; |
16 import 'package:smoke/codegen/generator.dart'; | 16 import 'package:smoke/codegen/generator.dart'; |
17 import 'package:smoke/codegen/recorder.dart'; | 17 import 'package:smoke/codegen/recorder.dart'; |
18 import 'package:unittest/unittest.dart'; | 18 import 'package:unittest/unittest.dart'; |
19 import 'package:path/path.dart' as path; | 19 import 'package:path/path.dart' as path; |
20 | 20 |
21 import 'testing_resolver_utils.dart' show initAnalyzer; | 21 import 'testing_resolver_utils.dart' show initAnalyzer; |
22 | 22 |
23 main(args) { | 23 main(args) { |
24 final updateStaticTest = args.length > 0 && args[0] == '--update_static_test'; | 24 final updateStaticTest = args.length > 0 && args[0] == '--update_static_test'; |
25 | 25 |
26 test('static_test is up to date', () { | 26 test('static_test is up to date', () { |
27 var scriptPath = Platform.script.path; | 27 var scriptPath = Platform.script.path; |
28 var testDir = path.dirname(path.dirname(scriptPath)); | 28 var testDir = path.posix.dirname(path.posix.dirname(scriptPath)); |
29 var commonPath = path.join(testDir, 'common.dart'); | 29 var commonPath = path.posix.join(testDir, 'common.dart'); |
30 var testCode = new File('$commonPath').readAsStringSync(); | 30 var testCode = new File('$commonPath').readAsStringSync(); |
31 var lib = initAnalyzer({'common.dart' : testCode}) | 31 var lib = initAnalyzer({'common.dart' : testCode}) |
32 .libraryFor('common.dart'); | 32 .libraryFor('common.dart'); |
33 var coreLib = lib.visibleLibraries.firstWhere( | 33 var coreLib = lib.visibleLibraries.firstWhere( |
34 (l) => l.displayName == 'dart.core'); | 34 (l) => l.displayName == 'dart.core'); |
35 var generator = new SmokeCodeGenerator(); | 35 var generator = new SmokeCodeGenerator(); |
36 var recorder = new Recorder(generator, resolveImportUrl); | 36 var recorder = new Recorder(generator, resolveImportUrl); |
37 | 37 |
38 // Record all getters and setters we use in the tests. | 38 // Record all getters and setters we use in the tests. |
39 generator.addGetter("i"); | 39 generator.addGetter("i"); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 new QueryOptions(includeInherited: true)); | 98 new QueryOptions(includeInherited: true)); |
99 | 99 |
100 var vars = lib.definingCompilationUnit.topLevelVariables; | 100 var vars = lib.definingCompilationUnit.topLevelVariables; |
101 expect(vars[0].name, 'a1'); | 101 expect(vars[0].name, 'a1'); |
102 expect(vars[1].name, 'a2'); | 102 expect(vars[1].name, 'a2'); |
103 var options = new QueryOptions(includeInherited: true, | 103 var options = new QueryOptions(includeInherited: true, |
104 withAnnotations: [vars[0], vars[1], lib.getType('Annot')]); | 104 withAnnotations: [vars[0], vars[1], lib.getType('Annot')]); |
105 recorder.runQuery(lib.getType('H'), options); | 105 recorder.runQuery(lib.getType('H'), options); |
106 | 106 |
107 var code = _createEntrypoint(generator); | 107 var code = _createEntrypoint(generator); |
108 var staticTestFile = new File(path.join(testDir, 'static_test.dart')); | 108 var staticTestFile = new File(path.posix.join(testDir, 'static_test.dart')); |
109 var existingCode = staticTestFile.readAsStringSync(); | 109 var existingCode = staticTestFile.readAsStringSync(); |
110 if (!updateStaticTest) { | 110 if (!updateStaticTest) { |
111 expect(code, existingCode); | 111 expect(code, existingCode); |
112 } else if (code == existingCode) { | 112 } else if (code == existingCode) { |
113 print('static_test.dart is already up to date'); | 113 print('static_test.dart is already up to date'); |
114 } else { | 114 } else { |
115 staticTestFile.writeAsStringSync(code); | 115 staticTestFile.writeAsStringSync(code); |
116 print('static_test.dart has been updated.'); | 116 print('static_test.dart has been updated.'); |
117 } | 117 } |
118 }); | 118 }); |
(...skipping 19 matching lines...) Expand all Loading... |
138 sb.writeln('}'); | 138 sb.writeln('}'); |
139 return sb.toString(); | 139 return sb.toString(); |
140 } | 140 } |
141 | 141 |
142 | 142 |
143 resolveImportUrl(LibraryElement lib) { | 143 resolveImportUrl(LibraryElement lib) { |
144 if (lib.isDartCore) return 'dart:core'; | 144 if (lib.isDartCore) return 'dart:core'; |
145 if (lib.displayName == 'smoke.test.common') return 'common.dart'; | 145 if (lib.displayName == 'smoke.test.common') return 'common.dart'; |
146 return 'unknown.dart'; | 146 return 'unknown.dart'; |
147 } | 147 } |
OLD | NEW |