blob: 799a7670b65934474ac877eea8645a5c0e6ce28a [file] [log] [blame]
'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)
}
}
})