@@ -86,6 +86,19 @@ var ISODate = function(string) {
8686 } else throw new Error ( 'Invalid ISO 8601 date given.' , __filename ) ;
8787} ;
8888
89+ function runTestsOnBytesForBufferAndUint8Array ( bytes , testFn ) {
90+ let serialized_data = '' ;
91+ // Convert to chars
92+ for ( let i = 0 ; i < bytes . length ; i ++ ) {
93+ serialized_data = serialized_data + BinaryParser . fromByte ( bytes [ i ] ) ;
94+ }
95+
96+ const uint8Array = Uint8Array . from ( bytes ) ;
97+ const buffer = new Buffer ( serialized_data , 'binary' ) ;
98+
99+ [ uint8Array , buffer ] . forEach ( testFn ) ;
100+ }
101+
89102describe ( 'BSON' , function ( ) {
90103 /**
91104 * @ignore
@@ -224,16 +237,19 @@ describe('BSON', function() {
224237 0 ,
225238 0
226239 ] ;
227- var serialized_data = '' ;
228- // Convert to chars
229- for ( var i = 0 ; i < bytes . length ; i ++ ) {
230- serialized_data = serialized_data + BinaryParser . fromByte ( bytes [ i ] ) ;
231- }
232240
233- var object = createBSON ( ) . deserialize ( new Buffer ( serialized_data , 'binary' ) ) ;
234- expect ( 'a_1' ) . to . equal ( object . name ) ;
235- expect ( false ) . to . equal ( object . unique ) ;
236- expect ( 1 ) . to . equal ( object . key . a ) ;
241+ runTestsOnBytesForBufferAndUint8Array ( bytes , data => {
242+ let object = createBSON ( ) . deserialize ( data ) ;
243+ expect ( 'a_1' ) . to . equal ( object . name ) ;
244+ expect ( false ) . to . equal ( object . unique ) ;
245+ expect ( 1 ) . to . equal ( object . key . a ) ;
246+
247+ object = createBSON ( ) . deserialize ( Uint8Array . from ( bytes ) ) ;
248+ expect ( 'a_1' ) . to . equal ( object . name ) ;
249+ expect ( false ) . to . equal ( object . unique ) ;
250+ expect ( 1 ) . to . equal ( object . key . a ) ;
251+ } ) ;
252+
237253 done ( ) ;
238254 } ) ;
239255
@@ -525,29 +541,26 @@ describe('BSON', function() {
525541 0 ,
526542 0
527543 ] ;
528- var serialized_data = '' ;
529544
530- // Convert to chars
531- for ( var i = 0 ; i < bytes . length ; i ++ ) {
532- serialized_data = serialized_data + BinaryParser . fromByte ( bytes [ i ] ) ;
533- }
545+ runTestsOnBytesForBufferAndUint8Array ( bytes , data => {
546+ const object = createBSON ( ) . deserialize ( data ) ;
547+ // Perform tests
548+ expect ( 'hello' ) . to . equal ( object . string ) ;
549+ expect ( [ 1 , 2 , 3 ] ) . to . deep . equal ( object . array ) ;
550+ expect ( 1 ) . to . equal ( object . hash . a ) ;
551+ expect ( 2 ) . to . equal ( object . hash . b ) ;
552+ expect ( object . date != null ) . to . be . ok ;
553+ expect ( object . oid != null ) . to . be . ok ;
554+ expect ( object . binary != null ) . to . be . ok ;
555+ expect ( 42 ) . to . equal ( object . int ) ;
556+ expect ( 33.3333 ) . to . equal ( object . float ) ;
557+ expect ( object . regexp != null ) . to . be . ok ;
558+ expect ( true ) . to . equal ( object . boolean ) ;
559+ expect ( object . where != null ) . to . be . ok ;
560+ expect ( object . dbref != null ) . to . be . ok ;
561+ expect ( object [ null ] == null ) . to . be . ok ;
562+ } ) ;
534563
535- var object = createBSON ( ) . deserialize ( new Buffer ( serialized_data , 'binary' ) ) ;
536- // Perform tests
537- expect ( 'hello' ) . to . equal ( object . string ) ;
538- expect ( [ 1 , 2 , 3 ] ) . to . deep . equal ( object . array ) ;
539- expect ( 1 ) . to . equal ( object . hash . a ) ;
540- expect ( 2 ) . to . equal ( object . hash . b ) ;
541- expect ( object . date != null ) . to . be . ok ;
542- expect ( object . oid != null ) . to . be . ok ;
543- expect ( object . binary != null ) . to . be . ok ;
544- expect ( 42 ) . to . equal ( object . int ) ;
545- expect ( 33.3333 ) . to . equal ( object . float ) ;
546- expect ( object . regexp != null ) . to . be . ok ;
547- expect ( true ) . to . equal ( object . boolean ) ;
548- expect ( object . where != null ) . to . be . ok ;
549- expect ( object . dbref != null ) . to . be . ok ;
550- expect ( object [ null ] == null ) . to . be . ok ;
551564 done ( ) ;
552565 } ) ;
553566
@@ -2317,4 +2330,20 @@ describe('BSON', function() {
23172330 expect ( false ) . to . equal ( id . equals ( undefined ) ) ;
23182331 done ( ) ;
23192332 } ) ;
2333+
2334+ it ( 'Should serialize the same values to a Buffer and a Uint8Array' , function ( ) {
2335+ const testData = { darmok : 'jalad' } ;
2336+
2337+ const dataLength = createBSON ( ) . serialize ( testData ) . length ;
2338+ const buffer = new Buffer ( dataLength ) ;
2339+ const uint8Array = new Uint8Array ( dataLength ) ;
2340+
2341+ createBSON ( ) . serializeWithBufferAndIndex ( testData , buffer ) ;
2342+ createBSON ( ) . serializeWithBufferAndIndex ( testData , uint8Array ) ;
2343+
2344+ const bufferRaw = Array . prototype . slice . call ( buffer , 0 ) ;
2345+ const uint8ArrayRaw = Array . prototype . slice . call ( uint8Array , 0 ) ;
2346+
2347+ expect ( bufferRaw ) . to . deep . equal ( uint8ArrayRaw ) ;
2348+ } ) ;
23202349} ) ;
0 commit comments