var phpunitPlugin = ActiveBuild.UiPlugin.extend({ id: 'build-phpunit-errors', css: 'col-xs-12', title: Lang.get('phpunit'), lastData: null, displayOnUpdate: false, rendered: false, statusMap: { success: 'ok', failed: 'remove', error: 'warning-sign', todo: 'info-sign', skipped: 'exclamation-sign' }, register: function () { var self = this; var query = ActiveBuild.registerQuery('phpunit-data', -1, {key: 'phpunit-data'}) $(window).on('phpunit-data', function (data) { self.onUpdate(data); }); $(window).on('build-updated', function () { if (!self.rendered) { self.displayOnUpdate = true; query(); } }); }, render: function () { return $('' + '' + '' + '' + '' + '' + '' + '
' + Lang.get('status') + '' + Lang.get('test_message') + '' + Lang.get('trace') + '
'); }, onUpdate: function (e) { if (!e.queryData) { $('#build-phpunit-errors').hide(); return; } this.rendered = true; this.lastData = e.queryData; var tests = this.lastData[0].meta_value; var thead = $('#phpunit-data thead tr'); var tbody = $('#phpunit-data tbody'); thead.empty().append('' + Lang.get('status') + '' + Lang.get('test_message') + '' + Lang.get('trace') + ''); tbody.empty(); if (tests.length == 0) { $('#build-phpunit-errors').hide(); return; } var counts = {success: 0, failed: 0, error: 0, skipped: 0, todo: 0}, total = 0; for (var i in tests) { var severity = tests[i].severity || (tests[i].pass ? 'success' : 'failed'), label = ('success' == severity) ? 'success' : ( ('error' == severity) ? 'danger' : 'warning' ); if ('fail' === severity) { severity = 'failed'; } var status = $('' + Lang.get(severity) + ''), content = $(''), trace = $(''), message = $('
').appendTo(content), trace_message = $('
').appendTo(trace); if (tests[i].message) { message.text(tests[i].message); } else if (tests[i].test && tests[i].suite) { message.text(tests[i].suite + '::' + tests[i].test); } else { message.html('' + Lang.get('test_no_message') + ''); } if (tests[i].data) { content.append('
' + this.repr(tests[i].data) + '
'); } if (tests[i].trace && tests[i].trace.length) { trace_message.append(tests[i].trace); } $('').append(status).append(content).append(trace).appendTo(tbody); counts[severity]++; total++; } $('#build-phpunit-errors').show(); }, repr: function (data) { switch (typeof(data)) { case 'boolean': return '' + (data ? 'true' : 'false') + ''; case 'string': return '"' + data + '"'; case 'undefined': case null: return 'null'; case 'object': var rows = []; if (data instanceof Array) { for (var i in data) { rows.push('' + this.repr(data[i]) + ','); } } else { for (var key in data) { rows.push( '' + '' + this.repr(key) + '' + '=>' + '' + this.repr(data[key]) + ',' + ''); } } return '' + '' + rows.join('') + '' + '
array(
)
'; } return '???'; }, buildTrace: function (trace) { var list = '
    '; trace.forEach(function (line) { list += '
  1. ' + line + '
  2. '; }); list += '
'; return list; } }); ActiveBuild.registerPlugin(new phpunitPlugin());