From 38d45bbd0b5dbce39d527f5a53bcd627c270802e Mon Sep 17 00:00:00 2001 From: Alexander Fenster Date: Wed, 28 Apr 2021 00:47:41 -0700 Subject: [PATCH] fix: fromObject should not initialize oneof members --- cli/targets/static.js | 8 +++----- tests/cli.js | 7 ++++++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/cli/targets/static.js b/cli/targets/static.js index ad4f7329b..a738f3585 100644 --- a/cli/targets/static.js +++ b/cli/targets/static.js @@ -394,8 +394,7 @@ function buildType(ref, type) { if (config.comments) { push(""); var jsType = toJsType(field); - if (field.optional && !field.map && !field.repeated && field.resolvedType instanceof Type || - field.options && field.options.proto3_optional) + if (field.optional && !field.map && !field.repeated && field.resolvedType instanceof Type || field.partOf) jsType = jsType + "|null|undefined"; pushComment([ field.comment || type.name + " " + field.name + ".", @@ -411,9 +410,8 @@ function buildType(ref, type) { push(escapeName(type.name) + ".prototype" + prop + " = $util.emptyArray;"); // overwritten in constructor else if (field.map) push(escapeName(type.name) + ".prototype" + prop + " = $util.emptyObject;"); // overwritten in constructor - else if (field.options && field.options.proto3_optional) { - push(escapeName(type.name) + ".prototype" + prop + " = null;"); // do not set default value for proto3 optional fields - } + else if (field.partOf) + push(escapeName(type.name) + ".prototype" + prop + " = null;"); // do not set default value for oneof members else if (field.long) push(escapeName(type.name) + ".prototype" + prop + " = $util.Long ? $util.Long.fromBits(" + JSON.stringify(field.typeDefault.low) + "," diff --git a/tests/cli.js b/tests/cli.js index d8ab5008c..f66f7eb57 100644 --- a/tests/cli.js +++ b/tests/cli.js @@ -6,6 +6,12 @@ var Module = require("module"); var protobuf = require(".."); tape.test("pbjs generates static code", function(test) { + // pbjs does not seem to work with Node v4, so skip this test if we're running on it + if (process.versions.node.match(/^4\./)) { + test.end(); + return; + } + // Alter the require cache to make the cli/targets/static work since it requires "protobufjs" // and we don't want to mess with "npm link" var savedResolveFilename = Module._resolveFilename; @@ -59,7 +65,6 @@ tape.test("pbjs generates static code", function(test) { instance.messageInOneof.value = 42; instance.regularField = "abc"; var instance1 = OneofContainerDynamic.toObject(OneofContainerDynamic.fromObject(instance)); - console.log(instance1); // The following test fails: will be fixed by the next commit test.deepEqual(instance, instance1, "fromObject and toObject work for instance of the static type");