| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'package:test/bootstrap/browser.dart'; |
| import 'package:test/test.dart'; |
| import 'package:ui/src/engine.dart'; |
| |
| void main() { |
| internalBootstrapBrowserTest(() => testMain); |
| } |
| |
| void testMain() { |
| final DomElement hostElement = createDomHTMLDivElement(); |
| late DomManager domManager; |
| late ResourceManager resourceManager; |
| |
| setUp(() { |
| domManager = DomManager(devicePixelRatio: 3); |
| hostElement.appendChild(domManager.rootElement); |
| resourceManager = ResourceManager(domManager); |
| }); |
| |
| tearDown(() { |
| hostElement.clearChildren(); |
| }); |
| |
| test('prepends resources host as sibling to root element (webkit)', () { |
| debugBrowserEngineOverride = BrowserEngine.webkit; |
| |
| // Resource host hasn't been inserted yet. |
| expect( |
| hostElement.children.map((DomElement e) => e.tagName.toLowerCase()), |
| isNot(contains(ResourceManager.resourcesHostTagName.toLowerCase())), |
| ); |
| |
| final List<DomElement> resources = <DomElement>[ |
| createDomHTMLDivElement()..setAttribute('test-resource', 'r1'), |
| createDomHTMLDivElement()..setAttribute('test-resource', 'r2'), |
| createDomHTMLDivElement()..setAttribute('test-resource', 'r3'), |
| ]; |
| resources.forEach(resourceManager.addResource); |
| |
| final DomElement resourcesHost = hostElement.firstElementChild!; |
| expect( |
| resourcesHost.tagName.toLowerCase(), |
| ResourceManager.resourcesHostTagName.toLowerCase(), |
| ); |
| // Make sure the resources were correctly inserted into the host. |
| expect(resourcesHost.children, resources); |
| |
| debugBrowserEngineOverride = null; |
| }); |
| |
| test('prepends resources host inside the shadow root (non-webkit)', () { |
| debugBrowserEngineOverride = BrowserEngine.blink; |
| |
| // Resource host hasn't been inserted yet. |
| expect( |
| hostElement.children.map((DomElement e) => e.tagName.toLowerCase()), |
| isNot(contains(ResourceManager.resourcesHostTagName.toLowerCase())), |
| ); |
| |
| final List<DomElement> resources = <DomElement>[ |
| createDomHTMLDivElement()..setAttribute('test-resource', 'r1'), |
| createDomHTMLDivElement()..setAttribute('test-resource', 'r2'), |
| createDomHTMLDivElement()..setAttribute('test-resource', 'r3'), |
| ]; |
| resources.forEach(resourceManager.addResource); |
| |
| final DomElement resourcesHost = domManager.renderingHost.firstElementChild!; |
| expect( |
| resourcesHost.tagName.toLowerCase(), |
| ResourceManager.resourcesHostTagName.toLowerCase(), |
| ); |
| // Make sure the resources were correctly inserted into the host. |
| expect(resourcesHost.children, resources); |
| |
| debugBrowserEngineOverride = null; |
| }); |
| |
| test('can remove resource', () { |
| final DomHTMLDivElement resource = createDomHTMLDivElement(); |
| resourceManager.addResource(resource); |
| final DomElement? resourceRoot = resource.parent; |
| expect(resourceRoot, isNotNull); |
| expect(resourceRoot!.childNodes.length, 1); |
| resourceManager.removeResource(resource); |
| expect(resourceRoot.childNodes.length, 0); |
| }); |
| } |