Index: packages/polymer/test/inject_bound_html_test.dart |
diff --git a/packages/polymer/test/inject_bound_html_test.dart b/packages/polymer/test/inject_bound_html_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2f8910e5a87143e852e55f84bd049e300a419098 |
--- /dev/null |
+++ b/packages/polymer/test/inject_bound_html_test.dart |
@@ -0,0 +1,76 @@ |
+// 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'; |
+ |
+@CustomTag('x-foo') |
+class XFoo extends PolymerElement { |
+ @observable String bar = "baz"; |
+ |
+ XFoo.created() : super.created(); |
+ |
+ @ComputedProperty('bar') |
+ String get ignore => readValue(#bar); |
+} |
+ |
+class NullTreeSanitizer implements NodeTreeSanitizer { |
+ const NullTreeSanitizer(); |
+ void sanitizeTree(Node node) {} |
+} |
+final nullSanitizer = const NullTreeSanitizer(); |
+ |
+class NullNodeValidator implements NodeValidator { |
+ const NullNodeValidator(); |
+ bool allowsAttribute(Element e, String a, String v) => true; |
+ bool allowsElement(Element element) => true; |
+} |
+final nullValidator = const NullNodeValidator(); |
+ |
+main() => initPolymer().then((zone) => zone.run(() { |
+ useHtmlConfiguration(); |
+ |
+ XFoo xFoo; |
+ DivElement injectDiv; |
+ |
+ setUp(() => Polymer.onReady.then((_) { |
+ xFoo = querySelector('x-foo'); |
+ injectDiv = xFoo.$['inject']; |
+ })); |
+ |
+ tearDown(() { |
+ injectDiv.innerHtml = ''; |
+ }); |
+ |
+ test('can inject bound html fragments', () { |
+ xFoo.injectBoundHtml('<span>{{bar}}</span>', element: injectDiv); |
+ expect(injectDiv.innerHtml, '<span>baz</span>'); |
+ |
+ xFoo.bar = 'bat'; |
+ return new Future(() {}).then((_) { |
+ expect(injectDiv.innerHtml, '<span>bat</span>'); |
+ }); |
+ }); |
+ |
+ test('custom sanitizer and validator', () { |
+ var html = '<span style="color: black;"></span>'; |
+ var sanitizedHtml = '<span></span>'; |
+ |
+ // Expect it to sanitize by default. |
+ xFoo.injectBoundHtml(html, element: injectDiv); |
+ expect(injectDiv.innerHtml, sanitizedHtml); |
+ |
+ // Don't sanitize if we give it a dummy validator |
+ xFoo.injectBoundHtml(html, element: injectDiv, validator: nullValidator); |
+ expect(injectDiv.innerHtml, html); |
+ |
+ // Don't sanitize if we give it a dummy sanitizer |
+ xFoo.injectBoundHtml(html, |
+ element: injectDiv, treeSanitizer: nullSanitizer); |
+ expect(injectDiv.innerHtml, html); |
+ }); |
+})); |