1
1
import config from "./config" ;
2
2
import { objectType } from "./utilities" ;
3
3
import Promise from "../promise" ;
4
+ import {
5
+ setTimeout
6
+ } from "../globals" ;
4
7
5
- // Register logging callbacks
6
- export function registerLoggingCallbacks ( obj ) {
7
- var i , l , key ,
8
- callbackNames = [ "begin" , "done" , "log" , "testStart" , "testDone" ,
9
- "moduleStart" , "moduleDone" ] ;
10
-
11
- function registerLoggingCallback ( key ) {
12
- var loggingCallback = function ( callback ) {
13
- if ( objectType ( callback ) !== "function" ) {
14
- throw new Error (
15
- "QUnit logging methods require a callback function as their first parameters."
16
- ) ;
8
+ const callbackNames = [
9
+ "begin" ,
10
+ "done" ,
11
+ "log" ,
12
+ "testStart" ,
13
+ "testDone" ,
14
+ "moduleStart" ,
15
+ "moduleDone"
16
+ ] ;
17
+
18
+ function _promisfyCallbacksSequentially ( callbacks , args ) {
19
+ return callbacks . reduce ( ( promiseChain , callback ) => {
20
+ return promiseChain . then (
21
+ ( ) => callback ( args ) ,
22
+ ( err ) => {
23
+ setTimeout ( callback ( args ) ) ;
24
+ throw err ;
17
25
}
26
+ ) ;
27
+ } , Promise . resolve ( [ ] ) ) ;
28
+ }
18
29
19
- config . callbacks [ key ] . push ( callback ) ;
20
- } ;
30
+ function _registerLoggingCallback ( key ) {
31
+ const loggingCallback = ( callback ) => {
32
+ if ( objectType ( callback ) !== "function" ) {
33
+ throw new Error (
34
+ "QUnit logging methods require a callback function as their first parameters."
35
+ ) ;
36
+ }
21
37
22
- return loggingCallback ;
23
- }
38
+ config . callbacks [ key ] . push ( callback ) ;
39
+ } ;
24
40
25
- for ( i = 0 , l = callbackNames . length ; i < l ; i ++ ) {
26
- key = callbackNames [ i ] ;
41
+ return loggingCallback ;
42
+ }
43
+
44
+ /**
45
+ * Register logging callbacks to qunit
46
+ *
47
+ * @export
48
+ * @param {Object } qunit
49
+ */
50
+ export function registerLoggingCallbacks ( qunit ) {
51
+ callbackNames . forEach ( key => {
27
52
28
53
// Initialize key collection of logging callback
29
54
if ( objectType ( config . callbacks [ key ] ) === "undefined" ) {
30
55
config . callbacks [ key ] = [ ] ;
31
56
}
32
-
33
- obj [ key ] = registerLoggingCallback ( key ) ;
34
- }
57
+ qunit [ key ] = _registerLoggingCallback ( key ) ;
58
+ } ) ;
35
59
}
36
60
61
+ /**
62
+ * execute all callbacks from the given key as a sequential list of promises
63
+ *
64
+ * @export
65
+ * @param {String } key
66
+ * @param {Object } args
67
+ * @returns {Promise }
68
+ */
37
69
export function runLoggingCallbacks ( key , args ) {
38
- var callbacks = config . callbacks [ key ] ;
70
+ const callbacks = config . callbacks [ key ] ;
39
71
40
72
// Handling 'log' callbacks separately. Unlike the other callbacks,
41
73
// the log callback is not controlled by the processing queue,
@@ -46,10 +78,5 @@ export function runLoggingCallbacks( key, args ) {
46
78
return ;
47
79
}
48
80
49
- // ensure that each callback is executed serially
50
- return callbacks . reduce ( ( promiseChain , callback ) => {
51
- return promiseChain . then ( ( ) => {
52
- return Promise . resolve ( callback ( args ) ) ;
53
- } ) ;
54
- } , Promise . resolve ( [ ] ) ) ;
81
+ return _promisfyCallbacksSequentially ( callbacks , args ) ;
55
82
}
0 commit comments