more tests for enabling semantics (flutter/engine#14060)

* more tests for enabling semantics

* addressing pr comments
This commit is contained in:
Nurhan Turgut 2019-11-27 14:53:48 -08:00 committed by GitHub
parent e4ba568098
commit ecbc70579a
5 changed files with 39 additions and 9 deletions

View File

@ -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

View File

@ -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.

View File

@ -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].

View File

@ -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

View File

@ -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()