Skip to content

Commit

Permalink
Merge pull request #558 from DataDog/fix-repeated-default
Browse files Browse the repository at this point in the history
Fix asJSON defaults option, make it work for repeated fields.
  • Loading branch information
dcodeIO committed Dec 14, 2016
2 parents c33835c + 5f9bede commit 82e8dd4
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 5 deletions.
8 changes: 3 additions & 5 deletions src/message.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ module.exports = Message;

/**
* Constructs a new message instance.
*
*
* This method should be called from your custom constructors, i.e. `Message.call(this, properties)`.
* @classdesc Abstract runtime message.
* @extends {Object}
Expand Down Expand Up @@ -46,17 +46,15 @@ MessagePrototype.asJSON = function asJSON(options) {
json = {};
var keys;
if (options.defaults) {
keys = [];
for (var k in this) // eslint-disable-line guard-for-in
keys.push(k);
keys = Object.keys(fields);
} else
keys = Object.keys(this);
for (var i = 0, key; i < keys.length; ++i) {
var field = fields[key = keys[i]],
value = this[key];
if (field) {
if (field.repeated) {
if (value && value.length) {
if (value && (value.length || options.defaults)) {
var array = new Array(value.length);
for (var j = 0, l = value.length; j < l; ++j)
array[j] = field.jsonConvert(value[j], options);
Expand Down
8 changes: 8 additions & 0 deletions tests/data/message.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
syntax = "proto3";

package test;

message TestRepeatedDefaults {
required string aString = 1;
repeated string repeatString = 2;
}
25 changes: 25 additions & 0 deletions tests/message.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
var tape = require("tape");
var protobuf = require("..");

tape.test("test asJSON repeated defaults", function(test) {

protobuf.load("tests/data/message.proto", function(err, root) {
if (err)
return test.fail(err.message);
test.ok(true, "should parse without errors");

var TestMessage = root.lookup("test.TestRepeatedDefaults");
var msg1 = TestMessage.create({ aString: 'foo' });

var defaultsOn = msg1.asJSON({ defaults: true });
test.equal(defaultsOn.aString, 'foo', "should set aString value");
test.same(defaultsOn.repeatString, [], "should set repeated default");

var defaultsOff = msg1.asJSON({ defaults: false });
test.equal(defaultsOff.aString, 'foo', "should set aString value");
test.same(defaultsOff.repeatString, undefined, "should not set repeated default");

test.end();
});

});

0 comments on commit 82e8dd4

Please sign in to comment.