1 | "use strict"
|
2 | var test = require("tap").test
|
3 | var Tracker = require("../index.js").Tracker
|
4 |
|
5 | var timeoutError = new Error("timeout")
|
6 | var testEvent = function (obj,event,next) {
|
7 | var timeout = setTimeout(function(){
|
8 | obj.removeListener(event, eventHandler)
|
9 | next(timeoutError)
|
10 | }, 10)
|
11 | var eventHandler = function () {
|
12 | var args = Array.prototype.slice.call(arguments)
|
13 | args.unshift(null)
|
14 | clearTimeout(timeout)
|
15 | next.apply(null, args)
|
16 | }
|
17 | obj.once(event, eventHandler)
|
18 | }
|
19 |
|
20 | test("Tracker", function (t) {
|
21 | t.plan(10)
|
22 |
|
23 | var name = "test"
|
24 | var track = new Tracker(name)
|
25 |
|
26 | t.is(track.completed(), 0, "Nothing todo is 0 completion")
|
27 |
|
28 | var todo = 100
|
29 | track = new Tracker(name, todo)
|
30 | t.is(track.completed(), 0, "Nothing done is 0 completion")
|
31 |
|
32 | testEvent(track, "change", afterCompleteWork)
|
33 | track.completeWork(100)
|
34 | function afterCompleteWork(er, onChangeName) {
|
35 | t.is(er, null, "completeWork: on change event fired")
|
36 | t.is(onChangeName, name, "completeWork: on change emits the correct name")
|
37 | }
|
38 | t.is(track.completed(), 1, "completeWork: 100% completed")
|
39 |
|
40 | testEvent(track, "change", afterAddWork)
|
41 | track.addWork(100)
|
42 | function afterAddWork(er, onChangeName) {
|
43 | t.is(er, null, "addWork: on change event fired")
|
44 | t.is(onChangeName, name, "addWork: on change emits the correct name")
|
45 | }
|
46 | t.is(track.completed(), 0.5, "addWork: 50% completed")
|
47 |
|
48 |
|
49 | track.completeWork(200)
|
50 | t.is(track.completed(), 1, "completeWork: Over completion is still only 100% complete")
|
51 |
|
52 | track = new Tracker(name, todo)
|
53 | track.completeWork(50)
|
54 | track.finish()
|
55 | t.is(track.completed(), 1, "finish: Explicitly finishing moves to 100%")
|
56 | })
|