Skip to content

Commit 990ec3f

Browse files
committed
Fixed extends
Extended fields were being named using the full name, which meant they always had a dot before them, eg: message A { extensions 1000 to max; } extends A { optional string extended = 1000; } would decode to: { ".extended": "value" } This fixes it, using the fields name, rather than the fields full name.
1 parent 2d047e2 commit 990ec3f

File tree

3 files changed

+22
-8
lines changed

3 files changed

+22
-8
lines changed

src/root.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ var exposeRe = /^[A-Z]/;
260260
function tryHandleExtension(root, field) {
261261
var extendedType = field.parent.lookup(field.extend);
262262
if (extendedType) {
263-
var sisterField = new Field(field.fullName, field.id, field.type, field.rule, undefined, field.options);
263+
var sisterField = new Field(field.name, field.id, field.type, field.rule, undefined, field.options);
264264
sisterField.declaringField = field;
265265
field.extensionField = sisterField;
266266
extendedType.add(sisterField);

tests/api_root-deferred.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,15 @@ tape.test("extension fields", function(test) {
1717

1818
var extendedType = new Type("ExtendedType");
1919
ns.add(extendedType);
20-
var extensionField = extendedType.get(declaringField.fullName);
20+
var extensionField = extendedType.get(declaringField.name);
2121
test.equal(extensionField, declaringField.extensionField, "should become available once their extended type is known");
2222

2323
type.remove(declaringField);
24-
extensionField = extendedType.get(declaringField.fullName);
24+
extensionField = extendedType.get(declaringField.name);
2525
test.equal(extensionField, null, "should become unavailable when their declaring field is removed");
2626

2727
type.add(declaringField);
28-
extensionField = extendedType.get(declaringField.fullName);
28+
extensionField = extendedType.get(declaringField.name);
2929
test.equal(extensionField, declaringField.extensionField, "should become instantly available if their extended type is knwon");
3030

3131
ns.remove(extendedType);

tests/comp_extend.js

+18-4
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,28 @@ message A {\
1414
message Two {\
1515
extend B.One {\
1616
C.Two two = 1000;\
17+
string extended = 1001;\
1718
}\
1819
}\
1920
}\
2021
}";
2122

2223
tape.test("extensions", function(test) {
23-
var root = protobuf.parse(proto).root;
24-
root.resolveAll();
25-
test.pass("should parse and resolve without errors");
26-
test.end();
24+
25+
test.test(" - parsing", function(test) {
26+
var root = protobuf.parse(proto).root;
27+
root.resolveAll();
28+
test.pass("should parse and resolve without errors");
29+
test.end();
30+
});
31+
32+
test.test(" - encoding", function(test) {
33+
var root = protobuf.parse(proto).root;
34+
root.resolveAll();
35+
var one = root.lookupType("A.B.One");
36+
var original = {extended: "test"};
37+
var cycled = one.decode(one.encode(original).finish());
38+
test.deepEqual(cycled, original, "should write and read back");
39+
test.end();
40+
});
2741
});

0 commit comments

Comments
 (0)