77package bson
88
99import (
10- "bufio"
1110 "bytes"
1211 _ "embed"
1312 "errors"
@@ -81,7 +80,7 @@ func TestValueReader(t *testing.T) {
8180 for _ , tc := range testCases {
8281 t .Run (tc .name , func (t * testing.T ) {
8382 vr := & valueReader {
84- r : bufio . NewReader ( bytes . NewReader ( tc .data )) ,
83+ src : & bufferedValueReader { buf : tc .data } ,
8584 stack : []vrState {
8685 {mode : mTopLevel },
8786 {
@@ -146,7 +145,7 @@ func TestValueReader(t *testing.T) {
146145 for _ , tc := range testCases {
147146 t .Run (tc .name , func (t * testing.T ) {
148147 vr := & valueReader {
149- r : bufio . NewReader ( bytes . NewReader ( tc .data )) ,
148+ src : & bufferedValueReader { buf : tc .data } ,
150149 stack : []vrState {
151150 {mode : mTopLevel },
152151 {
@@ -176,16 +175,16 @@ func TestValueReader(t *testing.T) {
176175 }
177176
178177 // invalid length
179- vr .r = bufio . NewReader ( bytes . NewReader ( []byte {0x00 , 0x00 }))
178+ vr .src = & bufferedValueReader { buf : []byte {0x00 , 0x00 }}
180179 _ , err := vr .ReadDocument ()
181- if ! errors .Is (err , io .ErrUnexpectedEOF ) {
180+ if ! errors .Is (err , io .EOF ) {
182181 t .Errorf ("Expected io.ErrUnexpectedEOF with document length too small. got %v; want %v" , err , io .EOF )
183182 }
184- if vr .offset != 0 {
185- t .Errorf ("Expected 0 offset. got %d" , vr .offset )
183+ if vr .src . pos () != 0 {
184+ t .Errorf ("Expected 0 offset. got %d" , vr .src . pos () )
186185 }
187186
188- vr .r = bufio . NewReader ( bytes . NewReader ( doc ))
187+ vr .src = & bufferedValueReader { buf : doc }
189188 _ , err = vr .ReadDocument ()
190189 noerr (t , err )
191190 if vr .stack [vr .frame ].end != 5 {
@@ -215,8 +214,10 @@ func TestValueReader(t *testing.T) {
215214 }
216215
217216 vr .stack [1 ].mode , vr .stack [1 ].vType = mElement , TypeEmbeddedDocument
218- vr .offset = 4
219- vr .r = bufio .NewReader (bytes .NewReader ([]byte {0x05 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 }))
217+ vr .src = & bufferedValueReader {
218+ buf : []byte {0x0A , 0x00 , 0x00 , 0x00 , 0x05 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 },
219+ offset : 4 ,
220+ }
220221 _ , err = vr .ReadDocument ()
221222 noerr (t , err )
222223 if len (vr .stack ) != 3 {
@@ -228,13 +229,13 @@ func TestValueReader(t *testing.T) {
228229 if vr .stack [2 ].end != 9 {
229230 t .Errorf ("End of embedded document is not correct. got %d; want %d" , vr .stack [2 ].end , 9 )
230231 }
231- if vr .offset != 8 {
232- t .Errorf ("Offset not incremented correctly. got %d; want %d" , vr .offset , 8 )
232+ if vr .src . pos () != 8 {
233+ t .Errorf ("Offset not incremented correctly. got %d; want %d" , vr .src . pos () , 8 )
233234 }
234235
235236 vr .frame --
236237 _ , err = vr .ReadDocument ()
237- if ! errors .Is (err , io .ErrUnexpectedEOF ) {
238+ if ! errors .Is (err , io .EOF ) {
238239 t .Errorf ("Should return error when attempting to read length with not enough bytes. got %v; want %v" , err , io .EOF )
239240 }
240241 })
@@ -312,7 +313,7 @@ func TestValueReader(t *testing.T) {
312313 for _ , tc := range testCases {
313314 t .Run (tc .name , func (t * testing.T ) {
314315 vr := & valueReader {
315- r : bufio . NewReader ( bytes . NewReader ( tc .data )) ,
316+ src : & bufferedValueReader { buf : tc .data } ,
316317 stack : []vrState {
317318 {mode : mTopLevel },
318319 {
@@ -331,9 +332,11 @@ func TestValueReader(t *testing.T) {
331332 }
332333
333334 t .Run ("success" , func (t * testing.T ) {
335+ doc := []byte {0x00 , 0x00 , 0x00 , 0x00 }
336+ doc = append (doc , codeWithScope ... )
337+ doc = append (doc , 0x00 )
334338 vr := & valueReader {
335- offset : 4 ,
336- r : bufio .NewReader (bytes .NewReader (codeWithScope )),
339+ src : & bufferedValueReader {buf : doc , offset : 4 },
337340 stack : []vrState {
338341 {mode : mTopLevel },
339342 {mode : mElement , vType : TypeCodeWithScope },
@@ -355,8 +358,8 @@ func TestValueReader(t *testing.T) {
355358 if vr .stack [2 ].end != 21 {
356359 t .Errorf ("End of scope is not correct. got %d; want %d" , vr .stack [2 ].end , 21 )
357360 }
358- if vr .offset != 20 {
359- t .Errorf ("Offset not incremented correctly. got %d; want %d" , vr .offset , 20 )
361+ if vr .src . pos () != 20 {
362+ t .Errorf ("Offset not incremented correctly. got %d; want %d" , vr .src . pos () , 20 )
360363 }
361364 })
362365 })
@@ -417,7 +420,7 @@ func TestValueReader(t *testing.T) {
417420 for _ , tc := range testCases {
418421 t .Run (tc .name , func (t * testing.T ) {
419422 vr := & valueReader {
420- r : bufio . NewReader ( bytes . NewReader ( tc .data )) ,
423+ src : & bufferedValueReader { buf : tc .data } ,
421424 stack : []vrState {
422425 {mode : mTopLevel },
423426 {
@@ -475,7 +478,7 @@ func TestValueReader(t *testing.T) {
475478 for _ , tc := range testCases {
476479 t .Run (tc .name , func (t * testing.T ) {
477480 vr := & valueReader {
478- r : bufio . NewReader ( bytes . NewReader ( tc .data )) ,
481+ src : & bufferedValueReader { buf : tc .data } ,
479482 stack : []vrState {
480483 {mode : mTopLevel },
481484 {
@@ -533,7 +536,7 @@ func TestValueReader(t *testing.T) {
533536 for _ , tc := range testCases {
534537 t .Run (tc .name , func (t * testing.T ) {
535538 vr := & valueReader {
536- r : bufio . NewReader ( bytes . NewReader ( tc .data )) ,
539+ src : & bufferedValueReader { buf : tc .data } ,
537540 stack : []vrState {
538541 {mode : mTopLevel },
539542 {
@@ -593,7 +596,7 @@ func TestValueReader(t *testing.T) {
593596 for _ , tc := range testCases {
594597 t .Run (tc .name , func (t * testing.T ) {
595598 vr := & valueReader {
596- r : bufio . NewReader ( bytes . NewReader ( tc .data )) ,
599+ src : & bufferedValueReader { buf : tc .data } ,
597600 stack : []vrState {
598601 {mode : mTopLevel },
599602 {
@@ -648,7 +651,7 @@ func TestValueReader(t *testing.T) {
648651 for _ , tc := range testCases {
649652 t .Run (tc .name , func (t * testing.T ) {
650653 vr := & valueReader {
651- r : bufio . NewReader ( bytes . NewReader ( tc .data )) ,
654+ src : & bufferedValueReader { buf : tc .data } ,
652655 stack : []vrState {
653656 {mode : mTopLevel },
654657 {
@@ -703,7 +706,7 @@ func TestValueReader(t *testing.T) {
703706 for _ , tc := range testCases {
704707 t .Run (tc .name , func (t * testing.T ) {
705708 vr := & valueReader {
706- r : bufio . NewReader ( bytes . NewReader ( tc .data )) ,
709+ src : & bufferedValueReader { buf : tc .data } ,
707710 stack : []vrState {
708711 {mode : mTopLevel },
709712 {
@@ -778,7 +781,7 @@ func TestValueReader(t *testing.T) {
778781 append ([]byte {0x40 , 0x27 , 0x00 , 0x00 }, testcstring ... ),
779782 (* valueReader ).ReadString ,
780783 "" ,
781- io .ErrUnexpectedEOF ,
784+ io .EOF ,
782785 TypeString ,
783786 },
784787 {
@@ -858,7 +861,7 @@ func TestValueReader(t *testing.T) {
858861 for _ , tc := range testCases {
859862 t .Run (tc .name , func (t * testing.T ) {
860863 vr := & valueReader {
861- r : bufio . NewReader ( bytes . NewReader ( tc .data )) ,
864+ src : & bufferedValueReader { buf : tc .data } ,
862865 stack : []vrState {
863866 {mode : mTopLevel },
864867 {
@@ -939,6 +942,7 @@ func TestValueReader(t *testing.T) {
939942 for _ , tc := range testCases {
940943 t .Run (tc .name , func (t * testing.T ) {
941944 vr := & valueReader {
945+ src : & bufferedValueReader {buf : []byte {}},
942946 stack : []vrState {
943947 {mode : mTopLevel },
944948 {
@@ -990,7 +994,7 @@ func TestValueReader(t *testing.T) {
990994 for _ , tc := range testCases {
991995 t .Run (tc .name , func (t * testing.T ) {
992996 vr := & valueReader {
993- r : bufio . NewReader ( bytes . NewReader ( tc .data )) ,
997+ src : & bufferedValueReader { buf : tc .data } ,
994998 stack : []vrState {
995999 {mode : mTopLevel },
9961000 {
@@ -1057,7 +1061,7 @@ func TestValueReader(t *testing.T) {
10571061 for _ , tc := range testCases {
10581062 t .Run (tc .name , func (t * testing.T ) {
10591063 vr := & valueReader {
1060- r : bufio . NewReader ( bytes . NewReader ( tc .data )) ,
1064+ src : & bufferedValueReader { buf : tc .data } ,
10611065 stack : []vrState {
10621066 {mode : mTopLevel },
10631067 {
@@ -1127,7 +1131,7 @@ func TestValueReader(t *testing.T) {
11271131 for _ , tc := range testCases {
11281132 t .Run (tc .name , func (t * testing.T ) {
11291133 vr := & valueReader {
1130- r : bufio . NewReader ( bytes . NewReader ( tc .data )) ,
1134+ src : & bufferedValueReader { buf : tc .data } ,
11311135 stack : []vrState {
11321136 {mode : mTopLevel },
11331137 {
@@ -1347,46 +1351,38 @@ func TestValueReader(t *testing.T) {
13471351 const startingEnd = 64
13481352 t .Run ("Skip" , func (t * testing.T ) {
13491353 vr := & valueReader {
1350- r : bufio . NewReader ( bytes . NewReader ( tc .data [ tc . startingOffset : tc .offset ])) ,
1354+ src : & bufferedValueReader { buf : tc .data , offset : tc .startingOffset } ,
13511355 stack : []vrState {
13521356 {mode : mTopLevel , end : startingEnd },
13531357 {mode : mElement , vType : tc .t },
13541358 },
1355- frame : 1 ,
1356- offset : tc .startingOffset ,
1359+ frame : 1 ,
13571360 }
13581361
13591362 err := vr .Skip ()
13601363 if ! errequal (t , err , tc .err ) {
13611364 t .Errorf ("Did not receive expected error; got %v; want %v" , err , tc .err )
13621365 }
1363- if tc .err == nil {
1364- offset := startingEnd - vr .stack [0 ].end
1365- if offset != tc .offset {
1366- t .Errorf ("Offset not set at correct position; got %d; want %d" , offset , tc .offset )
1367- }
1366+ if tc .err == nil && vr .src .pos () != tc .offset {
1367+ t .Errorf ("Offset not set at correct position; got %d; want %d" , vr .src .pos (), tc .offset )
13681368 }
13691369 })
13701370 t .Run ("ReadBytes" , func (t * testing.T ) {
13711371 vr := & valueReader {
1372- r : bufio . NewReader ( bytes . NewReader ( tc .data [ tc . startingOffset : tc .offset ])) ,
1372+ src : & bufferedValueReader { buf : tc .data , offset : tc .startingOffset } ,
13731373 stack : []vrState {
13741374 {mode : mTopLevel , end : startingEnd },
13751375 {mode : mElement , vType : tc .t },
13761376 },
1377- frame : 1 ,
1378- offset : tc .startingOffset ,
1377+ frame : 1 ,
13791378 }
13801379
13811380 _ , got , err := vr .readValueBytes (nil )
13821381 if ! errequal (t , err , tc .err ) {
13831382 t .Errorf ("Did not receive expected error; got %v; want %v" , err , tc .err )
13841383 }
1385- if tc .err == nil {
1386- offset := startingEnd - vr .stack [0 ].end
1387- if offset != tc .offset {
1388- t .Errorf ("Offset not set at correct position; got %d; want %d" , vr .offset , tc .offset )
1389- }
1384+ if tc .err == nil && vr .src .pos () != tc .offset {
1385+ t .Errorf ("Offset not set at correct position; got %d; want %d" , vr .src .pos (), tc .offset )
13901386 }
13911387 if tc .err == nil && ! bytes .Equal (got , tc .data [tc .startingOffset :]) {
13921388 t .Errorf ("Did not receive expected bytes. got %v; want %v" , got , tc .data [tc .startingOffset :])
@@ -1417,7 +1413,7 @@ func TestValueReader(t *testing.T) {
14171413 "append bytes" ,
14181414 []byte {0x01 , 0x02 , 0x03 , 0x04 },
14191415 Type (0 ),
1420- io .ErrUnexpectedEOF ,
1416+ io .EOF ,
14211417 },
14221418 }
14231419
@@ -1426,7 +1422,7 @@ func TestValueReader(t *testing.T) {
14261422 t .Run (tc .name , func (t * testing.T ) {
14271423 t .Parallel ()
14281424 vr := & valueReader {
1429- r : bufio . NewReader ( bytes . NewReader ( tc .want )) ,
1425+ src : & bufferedValueReader { buf : tc .want } ,
14301426 stack : []vrState {
14311427 {mode : mTopLevel },
14321428 },
@@ -1460,7 +1456,7 @@ func TestValueReader(t *testing.T) {
14601456 t .Run ("ReadBytes" , func (t * testing.T ) {
14611457 vr := & valueReader {stack : []vrState {{mode : mTopLevel }, {mode : mDocument }}, frame : 1 }
14621458 wanterr := (& valueReader {stack : []vrState {{mode : mTopLevel }, {mode : mDocument }}, frame : 1 }).
1463- invalidTransitionErr (0 , "ReadValueBytes " , []mode {mElement , mValue })
1459+ invalidTransitionErr (0 , "readValueBytes " , []mode {mElement , mValue })
14641460 _ , _ , goterr := vr .readValueBytes (nil )
14651461 if ! cmp .Equal (goterr , wanterr , cmp .Comparer (assert .CompareErrors )) {
14661462 t .Errorf ("Expected correct invalid transition error. got %v; want %v" , goterr , wanterr )
0 commit comments