sphero-pwn
Version:
Driver for Sphero robots
142 lines (125 loc) • 5.29 kB
text/coffeescript
ReplayChannel = SpheroPwn.ReplayChannel
describe 'ReplayChannel', ->
describe 'with a 1-write recording', ->
beforeEach ->
= new ReplayChannel testRecordingPath('synthetic-1write')
.open()
it 'accepts a correct write', ->
.write(new Buffer('Hello'))
.then =>
.close()
it 'rejects an incorrect write', ->
.write(new Buffer('world'))
.then =>
expect(false).to.equal 'write promise not rejected'
.catch (error) =>
expect(error).to.be.an.instanceOf Error
expect(error).to.have.property 'message',
'Invalid data; expected 48 65 6C 6C 6F; got 77 6F 72 6C 64'
it 'rejects an unexpected close', ->
.close()
.then =>
expect(false).to.equal 'close promise not rejected'
.catch (error) =>
expect(error).to.be.an.instanceOf Error
expect(error).to.have.property 'message',
'Closed before performing 1 remaining ops'
describe 'with a 1-read recording', ->
beforeEach ->
= new ReplayChannel testRecordingPath('synthetic-1read')
= []
.onData = (data) => .push data
.open()
it 'reports the read data before closing', ->
.close()
.then =>
expect(.length).to.equal 1
expect([0]).to.deep.equal new Buffer('world')
it 'reports the data before the close call is issued', ->
(new Promise (resolve, reject) =>
= new ReplayChannel testRecordingPath('synthetic-1read')
.onData = (data) => resolve data
.open()
).then (data) =>
expect(data).to.deep.equal new Buffer('world')
.close()
describe 'with a write-read-write-read recording', ->
beforeEach ->
= new ReplayChannel testRecordingPath('synthetic-wrwr')
.open()
it 'rejects an immediate close', ->
.close()
.then =>
expect(false).to.equal 'close promise not rejected'
.catch (error) =>
expect(error).to.be.an.instanceOf Error
expect(error).to.have.property 'message',
'Closed before performing 4 remaining ops'
it 'rejects a first incorrect write', ->
.write(new Buffer('world'))
.then =>
expect(false).to.equal 'write promise not rejected'
.catch (error) =>
expect(error).to.be.an.instanceOf Error
expect(error).to.have.property 'message',
'Invalid data; expected 48 65 6C 6C 6F; got 77 6F 72 6C 64'
it 'reports a read right after the write', ->
(new Promise (resolve, reject) =>
.onData = (data) => resolve data
.write(new Buffer('Hello')).catch (error) => reject error
).then (data) =>
expect(data).to.deep.equal new Buffer('world')
it 'rejects a close after the first write', ->
.write(new Buffer('Hello'))
.then =>
.close()
.then =>
expect(false).to.equal 'close promise not rejected'
.catch (error) =>
expect(error).to.be.an.instanceOf Error
expect(error).to.have.property 'message',
'Closed before performing 2 remaining ops'
it 'rejects a second incorrect write', ->
.write(new Buffer('Hello'))
.then =>
.write(new Buffer('bai'))
.then =>
expect(false).to.equal 'write promise not rejected'
.catch (error) =>
expect(error).to.be.an.instanceOf Error
expect(error).to.have.property 'message',
'Invalid data; expected 68 61 69; got 62 61 69'
it 'reports reads right after writes', ->
(new Promise (resolve, reject) =>
.onData = (data) => resolve data
.write(new Buffer('Hello')).catch (error) => reject error
).then (data) =>
expect(data).to.deep.equal new Buffer('world')
new Promise (resolve, reject) =>
.onData = (data) => resolve data
.write(new Buffer('hai')).catch (error) => reject error
.then (data) =>
expect(data).to.deep.equal new Buffer('bai')
.close()
describe 'with a write-read-read-write-read-read recording', ->
beforeEach ->
= new ReplayChannel testRecordingPath('synthetic-wrrwrr')
.open()
it 'reports reads right after writes', ->
(new Promise (resolve, reject) =>
reads = []
.onData = (data) =>
reads.push data
resolve reads if reads.length is 2
.write(new Buffer('Hello')).catch (error) => reject error
).then (data) =>
expect(data).to.deep.equal [new Buffer('world'), new Buffer('bai')]
new Promise (resolve, reject) =>
reads = []
.onData = (data) =>
reads.push data
resolve reads if reads.length is 2
.write(new Buffer('hai')).catch (error) => reject error
.then (data) =>
expect(data).to.deep.equal [new Buffer('iab'), new Buffer('owrld')]
.close()