@@ -129,6 +129,36 @@ tape.test("writer & reader", function(test) {
129129 test . end ( ) ;
130130 } ) ;
131131
132+ test . test ( test . name + " - finishTo" , function ( test ) {
133+
134+ // throws when buffer is too small
135+ var w1 = Writer . create ( ) ;
136+ w1 . uint32 ( 1 ) . uint32 ( 2 ) . uint32 ( 3 ) ;
137+ test . throws ( function ( ) {
138+ w1 . finishTo ( new Uint8Array ( 1 ) ) ;
139+ } , RangeError , "throws RangeError when buffer too small" ) ;
140+
141+ // writes at offset and preserves existing data
142+ var w2 = Writer . create ( ) ;
143+ w2 . uint32 ( 100 ) . string ( "hello" ) . bool ( true ) ;
144+ var expected = w2 . finish ( ) ;
145+
146+ var w3 = Writer . create ( ) ;
147+ w3 . uint32 ( 100 ) . string ( "hello" ) . bool ( true ) ;
148+ var offset = 3 ;
149+ var buf3 = new Uint8Array ( offset + w3 . len ) ;
150+ for ( var i = 0 ; i < offset ; ++ i )
151+ buf3 [ i ] = 99 ;
152+ w3 . finishTo ( buf3 , offset ) ;
153+
154+ for ( var i = 0 ; i < offset ; ++ i )
155+ test . equal ( buf3 [ i ] , 99 , "preserves byte at index " + i + " before offset" ) ;
156+ for ( var i = 0 ; i < expected . length ; ++ i )
157+ test . equal ( buf3 [ offset + i ] , expected [ i ] , "byte at offset+" + i + " matches finish()" ) ;
158+
159+ test . end ( ) ;
160+ } ) ;
161+
132162 test . throws ( function ( ) {
133163 const root = protobuf . Root . fromJSON ( {
134164 nested : {
0 commit comments