@@ -241,6 +241,55 @@ tape.test("converters", function(test) {
241241 test . end ( ) ;
242242 } ) ;
243243
244+ test . test ( test . name + " - fixed64 signedness" , function ( test ) {
245+ var root = protobuf . Root . fromJSON ( {
246+ nested : {
247+ Fixed : {
248+ fields : {
249+ fixed64Val : {
250+ type : "fixed64" ,
251+ id : 1
252+ } ,
253+ sfixed64Val : {
254+ type : "sfixed64" ,
255+ id : 2
256+ }
257+ }
258+ }
259+ }
260+ } ) ;
261+ var Fixed = root . lookupType ( "Fixed" ) ;
262+ var msg = Fixed . fromObject ( {
263+ fixed64Val : "11000000000000000001" ,
264+ sfixed64Val : "-9000000000000000001"
265+ } ) ;
266+ var msgFromNumber = Fixed . fromObject ( {
267+ fixed64Val : 11000000000000000000 ,
268+ sfixed64Val : - 9000000000000000000
269+ } ) ;
270+ var msgFromLongZero = Fixed . fromObject ( {
271+ fixed64Val : protobuf . util . Long . ZERO ,
272+ sfixed64Val : protobuf . util . Long . UZERO
273+ } ) ;
274+ var obj = Fixed . toObject ( msg , { longs : BigInt } ) ;
275+ var defaults = Fixed . toObject ( Fixed . create ( ) , { defaults : true } ) ;
276+
277+ test . equal ( msg . fixed64Val . unsigned , true , "should set fixed64 values as unsigned" ) ;
278+ test . equal ( msg . sfixed64Val . unsigned , false , "should set sfixed64 values as signed" ) ;
279+ test . same ( msgFromNumber . fixed64Val , protobuf . util . Long . fromString ( "11000000000000000000" , true ) , "should set fixed64 values from numbers as unsigned" ) ;
280+ test . same ( msgFromNumber . sfixed64Val , protobuf . util . Long . fromString ( "-9000000000000000000" ) , "should set sfixed64 values from numbers as signed" ) ;
281+ test . same ( msgFromLongZero . fixed64Val , protobuf . util . Long . UZERO , "should set fixed64 values from Longs as unsigned" ) ;
282+ test . same ( msgFromLongZero . sfixed64Val , protobuf . util . Long . ZERO , "should set sfixed64 values from Longs as signed" ) ;
283+ test . equal ( protobuf . util . Long . ZERO . unsigned , false , "should not mutate Long.ZERO" ) ;
284+ test . equal ( protobuf . util . Long . UZERO . unsigned , true , "should not mutate Long.UZERO" ) ;
285+ test . equal ( obj . fixed64Val , 11000000000000000001n , "should output fixed64 as unsigned bigint" ) ;
286+ test . equal ( obj . sfixed64Val , - 9000000000000000001n , "should output sfixed64 as signed bigint" ) ;
287+ test . same ( defaults . fixed64Val , { low : 0 , high : 0 , unsigned : true } , "should default fixed64 as unsigned" ) ;
288+ test . same ( defaults . sfixed64Val , { low : 0 , high : 0 , unsigned : false } , "should default sfixed64 as signed" ) ;
289+
290+ test . end ( ) ;
291+ } ) ;
292+
244293 test . test ( test . name + " - Message#toJSON" , function ( test ) {
245294 var msg = Message . create ( ) ;
246295 msg . $type = {
0 commit comments