1 | "use strict"
|
2 | var test = require("tap").test
|
3 | var util = require("util")
|
4 | var stream = require("readable-stream")
|
5 | var TrackerStream = require("../index.js").TrackerStream
|
6 |
|
7 | var timeoutError = new Error("timeout")
|
8 | var testEvent = function (obj,event,next) {
|
9 | var timeout = setTimeout(function(){
|
10 | obj.removeListener(event, eventHandler)
|
11 | next(timeoutError)
|
12 | }, 10)
|
13 | var eventHandler = function () {
|
14 | var args = Array.prototype.slice.call(arguments)
|
15 | args.unshift(null)
|
16 | clearTimeout(timeout)
|
17 | next.apply(null, args)
|
18 | }
|
19 | obj.once(event, eventHandler)
|
20 | }
|
21 |
|
22 | var Sink = function () {
|
23 | stream.Writable.apply(this,arguments)
|
24 | }
|
25 | util.inherits(Sink, stream.Writable)
|
26 | Sink.prototype._write = function (data, encoding, cb) {
|
27 | cb()
|
28 | }
|
29 |
|
30 | test("TrackerStream", function (t) {
|
31 | t.plan(9)
|
32 |
|
33 | var name = "test"
|
34 | var track = new TrackerStream(name)
|
35 |
|
36 | t.is(track.completed(), 0, "Nothing todo is 0 completion")
|
37 |
|
38 | var todo = 10
|
39 | track = new TrackerStream(name, todo)
|
40 | t.is(track.completed(), 0, "Nothing done is 0 completion")
|
41 |
|
42 | track.pipe(new Sink())
|
43 |
|
44 | testEvent(track, "change", afterCompleteWork)
|
45 | track.write("0123456789")
|
46 | function afterCompleteWork(er, onChangeName) {
|
47 | t.is(er, null, "write: on change event fired")
|
48 | t.is(onChangeName, name, "write: on change emits the correct name")
|
49 | t.is(track.completed(), 1, "write: 100% completed")
|
50 |
|
51 | testEvent(track, "change", afterAddWork)
|
52 | track.addWork(10)
|
53 | }
|
54 | function afterAddWork(er, onChangeName) {
|
55 | t.is(er, null, "addWork: on change event fired")
|
56 | t.is(track.completed(), 0.5, "addWork: 50% completed")
|
57 |
|
58 | testEvent(track, "change", afterAllWork)
|
59 | track.write("ABCDEFGHIJKLMNOPQRST")
|
60 | }
|
61 | function afterAllWork(er) {
|
62 | t.is(er, null, "allWork: on change event fired")
|
63 | t.is(track.completed(), 1, "allWork: 100% completed")
|
64 | }
|
65 | })
|