blob: 7525b571d9accf8d72cbaac570c17041ab6ba695 [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.
@TestOn('browser')
library;
import 'package:test/bootstrap/browser.dart';
import 'package:test/test.dart';
import 'package:ui/src/engine/dom.dart';
import 'package:ui/src/engine/view_embedder/hot_restart_cache_handler.dart';
void main() {
internalBootstrapBrowserTest(() => doTests);
}
void doTests() {
group('Constructor', () {
test('Creates a cache in the JS environment', () async {
final HotRestartCacheHandler cache = HotRestartCacheHandler();
expect(cache, isNotNull);
final List<Object?>? domCache = hotRestartStore;
expect(domCache, isNotNull);
expect(domCache, isEmpty);
});
});
group('registerElement', () {
HotRestartCacheHandler? cache;
setUp(() {
cache = HotRestartCacheHandler();
});
test('Registers an element in the DOM cache', () async {
final DomElement element = createDomElement('for-test');
cache!.registerElement(element);
final List<Object?>? domCache = hotRestartStore;
expect(domCache, hasLength(1));
expect(domCache!.last, element);
});
test('Registers elements in the DOM cache', () async {
final DomElement element = createDomElement('for-test');
domDocument.body!.append(element);
cache!.registerElement(element);
final List<Object?>? domCache = hotRestartStore;
expect(domCache, hasLength(1));
expect(domCache!.last, element);
});
test('Clears registered elements from the DOM and the cache upon restart',
() async {
final DomElement element = createDomElement('for-test');
final DomElement element2 = createDomElement('for-test-two');
domDocument.body!.append(element);
domDocument.body!.append(element2);
cache!.registerElement(element);
expect(element.isConnected, isTrue);
expect(element2.isConnected, isTrue);
// Simulate a hot restart...
cache = HotRestartCacheHandler();
final List<Object?>? domCache = hotRestartStore;
expect(domCache, hasLength(0));
expect(element.isConnected, isFalse); // Removed
expect(element2.isConnected, isTrue);
});
});
}