1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
odoo.define('web.keyboard_navigation_mixin_tests', function (require) {
"use strict";
var KeyboardNavigationMixin = require('web.KeyboardNavigationMixin');
var testUtils = require('web.test_utils');
var Widget = require('web.Widget');
QUnit.module('KeyboardNavigationMixin', function () {
QUnit.test('aria-keyshortcuts is added on elements with accesskey', async function (assert) {
assert.expect(1);
var $target = $('#qunit-fixture');
var KeyboardWidget = Widget.extend(KeyboardNavigationMixin, {
init: function () {
this._super.apply(this, arguments);
KeyboardNavigationMixin.init.call(this);
},
start: function () {
KeyboardNavigationMixin.start.call(this);
var $button = $('<button>').text('Click Me!').attr('accesskey', 'o');
// we need to define the accesskey because it will not be assigned on invisible buttons
this.$el.append($button);
return this._super.apply(this, arguments);
},
destroy: function () {
KeyboardNavigationMixin.destroy.call(this);
return this._super(...arguments);
},
});
var parent = await testUtils.createParent({});
var w = new KeyboardWidget(parent);
await w.appendTo($target);
// minimum set of attribute to generate a native event that works with the mixin
var e = new Event("keydown");
e.key = '';
e.altKey = true;
w.$el[0].dispatchEvent(e);
assert.ok(w.$el.find('button[aria-keyshortcuts]')[0], 'the aria-keyshortcuts is set on the button');
parent.destroy();
});
QUnit.test('keep CSS position absolute for parent of overlay', async function (assert) {
// If we change the CSS position of an 'absolute' element to 'relative',
// we may likely change its position on the document. Since the overlay
// CSS position is 'absolute', it will match the size and cover the
// parent with 'absolute' > 'absolute', without altering the position
// of the parent on the document.
assert.expect(1);
var $target = $('#qunit-fixture');
var $button;
var KeyboardWidget = Widget.extend(KeyboardNavigationMixin, {
init: function () {
this._super.apply(this, arguments);
KeyboardNavigationMixin.init.call(this);
},
start: function () {
KeyboardNavigationMixin.start.call(this);
$button = $('<button>').text('Click Me!').attr('accesskey', 'o');
// we need to define the accesskey because it will not be assigned on invisible buttons
this.$el.append($button);
return this._super.apply(this, arguments);
},
destroy: function () {
KeyboardNavigationMixin.destroy.call(this);
return this._super(...arguments);
},
});
var parent = await testUtils.createParent({});
var w = new KeyboardWidget(parent);
await w.appendTo($target);
$button.css('position', 'absolute');
// minimum set of attribute to generate a native event that works with the mixin
var e = new Event("keydown");
e.key = '';
e.altKey = true;
w.$el[0].dispatchEvent(e);
assert.strictEqual($button.css('position'), 'absolute',
"should not have kept the CSS position of the button");
parent.destroy();
});
});
});
|