         [ 'user1', 'hubot testing' ],
         [ 'hubot', @dialogue.config.timeoutLine ]
       ]
+
+  context 'Dialogue created with different choice types', ->
+
+    beforeEach (done) ->
+      unmute = mute() # don't write logs amongst test results
+      @dialogue = new Dialogue @res, timeout: 500
+      @errSpy = sinon.spy @room.robot.logger, 'error'
+      @cbSpy1 = sinon.spy()
+      @cbSpy2 = sinon.spy()
+      @dialogue.choice /number 1/i, 'Nothing'
+      @dialogue.choice /number 2/i, @cbSpy1
+      @dialogue.choice /number 3/i, 'Booby Prize', @cbSpy2
+      @dialogue.choice /number 4/i, null
+      unmute()
+      Q.delay(100).done -> done()
+    afterEach -> clearTimeout @dialogue.countdown
+
+    it 'Should clear and restart the timeout each time', ->
+      @spy.clearTimeout.should.have.been.calledThrice
+
+    it 'Should remember three (of four) valid choices', ->
+      @dialogue.choices.should.be.an 'array'
+      @dialogue.choices.length.should.equal 3
+
+    it 'Should create an object with a listener and a handler for each', ->
+      _.each @dialogue.choices, (choice) =>
+        choice.should.be.an 'object'
+        choice.regex.should.be.instanceof RegExp
+        choice.handler.should.be.a 'function'
+
+    it 'Should have logged an error for incorrect args', ->
+      @errSpy.should.have.been.calledOnce

      @dialogue.config.timeout.should.equal 555
      @dialogue.config.timeoutLine.should.equal 'Testing timeout options'

  context 'Create a Dialogue with 100ms timeout', ->

    beforeEach (done) ->
      @eventSpy = sinon.spy()

Q = require 'q'
_ = require 'underscore'
mute = require 'mute'
{inspect} = require 'util'
sinon = require 'sinon'
chai = require 'chai'
