text: 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();
  });