@@ -252,6 +252,85 @@ document.body.onload = function() {
252252 // move failed tests to the end
253253 [ ] . slice . call ( document . getElementsByClassName ( 'failed test' ) ) . forEach ( ( x ) => { document . body . removeChild ( x ) ; document . body . insertBefore ( x , summary ) ; } )
254254
255+ // do a pure javascript query and add a summary table of test timings
256+ {
257+ var div = document . createElement ( 'div' ) ;
258+ div . classList . add ( "expandable" ) ;
259+
260+ var toggle = document . createElement ( 'span' ) ;
261+ toggle . classList . add ( "expandtoggle" ) ;
262+ div . appendChild ( toggle ) ;
263+
264+ var title = document . createElement ( 'div' ) ;
265+ title . classList . add ( "title" ) ;
266+ title . innerHTML = "Test timing summary" ;
267+ div . appendChild ( title ) ;
268+
269+ var contents = document . createElement ( 'div' ) ;
270+ contents . classList . add ( "contents" ) ;
271+ div . appendChild ( contents ) ;
272+
273+ msgs = [ ] . slice . call ( document . getElementsByClassName ( 'message' ) )
274+ ran = msgs . filter ( ( msg ) => msg . innerText . includes ( "ran in 0:" ) )
275+ timings = ran . map ( ( msg ) => [ msg . parentElement . parentElement . id , msg . innerText . replace ( / .* r a n i n / , '' ) . replace ( / \. .* / , '' ) . split ( ':' ) . reduce ( ( acc , time ) => ( 60 * acc ) + + time ) ] )
276+ timings . sort ( ( a , b ) => b [ 1 ] - a [ 1 ] )
277+
278+ var table = document . createElement ( 'table' ) ;
279+
280+ var header = document . createElement ( 'tr' ) ;
281+ {
282+ var a = document . createElement ( 'th' ) ;
283+ a . innerHTML = 'Test Name' ;
284+ header . appendChild ( a ) ;
285+
286+ var a = document . createElement ( 'th' ) ;
287+ a . innerHTML = 'Duration' ;
288+ header . appendChild ( a ) ;
289+ }
290+ table . appendChild ( header ) ;
291+
292+ var total = 0 ;
293+ timings . forEach ( ( t ) => {
294+ var row = document . createElement ( 'tr' ) ;
295+
296+ var a = document . createElement ( 'td' ) ;
297+ a . innerHTML = t [ 0 ] ;
298+ row . appendChild ( a ) ;
299+
300+ var duration = t [ 1 ] ;
301+ total += duration ;
302+ var minutes = Math . floor ( duration / 60 ) ;
303+ var seconds = duration - ( 60 * minutes ) ;
304+
305+ var a = document . createElement ( 'td' ) ;
306+ a . innerHTML = String ( minutes ) . padStart ( 2 , 0 ) + ":" + String ( seconds ) . padStart ( 2 , 0 ) ;
307+ row . appendChild ( a ) ;
308+
309+ table . appendChild ( row ) ;
310+ } ) ;
311+
312+ {
313+ var row = document . createElement ( 'tr' ) ;
314+
315+ var a = document . createElement ( 'td' ) ;
316+ a . innerHTML = "Total" ;
317+ row . appendChild ( a ) ;
318+
319+ var minutes = Math . floor ( total / 60 ) ;
320+ var seconds = total - ( 60 * minutes ) ;
321+
322+ var a = document . createElement ( 'td' ) ;
323+ a . innerHTML = String ( minutes ) . padStart ( 2 , 0 ) + ":" + String ( seconds ) . padStart ( 2 , 0 ) ;
324+ row . appendChild ( a ) ;
325+
326+ table . appendChild ( row ) ;
327+ }
328+
329+ contents . appendChild ( table ) ;
330+
331+ document . body . appendChild ( div ) ;
332+ }
333+
255334 var toggles = document . getElementsByClassName ( 'expandtoggle' ) ;
256335
257336 for ( var i = 0 ; i < toggles . length ; i ++ ) {
0 commit comments