blob: 18fecdd2f80c1bbb2f75182bff68e489abbd2d7c [file] [log] [blame]
// 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);
});
}