Skip to content

Commit fe3f0dc

Browse files
stiegmbroadst
authored andcommitted
fix: support Number object in Int32 and Double constructors
Numbers objects deserve the same love and support as their primitive counterparts. So handle them appropriately without introducing regressions into behaviors of other types that may be passed in as values Fixes NODE-2384
1 parent ff30b58 commit fe3f0dc

File tree

4 files changed

+52
-2
lines changed

4 files changed

+52
-2
lines changed

Diff for: lib/double.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,14 @@ class Double {
66
/**
77
* Create a Double type
88
*
9-
* @param {number} value the number we want to represent as a double.
9+
* @param {number|Number} value the number we want to represent as a double.
1010
* @return {Double}
1111
*/
1212
constructor(value) {
13+
if (value instanceof Number) {
14+
value = value.valueOf();
15+
}
16+
1317
this.value = value;
1418
}
1519

Diff for: lib/int_32.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,14 @@ class Int32 {
66
/**
77
* Create an Int32 type
88
*
9-
* @param {number} value the number we want to represent as an int32.
9+
* @param {number|Number} value the number we want to represent as an int32.
1010
* @return {Int32}
1111
*/
1212
constructor(value) {
13+
if (value instanceof Number) {
14+
value = value.valueOf();
15+
}
16+
1317
this.value = value;
1418
}
1519

Diff for: test/node/double_tests.js

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
'use strict';
2+
3+
const BSON = require('../../lib/bson');
4+
const Double = BSON.Double;
5+
const expect = require('chai').expect;
6+
7+
describe('Double', function() {
8+
describe('Constructor', function() {
9+
var value = 42.3456;
10+
11+
it('Primitive number', function(done) {
12+
expect(new Double(value).valueOf()).to.equal(value);
13+
done();
14+
});
15+
16+
it('Number object', function(done) {
17+
expect(new Double(new Number(value)).valueOf()).to.equal(value);
18+
done();
19+
});
20+
});
21+
});

Diff for: test/node/int_32_tests.js

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
'use strict';
2+
3+
const BSON = require('../../lib/bson');
4+
const Int32 = BSON.Int32;
5+
const expect = require('chai').expect;
6+
7+
describe('Int32', function() {
8+
describe('Constructor', function() {
9+
var value = 42;
10+
11+
it('Primitive number', function(done) {
12+
expect(new Int32(value).valueOf()).to.equal(value);
13+
done();
14+
});
15+
16+
it('Number object', function(done) {
17+
expect(new Int32(new Number(value)).valueOf()).to.equal(value);
18+
done();
19+
});
20+
});
21+
});

0 commit comments

Comments
 (0)