mirror of
https://github.com/protobufjs/protobuf.js.git
synced 2025-12-08 20:58:55 +00:00
62 lines
1.7 KiB
JavaScript
62 lines
1.7 KiB
JavaScript
var tape = require("tape");
|
|
|
|
var protobuf = require("..");
|
|
|
|
var def = {
|
|
oneof: ["a", "b"],
|
|
options: {}
|
|
};
|
|
|
|
var proto = "syntax = \"proto3\";\
|
|
import \"google/protobuf/descriptor.proto\";\
|
|
extend google.protobuf.FileOptions { optional int32 ecs_component_id = 50000;}\
|
|
option (ecs_component_id) = 1020;\
|
|
message Test {\
|
|
oneof kind {\
|
|
uint32 a = 1;\
|
|
string b = 2;\
|
|
}\
|
|
bool c = 3;\
|
|
}";
|
|
|
|
tape.test("reflected oneofs", function(test) {
|
|
|
|
var oneof = protobuf.OneOf.fromJSON("kind", {
|
|
oneof: ["a", "b"],
|
|
options: {}
|
|
});
|
|
test.same(oneof.toJSON(), def, "should construct from and convert back to JSON");
|
|
|
|
var root = protobuf.parse(proto).root;
|
|
var Test = root.lookup("Test");
|
|
var kind = Test.get("kind");
|
|
var field = Test.get("c");
|
|
|
|
kind.add(field);
|
|
test.same(kind.toJSON(), {
|
|
oneof: ["a", "b", "c"]
|
|
}, "should allow adding fields");
|
|
test.ok(Test.get("c"), "should still have the field on the parent");
|
|
|
|
kind.remove(field);
|
|
test.same(kind.toJSON(), {
|
|
oneof: ["a", "b"]
|
|
}, "should allow removing fields");
|
|
test.ok(Test.get("c"), "should still have the field on the parent");
|
|
|
|
var Test2 = new protobuf.Type("Test2");
|
|
root.add(Test2);
|
|
Test2.add(field);
|
|
kind.add(field);
|
|
test.notOk(Test2.get("c"), "should remove the field from the previous parent");
|
|
|
|
var looseField = new protobuf.Field("d", 4, "float");
|
|
kind.add(looseField); // no parent
|
|
Test.remove(looseField);
|
|
Test.remove(kind);
|
|
test.same(Test.fields, {}, "should remove all fields from the parent");
|
|
test.same(kind.oneof, ["a","b","c","d"], "should still have the fields on the oneof");
|
|
|
|
test.end();
|
|
});
|