3 QUnit
.module( 'mediawiki.visibleTimeout', QUnit
.newMwEnvironment( {
5 // Document with just enough stuff to make the tests work.
9 addEventListener: function ( type
, listener
) {
10 if ( type
=== 'visibilitychange' ) {
11 listeners
.push( listener
);
14 removeEventListener: function ( type
, listener
) {
16 if ( type
=== 'visibilitychange' ) {
17 i
= listeners
.indexOf( listener
);
19 listeners
.splice( i
, 1 );
23 // Helper function to swap visibility and run listeners
24 toggleVisibility: function () {
26 this.hidden
= !this.hidden
;
27 for ( i
= 0; i
< listeners
.length
; i
++ ) {
32 this.visibleTimeout
= require( 'mediawiki.visibleTimeout' );
33 this.visibleTimeout
.setDocument( this.mockDocument
);
35 this.sandbox
.useFakeTimers();
36 // mw.now() doesn't respect the fake clock injected by useFakeTimers
37 this.stub( mw
, 'now', ( function () {
38 return this.sandbox
.clock
.now
;
43 QUnit
.test( 'basic usage', function ( assert
) {
46 this.visibleTimeout
.set( function () {
49 assert
.strictEqual( called
, 0 );
50 this.sandbox
.clock
.tick( 1 );
51 assert
.strictEqual( called
, 1 );
53 this.sandbox
.clock
.tick( 100 );
54 assert
.strictEqual( called
, 1 );
56 this.visibleTimeout
.set( function () {
59 this.sandbox
.clock
.tick( 10 );
60 assert
.strictEqual( called
, 2 );
63 QUnit
.test( 'can cancel timeout', function ( assert
) {
65 timeout
= this.visibleTimeout
.set( function () {
69 this.visibleTimeout
.clear( timeout
);
70 this.sandbox
.clock
.tick( 10 );
71 assert
.strictEqual( called
, 0 );
73 timeout
= this.visibleTimeout
.set( function () {
76 this.sandbox
.clock
.tick( 50 );
77 assert
.strictEqual( called
, 0 );
78 this.visibleTimeout
.clear( timeout
);
79 this.sandbox
.clock
.tick( 100 );
80 assert
.strictEqual( called
, 0 );
83 QUnit
.test( 'start hidden and become visible', function ( assert
) {
86 this.mockDocument
.hidden
= true;
87 this.visibleTimeout
.set( function () {
90 this.sandbox
.clock
.tick( 10 );
91 assert
.strictEqual( called
, 0 );
93 this.mockDocument
.toggleVisibility();
94 this.sandbox
.clock
.tick( 10 );
95 assert
.strictEqual( called
, 1 );
98 QUnit
.test( 'timeout is cumulative', function ( assert
) {
101 this.visibleTimeout
.set( function () {
104 this.sandbox
.clock
.tick( 50 );
105 assert
.strictEqual( called
, 0 );
107 this.mockDocument
.toggleVisibility();
108 this.sandbox
.clock
.tick( 1000 );
109 assert
.strictEqual( called
, 0 );
111 this.mockDocument
.toggleVisibility();
112 this.sandbox
.clock
.tick( 50 );
113 assert
.strictEqual( called
, 1 );