Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 4bdd15c

Browse files
authored
more tests for enabling semantics (#14060)
* more tests for enabling semantics * addressing pr comments
1 parent bcb8267 commit 4bdd15c

File tree

5 files changed

+39
-9
lines changed

5 files changed

+39
-9
lines changed

lib/web_ui/lib/src/engine/dom_renderer.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ flt-glass-pane * {
390390
_glassPaneElement.append(_sceneHostElement);
391391

392392
final html.Element _accesibilityPlaceholder = EngineSemanticsOwner
393-
.instance.enableSemantics
393+
.instance.semanticsHelper
394394
.prepareAccesibilityPlaceholder();
395395

396396
// Insert the semantics placeholder after the scene host. For all widgets

lib/web_ui/lib/src/engine/semantics/semantics.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1198,7 +1198,7 @@ class EngineSemanticsOwner {
11981198
_now = () => DateTime.now();
11991199
}
12001200

1201-
final SemanticsHelper enableSemantics = SemanticsHelper();
1201+
final SemanticsHelper semanticsHelper = SemanticsHelper();
12021202

12031203
/// Whether the user has requested that [updateSemantics] be called when
12041204
/// the semantic contents of window changes.
@@ -1346,7 +1346,7 @@ class EngineSemanticsOwner {
13461346
_temporarilyDisableBrowserGestureMode();
13471347
}
13481348

1349-
return enableSemantics.shouldEnableSemantics(event);
1349+
return semanticsHelper.shouldEnableSemantics(event);
13501350
}
13511351

13521352
/// Callbacks called when the [GestureMode] changes.

lib/web_ui/lib/src/engine/semantics/semantics_helper.dart

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,25 @@ String placeholderMessage = 'Enable accessibility';
3636
///
3737
/// See [DesktopSemanticsEnabler], [MobileSemanticsEnabler].
3838
class SemanticsHelper {
39-
final _SemanticsEnabler _enableSemantics =
39+
SemanticsEnabler _semanticsEnabler =
4040
isDesktop ? DesktopSemanticsEnabler() : MobileSemanticsEnabler();
4141

42+
@visibleForTesting
43+
set semanticsEnabler(SemanticsEnabler semanticsEnabler) {
44+
this._semanticsEnabler = semanticsEnabler;
45+
}
46+
4247
bool shouldEnableSemantics(html.Event event) {
43-
return _enableSemantics.shouldEnableSemantics(event);
48+
return _semanticsEnabler.shouldEnableSemantics(event);
4449
}
4550

4651
html.Element prepareAccesibilityPlaceholder() {
47-
return _enableSemantics.prepareAccesibilityPlaceholder();
52+
return _semanticsEnabler.prepareAccesibilityPlaceholder();
4853
}
4954
}
5055

51-
abstract class _SemanticsEnabler {
56+
@visibleForTesting
57+
abstract class SemanticsEnabler {
5258
/// Whether to enable semantics.
5359
///
5460
/// Semantics should be enabled if the web engine is no longer waiting for
@@ -89,7 +95,7 @@ abstract class _SemanticsEnabler {
8995
}
9096

9197
@visibleForTesting
92-
class DesktopSemanticsEnabler extends _SemanticsEnabler {
98+
class DesktopSemanticsEnabler extends SemanticsEnabler {
9399
/// We do not immediately enable semantics when the user requests it, but
94100
/// instead wait for a short period of time before doing it. This is because
95101
/// the request comes as an event targeted on the [_semanticsPlaceholder].
@@ -212,7 +218,7 @@ class DesktopSemanticsEnabler extends _SemanticsEnabler {
212218
}
213219

214220
@visibleForTesting
215-
class MobileSemanticsEnabler extends _SemanticsEnabler {
221+
class MobileSemanticsEnabler extends SemanticsEnabler {
216222
/// We do not immediately enable semantics when the user requests it, but
217223
/// instead wait for a short period of time before doing it. This is because
218224
/// the request comes as an event targeted on the [_semanticsPlaceholder].

lib/web_ui/pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ dependencies:
1010
dev_dependencies:
1111
http: 0.12.0+2
1212
image: 2.1.4
13+
mockito: 4.1.1
1314
path: 1.6.4
1415
test: 1.6.5
1516
quiver: 2.0.5

lib/web_ui/test/engine/semantics/semantics_test.dart

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'dart:async';
66
import 'dart:html' as html;
77
import 'dart:typed_data';
88

9+
import 'package:mockito/mockito.dart';
910
import 'package:quiver/testing/async.dart';
1011
import 'package:test/test.dart';
1112

@@ -190,8 +191,30 @@ void _testEngineSemanticsOwner() {
190191
semantics().semanticsEnabled = false;
191192
});
192193
});
194+
test('checks shouldEnableSemantics for every global event', () {
195+
final MockSemanticsEnabler mockSemanticsEnabler = MockSemanticsEnabler();
196+
semantics().semanticsHelper.semanticsEnabler = mockSemanticsEnabler;
197+
final html.Event pointerEvent = html.Event('pointermove');
198+
199+
semantics().receiveGlobalEvent(pointerEvent);
200+
201+
// Verify the interactions.
202+
verify(mockSemanticsEnabler.shouldEnableSemantics(pointerEvent));
203+
});
204+
205+
test('Forward events to framewors if shouldEnableSemantics', () {
206+
final MockSemanticsEnabler mockSemanticsEnabler = MockSemanticsEnabler();
207+
semantics().semanticsHelper.semanticsEnabler = mockSemanticsEnabler;
208+
final html.Event pointerEvent = html.Event('pointermove');
209+
when(mockSemanticsEnabler.shouldEnableSemantics(pointerEvent))
210+
.thenReturn(true);
211+
212+
expect(semantics().receiveGlobalEvent(pointerEvent), isTrue);
213+
});
193214
}
194215

216+
class MockSemanticsEnabler extends Mock implements SemanticsEnabler {}
217+
195218
void _testHeader() {
196219
test('renders heading role for headers', () {
197220
semantics()

0 commit comments

Comments
 (0)