UNPKG

1.83 kBJavaScriptView Raw
1"use strict"
2var test = require("tap").test
3var util = require("util")
4var stream = require("readable-stream")
5var TrackerStream = require("../index.js").TrackerStream
6
7var timeoutError = new Error("timeout")
8var 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
22var Sink = function () {
23 stream.Writable.apply(this,arguments)
24}
25util.inherits(Sink, stream.Writable)
26Sink.prototype._write = function (data, encoding, cb) {
27 cb()
28}
29
30test("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})