Index: packages/polymer/test/computed_properties_test.dart |
diff --git a/packages/polymer/test/computed_properties_test.dart b/packages/polymer/test/computed_properties_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4c271dfb0875677a5d3693aa93824b82dc049b03 |
--- /dev/null |
+++ b/packages/polymer/test/computed_properties_test.dart |
@@ -0,0 +1,84 @@ |
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+import 'dart:async'; |
+import 'dart:html'; |
+import 'package:unittest/unittest.dart'; |
+import 'package:unittest/html_config.dart'; |
+import 'package:polymer/polymer.dart'; |
+ |
+// Test ported from: |
+// https://github.com/Polymer/polymer-dev/blob/0.3.4/test/html/computedProperties.html |
+@CustomTag('x-foo') |
+class XFoo extends PolymerElement { |
+ XFoo.created() : super.created(); |
+ |
+ // Left like this to illustrate the old-style @published pattern next to the |
+ // new style below. |
+ @published int count; |
+ |
+ @published |
+ String get foo => readValue(#foo); |
+ set foo(String v) => writeValue(#foo, v); |
+ |
+ @published |
+ String get bar => readValue(#bar); |
+ set bar(String v) => writeValue(#bar, v); |
+ |
+ @ComputedProperty('repeat(fooBar, count)') |
+ String get fooBarCounted => readValue(#fooBarCounted); |
+ |
+ @ComputedProperty('foo + "-" + bar') |
+ String get fooBar => readValue(#fooBar); |
+ |
+ @ComputedProperty('this.foo') |
+ String get foo2 => readValue(#foo2); |
+ set foo2(v) => writeValue(#foo2, v); |
+ |
+ @ComputedProperty('bar + ""') |
+ String get bar2 => readValue(#bar2); |
+ set bar2(v) => writeValue(#bar2, v); |
+ |
+ repeat(String s, int count) { |
+ var sb = new StringBuffer(); |
+ for (var i = 0; i < count; i++) { |
+ if (i > 0) sb.write(' '); |
+ sb.write(s); |
+ sb.write('($i)'); |
+ } |
+ return sb.toString(); |
+ } |
+} |
+ |
+main() => initPolymer().then((zone) => zone.run(() { |
+ useHtmlConfiguration(); |
+ |
+ setUp(() => Polymer.onReady); |
+ |
+ test('computed properties basic', () { |
+ var xFoo = querySelector('x-foo'); |
+ var html = xFoo.shadowRoot.innerHtml; |
+ expect(html, 'mee-too:mee-too(0) mee-too(1) mee-too(2)'); |
+ expect(xFoo.fooBar, 'mee-too'); |
+ }); |
+ |
+ // Dart note: the following tests were not in the original JS test. |
+ test('computed properties can be updated', () { |
+ var xFoo = querySelector('x-foo'); |
+ expect(xFoo.foo, 'mee'); |
+ expect(xFoo.foo2, 'mee'); |
+ xFoo.foo2 = 'hi'; |
+ expect(xFoo.foo, 'hi'); |
+ expect(xFoo.foo2, 'hi'); |
+ }); |
+ |
+ test('only assignable expressions can be updated', () { |
+ var xFoo = querySelector('x-foo'); |
+ expect(xFoo.bar, 'too'); |
+ expect(xFoo.bar2, 'too'); |
+ xFoo.bar2 = 'hi'; |
+ expect(xFoo.bar, 'too'); |
+ expect(xFoo.bar2, 'too'); |
+ }); |
+})); |