@@ -4,6 +4,7 @@ import bson from 'bson';
44import { MongoId , UUID , float32 , float64 , int8 , int16 , int32 , uint8 , uint16 , uint32 } from '@deepkit/type' ;
55
66import { getBSONSerializer } from '../../index.js' ;
7+ import { expectBytes } from '../test-utils.js' ;
78
89describe ( 'BSON Serializer - All Primitive Types' , ( ) => {
910 describe ( 'string' , ( ) => {
@@ -12,35 +13,31 @@ describe('BSON Serializer - All Primitive Types', () => {
1213 name : string ;
1314 }
1415 const serialize = getBSONSerializer < Doc > ( ) ;
15- const [ buffer , size ] = serialize ( { name : 'hello' } ) ;
16- expect ( Array . from ( buffer . slice ( 0 , size ) ) ) . toEqual ( Array . from ( bson . serialize ( { name : 'hello' } ) ) ) ;
16+ expectBytes ( serialize ( { name : 'hello' } ) , bson . serialize ( { name : 'hello' } ) ) ;
1717 } ) ;
1818
1919 test ( 'empty string' , ( ) => {
2020 interface Doc {
2121 name : string ;
2222 }
2323 const serialize = getBSONSerializer < Doc > ( ) ;
24- const [ buffer , size ] = serialize ( { name : '' } ) ;
25- expect ( Array . from ( buffer . slice ( 0 , size ) ) ) . toEqual ( Array . from ( bson . serialize ( { name : '' } ) ) ) ;
24+ expectBytes ( serialize ( { name : '' } ) , bson . serialize ( { name : '' } ) ) ;
2625 } ) ;
2726
2827 test ( 'unicode string' , ( ) => {
2928 interface Doc {
3029 name : string ;
3130 }
3231 const serialize = getBSONSerializer < Doc > ( ) ;
33- const [ buffer , size ] = serialize ( { name : '你好世界' } ) ;
34- expect ( Array . from ( buffer . slice ( 0 , size ) ) ) . toEqual ( Array . from ( bson . serialize ( { name : '你好世界' } ) ) ) ;
32+ expectBytes ( serialize ( { name : '你好世界' } ) , bson . serialize ( { name : '你好世界' } ) ) ;
3533 } ) ;
3634
3735 test ( 'emoji string' , ( ) => {
3836 interface Doc {
3937 name : string ;
4038 }
4139 const serialize = getBSONSerializer < Doc > ( ) ;
42- const [ buffer , size ] = serialize ( { name : '🎉🚀' } ) ;
43- expect ( Array . from ( buffer . slice ( 0 , size ) ) ) . toEqual ( Array . from ( bson . serialize ( { name : '🎉🚀' } ) ) ) ;
40+ expectBytes ( serialize ( { name : '🎉🚀' } ) , bson . serialize ( { name : '🎉🚀' } ) ) ;
4441 } ) ;
4542 } ) ;
4643
@@ -50,26 +47,23 @@ describe('BSON Serializer - All Primitive Types', () => {
5047 val : number ;
5148 }
5249 const serialize = getBSONSerializer < Doc > ( ) ;
53- const [ buffer , size ] = serialize ( { val : 42 } ) ;
54- expect ( Array . from ( buffer . slice ( 0 , size ) ) ) . toEqual ( Array . from ( bson . serialize ( { val : 42 } ) ) ) ;
50+ expectBytes ( serialize ( { val : 42 } ) , bson . serialize ( { val : 42 } ) ) ;
5551 } ) ;
5652
5753 test ( 'float' , ( ) => {
5854 interface Doc {
5955 val : number ;
6056 }
6157 const serialize = getBSONSerializer < Doc > ( ) ;
62- const [ buffer , size ] = serialize ( { val : 3.14 } ) ;
63- expect ( Array . from ( buffer . slice ( 0 , size ) ) ) . toEqual ( Array . from ( bson . serialize ( { val : 3.14 } ) ) ) ;
58+ expectBytes ( serialize ( { val : 3.14 } ) , bson . serialize ( { val : 3.14 } ) ) ;
6459 } ) ;
6560
6661 test ( 'large integer (exceeds int32)' , ( ) => {
6762 interface Doc {
6863 val : number ;
6964 }
7065 const serialize = getBSONSerializer < Doc > ( ) ;
71- const [ buffer , size ] = serialize ( { val : 9007199254740991 } ) ;
72- expect ( Array . from ( buffer . slice ( 0 , size ) ) ) . toEqual ( Array . from ( bson . serialize ( { val : 9007199254740991 } ) ) ) ;
66+ expectBytes ( serialize ( { val : 9007199254740991 } ) , bson . serialize ( { val : 9007199254740991 } ) ) ;
7367 } ) ;
7468 } ) ;
7569
@@ -153,17 +147,15 @@ describe('BSON Serializer - All Primitive Types', () => {
153147 active : boolean ;
154148 }
155149 const serialize = getBSONSerializer < Doc > ( ) ;
156- const [ buffer , size ] = serialize ( { active : true } ) ;
157- expect ( Array . from ( buffer . slice ( 0 , size ) ) ) . toEqual ( Array . from ( bson . serialize ( { active : true } ) ) ) ;
150+ expectBytes ( serialize ( { active : true } ) , bson . serialize ( { active : true } ) ) ;
158151 } ) ;
159152
160153 test ( 'false' , ( ) => {
161154 interface Doc {
162155 active : boolean ;
163156 }
164157 const serialize = getBSONSerializer < Doc > ( ) ;
165- const [ buffer , size ] = serialize ( { active : false } ) ;
166- expect ( Array . from ( buffer . slice ( 0 , size ) ) ) . toEqual ( Array . from ( bson . serialize ( { active : false } ) ) ) ;
158+ expectBytes ( serialize ( { active : false } ) , bson . serialize ( { active : false } ) ) ;
167159 } ) ;
168160 } ) ;
169161
@@ -173,18 +165,17 @@ describe('BSON Serializer - All Primitive Types', () => {
173165 val : bigint ;
174166 }
175167 const serialize = getBSONSerializer < Doc > ( ) ;
176- const [ buffer , size ] = serialize ( { val : 9007199254740993n } ) ;
177- expect ( buffer [ 4 ] ) . toBe ( 0x12 ) ; // LONG type
178- expect ( Array . from ( buffer . slice ( 0 , size ) ) ) . toEqual ( Array . from ( bson . serialize ( { val : bson . Long . fromBigInt ( 9007199254740993n ) } ) ) ) ;
168+ const result = serialize ( { val : 9007199254740993n } ) ;
169+ expect ( result [ 0 ] [ 4 ] ) . toBe ( 0x12 ) ; // LONG type
170+ expectBytes ( result , bson . serialize ( { val : bson . Long . fromBigInt ( 9007199254740993n ) } ) ) ;
179171 } ) ;
180172
181173 test ( 'negative bigint' , ( ) => {
182174 interface Doc {
183175 val : bigint ;
184176 }
185177 const serialize = getBSONSerializer < Doc > ( ) ;
186- const [ buffer , size ] = serialize ( { val : - 9007199254740993n } ) ;
187- expect ( Array . from ( buffer . slice ( 0 , size ) ) ) . toEqual ( Array . from ( bson . serialize ( { val : bson . Long . fromBigInt ( - 9007199254740993n ) } ) ) ) ;
178+ expectBytes ( serialize ( { val : - 9007199254740993n } ) , bson . serialize ( { val : bson . Long . fromBigInt ( - 9007199254740993n ) } ) ) ;
188179 } ) ;
189180 } ) ;
190181
@@ -194,9 +185,9 @@ describe('BSON Serializer - All Primitive Types', () => {
194185 val : null ;
195186 }
196187 const serialize = getBSONSerializer < Doc > ( ) ;
197- const [ buffer , size ] = serialize ( { val : null } ) ;
198- expect ( buffer [ 4 ] ) . toBe ( 0x0a ) ; // NULL type
199- expect ( Array . from ( buffer . slice ( 0 , size ) ) ) . toEqual ( Array . from ( bson . serialize ( { val : null } ) ) ) ;
188+ const result = serialize ( { val : null } ) ;
189+ expect ( result [ 0 ] [ 4 ] ) . toBe ( 0x0a ) ; // NULL type
190+ expectBytes ( result , bson . serialize ( { val : null } ) ) ;
200191 } ) ;
201192 } ) ;
202193
@@ -207,18 +198,17 @@ describe('BSON Serializer - All Primitive Types', () => {
207198 }
208199 const serialize = getBSONSerializer < Doc > ( ) ;
209200 const date = new Date ( '2024-01-15T10:30:00.000Z' ) ;
210- const [ buffer , size ] = serialize ( { created : date } ) ;
211- expect ( buffer [ 4 ] ) . toBe ( 0x09 ) ; // DATE type
212- expect ( Array . from ( buffer . slice ( 0 , size ) ) ) . toEqual ( Array . from ( bson . serialize ( { created : date } ) ) ) ;
201+ const result = serialize ( { created : date } ) ;
202+ expect ( result [ 0 ] [ 4 ] ) . toBe ( 0x09 ) ; // DATE type
203+ expectBytes ( result , bson . serialize ( { created : date } ) ) ;
213204 } ) ;
214205
215206 test ( 'epoch date' , ( ) => {
216207 interface Doc {
217208 date : Date ;
218209 }
219210 const serialize = getBSONSerializer < Doc > ( ) ;
220- const [ buffer , size ] = serialize ( { date : new Date ( 0 ) } ) ;
221- expect ( Array . from ( buffer . slice ( 0 , size ) ) ) . toEqual ( Array . from ( bson . serialize ( { date : new Date ( 0 ) } ) ) ) ;
211+ expectBytes ( serialize ( { date : new Date ( 0 ) } ) , bson . serialize ( { date : new Date ( 0 ) } ) ) ;
222212 } ) ;
223213 } ) ;
224214
@@ -229,9 +219,9 @@ describe('BSON Serializer - All Primitive Types', () => {
229219 }
230220 const serialize = getBSONSerializer < Doc > ( ) ;
231221 const uuid = '550e8400-e29b-41d4-a716-446655440000' ;
232- const [ buffer , size ] = serialize ( { id : uuid } ) ;
233- expect ( buffer [ 4 ] ) . toBe ( 0x05 ) ; // BINARY type
234- expect ( Array . from ( buffer . slice ( 0 , size ) ) ) . toEqual ( Array . from ( bson . serialize ( { id : new bson . UUID ( uuid ) } ) ) ) ;
222+ const result = serialize ( { id : uuid } ) ;
223+ expect ( result [ 0 ] [ 4 ] ) . toBe ( 0x05 ) ; // BINARY type
224+ expectBytes ( result , bson . serialize ( { id : new bson . UUID ( uuid ) } ) ) ;
235225 } ) ;
236226 } ) ;
237227
@@ -242,9 +232,9 @@ describe('BSON Serializer - All Primitive Types', () => {
242232 }
243233 const serialize = getBSONSerializer < Doc > ( ) ;
244234 const oid = '507f1f77bcf86cd799439011' ;
245- const [ buffer , size ] = serialize ( { _id : oid } ) ;
246- expect ( buffer [ 4 ] ) . toBe ( 0x07 ) ; // OID type
247- expect ( Array . from ( buffer . slice ( 0 , size ) ) ) . toEqual ( Array . from ( bson . serialize ( { _id : new bson . ObjectId ( oid ) } ) ) ) ;
235+ const result = serialize ( { _id : oid } ) ;
236+ expect ( result [ 0 ] [ 4 ] ) . toBe ( 0x07 ) ; // OID type
237+ expectBytes ( result , bson . serialize ( { _id : new bson . ObjectId ( oid ) } ) ) ;
248238 } ) ;
249239 } ) ;
250240
@@ -255,9 +245,9 @@ describe('BSON Serializer - All Primitive Types', () => {
255245 }
256246 const serialize = getBSONSerializer < Doc > ( ) ;
257247 const data = new Uint8Array ( [ 1 , 2 , 3 , 4 , 5 ] ) ;
258- const [ buffer , size ] = serialize ( { data } ) ;
259- expect ( buffer [ 4 ] ) . toBe ( 0x05 ) ; // BINARY type
260- expect ( Array . from ( buffer . slice ( 0 , size ) ) ) . toEqual ( Array . from ( bson . serialize ( { data : new bson . Binary ( data ) } ) ) ) ;
248+ const result = serialize ( { data } ) ;
249+ expect ( result [ 0 ] [ 4 ] ) . toBe ( 0x05 ) ; // BINARY type
250+ expectBytes ( result , bson . serialize ( { data : new bson . Binary ( data ) } ) ) ;
261251 } ) ;
262252
263253 test ( 'empty binary' , ( ) => {
@@ -266,8 +256,7 @@ describe('BSON Serializer - All Primitive Types', () => {
266256 }
267257 const serialize = getBSONSerializer < Doc > ( ) ;
268258 const data = new Uint8Array ( [ ] ) ;
269- const [ buffer , size ] = serialize ( { data } ) ;
270- expect ( Array . from ( buffer . slice ( 0 , size ) ) ) . toEqual ( Array . from ( bson . serialize ( { data : new bson . Binary ( data ) } ) ) ) ;
259+ expectBytes ( serialize ( { data } ) , bson . serialize ( { data : new bson . Binary ( data ) } ) ) ;
271260 } ) ;
272261 } ) ;
273262
@@ -278,9 +267,9 @@ describe('BSON Serializer - All Primitive Types', () => {
278267 }
279268 const serialize = getBSONSerializer < Doc > ( ) ;
280269 const data = new Uint8Array ( [ 1 , 2 , 3 , 4 , 5 ] ) . buffer ;
281- const [ buffer , size ] = serialize ( { data } ) ;
282- expect ( buffer [ 4 ] ) . toBe ( 0x05 ) ; // BINARY type
283- expect ( Array . from ( buffer . slice ( 0 , size ) ) ) . toEqual ( Array . from ( bson . serialize ( { data : new bson . Binary ( new Uint8Array ( data ) ) } ) ) ) ;
270+ const result = serialize ( { data } ) ;
271+ expect ( result [ 0 ] [ 4 ] ) . toBe ( 0x05 ) ; // BINARY type
272+ expectBytes ( result , bson . serialize ( { data : new bson . Binary ( new Uint8Array ( data ) ) } ) ) ;
284273 } ) ;
285274 } ) ;
286275
@@ -291,9 +280,9 @@ describe('BSON Serializer - All Primitive Types', () => {
291280 }
292281 const serialize = getBSONSerializer < Doc > ( ) ;
293282 const regex = / h e l l o / i;
294- const [ buffer , size ] = serialize ( { pattern : regex } ) ;
295- expect ( buffer [ 4 ] ) . toBe ( 0x0b ) ; // REGEX type
296- expect ( Array . from ( buffer . slice ( 0 , size ) ) ) . toEqual ( Array . from ( bson . serialize ( { pattern : new bson . BSONRegExp ( 'hello' , 'i' ) } ) ) ) ;
283+ const result = serialize ( { pattern : regex } ) ;
284+ expect ( result [ 0 ] [ 4 ] ) . toBe ( 0x0b ) ; // REGEX type
285+ expectBytes ( result , bson . serialize ( { pattern : new bson . BSONRegExp ( 'hello' , 'i' ) } ) ) ;
297286 } ) ;
298287
299288 test ( 'regex with multiple flags' , ( ) => {
@@ -302,8 +291,7 @@ describe('BSON Serializer - All Primitive Types', () => {
302291 }
303292 const serialize = getBSONSerializer < Doc > ( ) ;
304293 const regex = / t e s t / im;
305- const [ buffer , size ] = serialize ( { pattern : regex } ) ;
306- expect ( Array . from ( buffer . slice ( 0 , size ) ) ) . toEqual ( Array . from ( bson . serialize ( { pattern : new bson . BSONRegExp ( 'test' , 'im' ) } ) ) ) ;
294+ expectBytes ( serialize ( { pattern : regex } ) , bson . serialize ( { pattern : new bson . BSONRegExp ( 'test' , 'im' ) } ) ) ;
307295 } ) ;
308296 } ) ;
309297
@@ -330,7 +318,6 @@ describe('BSON Serializer - All Primitive Types', () => {
330318 data : new Uint8Array ( [ 1 , 2 , 3 ] ) ,
331319 } ;
332320
333- const [ buffer , size ] = serialize ( doc ) ;
334321 const expected = bson . serialize ( {
335322 _id : new bson . ObjectId ( doc . _id ) ,
336323 name : doc . name ,
@@ -341,7 +328,7 @@ describe('BSON Serializer - All Primitive Types', () => {
341328 data : new bson . Binary ( doc . data ) ,
342329 } ) ;
343330
344- expect ( Array . from ( buffer . slice ( 0 , size ) ) ) . toEqual ( Array . from ( expected ) ) ;
331+ expectBytes ( serialize ( doc ) , expected ) ;
345332 } ) ;
346333 } ) ;
347334} ) ;
0 commit comments