             chai.expect(received).to.eql expected
             done()
           , 1000
+      c.network.once 'start', checkStart
+      c.network.once 'end', checkEnd
+      c.start (err) ->
+        return done err if err
+
+  describe 'with synchronous Process API', ->
+    c = null
+    g = null
+    out = null
+    beforeEach (done) ->
+      fbpData = "
+      OUTPORT=Sync.OUT:OUT
+      'foo' -> IN2 NonSending(process/NonSending)
+      'hello' -> IN Bracketize(process/Bracketize)
+      Bracketize OUT -> IN NonSending(process/NonSending)
+      NonSending OUT -> IN Sync(process/Sync)
+      Sync OUT -> IN2 NonSending
+      "
+      noflo.graph.loadFBP fbpData, (err, graph) ->
+        return done err if err
+        g = graph
+        loader.registerComponent 'scope', 'Connected', graph
+        loader.load 'scope/Connected', (err, instance) ->
+          return done err if err
+          c = instance
+          out = noflo.internalSocket.createSocket()
+          c.outPorts.out.attach out
+          done()
+    afterEach (done) ->
+      c.outPorts.out.detach out
+      out = null
+      c.shutdown done
+    it 'should execute and finish', (done) ->
+      expected = [
+        'DATA helloNonSendingSync'
+      ]
+      received = []
+      out.on 'ip', (ip) ->
+        switch ip.type
+          when 'openBracket'
+            received.push "< #{ip.data}"
+          when 'data'
+            received.push "DATA #{ip.data}"
+          when 'closeBracket'
+            received.push '>'
+      wasStarted = false
+      checkStart = ->
+        chai.expect(wasStarted).to.equal false
+        wasStarted = true
+      checkEnd = ->
+        setTimeout ->
+          chai.expect(received).to.eql expected
+          chai.expect(wasStarted).to.equal true
+          done()
+        , 100
       c.network.once 'start', checkStart
       c.network.once 'end', checkEnd
       c.start (err) ->

      loader.registerComponent 'wirepattern', 'Async', wirePatternAsync
      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()


    output.sendDone
      out: "1#{first}:2#{second}:#{c.nodeId}"

processSync = ->
  c = new noflo.Component
  c.inPorts.add 'in',
    datatype: 'string'
  c.outPorts.add 'out',
    datatype: 'string'
  c.process (input, output) ->
    data = input.getData 'in'
    output.send
      out: data + c.nodeId
    output.done()

processBracketize = ->
  c = new noflo.Component
  c.inPorts.add 'in',
    datatype: 'string'
  c.outPorts.add 'out',
    datatype: 'string'
  c.counter = 0
  c.tearDown = (callback) ->
    c.counter = 0
    do callback
  c.process (input, output) ->
    data = input.getData 'in'
    output.send
      out: new noflo.IP 'openBracket', c.counter
    output.send
      out: data
    output.send
      out: new noflo.IP 'closeBracket', c.counter
    c.counter++
    output.done()

processNonSending = ->
  c = new noflo.Component
  c.inPorts.add 'in',
    datatype: 'string'
  c.inPorts.add 'in2',
    datatype: 'string'
  c.outPorts.add 'out',
    datatype: 'string'
  c.forwardBrackets = {}
  c.process (input, output) ->
    if input.hasData 'in2'
      input.getData 'in2'
      output.done()
      return
    return unless input.hasData 'in'
    data = input.getData 'in'
    output.send data + c.nodeId
    output.done()

processGenerator = ->
  c = new noflo.Component
