123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- var syntax = require('zunit').syntax;
- var match = require('..').match;
- var parse = require('..').parse;
- var compile = require('..').matcher;
- var assert = require('assert');
- var Buffer = require('safe-buffer').Buffer;
- var suite = syntax.describe;
- var test = syntax.it;
- Object.prototype.AMQPLIB_ISSUE_453 = 123123123
- var INT_TESTS = [
- ['n:8',
- [[[255], 255]]],
- ['n:8/signed',
- [[[255], -1]]],
- ['n:1/unit:8',
- [[[129], 129]]],
- ['n:1/unit:8-signed',
- [[[129], -127]]],
- ['n:16',
- [[[1, 255], 511]]],
- ['n:16/signed',
- [[[255, 65], -191]]],
- ['n:16/little',
- [[[255, 1], 511]]],
- ['n:16/signed-little',
- [[[65, 255], -191]]],
- ['n:32',
- [[[45, 23, 97, 102], 756506982]]],
- ['n:32/signed',
- [[[245, 23, 97, 102], -183017114]]],
- ['n:32/little',
- [[[245, 23, 97, 102], 1717639157]]],
- ['n:32/signed-little',
- [[[245, 23, 97, 129], -2124343307]]],
- ['n:4/signed-little-unit:8',
- [[[245, 23, 97, 129], -2124343307]]],
- ['n:64',
- [[[1,2,3,4,5,6,7,8], 72623859790382856]]],
- ['n:64/signed',
- [[[255,2,3,4,5,6,7,8], -71491328285473016]]],
- ['n:64/little',
- [[[1,2,3,4,5,6,7,8], 578437695752307201]]],
- ['n:64/little-signed',
- [[[1,2,3,4,5,6,7,255], -70080650589044223]]],
- ['n:8/signed-unit:8-little',
- [[[1,2,3,4,5,6,7,255], -70080650589044223]]],
- ];
- suite("Integer",
- function() {
- INT_TESTS.forEach(function(p) {
- var pattern = parse(p[0]);
- var cpattern = compile(p[0]);
- p[1].forEach(function(tc) {
- test(p[0], function() {
- assert.deepEqual({n: tc[1]}, match(pattern, Buffer.from(tc[0])));
- });
- test(p[0], function() {
- assert.deepEqual({n: tc[1]}, cpattern(Buffer.from(tc[0])));
- });
- });
- });
- });
- // test cases largely constructed in Erlang using e.g.,
- // Pi = math:pi(), <<Pi:32/float>>.
- FLOAT_TESTS = [
- ['n:32/float',
- [[[64,73,15,219], Math.PI],
- [[0, 0, 0, 0], 0.0 ]]],
- ['n:64/float',
- [[[64,9,33,251,84,68,45,24], Math.PI],
- [[0, 0, 0, 0, 0, 0, 0, 0], 0.0]]],
- ['n:32/float-little',
- [[[219, 15, 73, 64], Math.PI],
- [[0, 0, 0, 0], 0.0]]],
- ['n:64/float-little',
- [[[24, 45, 68, 84, 251, 33, 9, 64], Math.PI],
- [[0, 0, 0, 0, 0, 0, 0, 0], 0.0]]],
- ['n:4/float-unit:8',
- [[[64,73,15,219], Math.PI],
- [[0, 0, 0, 0], 0.0]]]
- ];
- suite("Float",
- function() {
- var precision = 0.00001;
- FLOAT_TESTS.forEach(function(p) {
- var pattern = parse(p[0]);
- var cpattern = compile(p[0]);
- p[1].forEach(function(tc) {
- test(p[0], function() {
- var m = match(pattern, Buffer.from(tc[0]));
- assert.ok(m.n !== undefined);
- assert.ok(Math.abs(tc[1] - m.n) < precision);
- });
- test(p[0], function() {
- var m = cpattern(Buffer.from(tc[0]));
- assert.ok(m.n !== undefined);
- assert.ok(Math.abs(tc[1] - m.n) < precision);
- });
- });
- });
- });
- BINARY_TESTS = [
- ['n:0/unit:8-binary', []],
- ['n:1/unit:8-binary', [93]],
- ['n:5/unit:8-binary', [1, 2, 3, 4, 5]],
- ['n:32/unit:1-binary', [255, 254, 253, 252]]
- ];
- suite("Binary",
- function() {
- BINARY_TESTS.forEach(function(p) {
- var pattern = parse(p[0]);
- var cpattern = compile(p[0]);
- var prest = p[0] + ', _/binary';
- var patternrest = parse(prest);
- var cpatternrest = compile(prest);
- test(p[0], function() {
- assert.deepEqual({n: Buffer.from(p[1])},
- match(pattern, Buffer.from(p[1])));
- assert.deepEqual({n: Buffer.from(p[1])},
- cpattern(Buffer.from(p[1])));
- });
- test(prest, function() {
- var plusgarbage = p[1].concat([5, 98, 23, 244]);
- assert.deepEqual({n: Buffer.from(p[1])},
- match(patternrest, Buffer.from(plusgarbage)));
- assert.deepEqual({n: Buffer.from(p[1])},
- cpatternrest(Buffer.from(plusgarbage)));
- });
- });
- });
- var VAR_TESTS = [
- ['size, n:size',
- [[[8, 5], 5],
- [[32, 0, 0, 0, 167], 167]]],
- ['size, n:size/binary',
- [[[2, 5, 6], Buffer.from([5, 6])]]],
- ['a, b:a, n:b',
- [[[8, 32, 0, 0, 2, 100], 612]]]
- ];
- suite("Environment",
- function() {
- VAR_TESTS.forEach(function(p) {
- var pattern = parse(p[0]);
- var cpattern = compile(p[0]);
- p[1].forEach(function(tc) {
- test(p[0], function() {
- assert.deepEqual(tc[1], match(pattern, Buffer.from(tc[0])).n);
- });
- test(p[0], function() {
- assert.deepEqual(tc[1], cpattern(Buffer.from(tc[0])).n);
- });
- });
- });
- });
- STRING_TESTS = [
- ['"foobar", n:8', "foobarA", 'A'.charCodeAt(0)],
- ['n:8, "foobar", _/binary', "CfoobarGARBAGE", 'C'.charCodeAt(0)],
- ['"foo, :-bar\\"", n:8, "another"', 'foo, :-bar"Zanother', 'Z'.charCodeAt(0)]
- ];
- suite("String",
- function() {
- STRING_TESTS.forEach(function(p) {
- var pattern = parse(p[0]);
- test(p[0], function() {
- var res = match(pattern, Buffer.from(p[1]));
- assert.equal(res.n, p[2]);
- });
- });
- });
|