THRIFT-3444 Large 64 bit Integer does not preserve value through Node.js JSONProtocol
Client: Node.js
Patch: Nobuaki Sukegawa
This closes #712
diff --git a/lib/nodejs/test/test-cases.js b/lib/nodejs/test/test-cases.js
index 6953e1a..13722be 100644
--- a/lib/nodejs/test/test-cases.js
+++ b/lib/nodejs/test/test-cases.js
@@ -1,6 +1,7 @@
'use strict';
var ttypes = require('./gen-nodejs/ThriftTest_types');
+var Int64 = require('node-int64');
//all Languages in UTF-8
/*jshint -W100 */
@@ -58,15 +59,14 @@
['testI32', -1],
['testDouble', -5.2098523],
['testDouble', 7.012052175215044],
- ['testEnum', ttypes.Numberz.ONE]
-];
-
-var simpleLoose = [
+ ['testEnum', ttypes.Numberz.ONE],
['testI64', 5],
['testI64', -5],
['testI64', 734359738368],
- ['testI64', -34359738368],
['testI64', -734359738368],
+ ['testI64', new Int64(new Buffer([0, 0x20, 0, 0, 0, 0, 0, 1]))], // 2^53+1
+ ['testI64', new Int64(
+ new Buffer([0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]))], // -2^53-1
['testTypedef', 69]
]
@@ -134,7 +134,6 @@
};
module.exports.simple = simple;
-module.exports.simpleLoose = simpleLoose;
module.exports.deep = deep;
module.exports.deepUnordered = deepUnordered;
diff --git a/lib/nodejs/test/test_driver.js b/lib/nodejs/test/test_driver.js
index 590d583..03ec513 100644
--- a/lib/nodejs/test/test_driver.js
+++ b/lib/nodejs/test/test_driver.js
@@ -50,9 +50,13 @@
};
}
- testCases.simple.forEach(makeAsserter(assert.equal));
- testCases.simpleLoose.forEach(makeAsserter(function(a, e, m){
- assert.ok(a == e, m);
+ testCases.simple.forEach(makeAsserter(function(a, e, m){
+ if (a instanceof Int64) {
+ var e64 = e instanceof Int64 ? e : new Int64(e);
+ assert.deepEqual(a.buffer, e64.buffer, m);
+ } else {
+ assert.equal(a, e, m);
+ }
}));
testCases.deep.forEach(makeAsserter(assert.deepEqual));
testCases.deepUnordered.forEach(makeAsserter(makeUnorderedDeepEqual(assert)));
@@ -160,9 +164,13 @@
};
}
- testCases.simple.forEach(makeAsserter(assert.equal));
- testCases.simpleLoose.forEach(makeAsserter(function(a, e, m){
- assert.ok(a == e, m);
+ testCases.simple.forEach(makeAsserter(function(a, e, m){
+ if (a instanceof Int64) {
+ var e64 = e instanceof Int64 ? e : new Int64(e);
+ assert.deepEqual(a.buffer, e64.buffer, m);
+ } else {
+ assert.equal(a, e, m);
+ }
}));
testCases.deep.forEach(makeAsserter(assert.deepEqual));
testCases.deepUnordered.forEach(makeAsserter(makeUnorderedDeepEqual(assert)));