Skip to content

Commit 197bc7e

Browse files
committed
Add more runtime tests.
1 parent f025956 commit 197bc7e

File tree

9 files changed

+149
-0
lines changed

9 files changed

+149
-0
lines changed
File renamed without changes.
File renamed without changes.
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<button with:tooltip="t('perform_action')">action</button>
2+
3+
<script>
4+
const translations = {
5+
perform_action: 'Perform an Action'
6+
};
7+
8+
function t(key) {
9+
return translations[key] || `{{${key}}}`;
10+
}
11+
12+
export default {
13+
data() {
14+
return { t };
15+
},
16+
17+
traits: {
18+
tooltip(node, text) {
19+
let tooltip = null;
20+
21+
function onMouseEnter() {
22+
tooltip = document.createElement('div');
23+
tooltip.classList.add('tooltip');
24+
tooltip.textContent = text;
25+
node.parentNode.appendChild(tooltip);
26+
}
27+
28+
function onMouseLeave() {
29+
if (!tooltip) return;
30+
tooltip.remove();
31+
tooltip = null;
32+
}
33+
34+
node.addEventListener('mouseenter', onMouseEnter);
35+
node.addEventListener('mouseleave', onMouseLeave);
36+
37+
return {
38+
destroy() {
39+
node.removeEventListener('mouseenter', onMouseEnter);
40+
node.removeEventListener('mouseleave', onMouseLeave);
41+
}
42+
}
43+
}
44+
}
45+
}
46+
</script>
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
export default {
2+
html: `
3+
<button>action</button>
4+
`,
5+
6+
test ( assert, component, target, window ) {
7+
const button = target.querySelector( 'button' );
8+
const eventEnter = new window.MouseEvent( 'mouseenter' );
9+
const eventLeave = new window.MouseEvent( 'mouseleave' );
10+
const ctrlPress = new window.KeyboardEvent( 'keydown', { ctrlKey: true } );
11+
12+
button.dispatchEvent( eventEnter );
13+
assert.htmlEqual( target.innerHTML, `
14+
<button>action</button>
15+
<div class="tooltip">Perform an Action</div>
16+
` );
17+
18+
window.dispatchEvent( ctrlPress );
19+
assert.htmlEqual( target.innerHTML, `
20+
<button>action</button>
21+
<div class="tooltip">Perform an augmented Action</div>
22+
` );
23+
24+
button.dispatchEvent( eventLeave );
25+
assert.htmlEqual( target.innerHTML, `
26+
<button>action</button>
27+
` );
28+
}
29+
};
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<button with:tooltip="tooltip">action</button>
2+
<:Window on:keydown="checkForCtrl(event)" on:keyup="checkForCtrl(event)"/>
3+
4+
<script>
5+
export default {
6+
data() {
7+
return { tooltip: 'Perform an Action' };
8+
},
9+
10+
methods: {
11+
checkForCtrl(event) {
12+
if (event.ctrlKey) {
13+
this.set({ tooltip: 'Perform an augmented Action' });
14+
} else {
15+
this.set({ tooltip: 'Perform an Action' });
16+
}
17+
}
18+
},
19+
20+
traits: {
21+
tooltip(node, text) {
22+
let tooltip = null;
23+
24+
function onMouseEnter() {
25+
tooltip = document.createElement('div');
26+
tooltip.classList.add('tooltip');
27+
tooltip.textContent = text;
28+
node.parentNode.appendChild(tooltip);
29+
}
30+
31+
function onMouseLeave() {
32+
if (!tooltip) return;
33+
tooltip.remove();
34+
tooltip = null;
35+
}
36+
37+
node.addEventListener('mouseenter', onMouseEnter);
38+
node.addEventListener('mouseleave', onMouseLeave);
39+
40+
return {
41+
update(text) {
42+
if (tooltip) tooltip.textContent = text;
43+
},
44+
destroy() {
45+
node.removeEventListener('mouseenter', onMouseEnter);
46+
node.removeEventListener('mouseleave', onMouseLeave);
47+
}
48+
}
49+
}
50+
}
51+
}
52+
</script>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
export default {
2+
html: `
3+
<button>action</button>
4+
`,
5+
6+
test ( assert, component, target, window ) {
7+
const button = target.querySelector( 'button' );
8+
const eventEnter = new window.MouseEvent( 'mouseenter' );
9+
const eventLeave = new window.MouseEvent( 'mouseleave' );
10+
11+
button.dispatchEvent( eventEnter );
12+
assert.htmlEqual( target.innerHTML, `
13+
<button>action</button>
14+
<div class="tooltip">Perform an Action</div>
15+
` );
16+
17+
button.dispatchEvent( eventLeave );
18+
assert.htmlEqual( target.innerHTML, `
19+
<button>action</button>
20+
` );
21+
}
22+
};
File renamed without changes.

0 commit comments

Comments
 (0)