JAVASCRIPT   28

testjs

Guest on 6th August 2022 11:05:13 AM

  1. 'use strict'
  2.  
  3. var test = require('tape')
  4. var txtStr = require('./')()
  5. var txtBin = require('./')({ binary: true })
  6.  
  7. var obj = {
  8.   String: 'foo',
  9.   number: 42,
  10.   empty: '',
  11.   null: null,
  12.   bool: true,
  13.   buffer: new Buffer('bar')
  14. }
  15.  
  16. test('encodingLength', function (t) {
  17.   var len = txtBin.encodingLength(obj)
  18.   t.equal(len, 54)
  19.   t.end()
  20. })
  21.  
  22. test('encode', function (t) {
  23.   var buf = txtBin.encode(obj)
  24.   var expected = new Buffer('0a' + '537472696e67' + '3d' + '666f6f' +
  25.                             '09' + '6e756d626572' + '3d' + '3432' +
  26.                             '06' + '656d707479' + '3d' +
  27.                             '09' + '6e756c6c' + '3d' + '6e756c6c' +
  28.                             '04' + '626f6f6c' +
  29.                             '0a' + '627566666572' + '3d' + '626172', 'hex')
  30.   t.deepEqual(buf, expected)
  31.   t.equal(txtBin.encode.bytes, expected.length)
  32.   t.end()
  33. })
  34.  
  35. test('encode - empty', function (t) {
  36.   var buf = txtBin.encode({})
  37.   var expected = new Buffer('00', 'hex')
  38.   t.deepEqual(buf, expected)
  39.   t.equal(txtBin.encode.bytes, expected.length)
  40.   t.end()
  41. })
  42.  
  43. test('encode - undefined', function (t) {
  44.   var buf = txtBin.encode()
  45.   var expected = new Buffer('00', 'hex')
  46.   t.deepEqual(buf, expected)
  47.   t.equal(txtBin.encode.bytes, expected.length)
  48.   t.end()
  49. })
  50.  
  51. test('encode - with buffer', function (t) {
  52.   var buf = new Buffer(3)
  53.   buf.fill(255)
  54.   txtBin.encode({}, buf)
  55.   var expected = new Buffer('00ffff', 'hex')
  56.   t.deepEqual(buf, expected)
  57.   t.equal(txtBin.encode.bytes, 1)
  58.   t.end()
  59. })
  60.  
  61. test('encode - with buffer and offset', function (t) {
  62.   var buf = new Buffer(3)
  63.   buf.fill(255)
  64.   txtBin.encode({}, buf, 1)
  65.   var expected = new Buffer('ff00ff', 'hex')
  66.   t.deepEqual(buf, expected)
  67.   t.equal(txtBin.encode.bytes, 1)
  68.   t.end()
  69. })
  70.  
  71. test('decode', function (t) {
  72.   var encoded = txtBin.encode(obj)
  73.   var result = txtBin.decode(encoded)
  74.   var expected = {
  75.     string: new Buffer('foo'),
  76.     number: new Buffer('42'),
  77.     empty: new Buffer(0),
  78.     null: new Buffer('null'),
  79.     bool: true,
  80.     buffer: new Buffer('bar')
  81.   }
  82.   t.deepEqual(result, expected)
  83.   t.equal(txtBin.decode.bytes, encoded.length)
  84.   t.end()
  85. })
  86.  
  87. test('decode - strings', function (t) {
  88.   var encoded = txtStr.encode(obj)
  89.   var result = txtStr.decode(encoded)
  90.   var expected = {
  91.     string: 'foo',
  92.     number: '42',
  93.     empty: '',
  94.     null: 'null',
  95.     bool: true,
  96.     buffer: 'bar'
  97.   }
  98.   t.deepEqual(result, expected)
  99.   t.equal(txtStr.decode.bytes, encoded.length)
  100.   t.end()
  101. })
  102.  
  103. test('decode - duplicate', function (t) {
  104.   var orig = {
  105.     Foo: 'bar',
  106.     foo: 'ignore this'
  107.   }
  108.   var expected = {
  109.     foo: new Buffer('bar')
  110.   }
  111.   var encoded = txtBin.encode(orig)
  112.   var result = txtBin.decode(encoded)
  113.   t.deepEqual(result, expected)
  114.   t.equal(txtBin.decode.bytes, encoded.length)
  115.   t.end()
  116. })
  117.  
  118. test('decode - single zero bype', function (t) {
  119.   var encoded = new Buffer('00', 'hex')
  120.   var result = txtBin.decode(encoded)
  121.   t.deepEqual(result, {})
  122.   t.equal(txtBin.decode.bytes, encoded.length)
  123.   t.end()
  124. })
  125.  
  126. test('decode - with offset', function (t) {
  127.   var encoded = new Buffer('012300', 'hex')
  128.   var result = txtBin.decode(encoded, 2)
  129.   t.deepEqual(result, {})
  130.   t.equal(txtBin.decode.bytes, 1)
  131.   t.end()
  132. })
  133.  
  134. test('decode - exactly 256 bytes', function (t) {
  135.   var expected = { foo: '' }
  136.   var maxLength = Object.keys(expected).reduce(function (total, key) {
  137.     return total - key.length - 1 // - 1 for the equal sign used to separate the key and the value
  138.   }, 255)
  139.  
  140.   for (var n = 0; n < maxLength; n++) {
  141.     expected.foo += 'x'
  142.   }
  143.  
  144.   // the max case:
  145.   var encoded = txtStr.encode(expected)
  146.   t.equal(txtStr.encode.bytes, 256)
  147.   var result = txtStr.decode(encoded)
  148.   t.deepEqual(result, expected)
  149.   t.equal(txtStr.decode.bytes, encoded.length)
  150.  
  151.   // go beound the max:
  152.   expected.foo += 'x'
  153.   encoded = txtStr.encode(expected)
  154.   t.equal(txtStr.encode.bytes, 257)
  155.   result = txtStr.decode(encoded)
  156.   t.notDeepEqual(result, expected)
  157.   t.ok(txtStr.decode.bytes > encoded.length)
  158.  
  159.   t.end()
  160. })

Raw Paste


Login or Register to edit or fork this paste. It's free.