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;

// 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/google/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/google/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 {
}

enum DeprecatedEnum {
    DEPRECATED_ZERO = 0;
    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;
  }
}