OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS 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 polymer.test.build.all_phases_test; |
| 6 |
| 7 import 'package:code_transformers/tests.dart' show testingDartSdkDirectory; |
| 8 import 'package:polymer/src/build/common.dart'; |
| 9 import 'package:polymer/src/build/polymer_smoke_generator.dart' |
| 10 show MAIN_HEADER; |
| 11 import 'package:polymer/transformer.dart'; |
| 12 import 'package:smoke/codegen/generator.dart' show DEFAULT_IMPORTS; |
| 13 import 'package:unittest/compact_vm_config.dart'; |
| 14 |
| 15 import 'common.dart'; |
| 16 |
| 17 void main() { |
| 18 useCompactVMConfiguration(); |
| 19 var phases = createDeployPhases(new TransformOptions(), |
| 20 sdkDir: testingDartSdkDirectory); |
| 21 |
| 22 testPhases('observable changes', phases, { |
| 23 'a|web/test.dart': _sampleInput('A', 'foo'), |
| 24 'a|web/test2.dart': _sampleOutput('B', 'bar'), |
| 25 }, { |
| 26 'a|web/test.dart': _sampleOutput('A', 'foo'), |
| 27 'a|web/test2.dart': _sampleOutput('B', 'bar'), |
| 28 }); |
| 29 |
| 30 testPhases('single script', phases, { |
| 31 'a|web/test.html': '<!DOCTYPE html><html><head>' |
| 32 '<link rel="import" href="packages/polymer/polymer.html">' |
| 33 '<script type="application/dart" src="a.dart"></script>', |
| 34 'a|web/a.dart': _sampleInput('A', 'foo'), |
| 35 }, { |
| 36 'a|web/test.html': '<!DOCTYPE html><html><head>' |
| 37 '$COMPATIBILITY_JS_TAGS' |
| 38 '</head><body><div hidden="">' |
| 39 '<script src="test.html.polymer.bootstrap.dart.js" async=""></script>' |
| 40 '</div>' |
| 41 '</body></html>', |
| 42 'a|web/test.html.polymer.bootstrap.dart': '''$MAIN_HEADER |
| 43 import 'test.web_components.bootstrap.dart' as i0; |
| 44 ${DEFAULT_IMPORTS.join('\n')} |
| 45 import 'package:polymer/polymer.dart' as smoke_0; |
| 46 import 'a.dart' as smoke_1; |
| 47 |
| 48 main() { |
| 49 useGeneratedCode(new StaticConfiguration( |
| 50 checkedMode: false, |
| 51 parents: { |
| 52 smoke_1.XA: smoke_0.PolymerElement, |
| 53 }, |
| 54 declarations: { |
| 55 smoke_1.XA: {}, |
| 56 smoke_0.PolymerElement: {}, |
| 57 })); |
| 58 configureForDeployment(); |
| 59 return i0.main(); |
| 60 } |
| 61 '''.replaceAll('\n ', '\n'), |
| 62 'a|web/test.web_components.bootstrap.dart': ''' |
| 63 import 'package:initialize/src/static_loader.dart'; |
| 64 import 'package:initialize/initialize.dart'; |
| 65 import 'test.bootstrap.dart' as i0; |
| 66 import 'a.dart' as i1; |
| 67 import 'package:polymer/polymer.dart' as i2; |
| 68 |
| 69 main() { |
| 70 initializers.addAll([new InitEntry(const i2.CustomTag('x-A'), i1.XA)
,]); |
| 71 |
| 72 return i0.main(); |
| 73 } |
| 74 '''.replaceAll(' ', ''), |
| 75 'a|web/test.bootstrap.dart': ''' |
| 76 library a.web.test_bootstrap_dart; |
| 77 |
| 78 import 'a.dart' as i0; |
| 79 |
| 80 main() => i0.main(); |
| 81 '''.replaceAll(' ', ''), |
| 82 }, []); |
| 83 |
| 84 testPhases('single script in subfolder', phases, { |
| 85 'a|web/test.html': '<!DOCTYPE html><html><head>' |
| 86 '<link rel="import" href="packages/polymer/polymer.html">' |
| 87 '<script type="application/dart" src="foo/a.dart"></script>', |
| 88 'a|web/foo/a.dart': _sampleInput('A', 'foo'), |
| 89 }, { |
| 90 'a|web/test.html': '<!DOCTYPE html><html><head>' |
| 91 '$COMPATIBILITY_JS_TAGS' |
| 92 '</head><body><div hidden="">' |
| 93 '<script src="test.html.polymer.bootstrap.dart.js" async=""></script>' |
| 94 '</div>' |
| 95 '</body></html>', |
| 96 'a|web/test.html.polymer.bootstrap.dart': '''$MAIN_HEADER |
| 97 import 'test.web_components.bootstrap.dart' as i0; |
| 98 ${DEFAULT_IMPORTS.join('\n')} |
| 99 import 'package:polymer/polymer.dart' as smoke_0; |
| 100 import 'foo/a.dart' as smoke_1; |
| 101 |
| 102 main() { |
| 103 useGeneratedCode(new StaticConfiguration( |
| 104 checkedMode: false, |
| 105 parents: { |
| 106 smoke_1.XA: smoke_0.PolymerElement, |
| 107 }, |
| 108 declarations: { |
| 109 smoke_1.XA: {}, |
| 110 smoke_0.PolymerElement: {}, |
| 111 })); |
| 112 configureForDeployment(); |
| 113 return i0.main(); |
| 114 } |
| 115 '''.replaceAll('\n ', '\n'), |
| 116 'a|web/test.web_components.bootstrap.dart': ''' |
| 117 import 'package:initialize/src/static_loader.dart'; |
| 118 import 'package:initialize/initialize.dart'; |
| 119 import 'test.bootstrap.dart' as i0; |
| 120 import 'foo/a.dart' as i1; |
| 121 import 'package:polymer/polymer.dart' as i2; |
| 122 |
| 123 main() { |
| 124 initializers.addAll([new InitEntry(const i2.CustomTag('x-A'), i1.XA),]
); |
| 125 |
| 126 return i0.main(); |
| 127 } |
| 128 '''.replaceAll(' ', ''), |
| 129 'a|web/test.bootstrap.dart': ''' |
| 130 library a.web.test_bootstrap_dart; |
| 131 |
| 132 import 'foo/a.dart' as i0; |
| 133 |
| 134 main() => i0.main(); |
| 135 '''.replaceAll(' ', ''), |
| 136 }, []); |
| 137 |
| 138 testPhases('single inline script', phases, { |
| 139 'a|web/test.html': '<!DOCTYPE html><html><head>' |
| 140 '<link rel="import" href="packages/polymer/polymer.html">' |
| 141 '<script type="application/dart">' |
| 142 '${_sampleInput("B", "bar")}</script>', |
| 143 }, { |
| 144 'a|web/test.html': '<!DOCTYPE html><html><head>' |
| 145 '$COMPATIBILITY_JS_TAGS' |
| 146 '</head><body><div hidden="">' |
| 147 '<script src="test.html.polymer.bootstrap.dart.js" async=""></script>' |
| 148 '</div>' |
| 149 '</body></html>', |
| 150 'a|web/test.html.polymer.bootstrap.dart': '''$MAIN_HEADER |
| 151 import 'test.web_components.bootstrap.dart' as i0; |
| 152 ${DEFAULT_IMPORTS.join('\n')} |
| 153 import 'package:polymer/polymer.dart' as smoke_0; |
| 154 import 'test.html.0.dart' as smoke_1; |
| 155 |
| 156 main() { |
| 157 useGeneratedCode(new StaticConfiguration( |
| 158 checkedMode: false, |
| 159 parents: { |
| 160 smoke_1.XB: smoke_0.PolymerElement, |
| 161 }, |
| 162 declarations: { |
| 163 smoke_0.PolymerElement: {}, |
| 164 smoke_1.XB: {}, |
| 165 })); |
| 166 configureForDeployment(); |
| 167 return i0.main(); |
| 168 } |
| 169 '''.replaceAll('\n ', '\n'), |
| 170 'a|web/test.web_components.bootstrap.dart': ''' |
| 171 import 'package:initialize/src/static_loader.dart'; |
| 172 import 'package:initialize/initialize.dart'; |
| 173 import 'test.bootstrap.dart' as i0; |
| 174 import 'test.html.0.dart' as i1; |
| 175 import 'package:polymer/polymer.dart' as i2; |
| 176 |
| 177 main() { |
| 178 initializers.addAll([new InitEntry(const i2.CustomTag('x-B'), i1.XB)
,]); |
| 179 |
| 180 return i0.main(); |
| 181 } |
| 182 '''.replaceAll(' ', ''), |
| 183 'a|web/test.bootstrap.dart': ''' |
| 184 library a.web.test_bootstrap_dart; |
| 185 |
| 186 import 'test.html.0.dart' as i0; |
| 187 |
| 188 main() => i0.main(); |
| 189 '''.replaceAll(' ', ''), |
| 190 'a|web/test.html.0.dart': _sampleOutput("B", "bar"), |
| 191 }, []); |
| 192 |
| 193 testPhases('with imports', phases, { |
| 194 'a|web/index.html': '<!DOCTYPE html><html><head>' |
| 195 '<link rel="import" href="packages/polymer/polymer.html">' |
| 196 '<link rel="import" href="packages/a/test2.html">' |
| 197 '</head><body>' |
| 198 '<script type="application/dart" src="b.dart"></script>', |
| 199 'a|web/b.dart': _sampleInput('B', 'bar'), |
| 200 'a|lib/test2.html': '<!DOCTYPE html><html><head>' |
| 201 '<link rel="import" href="../../packages/polymer/polymer.html">' |
| 202 '</head><body>' |
| 203 '<polymer-element name="x-a">1' |
| 204 '<script type="application/dart">' |
| 205 '${_sampleInput("A", "foo")}</script>' |
| 206 '</polymer-element></html>', |
| 207 }, { |
| 208 'a|web/index.html': '<!DOCTYPE html><html><head>' |
| 209 '$COMPATIBILITY_JS_TAGS' |
| 210 '</head><body>' |
| 211 '<div hidden="">' |
| 212 '<polymer-element name="x-a">1</polymer-element>' |
| 213 '</div>' |
| 214 '<script src="index.html.polymer.bootstrap.dart.js" async=""></script>' |
| 215 '</body></html>', |
| 216 'a|web/index.html.polymer.bootstrap.dart': '''$MAIN_HEADER |
| 217 import 'index.web_components.bootstrap.dart' as i0; |
| 218 ${DEFAULT_IMPORTS.join('\n')} |
| 219 import 'package:polymer/polymer.dart' as smoke_0; |
| 220 import 'index.html.0.dart' as smoke_1; |
| 221 import 'b.dart' as smoke_2; |
| 222 |
| 223 main() { |
| 224 useGeneratedCode(new StaticConfiguration( |
| 225 checkedMode: false, |
| 226 parents: { |
| 227 smoke_2.XB: smoke_0.PolymerElement, |
| 228 smoke_1.XA: smoke_0.PolymerElement, |
| 229 }, |
| 230 declarations: { |
| 231 smoke_2.XB: {}, |
| 232 smoke_1.XA: {}, |
| 233 smoke_0.PolymerElement: {}, |
| 234 })); |
| 235 configureForDeployment(); |
| 236 return i0.main(); |
| 237 } |
| 238 '''.replaceAll('\n ', '\n'), |
| 239 'a|web/index.web_components.bootstrap.dart': ''' |
| 240 import 'package:initialize/src/static_loader.dart'; |
| 241 import 'package:initialize/initialize.dart'; |
| 242 import 'index.bootstrap.dart' as i0; |
| 243 import 'index.html.0.dart' as i1; |
| 244 import 'package:polymer/polymer.dart' as i2; |
| 245 import 'b.dart' as i3; |
| 246 |
| 247 main() { |
| 248 initializers.addAll([ |
| 249 new InitEntry(const i2.CustomTag('x-A'), i1.XA), |
| 250 new InitEntry(const i2.CustomTag('x-B'), i3.XB), |
| 251 ]); |
| 252 |
| 253 return i0.main(); |
| 254 } |
| 255 '''.replaceAll(' ', ''), |
| 256 'a|web/index.bootstrap.dart': ''' |
| 257 library a.web.index_bootstrap_dart; |
| 258 |
| 259 import 'index.html.0.dart' as i0; |
| 260 import 'b.dart' as i1; |
| 261 |
| 262 main() => i1.main(); |
| 263 '''.replaceAll(' ', ''), |
| 264 'a|web/index.html.0.dart': _sampleOutput("A", "foo"), |
| 265 }, []); |
| 266 |
| 267 testPhases('test compatibility', phases, { |
| 268 'a|test/test.html': '<!DOCTYPE html><html><head>' |
| 269 '<link rel="x-dart-test" href="a.dart">' |
| 270 '<script src="packages/test/dart.js"></script>', |
| 271 'a|test/a.dart': _sampleInput('A', 'foo'), |
| 272 }, { |
| 273 'a|test/test.html': '<!DOCTYPE html><html><head>' |
| 274 '$COMPATIBILITY_JS_TAGS' |
| 275 '<link rel="x-dart-test" href="test.html.polymer.bootstrap.dart">' |
| 276 '<script src="packages/test/dart.js"></script>' |
| 277 '</head><body></body></html>', |
| 278 }, []); |
| 279 } |
| 280 |
| 281 String _sampleInput(String className, String fieldName) => ''' |
| 282 library ${className}_$fieldName; |
| 283 import 'package:observe/observe.dart'; |
| 284 import 'package:polymer/polymer.dart'; |
| 285 |
| 286 class $className extends Observable { |
| 287 @observable int $fieldName; |
| 288 $className(this.$fieldName); |
| 289 } |
| 290 |
| 291 @CustomTag('x-$className') |
| 292 class X${className} extends PolymerElement { |
| 293 X${className}.created() : super.created(); |
| 294 } |
| 295 @initMethod m_$fieldName() {} |
| 296 main() {} |
| 297 '''; |
| 298 |
| 299 String _sampleOutput(String className, String fieldName) { |
| 300 var fieldReplacement = '@reflectable @observable ' |
| 301 'int get $fieldName => __\$$fieldName; ' |
| 302 'int __\$$fieldName; ' |
| 303 '@reflectable set $fieldName(int value) { ' |
| 304 '__\$$fieldName = notifyPropertyChange(#$fieldName, ' |
| 305 '__\$$fieldName, value); }'; |
| 306 return ''' |
| 307 library ${className}_$fieldName; |
| 308 import 'package:observe/observe.dart'; |
| 309 import 'package:polymer/polymer.dart'; |
| 310 |
| 311 class $className extends ChangeNotifier { |
| 312 $fieldReplacement |
| 313 $className($fieldName) : __\$$fieldName = $fieldName; |
| 314 } |
| 315 |
| 316 @CustomTag('x-$className') |
| 317 class X${className} extends PolymerElement { |
| 318 X${className}.created() : super.created(); |
| 319 } |
| 320 @initMethod m_$fieldName() {} |
| 321 main() {} |
| 322 '''; |
| 323 } |
OLD | NEW |