mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
more tests for enabling semantics (flutter/engine#14060)
* more tests for enabling semantics * addressing pr comments
This commit is contained in:
parent
e4ba568098
commit
ecbc70579a
@ -390,7 +390,7 @@ flt-glass-pane * {
|
||||
_glassPaneElement.append(_sceneHostElement);
|
||||
|
||||
final html.Element _accesibilityPlaceholder = EngineSemanticsOwner
|
||||
.instance.enableSemantics
|
||||
.instance.semanticsHelper
|
||||
.prepareAccesibilityPlaceholder();
|
||||
|
||||
// Insert the semantics placeholder after the scene host. For all widgets
|
||||
|
||||
@ -1198,7 +1198,7 @@ class EngineSemanticsOwner {
|
||||
_now = () => DateTime.now();
|
||||
}
|
||||
|
||||
final SemanticsHelper enableSemantics = SemanticsHelper();
|
||||
final SemanticsHelper semanticsHelper = SemanticsHelper();
|
||||
|
||||
/// Whether the user has requested that [updateSemantics] be called when
|
||||
/// the semantic contents of window changes.
|
||||
@ -1346,7 +1346,7 @@ class EngineSemanticsOwner {
|
||||
_temporarilyDisableBrowserGestureMode();
|
||||
}
|
||||
|
||||
return enableSemantics.shouldEnableSemantics(event);
|
||||
return semanticsHelper.shouldEnableSemantics(event);
|
||||
}
|
||||
|
||||
/// Callbacks called when the [GestureMode] changes.
|
||||
|
||||
@ -36,19 +36,25 @@ String placeholderMessage = 'Enable accessibility';
|
||||
///
|
||||
/// See [DesktopSemanticsEnabler], [MobileSemanticsEnabler].
|
||||
class SemanticsHelper {
|
||||
final _SemanticsEnabler _enableSemantics =
|
||||
SemanticsEnabler _semanticsEnabler =
|
||||
isDesktop ? DesktopSemanticsEnabler() : MobileSemanticsEnabler();
|
||||
|
||||
@visibleForTesting
|
||||
set semanticsEnabler(SemanticsEnabler semanticsEnabler) {
|
||||
this._semanticsEnabler = semanticsEnabler;
|
||||
}
|
||||
|
||||
bool shouldEnableSemantics(html.Event event) {
|
||||
return _enableSemantics.shouldEnableSemantics(event);
|
||||
return _semanticsEnabler.shouldEnableSemantics(event);
|
||||
}
|
||||
|
||||
html.Element prepareAccesibilityPlaceholder() {
|
||||
return _enableSemantics.prepareAccesibilityPlaceholder();
|
||||
return _semanticsEnabler.prepareAccesibilityPlaceholder();
|
||||
}
|
||||
}
|
||||
|
||||
abstract class _SemanticsEnabler {
|
||||
@visibleForTesting
|
||||
abstract class SemanticsEnabler {
|
||||
/// Whether to enable semantics.
|
||||
///
|
||||
/// Semantics should be enabled if the web engine is no longer waiting for
|
||||
@ -89,7 +95,7 @@ abstract class _SemanticsEnabler {
|
||||
}
|
||||
|
||||
@visibleForTesting
|
||||
class DesktopSemanticsEnabler extends _SemanticsEnabler {
|
||||
class DesktopSemanticsEnabler extends SemanticsEnabler {
|
||||
/// We do not immediately enable semantics when the user requests it, but
|
||||
/// instead wait for a short period of time before doing it. This is because
|
||||
/// the request comes as an event targeted on the [_semanticsPlaceholder].
|
||||
@ -212,7 +218,7 @@ class DesktopSemanticsEnabler extends _SemanticsEnabler {
|
||||
}
|
||||
|
||||
@visibleForTesting
|
||||
class MobileSemanticsEnabler extends _SemanticsEnabler {
|
||||
class MobileSemanticsEnabler extends SemanticsEnabler {
|
||||
/// We do not immediately enable semantics when the user requests it, but
|
||||
/// instead wait for a short period of time before doing it. This is because
|
||||
/// the request comes as an event targeted on the [_semanticsPlaceholder].
|
||||
|
||||
@ -10,6 +10,7 @@ dependencies:
|
||||
dev_dependencies:
|
||||
http: 0.12.0+2
|
||||
image: 2.1.4
|
||||
mockito: 4.1.1
|
||||
path: 1.6.4
|
||||
test: 1.6.5
|
||||
quiver: 2.0.5
|
||||
|
||||
@ -6,6 +6,7 @@ import 'dart:async';
|
||||
import 'dart:html' as html;
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:mockito/mockito.dart';
|
||||
import 'package:quiver/testing/async.dart';
|
||||
import 'package:test/test.dart';
|
||||
|
||||
@ -190,8 +191,30 @@ void _testEngineSemanticsOwner() {
|
||||
semantics().semanticsEnabled = false;
|
||||
});
|
||||
});
|
||||
test('checks shouldEnableSemantics for every global event', () {
|
||||
final MockSemanticsEnabler mockSemanticsEnabler = MockSemanticsEnabler();
|
||||
semantics().semanticsHelper.semanticsEnabler = mockSemanticsEnabler;
|
||||
final html.Event pointerEvent = html.Event('pointermove');
|
||||
|
||||
semantics().receiveGlobalEvent(pointerEvent);
|
||||
|
||||
// Verify the interactions.
|
||||
verify(mockSemanticsEnabler.shouldEnableSemantics(pointerEvent));
|
||||
});
|
||||
|
||||
test('Forward events to framewors if shouldEnableSemantics', () {
|
||||
final MockSemanticsEnabler mockSemanticsEnabler = MockSemanticsEnabler();
|
||||
semantics().semanticsHelper.semanticsEnabler = mockSemanticsEnabler;
|
||||
final html.Event pointerEvent = html.Event('pointermove');
|
||||
when(mockSemanticsEnabler.shouldEnableSemantics(pointerEvent))
|
||||
.thenReturn(true);
|
||||
|
||||
expect(semantics().receiveGlobalEvent(pointerEvent), isTrue);
|
||||
});
|
||||
}
|
||||
|
||||
class MockSemanticsEnabler extends Mock implements SemanticsEnabler {}
|
||||
|
||||
void _testHeader() {
|
||||
test('renders heading role for headers', () {
|
||||
semantics()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user