You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
typesetting/pitfall/pdfkit/node_modules/restructure/test/String.coffee

132 lines
4.2 KiB
CoffeeScript

{String:StringT, uint8, DecodeStream, EncodeStream} = require '../'
should = require('chai').should()
concat = require 'concat-stream'
describe 'String', ->
describe 'decode', ->
it 'should decode fixed length', ->
stream = new DecodeStream new Buffer 'testing'
string = new StringT 7
string.decode(stream).should.equal 'testing'
it 'should decode length from parent key', ->
stream = new DecodeStream new Buffer 'testing'
string = new StringT 'len'
string.decode(stream, len: 7).should.equal 'testing'
it 'should decode length as number before string', ->
stream = new DecodeStream new Buffer '\x07testing'
string = new StringT uint8
string.decode(stream).should.equal 'testing'
it 'should decode utf8', ->
stream = new DecodeStream new Buffer '🍻'
string = new StringT 4, 'utf8'
string.decode(stream).should.equal '🍻'
it 'should decode encoding computed from function', ->
stream = new DecodeStream new Buffer '🍻'
string = new StringT 4, -> 'utf8'
string.decode(stream).should.equal '🍻'
it 'should decode null-terminated string and read past terminator', ->
stream = new DecodeStream new Buffer '🍻\x00'
string = new StringT null, 'utf8'
string.decode(stream).should.equal '🍻'
stream.pos.should.equal 5
it 'should decode remainder of buffer when null-byte missing', ->
stream = new DecodeStream new Buffer '🍻'
string = new StringT null, 'utf8'
string.decode(stream).should.equal '🍻'
describe 'size', ->
it 'should use string length', ->
string = new StringT 7
string.size('testing').should.equal 7
it 'should use correct encoding', ->
string = new StringT 10, 'utf8'
string.size('🍻').should.equal 4
it 'should use encoding from function', ->
string = new StringT 10, -> 'utf8'
string.size('🍻').should.equal 4
it 'should add size of length field before string', ->
string = new StringT uint8, 'utf8'
string.size('🍻').should.equal 5
it 'should work with utf16be encoding', ->
string = new StringT 10, 'utf16be'
string.size('🍻').should.equal 4
it 'should take null-byte into account', ->
string = new StringT null, 'utf8'
string.size('🍻').should.equal 5
it 'should use defined length if no value given', ->
array = new StringT 10
array.size().should.equal 10
describe 'encode', ->
it 'should encode using string length', (done) ->
stream = new EncodeStream
stream.pipe concat (buf) ->
buf.should.deep.equal new Buffer 'testing'
done()
string = new StringT 7
string.encode(stream, 'testing')
stream.end()
it 'should encode length as number before string', (done) ->
stream = new EncodeStream
stream.pipe concat (buf) ->
buf.should.deep.equal new Buffer '\x07testing'
done()
string = new StringT uint8
string.encode(stream, 'testing')
stream.end()
it 'should encode length as number before string utf8', (done) ->
stream = new EncodeStream
stream.pipe concat (buf) ->
buf.should.deep.equal new Buffer '\x0ctesting 😜', 'utf8'
done()
string = new StringT uint8, 'utf8'
string.encode(stream, 'testing 😜')
stream.end()
it 'should encode utf8', (done) ->
stream = new EncodeStream
stream.pipe concat (buf) ->
buf.should.deep.equal new Buffer '🍻'
done()
string = new StringT 4, 'utf8'
string.encode(stream, '🍻')
stream.end()
it 'should encode encoding computed from function', (done) ->
stream = new EncodeStream
stream.pipe concat (buf) ->
buf.should.deep.equal new Buffer '🍻'
done()
string = new StringT 4, -> 'utf8'
string.encode(stream, '🍻')
stream.end()
it 'should encode null-terminated string', (done) ->
stream = new EncodeStream
stream.pipe concat (buf) ->
buf.should.deep.equal new Buffer '🍻\x00'
done()
string = new StringT null, 'utf8'
string.encode(stream, '🍻')
stream.end()