|  | // Copyright (c) 2011, 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. | 
|  |  | 
|  | library ShadowDOMTest; | 
|  |  | 
|  | import 'package:unittest/unittest.dart'; | 
|  | import 'package:unittest/html_individual_config.dart'; | 
|  | import 'dart:html'; | 
|  |  | 
|  | main() { | 
|  | useHtmlIndividualConfiguration(); | 
|  |  | 
|  | group('supported', () { | 
|  | test('supported', () { | 
|  | expect(ShadowRoot.supported, true); | 
|  | }); | 
|  | }); | 
|  |  | 
|  | group('ShadowDOM_tests', () { | 
|  | var div1, div2, shadowRoot, paragraph1, paragraph2; | 
|  |  | 
|  | init() { | 
|  | paragraph1 = new ParagraphElement(); | 
|  | paragraph2 = new ParagraphElement(); | 
|  | [paragraph1, paragraph2].forEach((p) { | 
|  | p.classes.add('foo'); | 
|  | }); | 
|  | div1 = new DivElement(); | 
|  | div2 = new DivElement(); | 
|  | div1.classes.add('foo'); | 
|  | shadowRoot = div2.createShadowRoot(); | 
|  | shadowRoot.append(paragraph1); | 
|  | shadowRoot.append(new ContentElement()); | 
|  | div2.append(paragraph2); | 
|  | document.body.append(div1); | 
|  | document.body.append(div2); | 
|  | } | 
|  |  | 
|  | var expectation = ShadowRoot.supported ? returnsNormally : throws; | 
|  |  | 
|  | test("Shadowed nodes aren't visible to queries from outside ShadowDOM", () { | 
|  | expect(() { | 
|  | init(); | 
|  |  | 
|  | expect(queryAll('.foo'), equals([div1, paragraph2])); | 
|  | }, expectation); | 
|  | }); | 
|  |  | 
|  | test('Parent node of a shadow root must be null.', () { | 
|  | expect(() { | 
|  | init(); | 
|  |  | 
|  | expect(shadowRoot.parent, isNull); | 
|  | }, expectation); | 
|  | }); | 
|  |  | 
|  | // TODO(samhop): test that <content> and <content select="foo"> and | 
|  | // <shadow> | 
|  | // work properly. This is blocked on having a good way to do browser | 
|  | // rendering tests. | 
|  |  | 
|  | test('Querying in shadowed fragment respects the shadow boundary.', () { | 
|  | expect(() { | 
|  | init(); | 
|  |  | 
|  | expect(shadowRoot.queryAll('.foo'), equals([paragraph1])); | 
|  | }, expectation); | 
|  | }); | 
|  |  | 
|  | if (ShadowRoot.supported) { | 
|  | test('Shadowroot contents are distributed', () { | 
|  | var div = new DivElement(); | 
|  |  | 
|  | var box1 = new DivElement()..classes.add('foo'); | 
|  | div.append(box1); | 
|  |  | 
|  | var box2 = new DivElement(); | 
|  | div.append(box2); | 
|  |  | 
|  | var sRoot = div.createShadowRoot(); | 
|  | var content1 = new ContentElement()..select = ".foo"; | 
|  | sRoot.append(content1); | 
|  |  | 
|  | var content2 = new ContentElement(); | 
|  | sRoot.append(content2); | 
|  |  | 
|  | expect(content1.getDistributedNodes(), [box1]); | 
|  | expect(content2.getDistributedNodes(), [box2]); | 
|  | }); | 
|  | } | 
|  | }); | 
|  | } |