syntax = "proto3";

// These proto descriptors have at one time been reported as an issue or defect.
// They are kept here to replicate the issue, and continue to verify the fix.

// Issue: Non-"Google.Protobuffers" namespace will ensure that protobuffer library types are qualified
option csharp_namespace = "UnitTest.Issues.TestProtos";

package unittest_issues;

import "google/protobuf/struct.proto";

// Issue 307: when generating doubly-nested types, any references
// should be of the form A.Types.B.Types.C.
message Issue307 {
  message NestedOnce {
    message NestedTwice {
    }
  }
}

// Old issue 13: http://code.google.com/p/protobuf-csharp-port/issues/detail?id=13
// New issue 309: https://github.com/protocolbuffers/protobuf/issues/309

// message A {
//    optional int32 _A = 1;
// }

// message B {
//    optional int32 B_ = 1;
// }

//message AB {
//    optional int32 a_b = 1;
//}

// Similar issue with numeric names
// Java code failed too, so probably best for this to be a restriction.
// See https://github.com/protocolbuffers/protobuf/issues/308
// message NumberField {
//    optional int32 _01 = 1;
// }

// issue 19 - negative enum values

enum NegativeEnum {
    NEGATIVE_ENUM_ZERO = 0;
    FiveBelow = -5;
    MinusOne = -1;
}

message NegativeEnumMessage {
    NegativeEnum value = 1;
    repeated NegativeEnum values = 2 [packed = false];
    repeated NegativeEnum packed_values = 3 [packed=true];
}

// Issue 21: http://code.google.com/p/protobuf-csharp-port/issues/detail?id=21
// Decorate fields with [deprecated=true] as [System.Obsolete]

message DeprecatedChild {
    option deprecated = true;
}

enum DeprecatedEnum {
    option deprecated = true;
    DEPRECATED_ZERO = 0 [deprecated = true];
    one = 1;
}

message DeprecatedFieldsMessage {
    int32 PrimitiveValue = 1 [deprecated = true];
    repeated int32 PrimitiveArray = 2 [deprecated = true];

    DeprecatedChild MessageValue = 3 [deprecated = true];
    repeated DeprecatedChild MessageArray = 4 [deprecated = true];

    DeprecatedEnum EnumValue = 5 [deprecated = true];
    repeated DeprecatedEnum EnumArray = 6 [deprecated = true];
}

// Issue 45: http://code.google.com/p/protobuf-csharp-port/issues/detail?id=45
message ItemField {
  int32 item = 1;
}

message ReservedNames {
  // Force a nested type called Types
  message SomeNestedType {
  }

  int32 types = 1;
  int32 descriptor = 2;
}

message TestJsonFieldOrdering {
  // These fields are deliberately not declared in numeric
  // order, and the oneof fields aren't contiguous either.
  // This allows for reasonably robust tests of JSON output
  // ordering.
  // TestFieldOrderings in unittest_proto3.proto is similar,
  // but doesn't include oneofs.
  // TODO: Consider adding oneofs to TestFieldOrderings, although
  // that will require fixing other tests in multiple platforms.
  // Alternatively, consider just adding this to
  // unittest_proto3.proto if multiple platforms want it.

  int32 plain_int32 = 4;

  oneof o1 {
    string o1_string = 2;
    int32 o1_int32 = 5;
  }

  string plain_string = 1;

  oneof o2 {
    int32 o2_int32 = 6;
    string o2_string = 3;
  }

}

message TestJsonName {
  // Message for testing the effects for of the json_name option
  string name = 1;
  string description = 2 [json_name = "desc"];
  string guid = 3 [json_name = "exid"];
}

// Issue 3200: When merging two messages which use the same
// oneof case, which is itself a message type, the submessages should
// be merged.
message OneofMerging {
  message Nested {
    int32 x = 1;
    int32 y = 2;
  }

  oneof value {
    string text = 1;
    Nested nested = 2;
  }
}

message NullValueOutsideStruct {
  oneof value {
    string string_value = 1;
    google.protobuf.NullValue null_value = 2;
  }
}

message NullValueNotInOneof {
  google.protobuf.NullValue null_value = 2;
}

message MixedRegularAndOptional {
  string regular_field = 1;
  optional string optional_field = 2;
}

message OneofWithNoneField {
  oneof test {
    string x = 1;
    string none = 2;
  }
}

message OneofWithNoneName {
  oneof none {
    string x = 1;
    string y = 2;
  }
}

// Issue 8810
message DisambiguateCommonMembers {
  int32 disambiguate_common_members = 1;
  int32 types = 2;
  int32 descriptor = 3;
  int32 equals = 4;
  int32 to_string = 5;
  int32 get_hash_code = 6;
  int32 write_to = 7;
  int32 clone = 8;
  int32 calculate_size = 9;
  int32 merge_from = 10;
  int32 on_construction = 11;
  int32 parser = 12;
}
