'use strict' var test = require('tap').test var log = require('../log.js') var actions = [] log.gauge = { enable: function () { actions.push(['enable']) }, disable: function () { actions.push(['disable']) }, hide: function () { actions.push(['hide']) }, show: function (name, completed) { actions.push(['show', name, completed]) }, pulse: function (name) { actions.push(['pulse', name]) } } function didActions(t, msg, output) { var tests = [] for (var ii = 0; ii < output.length; ++ ii) { for (var jj = 0; jj < output[ii].length; ++ jj) { tests.push({cmd: ii, arg: jj}) } } t.is(actions.length, output.length, msg) tests.forEach(function (test) { t.is(actions[test.cmd] ? actions[test.cmd][test.arg] : null, output[test.cmd][test.arg], msg + ': ' + output[test.cmd] + (test.arg ? ' arg #'+test.arg : '')) }) actions = [] } test('enableProgress', function (t) { t.plan(6) log.enableProgress() didActions(t, 'enableProgress', [ [ 'enable' ], [ 'show', undefined, 0 ] ]) log.enableProgress() didActions(t, 'enableProgress again', []) }) test('disableProgress', function (t) { t.plan(4) log.disableProgress() didActions(t, 'disableProgress', [ [ 'hide' ], [ 'disable' ] ]) log.disableProgress() didActions(t, 'disableProgress again', []) }) test('showProgress', function (t) { t.plan(5) log.showProgress('foo') didActions(t, 'showProgress disabled', []) log.enableProgress() actions = [] log.showProgress('foo') didActions(t, 'showProgress', [ [ 'show', 'foo', 0 ] ]) }) test('clearProgress', function (t) { t.plan(3) log.clearProgress() didActions(t, 'clearProgress', [ [ 'hide' ] ]) log.disableProgress() actions = [] log.clearProgress() didActions(t, 'clearProgress disabled', [ ]) }) test("newItem", function (t) { t.plan(12) log.enableProgress() actions = [] var a = log.newItem("test", 10) didActions(t, "newItem", [ [ 'show', undefined, 0 ] ]) a.completeWork(5) didActions(t, "newItem:completeWork", [ [ 'show', 'test', 0.5 ] ]) a.finish() didActions(t, "newItem:finish", [ [ 'show', 'test', 1 ] ]) }) // test that log objects proxy through. And test that completion status filters up test("newGroup", function (t) { t.plan(23) var a = log.newGroup("newGroup") didActions(t, "newGroup", [ [ 'show', undefined, 0.5 ] ]) a.warn("test", "this is a test") didActions(t, "newGroup:warn", [ [ 'pulse', 'test' ], [ 'hide' ], [ 'show', undefined, 0.5 ] ]) var b = a.newItem("newGroup2", 10) didActions(t, "newGroup:newItem", [ [ 'show', 'newGroup', 0.5 ] ]) b.completeWork(5) didActions(t, "newGroup:completeWork", [ [ 'show', 'newGroup2', 0.75 ] ]) a.finish() didActions(t, "newGroup:finish", [ [ 'show', 'newGroup', 1 ] ]) }) test("newStream", function (t) { t.plan(13) var a = log.newStream("newStream", 10) didActions(t, "newStream", [ [ 'show', undefined, 0.6666666666666666 ] ]) a.write("abcde") didActions(t, "newStream", [ [ 'show', 'newStream', 0.8333333333333333 ] ]) a.write("fghij") didActions(t, "newStream", [ [ 'show', 'newStream', 1 ] ]) t.is(log.tracker.completed(), 1, "Overall completion") })