xhr2
Version:
XMLHttpRequest emulation for node.js
90 lines (78 loc) • 3.47 kB
text/coffeescript
describe 'XMLHttpRequest', ->
describe '#send', ->
beforeEach ->
= new XMLHttpRequest
.open 'POST', 'http://localhost:8912/_/echo'
= new ArrayBuffer xhr2PngBytes.length
= new Uint8Array
if typeof Buffer is 'undefined'
= null
else
= Buffer.alloc xhr2PngBytes.length
for i in [0...xhr2PngBytes.length]
[i] = xhr2PngBytes[i]
.writeUInt8 xhr2PngBytes[i], i if
it 'works with ASCII DOMStrings', (done) ->
.onload = =>
expect(.getResponseHeader('content-type')).to.
match(/^text\/plain(;\s?charset=UTF-8)?$/)
expect(.responseText).to.equal 'Hello world!'
done()
.send "Hello world!"
it 'works with UTF-8 DOMStrings', (done) ->
.onloadend = =>
expect(.getResponseHeader('content-type')).to.
match(/^text\/plain(;\s?charset=UTF-8)?$/)
expect(.responseText).to.equal '世界你好!'
done()
.send '世界你好!'
it 'works with ArrayBufferViews', (done) ->
.responseType = 'arraybuffer'
.onload = =>
expect(.getResponseHeader('content-type')).to.equal null
responseView = new Uint8Array .response
responseBytes = (responseView[i] for i in [0...responseView.length])
expect(responseBytes).to.deep.equal xhr2PngBytes
done()
.send
it 'works with ArrayBufferViews with set index and length', (done) ->
.responseType = 'arraybuffer'
.onload = =>
expect(.getResponseHeader('content-type')).to.equal null
responseView = new Uint8Array .response
responseBytes = (responseView[i] for i in [0...responseView.length])
expect(responseBytes).to.deep.equal xhr2PngBytes[10...52]
done()
arrayBufferView10 = new Uint8Array , 10, 42
.send arrayBufferView10
it 'works with ArrayBuffers', (done) ->
.responseType = 'arraybuffer'
.onload = =>
expect(.getResponseHeader('content-type')).to.equal null
responseView = new Uint8Array .response
responseBytes = (responseView[i] for i in [0...responseView.length])
expect(responseBytes).to.deep.equal xhr2PngBytes
done()
.send
it 'works with node.js Buffers', (done) ->
return done() unless
# NOTE: using the same exact code as above, which is tested in a browser
.responseType = 'arraybuffer'
.onload = =>
expect(.getResponseHeader('content-type')).to.equal null
responseView = new Uint8Array .response
responseBytes = (responseView[i] for i in [0...responseView.length])
expect(responseBytes).to.deep.equal xhr2PngBytes
done()
.send
it 'sets POST headers correctly when given null data', (done) ->
.open 'POST', 'http://localhost:8912/_/headers'
.responseType = 'text'
.onload = =>
expect(.responseText).to.match(/^\{.*\}$/)
headers = JSON.parse .responseText
expect(headers).to.have.property 'content-length'
expect(headers['content-length']).to.equal '0'
expect(headers).not.to.have.property 'content-type'
done()
.send()