Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F1428679
mediawiki.visibleTimeout.test.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
mediawiki.visibleTimeout.test.js
View Options
QUnit
.
module
(
'mediawiki.visibleTimeout'
,
QUnit
.
newMwEnvironment
(
{
beforeEach
:
function
()
{
// Document with just enough stuff to make the tests work.
const
listeners
=
[];
this
.
mockDocument
=
{
hidden
:
false
,
addEventListener
:
function
(
type
,
listener
)
{
if
(
type
===
'visibilitychange'
)
{
listeners
.
push
(
listener
);
}
},
removeEventListener
:
function
(
type
,
listener
)
{
let
i
;
if
(
type
===
'visibilitychange'
)
{
i
=
listeners
.
indexOf
(
listener
);
if
(
i
>=
0
)
{
listeners
.
splice
(
i
,
1
);
}
}
},
// Helper function to swap visibility and run listeners
toggleVisibility
:
function
()
{
let
i
;
this
.
hidden
=
!
this
.
hidden
;
for
(
i
=
0
;
i
<
listeners
.
length
;
i
++
)
{
listeners
[
i
]();
}
}
};
this
.
visibleTimeout
=
require
(
'mediawiki.visibleTimeout'
);
this
.
visibleTimeout
.
init
(
this
.
mockDocument
);
this
.
sandbox
.
useFakeTimers
();
// mw.now() doesn't respect the fake clock injected by useFakeTimers
this
.
stub
(
mw
,
'now'
,
(
()
=>
this
.
sandbox
.
clock
.
now
)
);
},
afterEach
:
function
()
{
// Restore
this
.
visibleTimeout
.
init
();
}
}
)
);
QUnit
.
test
(
'visibleTimeoutId is always a positive integer'
,
function
(
assert
)
{
let
called
=
0
,
visibleTimeoutId
=
this
.
visibleTimeout
.
set
(
()
=>
{
called
++
;
},
0
);
// First value for visibleTimeoutId should be 1
assert
.
strictEqual
(
visibleTimeoutId
,
1
);
this
.
visibleTimeout
.
clear
(
visibleTimeoutId
);
assert
.
strictEqual
(
called
,
0
);
visibleTimeoutId
=
this
.
visibleTimeout
.
set
(
()
=>
{
called
++
;
},
100
);
assert
.
strictEqual
(
visibleTimeoutId
,
2
);
this
.
visibleTimeout
.
clear
(
visibleTimeoutId
);
assert
.
strictEqual
(
called
,
0
);
visibleTimeoutId
=
this
.
visibleTimeout
.
set
(
()
=>
{
called
++
;
},
0
);
assert
.
strictEqual
(
visibleTimeoutId
,
3
);
assert
.
strictEqual
(
called
,
0
);
// VisibleTimeoutId should still be incremented even when
// the previous value was not cleared
visibleTimeoutId
=
this
.
visibleTimeout
.
set
(
()
=>
{
called
++
;
},
0
);
assert
.
strictEqual
(
visibleTimeoutId
,
4
);
assert
.
strictEqual
(
called
,
0
);
}
);
QUnit
.
test
(
'basic usage when visible'
,
function
(
assert
)
{
let
called
=
0
;
this
.
visibleTimeout
.
set
(
()
=>
{
called
++
;
},
0
);
assert
.
strictEqual
(
called
,
0
);
this
.
sandbox
.
clock
.
tick
(
1
);
assert
.
strictEqual
(
called
,
1
);
this
.
sandbox
.
clock
.
tick
(
100
);
assert
.
strictEqual
(
called
,
1
);
this
.
visibleTimeout
.
set
(
()
=>
{
called
++
;
},
10
);
this
.
sandbox
.
clock
.
tick
(
10
);
assert
.
strictEqual
(
called
,
2
);
}
);
QUnit
.
test
(
'basic usage - fallback assumes visible'
,
function
(
assert
)
{
const
mockDoc
=
{
addEventListener
:
function
()
{},
removeEventListener
:
function
()
{}
};
const
visible
=
require
(
'mediawiki.visibleTimeout'
);
visible
.
init
(
mockDoc
);
let
called
=
0
;
visible
.
set
(
()
=>
{
called
++
;
},
1
);
// expect call after next tick
assert
.
strictEqual
(
called
,
0
);
this
.
sandbox
.
clock
.
tick
(
1
);
assert
.
strictEqual
(
called
,
1
);
// expect call only once
this
.
sandbox
.
clock
.
tick
(
100
);
assert
.
strictEqual
(
called
,
1
);
visible
.
set
(
()
=>
{
called
++
;
},
10
);
// expect call not until after delay has elapsed
assert
.
strictEqual
(
called
,
1
);
this
.
sandbox
.
clock
.
tick
(
2
);
assert
.
strictEqual
(
called
,
1
);
// expect after this
this
.
sandbox
.
clock
.
tick
(
9
);
assert
.
strictEqual
(
called
,
2
);
}
);
QUnit
.
test
(
'can cancel timeout'
,
function
(
assert
)
{
let
called
=
0
,
timeout
=
this
.
visibleTimeout
.
set
(
()
=>
{
called
++
;
},
0
);
this
.
visibleTimeout
.
clear
(
timeout
);
this
.
sandbox
.
clock
.
tick
(
10
);
assert
.
strictEqual
(
called
,
0
);
timeout
=
this
.
visibleTimeout
.
set
(
()
=>
{
called
++
;
},
100
);
this
.
sandbox
.
clock
.
tick
(
50
);
assert
.
strictEqual
(
called
,
0
);
this
.
visibleTimeout
.
clear
(
timeout
);
this
.
sandbox
.
clock
.
tick
(
100
);
assert
.
strictEqual
(
called
,
0
);
}
);
QUnit
.
test
(
'start hidden and become visible'
,
function
(
assert
)
{
let
called
=
0
;
this
.
mockDocument
.
hidden
=
true
;
this
.
visibleTimeout
.
set
(
()
=>
{
called
++
;
},
0
);
this
.
sandbox
.
clock
.
tick
(
10
);
assert
.
strictEqual
(
called
,
0
);
this
.
mockDocument
.
toggleVisibility
();
this
.
sandbox
.
clock
.
tick
(
10
);
assert
.
strictEqual
(
called
,
1
);
}
);
QUnit
.
test
(
'timeout is cumulative'
,
function
(
assert
)
{
let
called
=
0
;
this
.
visibleTimeout
.
set
(
()
=>
{
called
++
;
},
100
);
this
.
sandbox
.
clock
.
tick
(
50
);
assert
.
strictEqual
(
called
,
0
);
this
.
mockDocument
.
toggleVisibility
();
this
.
sandbox
.
clock
.
tick
(
1000
);
assert
.
strictEqual
(
called
,
0
);
this
.
mockDocument
.
toggleVisibility
();
this
.
sandbox
.
clock
.
tick
(
50
);
assert
.
strictEqual
(
called
,
1
);
}
);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, May 16, 16:32 (13 h, 34 m)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
da/28/f8de46772ac7f9e11fc34ebcd170
Default Alt Text
mediawiki.visibleTimeout.test.js (4 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment