var tape = require("tape"); var protobuf = require(".."); var def = { methods: {}, nested: { SomeEnum: { values: {} } } }; var methodDef = { requestType: "MyRequest", requestStream: true, responseType: "MyResponse", responseStream: true, options: {} }; tape.test("reflected services", function(test) { var MyService = protobuf.Service.fromJSON("MyService", def); test.same(MyService.toJSON(), def, "should construct without methods from and convert back to JSON"); var MyMethod = protobuf.Method.fromJSON("MyMethod", methodDef); test.same(MyMethod.toJSON(), methodDef, "should constructos methods from and convert back to JSON"); MyService.add(MyMethod); test.ok(MyService.get("MyMethod"), "should allow adding methods"); var other = new protobuf.Enum("Other", {}); MyService.add(other); test.ok(MyService.get("Other"), "should allow adding other nested objects"); MyService.remove(other); test.notOk(MyService.get("Other"), "should allow removing other nested objects"); MyService.remove(MyMethod); test.notOk(MyService.get("Other"), "should allow removing methods"); test.same(MyService.toJSON(), def, "should convert to initial JSON afterwards"); def.methods.MyMethod = methodDef; MyService = protobuf.Service.fromJSON("MyService", def); test.same(MyService.toJSON(), def, "should construct with methods from and convert back to JSON"); MyMethod = MyService.get("MyMethod"); test.end(); });