mirror of
https://github.com/protobufjs/protobuf.js.git
synced 2025-12-08 20:58:55 +00:00
41 lines
1.6 KiB
JavaScript
41 lines
1.6 KiB
JavaScript
var tape = require("tape");
|
|
|
|
var protobuf = require(".."),
|
|
Namespace = protobuf.Namespace,
|
|
Type = protobuf.Type,
|
|
Field = protobuf.Field;
|
|
|
|
tape.test("extension fields", function(test) {
|
|
|
|
var root = new protobuf.Root({ noGoogleTypes: true }),
|
|
ns = new Namespace("my"),
|
|
type = new Type("DeclaringType"),
|
|
declaringField = new Field("declaringField", 1, "string", "optional", "ExtendedType");
|
|
root.add(ns.add(type.add(declaringField)));
|
|
|
|
test.deepEqual(root.deferred[0], declaringField, "should be deferred until their extended type can be resolved");
|
|
|
|
var extendedType = new Type("ExtendedType");
|
|
ns.add(extendedType);
|
|
var extensionField = extendedType.get(declaringField.fullName);
|
|
test.equal(extensionField, declaringField.extensionField, "should become available once their extended type is known");
|
|
|
|
type.remove(declaringField);
|
|
extensionField = extendedType.get(declaringField.fullName);
|
|
test.equal(extensionField, null, "should become unavailable when their declaring field is removed");
|
|
|
|
type.add(declaringField);
|
|
extensionField = extendedType.get(declaringField.fullName);
|
|
test.equal(extensionField, declaringField.extensionField, "should become instantly available if their extended type is knwon");
|
|
|
|
ns.remove(extendedType);
|
|
type.remove(declaringField);
|
|
type.add(declaringField);
|
|
test.throws(function() {
|
|
root.resolveAll();
|
|
}, Error, "should throw on resolveAll if there are unresolvable extensions");
|
|
type.remove(declaringField);
|
|
|
|
test.end();
|
|
});
|