11import config from "./config" ;
22import { objectType } from "./utilities" ;
33import Promise from "../promise" ;
4+ import {
5+ setTimeout
6+ } from "../globals" ;
47
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 ;
1725 }
26+ ) ;
27+ } , Promise . resolve ( [ ] ) ) ;
28+ }
1829
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+ }
2137
22- return loggingCallback ;
23- }
38+ config . callbacks [ key ] . push ( callback ) ;
39+ } ;
2440
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 => {
2752
2853 // Initialize key collection of logging callback
2954 if ( objectType ( config . callbacks [ key ] ) === "undefined" ) {
3055 config . callbacks [ key ] = [ ] ;
3156 }
32-
33- obj [ key ] = registerLoggingCallback ( key ) ;
34- }
57+ qunit [ key ] = _registerLoggingCallback ( key ) ;
58+ } ) ;
3559}
3660
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+ */
3769export function runLoggingCallbacks ( key , args ) {
38- var callbacks = config . callbacks [ key ] ;
70+ const callbacks = config . callbacks [ key ] ;
3971
4072 // Handling 'log' callbacks separately. Unlike the other callbacks,
4173 // the log callback is not controlled by the processing queue,
@@ -46,10 +78,5 @@ export function runLoggingCallbacks( key, args ) {
4678 return ;
4779 }
4880
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 ) ;
5582}
0 commit comments