consing.test.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. var syntax = require('zunit').syntax;
  2. var assert = require('assert');
  3. var parse = require('..').parse;
  4. var build = require('..').build;
  5. var builder = require('..').builder;
  6. var write = require('..').write;
  7. var Buffer = require('safe-buffer').Buffer;
  8. var suite = syntax.describe;
  9. var test = syntax.it;
  10. TEST_CASES = [
  11. ['n:8', {n:255}, [255]],
  12. ['n:16', {n: 0xf0f0}, [240, 240]],
  13. ['n:32', {n: 0x12345678}, [18,52,86,120]],
  14. ['n:64', {n: 0xffffffffffffffff}, [255,255,255,255,255,255,255,255]],
  15. ['n:8, s/binary', {n: 255, s: Buffer.from("foobar")}, [255, 0x66, 0x6f, 0x6f, 0x62, 0x61, 0x72]],
  16. ['n:8, "foobar", m:8', {n: 255, m:0}, [255, 0x66, 0x6f, 0x6f, 0x62, 0x61, 0x72, 0]],
  17. ['n:8, s:n/binary', {n:6, s: Buffer.from('foobar')}, [6, 0x66, 0x6f, 0x6f, 0x62, 0x61, 0x72]],
  18. ['n:8, s:n/binary', {n:4, s: Buffer.from('foobar')}, [4, 0x66, 0x6f, 0x6f, 0x62]],
  19. ['n:size', {n:4, size:8}, [4]],
  20. ['206:n/unit:8', {n:1}, [206]]
  21. ];
  22. function bufferToArray(buf) {
  23. return Array.prototype.slice.call(buf);
  24. }
  25. suite("Construction", function() {
  26. TEST_CASES.forEach(function(c) {
  27. var p = parse(c[0]);
  28. test(c[0], function() {
  29. assert.deepEqual(c[2], bufferToArray(build(p, c[1])));
  30. });
  31. test(c[0], function() {
  32. var buf = Buffer.alloc(1024);
  33. var end = write(buf, 7, p, c[1]);
  34. buf = buf.slice(7, end);
  35. assert.deepEqual(c[2], bufferToArray(buf));
  36. });
  37. test(c[0], function() {
  38. var cons = builder(c[0]);
  39. var buf = cons(c[1]);
  40. assert.deepEqual(c[2], bufferToArray(buf));
  41. });
  42. });
  43. });