trackerstream.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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. var testEvent = require('./lib/test-event.js')
  7. var Sink = function () {
  8. stream.Writable.apply(this, arguments)
  9. }
  10. util.inherits(Sink, stream.Writable)
  11. Sink.prototype._write = function (data, encoding, cb) {
  12. cb()
  13. }
  14. test('TrackerStream', function (t) {
  15. t.plan(9)
  16. var name = 'test'
  17. var track = new TrackerStream(name)
  18. t.is(track.completed(), 0, 'Nothing todo is 0 completion')
  19. var todo = 10
  20. track = new TrackerStream(name, todo)
  21. t.is(track.completed(), 0, 'Nothing done is 0 completion')
  22. track.pipe(new Sink())
  23. testEvent(track, 'change', afterCompleteWork)
  24. track.write('0123456789')
  25. function afterCompleteWork (er, onChangeName) {
  26. t.is(er, null, 'write: on change event fired')
  27. t.is(onChangeName, name, 'write: on change emits the correct name')
  28. t.is(track.completed(), 1, 'write: 100% completed')
  29. testEvent(track, 'change', afterAddWork)
  30. track.addWork(10)
  31. }
  32. function afterAddWork (er, onChangeName) {
  33. t.is(er, null, 'addWork: on change event fired')
  34. t.is(track.completed(), 0.5, 'addWork: 50% completed')
  35. testEvent(track, 'change', afterAllWork)
  36. track.write('ABCDEFGHIJKLMNOPQRST')
  37. }
  38. function afterAllWork (er) {
  39. t.is(er, null, 'allWork: on change event fired')
  40. t.is(track.completed(), 1, 'allWork: 100% completed')
  41. }
  42. })