     output.sendDone
       out: "1#{first}:2#{second}:#{c.nodeId}"
 
+processGenerator = ->
+  c = new noflo.Component
+  c.inPorts.add 'start',
+    datatype: 'bang'
+  c.inPorts.add 'stop',
+    datatype: 'bang'
+  c.outPorts.add 'out',
+    datatype: 'bang'
+  c.autoOrdering = false
+
+  cleanUp = ->
+    clearInterval c.timer.interval
+    c.timer.deactivate()
+    c.timer = null
+
+  c.process (input, output, context) ->
+    if input.hasData 'start'
+      cleanUp() if c.timer
+      input.getData 'start'
+      c.timer = context
+      c.timer.interval = setInterval ->
+        output.send out: true
+      , 100
+    if input.hasData 'stop'
+      input.getData 'stop'
+      return output.done() unless c.timer
+      cleanUp()
+      output.done()
+
+  baseShutdown = c.shutdown.bind c
+  c.shutdown = ->
+    cleanUp() if c.timer
+    do baseShutdown
+
+  c
+
 describe 'Network Lifecycle', ->
   loader = null
   before (done) ->

        in2.connect()
        in2.send 'foo'
        in2.disconnect()

      loader.registerComponent 'wirepattern', 'Merge', wirePatternMerge
      loader.registerComponent 'process', 'Async', processAsync
      loader.registerComponent 'process', 'Merge', processMerge
      loader.registerComponent 'process', 'Generator', processGenerator
      loader.registerComponent 'legacy', 'Sync', legacyBasic
      done()

