diff --git a/src/root.js b/src/root.js index 13be39d89..2e57b3486 100644 --- a/src/root.js +++ b/src/root.js @@ -260,7 +260,7 @@ var exposeRe = /^[A-Z]/; function tryHandleExtension(root, field) { var extendedType = field.parent.lookup(field.extend); if (extendedType) { - var sisterField = new Field(field.fullName, field.id, field.type, field.rule, undefined, field.options); + var sisterField = new Field(field.name, field.id, field.type, field.rule, undefined, field.options); sisterField.declaringField = field; field.extensionField = sisterField; extendedType.add(sisterField); diff --git a/tests/api_root-deferred.js b/tests/api_root-deferred.js index 577e7b5dc..7010f0eb2 100644 --- a/tests/api_root-deferred.js +++ b/tests/api_root-deferred.js @@ -17,15 +17,15 @@ tape.test("extension fields", function(test) { var extendedType = new Type("ExtendedType"); ns.add(extendedType); - var extensionField = extendedType.get(declaringField.fullName); + var extensionField = extendedType.get(declaringField.name); test.equal(extensionField, declaringField.extensionField, "should become available once their extended type is known"); type.remove(declaringField); - extensionField = extendedType.get(declaringField.fullName); + extensionField = extendedType.get(declaringField.name); test.equal(extensionField, null, "should become unavailable when their declaring field is removed"); type.add(declaringField); - extensionField = extendedType.get(declaringField.fullName); + extensionField = extendedType.get(declaringField.name); test.equal(extensionField, declaringField.extensionField, "should become instantly available if their extended type is knwon"); ns.remove(extendedType); diff --git a/tests/comp_extend.js b/tests/comp_extend.js index 4d9d19556..95fd2131a 100644 --- a/tests/comp_extend.js +++ b/tests/comp_extend.js @@ -14,14 +14,28 @@ message A {\ message Two {\ extend B.One {\ C.Two two = 1000;\ + string extended = 1001;\ }\ }\ }\ }"; tape.test("extensions", function(test) { - var root = protobuf.parse(proto).root; - root.resolveAll(); - test.pass("should parse and resolve without errors"); - test.end(); + + test.test(" - parsing", function(test) { + var root = protobuf.parse(proto).root; + root.resolveAll(); + test.pass("should parse and resolve without errors"); + test.end(); + }); + + test.test(" - encoding", function(test) { + var root = protobuf.parse(proto).root; + root.resolveAll(); + var one = root.lookupType("A.B.One"); + var original = {extended: "test"}; + var cycled = one.decode(one.encode(original).finish()); + test.deepEqual(cycled, original, "should write and read back"); + test.end(); + }); });