22
33const Buffer = require ( 'buffer' ) . Buffer ;
44const BSON = require ( '../register-bson' ) ;
5- const Code = BSON . Code ;
6- const Binary = BSON . Binary ;
7- const Timestamp = BSON . Timestamp ;
8- const Long = BSON . Long ;
9- const ObjectId = BSON . ObjectId ;
10- const DBRef = BSON . DBRef ;
11- const MinKey = BSON . MinKey ;
12- const MaxKey = BSON . MaxKey ;
135
146describe ( 'BSON Compliance' , function ( ) {
157 /**
@@ -36,77 +28,4 @@ describe('BSON Compliance', function () {
3628
3729 done ( ) ;
3830 } ) ;
39-
40- /**
41- * @ignore
42- */
43- it ( 'Pass all valid BSON serialization scenarios ./compliance/valid.json' , function ( done ) {
44- // Read and parse the json file
45- const scenarios = require ( './compliance/valid' ) ;
46-
47- // Translate extended json to correctly typed doc
48- function translate ( doc , object ) {
49- for ( let name in doc ) {
50- if (
51- typeof doc [ name ] === 'number' ||
52- typeof doc [ name ] === 'string' ||
53- typeof doc [ name ] === 'boolean'
54- ) {
55- object [ name ] = doc [ name ] ;
56- } else if ( Array . isArray ( doc [ name ] ) ) {
57- object [ name ] = translate ( doc [ name ] , [ ] ) ;
58- } else if ( doc [ name ] [ '$numberLong' ] ) {
59- object [ name ] = Long . fromString ( doc [ name ] [ '$numberLong' ] ) ;
60- } else if ( doc [ name ] [ '$undefined' ] ) {
61- object [ name ] = null ;
62- } else if ( doc [ name ] [ '$date' ] ) {
63- const date = new Date ( ) ;
64- date . setTime ( parseInt ( doc [ name ] [ '$date' ] [ '$numberLong' ] , 10 ) ) ;
65- object [ name ] = date ;
66- } else if ( doc [ name ] [ '$regexp' ] ) {
67- object [ name ] = new RegExp ( doc [ name ] [ '$regexp' ] , doc [ name ] [ '$options' ] || '' ) ;
68- } else if ( doc [ name ] [ '$oid' ] ) {
69- object [ name ] = new ObjectId ( doc [ name ] [ '$oid' ] ) ;
70- } else if ( doc [ name ] [ '$binary' ] ) {
71- object [ name ] = new Binary ( doc [ name ] [ '$binary' ] , doc [ name ] [ '$type' ] || 1 ) ;
72- } else if ( doc [ name ] [ '$timestamp' ] ) {
73- object [ name ] = Timestamp . fromBits (
74- parseInt ( doc [ name ] [ '$timestamp' ] [ 't' ] , 10 ) ,
75- parseInt ( doc [ name ] [ '$timestamp' ] [ 'i' ] )
76- ) ;
77- } else if ( doc [ name ] [ '$ref' ] ) {
78- object [ name ] = new DBRef ( doc [ name ] [ '$ref' ] , doc [ name ] [ '$id' ] , doc [ name ] [ '$db' ] ) ;
79- } else if ( doc [ name ] [ '$minKey' ] ) {
80- object [ name ] = new MinKey ( ) ;
81- } else if ( doc [ name ] [ '$maxKey' ] ) {
82- object [ name ] = new MaxKey ( ) ;
83- } else if ( doc [ name ] [ '$code' ] ) {
84- object [ name ] = new Code ( doc [ name ] [ '$code' ] , doc [ name ] [ '$scope' ] || { } ) ;
85- } else if ( doc [ name ] != null && typeof doc [ name ] === 'object' ) {
86- object [ name ] = translate ( doc [ name ] , { } ) ;
87- }
88- }
89-
90- return object ;
91- }
92-
93- // Iterate over all the results
94- scenarios . documents . forEach ( function ( doc ) {
95- if ( doc . skip ) return ;
96- // Create a buffer containing the payload
97- const expectedData = Buffer . from ( doc . encoded , 'hex' ) ;
98- // Get the expectedDocument
99- const expectedDocument = translate ( doc . document , { } ) ;
100- // Serialize to buffer
101- const buffer = BSON . serialize ( expectedDocument ) ;
102- // Validate the output
103- expect ( expectedData . toString ( 'hex' ) ) . to . equal ( buffer . toString ( 'hex' ) ) ;
104- // Attempt to deserialize
105- const object = BSON . deserialize ( buffer , { promoteLongs : false } ) ;
106- // // Validate the object
107- expect ( JSON . stringify ( expectedDocument ) ) . to . deep . equal ( JSON . stringify ( object ) ) ;
108- } ) ;
109-
110- done ( ) ;
111- } ) ;
11231} ) ;
0 commit comments