blob: f996898764243148f9d0b0c21395529dc3585241 [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 'dart:html' as html;
// Imports the Flutter Driver API.
import 'package:flutter/src/widgets/framework.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:pointer_interceptor_example/main.dart' as app;
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
group('Widget', () {
final Finder nonClickableButtonFinder =
find.byKey(const Key('transparent-button'));
final Finder clickableButtonFinder =
find.byKey(const Key('clickable-button'));
testWidgets(
'on wrapped elements, the browser does not hit the background-html-view',
(WidgetTester tester) async {
app.main();
await tester.pumpAndSettle();
final html.Element? element =
_getHtmlElementFromFinder(clickableButtonFinder, tester);
if (html.document.querySelector('flt-glass-pane')?.shadowRoot != null) {
// In flutter master...
expect(element?.id, isNot('background-html-view'));
} else {
// In previous versions (--web-renderer=html only)...
expect(element?.tagName.toLowerCase(), 'flt-platform-view');
final html.Element? platformViewRoot =
element?.shadowRoot?.getElementById('background-html-view');
expect(platformViewRoot, isNull);
}
});
testWidgets(
'on unwrapped elements, the browser hits the background-html-view',
(WidgetTester tester) async {
app.main();
await tester.pumpAndSettle();
final html.Element? element =
_getHtmlElementFromFinder(nonClickableButtonFinder, tester);
if (html.document.querySelector('flt-glass-pane')?.shadowRoot != null) {
// In flutter master...
expect(element?.id, 'background-html-view');
} else {
// In previous versions (--web-renderer=html only)...
expect(element?.tagName.toLowerCase(), 'flt-platform-view');
final html.Element? platformViewRoot =
element?.shadowRoot?.getElementById('background-html-view');
expect(platformViewRoot, isNotNull);
}
});
});
}
// This functions locates a widget from a Finder, and asks the browser what's the
// DOM element in the center of the coordinates of the widget. (Returns *which*
// DOM element will handle Mouse interactions first at those coordinates.)
html.Element? _getHtmlElementFromFinder(Finder finder, WidgetTester tester) {
final Offset point = tester.getCenter(finder);
return html.document.elementFromPoint(point.dx.toInt(), point.dy.toInt());
}