'use strict' var test = require('tap').test var TrackerGroup = require('../index.js').TrackerGroup var testEvent = require('./lib/test-event.js') test('TrackerGroup', function (t) { var name = 'test' var track = new TrackerGroup(name) t.is(track.completed(), 0, 'Nothing todo is 0 completion') testEvent(track, 'change', afterFinishEmpty) track.finish() var a, b function afterFinishEmpty (er, onChangeName, completion) { t.is(er, null, 'finishEmpty: on change event fired') t.is(onChangeName, name, 'finishEmpty: on change emits the correct name') t.is(completion, 1, 'finishEmpty: passed through completion was correct') t.is(track.completed(), 1, 'finishEmpty: Finishing an empty group actually finishes it') track = new TrackerGroup(name) a = track.newItem('a', 10, 1) b = track.newItem('b', 10, 1) t.is(track.completed(), 0, 'Initially empty') testEvent(track, 'change', afterCompleteWork) a.completeWork(5) } function afterCompleteWork (er, onChangeName, completion) { t.is(er, null, 'on change event fired') t.is(onChangeName, 'a', 'on change emits the correct name') t.is(completion, 0.25, 'Complete half of one is a quarter overall') t.is(track.completed(), 0.25, 'Complete half of one is a quarter overall') testEvent(track, 'change', afterFinishAll) track.finish() } function afterFinishAll (er, onChangeName, completion) { t.is(er, null, 'finishAll: on change event fired') t.is(onChangeName, name, 'finishAll: on change emits the correct name') t.is(completion, 1, 'Finishing everything ') t.is(track.completed(), 1, 'Finishing everything ') track = new TrackerGroup(name) a = track.newItem('a', 10, 2) b = track.newItem('b', 10, 1) t.is(track.completed(), 0, 'weighted: Initially empty') testEvent(track, 'change', afterWeightedCompleteWork) a.completeWork(5) } function afterWeightedCompleteWork (er, onChangeName, completion) { t.is(er, null, 'weighted: on change event fired') t.is(onChangeName, 'a', 'weighted: on change emits the correct name') t.is(Math.floor(completion * 100), 33, 'weighted: Complete half of double weighted') t.is(Math.floor(track.completed() * 100), 33, 'weighted: Complete half of double weighted') testEvent(track, 'change', afterWeightedFinishAll) track.finish() } function afterWeightedFinishAll (er, onChangeName, completion) { t.is(er, null, 'weightedFinishAll: on change event fired') t.is(onChangeName, name, 'weightedFinishAll: on change emits the correct name') t.is(completion, 1, 'weightedFinishaAll: Finishing everything ') t.is(track.completed(), 1, 'weightedFinishaAll: Finishing everything ') track = new TrackerGroup(name) a = track.newGroup('a', 10) b = track.newGroup('b', 10) var a1 = a.newItem('a.1', 10) a1.completeWork(5) t.is(track.completed(), 0.25, 'nested: Initially quarter done') testEvent(track, 'change', afterNestedComplete) b.finish() } function afterNestedComplete (er, onChangeName, completion) { t.is(er, null, 'nestedComplete: on change event fired') t.is(onChangeName, 'b', 'nestedComplete: on change emits the correct name') t.is(completion, 0.75, 'nestedComplete: Finishing everything ') t.is(track.completed(), 0.75, 'nestedComplete: Finishing everything ') t.end() } }) test('cycles', function (t) { var track = new TrackerGroup('top') testCycle(track, track) var layer1 = track.newGroup('layer1') testCycle(layer1, track) t.end() function testCycle (addTo, toAdd) { try { addTo.addUnit(toAdd) t.fail(toAdd.name) } catch (ex) { console.log(ex) t.pass(toAdd.name) } } })