1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
'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)
}
}
})
|