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

Commit 0b12dee

Browse files
committed
Test via defaultPrevented and manually dispatching events
1 parent 4bc3f04 commit 0b12dee

File tree

3 files changed

+64
-16
lines changed

3 files changed

+64
-16
lines changed

lib/web_ui/lib/src/engine/view_embedder/embedding_strategy/embedding_strategy.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,7 @@ abstract class EmbeddingStrategy with _ContextMenu {
6060

6161
mixin _ContextMenu {
6262
/// False when the context menu has been disabled, otherwise true.
63-
@visibleForTesting
64-
bool contextMenuEnabled = true;
63+
bool _contextMenuEnabled = true;
6564

6665
/// Listener for contextmenu events that prevents the browser's context menu
6766
/// from being shown.
@@ -89,12 +88,13 @@ mixin _ContextMenu {
8988
/// [DomElement].
9089
@protected
9190
void disableContextMenuOn(DomElement element) {
92-
if (!contextMenuEnabled) {
91+
if (!_contextMenuEnabled) {
9392
return;
9493
}
9594

95+
print('justin disabling');
9696
element.addEventListener('contextmenu', _disablingContextMenuListener);
97-
contextMenuEnabled = false;
97+
_contextMenuEnabled = false;
9898
}
9999

100100
/// Enables the browser's context menu for this part of the DOM.
@@ -117,11 +117,11 @@ mixin _ContextMenu {
117117
/// [DomElement].
118118
@protected
119119
void enableContextMenuOn(DomElement element) {
120-
if (contextMenuEnabled) {
120+
if (_contextMenuEnabled) {
121121
return;
122122
}
123123

124124
element.removeEventListener('contextmenu', _disablingContextMenuListener);
125-
contextMenuEnabled = true;
125+
_contextMenuEnabled = true;
126126
}
127127
}

lib/web_ui/test/engine/view_embedder/embedding_strategy/custom_element_embedding_strategy_test.dart

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import 'package:test/bootstrap/browser.dart';
88
import 'package:test/test.dart';
99
import 'package:ui/src/engine/dom.dart';
10+
import 'package:ui/src/engine/safe_browser_api.dart';
1011
import 'package:ui/src/engine/view_embedder/embedding_strategy/custom_element_embedding_strategy.dart';
1112

1213
void main() {
@@ -135,19 +136,40 @@ void doTests() {
135136
});
136137

137138
test('disableContextMenu and enableContextMenu can toggle the context menu', () {
138-
expect(strategy.contextMenuEnabled, isTrue);
139+
// When the app starts, contextmenu events are not prevented.
140+
DomEvent event = createDomEvent('Event', 'contextmenu');
141+
expect(event.defaultPrevented, isFalse);
142+
target.dispatchEvent(event);
143+
expect(event.defaultPrevented, isFalse);
139144

145+
// Disabling the context menu causes contextmenu events to be prevented.
140146
strategy.disableContextMenu();
141-
expect(strategy.contextMenuEnabled, isFalse);
147+
event = createDomEvent('Event', 'contextmenu');
148+
expect(event.defaultPrevented, isFalse);
149+
target.dispatchEvent(event);
150+
expect(event.defaultPrevented, isTrue);
142151

152+
// Disabling again has no effect.
143153
strategy.disableContextMenu();
144-
expect(strategy.contextMenuEnabled, isFalse);
154+
event = createDomEvent('Event', 'contextmenu');
155+
expect(event.defaultPrevented, isFalse);
156+
target.dispatchEvent(event);
157+
expect(event.defaultPrevented, isTrue);
145158

159+
// Enabling the context menu means that contextmenu events are back to not
160+
// being prevented.
146161
strategy.enableContextMenu();
147-
expect(strategy.contextMenuEnabled, isTrue);
162+
event = createDomEvent('Event', 'contextmenu');
163+
expect(event.defaultPrevented, isFalse);
164+
target.dispatchEvent(event);
165+
expect(event.defaultPrevented, isFalse);
148166

167+
// Enabling again has no effect.
149168
strategy.enableContextMenu();
150-
expect(strategy.contextMenuEnabled, isTrue);
169+
event = createDomEvent('Event', 'contextmenu');
170+
expect(event.defaultPrevented, isFalse);
171+
target.dispatchEvent(event);
172+
expect(event.defaultPrevented, isFalse);
151173
});
152174
});
153175
}

lib/web_ui/test/engine/view_embedder/embedding_strategy/full_page_embedding_strategy_test.dart

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -131,22 +131,48 @@ void doTests() {
131131
});
132132

133133
group('context menu', () {
134+
setUp(() {
135+
strategy = FullPageEmbeddingStrategy();
136+
strategy.initialize();
137+
});
138+
134139
test('disableContextMenu and enableContextMenu can toggle the context menu', () {
135140
final FullPageEmbeddingStrategy strategy = FullPageEmbeddingStrategy();
136141

137-
expect(strategy.contextMenuEnabled, isTrue);
142+
// When the app starts, contextmenu events are not prevented.
143+
DomEvent event = createDomEvent('Event', 'contextmenu');
144+
expect(event.defaultPrevented, isFalse);
145+
target.dispatchEvent(event);
146+
expect(event.defaultPrevented, isFalse);
138147

148+
// Disabling the context menu causes contextmenu events to be prevented.
139149
strategy.disableContextMenu();
140-
expect(strategy.contextMenuEnabled, isFalse);
150+
event = createDomEvent('Event', 'contextmenu');
151+
expect(event.defaultPrevented, isFalse);
152+
target.dispatchEvent(event);
153+
expect(event.defaultPrevented, isTrue);
141154

155+
// Disabling again has no effect.
142156
strategy.disableContextMenu();
143-
expect(strategy.contextMenuEnabled, isFalse);
157+
event = createDomEvent('Event', 'contextmenu');
158+
expect(event.defaultPrevented, isFalse);
159+
target.dispatchEvent(event);
160+
expect(event.defaultPrevented, isTrue);
144161

162+
// Enabling the context menu means that contextmenu events are back to not
163+
// being prevented.
145164
strategy.enableContextMenu();
146-
expect(strategy.contextMenuEnabled, isTrue);
165+
event = createDomEvent('Event', 'contextmenu');
166+
expect(event.defaultPrevented, isFalse);
167+
target.dispatchEvent(event);
168+
expect(event.defaultPrevented, isFalse);
147169

170+
// Enabling again has no effect.
148171
strategy.enableContextMenu();
149-
expect(strategy.contextMenuEnabled, isTrue);
172+
event = createDomEvent('Event', 'contextmenu');
173+
expect(event.defaultPrevented, isFalse);
174+
target.dispatchEvent(event);
175+
expect(event.defaultPrevented, isFalse);
150176
});
151177
});
152178
}

0 commit comments

Comments
 (0)