Chromium Code Reviews| 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 library trydart.incremental_compilation_update_test; | 5 library trydart.incremental_compilation_update_test; |
| 6 | 6 |
| 7 import 'dart:html'; | 7 import 'dart:html' hide |
| 8 Element; | |
| 8 | 9 |
| 9 import 'dart:async' show | 10 import 'dart:async' show |
| 10 Future; | 11 Future; |
| 11 | 12 |
| 12 import 'package:async_helper/async_helper.dart' show | 13 import 'package:async_helper/async_helper.dart' show |
| 13 asyncTest; | 14 asyncTest; |
| 14 | 15 |
| 16 import 'package:expect/expect.dart' show | |
| 17 Expect; | |
| 18 | |
| 15 import 'package:try/src/interaction_manager.dart' show | 19 import 'package:try/src/interaction_manager.dart' show |
| 16 splitLines; | 20 splitLines; |
| 17 | 21 |
| 22 import 'package:try/poi/scope_information_visitor.dart' show | |
| 23 ScopeInformationVisitor; | |
| 24 | |
| 18 import 'sandbox.dart' show | 25 import 'sandbox.dart' show |
| 19 appendIFrame, | 26 appendIFrame, |
| 20 listener; | 27 listener; |
| 21 | 28 |
| 22 import 'web_compiler_test_case.dart' show | 29 import 'web_compiler_test_case.dart' show |
| 23 WebCompilerTestCase, | 30 WebCompilerTestCase, |
| 24 WebInputProvider; | 31 WebInputProvider; |
| 25 | 32 |
| 33 import '../poi/compiler_test_case.dart' show | |
| 34 CompilerTestCase; | |
| 35 | |
| 36 import 'package:compiler/src/elements/elements.dart' show | |
| 37 Element, | |
| 38 LibraryElement; | |
| 39 | |
| 40 import 'package:compiler/src/dart2jslib.dart' show | |
| 41 Compiler; | |
| 42 | |
| 26 import 'program_result.dart'; | 43 import 'program_result.dart'; |
| 27 | 44 |
| 28 const int TIMEOUT = 100; | 45 const int TIMEOUT = 100; |
| 29 | 46 |
| 30 const List<List<ProgramResult>> tests = const <List<ProgramResult>>[ | 47 const List<List<ProgramResult>> tests = const <List<ProgramResult>>[ |
| 31 // Basic hello-world test. | 48 // Basic hello-world test. |
| 32 const <ProgramResult>[ | 49 const <ProgramResult>[ |
| 33 const ProgramResult( | 50 const ProgramResult( |
| 34 "main() { print('Hello, World!'); }", | 51 "main() { print('Hello, World!'); }", |
| 35 const <String> ['Hello, World!']), | 52 const <String> ['Hello, World!']), |
| (...skipping 1067 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1103 test.incrementalCompiler.inputProvider; | 1120 test.incrementalCompiler.inputProvider; |
| 1104 Uri uri = test.scriptUri.resolve('?v${version++}'); | 1121 Uri uri = test.scriptUri.resolve('?v${version++}'); |
| 1105 inputProvider.cachedSources[uri] = new Future.value(program.code); | 1122 inputProvider.cachedSources[uri] = new Future.value(program.code); |
| 1106 Future future = test.incrementalCompiler.compileUpdates( | 1123 Future future = test.incrementalCompiler.compileUpdates( |
| 1107 {test.scriptUri: uri}, logVerbose: logger, logTime: logger); | 1124 {test.scriptUri: uri}, logVerbose: logger, logTime: logger); |
| 1108 return future.then((String update) { | 1125 return future.then((String update) { |
| 1109 print({'update': update}); | 1126 print({'update': update}); |
| 1110 iframe.contentWindow.postMessage(['apply-update', update], '*'); | 1127 iframe.contentWindow.postMessage(['apply-update', update], '*'); |
| 1111 | 1128 |
| 1112 return listener.expect( | 1129 return listener.expect( |
| 1113 program.messagesWith('iframe-dart-updated-main-done')); | 1130 program.messagesWith('iframe-dart-updated-main-done')) |
| 1131 .then((_) { | |
| 1132 return new SerializeScopeTestCase( | |
| 1133 program.code, test.incrementalCompiler.mainApp, | |
| 1134 test.incrementalCompiler.compiler).run(); | |
| 1135 }); | |
| 1114 }); | 1136 }); |
| 1115 }); | 1137 }); |
| 1116 }); | 1138 }); |
| 1117 }); | 1139 }); |
| 1118 }).then((_) { | 1140 }).then((_) { |
| 1119 status.style.color = 'limegreen'; | 1141 status.style.color = 'limegreen'; |
| 1120 | 1142 |
| 1121 // Remove the iframe to work around a bug in test.dart. | 1143 // Remove the iframe to work around a bug in test.dart. |
| 1122 iframe.remove(); | 1144 iframe.remove(); |
| 1123 }); | 1145 }); |
| 1124 } | 1146 } |
| 1125 | 1147 |
| 1148 class SerializeScopeTestCase extends CompilerTestCase { | |
| 1149 final String scopeInfo; | |
| 1150 | |
| 1151 SerializeScopeTestCase( | |
| 1152 String source, | |
| 1153 LibraryElement library, | |
| 1154 Compiler compiler) | |
| 1155 : scopeInfo = computeScopeInfo(compiler, library), | |
| 1156 super(source, '${library.canonicalUri}'); | |
| 1157 | |
| 1158 Future run() => mainApp.then(checkScopes); | |
|
Johnni Winther
2014/11/24 10:30:46
Maybe `mainApp` should be a function `compileMainA
ahe
2014/11/25 14:19:22
Then it should be something like "loadMainApp", as
Johnni Winther
2014/11/25 14:22:21
I found it difficult to reason about the control f
ahe
2014/11/25 14:30:55
Since you found it difficult to reason about the c
ahe
2014/11/25 15:15:36
Follow up in https://codereview.chromium.org/75704
| |
| 1159 | |
| 1160 void checkScopes(LibraryElement library) { | |
| 1161 Expect.stringEquals(computeScopeInfo(compiler, library), scopeInfo); | |
| 1162 } | |
| 1163 | |
| 1164 static String computeScopeInfo(Compiler compiler, LibraryElement library) { | |
| 1165 ScopeInformationVisitor visitor = | |
| 1166 new ScopeInformationVisitor(compiler, library, 0); | |
| 1167 | |
| 1168 visitor.ignoreImports = true; | |
| 1169 visitor.indented.write('[\n'); | |
| 1170 visitor.indentationLevel++; | |
| 1171 visitor.indented; | |
| 1172 library.accept(visitor); | |
| 1173 library.forEachLocalMember((Element member) { | |
| 1174 if (member.isClass) { | |
| 1175 visitor.buffer.write(',\n'); | |
| 1176 visitor.indented; | |
| 1177 member.accept(visitor); | |
| 1178 } | |
| 1179 }); | |
| 1180 visitor.buffer.write('\n'); | |
| 1181 visitor.indentationLevel--; | |
| 1182 visitor.indented.write(']'); | |
| 1183 return '${visitor.buffer}'; | |
| 1184 } | |
| 1185 } | |
| 1186 | |
| 1126 void logger(x) { | 1187 void logger(x) { |
| 1127 print(x); | 1188 print(x); |
| 1128 bool isCheckedMode = false; | 1189 bool isCheckedMode = false; |
| 1129 assert(isCheckedMode = true); | 1190 assert(isCheckedMode = true); |
| 1130 int timeout = isCheckedMode ? TIMEOUT * 2 : TIMEOUT; | 1191 int timeout = isCheckedMode ? TIMEOUT * 2 : TIMEOUT; |
| 1131 if (listener.elapsed > timeout) { | 1192 if (listener.elapsed > timeout) { |
| 1132 throw 'Test timed out.'; | 1193 throw 'Test timed out.'; |
| 1133 } | 1194 } |
| 1134 } | 1195 } |
| 1135 | 1196 |
| 1136 Element numberedLines(String code) { | 1197 DivElement numberedLines(String code) { |
| 1137 DivElement result = new DivElement(); | 1198 DivElement result = new DivElement(); |
| 1138 result.classes.add("output"); | 1199 result.classes.add("output"); |
| 1139 | 1200 |
| 1140 for (String text in splitLines(code)) { | 1201 for (String text in splitLines(code)) { |
| 1141 Element line = new PreElement() | 1202 PreElement line = new PreElement() |
| 1142 ..appendText(text.trimRight()) | 1203 ..appendText(text.trimRight()) |
| 1143 ..classes.add("line"); | 1204 ..classes.add("line"); |
| 1144 result.append(line); | 1205 result.append(line); |
| 1145 } | 1206 } |
| 1146 | 1207 |
| 1147 return result; | 1208 return result; |
| 1148 } | 1209 } |
| 1149 | 1210 |
| 1150 | 1211 |
| 1151 StyleElement lineNumberStyle() { | 1212 StyleElement lineNumberStyle() { |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 1173 position: absolute; | 1234 position: absolute; |
| 1174 left: 0px; | 1235 left: 0px; |
| 1175 width: 3em; | 1236 width: 3em; |
| 1176 text-align: right; | 1237 text-align: right; |
| 1177 background-color: lightgoldenrodyellow; | 1238 background-color: lightgoldenrodyellow; |
| 1178 } | 1239 } |
| 1179 '''); | 1240 '''); |
| 1180 style.type = 'text/css'; | 1241 style.type = 'text/css'; |
| 1181 return style; | 1242 return style; |
| 1182 } | 1243 } |
| OLD | NEW |