1*1b3f573fSAndroid Build Coastguard Workersyntax = "proto3"; 2*1b3f573fSAndroid Build Coastguard Worker 3*1b3f573fSAndroid Build Coastguard Worker// These proto descriptors have at one time been reported as an issue or defect. 4*1b3f573fSAndroid Build Coastguard Worker// They are kept here to replicate the issue, and continue to verify the fix. 5*1b3f573fSAndroid Build Coastguard Worker 6*1b3f573fSAndroid Build Coastguard Worker// Issue: Non-"Google.Protobuffers" namespace will ensure that protobuffer library types are qualified 7*1b3f573fSAndroid Build Coastguard Workeroption csharp_namespace = "UnitTest.Issues.TestProtos"; 8*1b3f573fSAndroid Build Coastguard Worker 9*1b3f573fSAndroid Build Coastguard Workerpackage unittest_issues; 10*1b3f573fSAndroid Build Coastguard Worker 11*1b3f573fSAndroid Build Coastguard Workerimport "google/protobuf/struct.proto"; 12*1b3f573fSAndroid Build Coastguard Worker 13*1b3f573fSAndroid Build Coastguard Worker// Issue 307: when generating doubly-nested types, any references 14*1b3f573fSAndroid Build Coastguard Worker// should be of the form A.Types.B.Types.C. 15*1b3f573fSAndroid Build Coastguard Workermessage Issue307 { 16*1b3f573fSAndroid Build Coastguard Worker message NestedOnce { 17*1b3f573fSAndroid Build Coastguard Worker message NestedTwice { 18*1b3f573fSAndroid Build Coastguard Worker } 19*1b3f573fSAndroid Build Coastguard Worker } 20*1b3f573fSAndroid Build Coastguard Worker} 21*1b3f573fSAndroid Build Coastguard Worker 22*1b3f573fSAndroid Build Coastguard Worker// Old issue 13: http://code.google.com/p/protobuf-csharp-port/issues/detail?id=13 23*1b3f573fSAndroid Build Coastguard Worker// New issue 309: https://github.com/protocolbuffers/protobuf/issues/309 24*1b3f573fSAndroid Build Coastguard Worker 25*1b3f573fSAndroid Build Coastguard Worker// message A { 26*1b3f573fSAndroid Build Coastguard Worker// optional int32 _A = 1; 27*1b3f573fSAndroid Build Coastguard Worker// } 28*1b3f573fSAndroid Build Coastguard Worker 29*1b3f573fSAndroid Build Coastguard Worker// message B { 30*1b3f573fSAndroid Build Coastguard Worker// optional int32 B_ = 1; 31*1b3f573fSAndroid Build Coastguard Worker// } 32*1b3f573fSAndroid Build Coastguard Worker 33*1b3f573fSAndroid Build Coastguard Worker//message AB { 34*1b3f573fSAndroid Build Coastguard Worker// optional int32 a_b = 1; 35*1b3f573fSAndroid Build Coastguard Worker//} 36*1b3f573fSAndroid Build Coastguard Worker 37*1b3f573fSAndroid Build Coastguard Worker// Similar issue with numeric names 38*1b3f573fSAndroid Build Coastguard Worker// Java code failed too, so probably best for this to be a restriction. 39*1b3f573fSAndroid Build Coastguard Worker// See https://github.com/protocolbuffers/protobuf/issues/308 40*1b3f573fSAndroid Build Coastguard Worker// message NumberField { 41*1b3f573fSAndroid Build Coastguard Worker// optional int32 _01 = 1; 42*1b3f573fSAndroid Build Coastguard Worker// } 43*1b3f573fSAndroid Build Coastguard Worker 44*1b3f573fSAndroid Build Coastguard Worker// issue 19 - negative enum values 45*1b3f573fSAndroid Build Coastguard Worker 46*1b3f573fSAndroid Build Coastguard Workerenum NegativeEnum { 47*1b3f573fSAndroid Build Coastguard Worker NEGATIVE_ENUM_ZERO = 0; 48*1b3f573fSAndroid Build Coastguard Worker FiveBelow = -5; 49*1b3f573fSAndroid Build Coastguard Worker MinusOne = -1; 50*1b3f573fSAndroid Build Coastguard Worker} 51*1b3f573fSAndroid Build Coastguard Worker 52*1b3f573fSAndroid Build Coastguard Workermessage NegativeEnumMessage { 53*1b3f573fSAndroid Build Coastguard Worker NegativeEnum value = 1; 54*1b3f573fSAndroid Build Coastguard Worker repeated NegativeEnum values = 2 [packed = false]; 55*1b3f573fSAndroid Build Coastguard Worker repeated NegativeEnum packed_values = 3 [packed=true]; 56*1b3f573fSAndroid Build Coastguard Worker} 57*1b3f573fSAndroid Build Coastguard Worker 58*1b3f573fSAndroid Build Coastguard Worker// Issue 21: http://code.google.com/p/protobuf-csharp-port/issues/detail?id=21 59*1b3f573fSAndroid Build Coastguard Worker// Decorate fields with [deprecated=true] as [System.Obsolete] 60*1b3f573fSAndroid Build Coastguard Worker 61*1b3f573fSAndroid Build Coastguard Workermessage DeprecatedChild { 62*1b3f573fSAndroid Build Coastguard Worker} 63*1b3f573fSAndroid Build Coastguard Worker 64*1b3f573fSAndroid Build Coastguard Workerenum DeprecatedEnum { 65*1b3f573fSAndroid Build Coastguard Worker DEPRECATED_ZERO = 0; 66*1b3f573fSAndroid Build Coastguard Worker one = 1; 67*1b3f573fSAndroid Build Coastguard Worker} 68*1b3f573fSAndroid Build Coastguard Worker 69*1b3f573fSAndroid Build Coastguard Workermessage DeprecatedFieldsMessage { 70*1b3f573fSAndroid Build Coastguard Worker int32 PrimitiveValue = 1 [deprecated = true]; 71*1b3f573fSAndroid Build Coastguard Worker repeated int32 PrimitiveArray = 2 [deprecated = true]; 72*1b3f573fSAndroid Build Coastguard Worker 73*1b3f573fSAndroid Build Coastguard Worker DeprecatedChild MessageValue = 3 [deprecated = true]; 74*1b3f573fSAndroid Build Coastguard Worker repeated DeprecatedChild MessageArray = 4 [deprecated = true]; 75*1b3f573fSAndroid Build Coastguard Worker 76*1b3f573fSAndroid Build Coastguard Worker DeprecatedEnum EnumValue = 5 [deprecated = true]; 77*1b3f573fSAndroid Build Coastguard Worker repeated DeprecatedEnum EnumArray = 6 [deprecated = true]; 78*1b3f573fSAndroid Build Coastguard Worker} 79*1b3f573fSAndroid Build Coastguard Worker 80*1b3f573fSAndroid Build Coastguard Worker// Issue 45: http://code.google.com/p/protobuf-csharp-port/issues/detail?id=45 81*1b3f573fSAndroid Build Coastguard Workermessage ItemField { 82*1b3f573fSAndroid Build Coastguard Worker int32 item = 1; 83*1b3f573fSAndroid Build Coastguard Worker} 84*1b3f573fSAndroid Build Coastguard Worker 85*1b3f573fSAndroid Build Coastguard Workermessage ReservedNames { 86*1b3f573fSAndroid Build Coastguard Worker // Force a nested type called Types 87*1b3f573fSAndroid Build Coastguard Worker message SomeNestedType { 88*1b3f573fSAndroid Build Coastguard Worker } 89*1b3f573fSAndroid Build Coastguard Worker 90*1b3f573fSAndroid Build Coastguard Worker int32 types = 1; 91*1b3f573fSAndroid Build Coastguard Worker int32 descriptor = 2; 92*1b3f573fSAndroid Build Coastguard Worker} 93*1b3f573fSAndroid Build Coastguard Worker 94*1b3f573fSAndroid Build Coastguard Workermessage TestJsonFieldOrdering { 95*1b3f573fSAndroid Build Coastguard Worker // These fields are deliberately not declared in numeric 96*1b3f573fSAndroid Build Coastguard Worker // order, and the oneof fields aren't contiguous either. 97*1b3f573fSAndroid Build Coastguard Worker // This allows for reasonably robust tests of JSON output 98*1b3f573fSAndroid Build Coastguard Worker // ordering. 99*1b3f573fSAndroid Build Coastguard Worker // TestFieldOrderings in unittest_proto3.proto is similar, 100*1b3f573fSAndroid Build Coastguard Worker // but doesn't include oneofs. 101*1b3f573fSAndroid Build Coastguard Worker // TODO: Consider adding oneofs to TestFieldOrderings, although 102*1b3f573fSAndroid Build Coastguard Worker // that will require fixing other tests in multiple platforms. 103*1b3f573fSAndroid Build Coastguard Worker // Alternatively, consider just adding this to 104*1b3f573fSAndroid Build Coastguard Worker // unittest_proto3.proto if multiple platforms want it. 105*1b3f573fSAndroid Build Coastguard Worker 106*1b3f573fSAndroid Build Coastguard Worker int32 plain_int32 = 4; 107*1b3f573fSAndroid Build Coastguard Worker 108*1b3f573fSAndroid Build Coastguard Worker oneof o1 { 109*1b3f573fSAndroid Build Coastguard Worker string o1_string = 2; 110*1b3f573fSAndroid Build Coastguard Worker int32 o1_int32 = 5; 111*1b3f573fSAndroid Build Coastguard Worker } 112*1b3f573fSAndroid Build Coastguard Worker 113*1b3f573fSAndroid Build Coastguard Worker string plain_string = 1; 114*1b3f573fSAndroid Build Coastguard Worker 115*1b3f573fSAndroid Build Coastguard Worker oneof o2 { 116*1b3f573fSAndroid Build Coastguard Worker int32 o2_int32 = 6; 117*1b3f573fSAndroid Build Coastguard Worker string o2_string = 3; 118*1b3f573fSAndroid Build Coastguard Worker } 119*1b3f573fSAndroid Build Coastguard Worker 120*1b3f573fSAndroid Build Coastguard Worker} 121*1b3f573fSAndroid Build Coastguard Worker 122*1b3f573fSAndroid Build Coastguard Workermessage TestJsonName { 123*1b3f573fSAndroid Build Coastguard Worker // Message for testing the effects for of the json_name option 124*1b3f573fSAndroid Build Coastguard Worker string name = 1; 125*1b3f573fSAndroid Build Coastguard Worker string description = 2 [json_name = "desc"]; 126*1b3f573fSAndroid Build Coastguard Worker string guid = 3 [json_name = "exid"]; 127*1b3f573fSAndroid Build Coastguard Worker} 128*1b3f573fSAndroid Build Coastguard Worker 129*1b3f573fSAndroid Build Coastguard Worker// Issue 3200: When merging two messages which use the same 130*1b3f573fSAndroid Build Coastguard Worker// oneof case, which is itself a message type, the submessages should 131*1b3f573fSAndroid Build Coastguard Worker// be merged. 132*1b3f573fSAndroid Build Coastguard Workermessage OneofMerging { 133*1b3f573fSAndroid Build Coastguard Worker message Nested { 134*1b3f573fSAndroid Build Coastguard Worker int32 x = 1; 135*1b3f573fSAndroid Build Coastguard Worker int32 y = 2; 136*1b3f573fSAndroid Build Coastguard Worker } 137*1b3f573fSAndroid Build Coastguard Worker 138*1b3f573fSAndroid Build Coastguard Worker oneof value { 139*1b3f573fSAndroid Build Coastguard Worker string text = 1; 140*1b3f573fSAndroid Build Coastguard Worker Nested nested = 2; 141*1b3f573fSAndroid Build Coastguard Worker } 142*1b3f573fSAndroid Build Coastguard Worker} 143*1b3f573fSAndroid Build Coastguard Worker 144*1b3f573fSAndroid Build Coastguard Workermessage NullValueOutsideStruct { 145*1b3f573fSAndroid Build Coastguard Worker oneof value { 146*1b3f573fSAndroid Build Coastguard Worker string string_value = 1; 147*1b3f573fSAndroid Build Coastguard Worker google.protobuf.NullValue null_value = 2; 148*1b3f573fSAndroid Build Coastguard Worker } 149*1b3f573fSAndroid Build Coastguard Worker} 150*1b3f573fSAndroid Build Coastguard Worker 151*1b3f573fSAndroid Build Coastguard Workermessage NullValueNotInOneof { 152*1b3f573fSAndroid Build Coastguard Worker google.protobuf.NullValue null_value = 2; 153*1b3f573fSAndroid Build Coastguard Worker} 154*1b3f573fSAndroid Build Coastguard Worker 155*1b3f573fSAndroid Build Coastguard Workermessage MixedRegularAndOptional { 156*1b3f573fSAndroid Build Coastguard Worker string regular_field = 1; 157*1b3f573fSAndroid Build Coastguard Worker optional string optional_field = 2; 158*1b3f573fSAndroid Build Coastguard Worker} 159*1b3f573fSAndroid Build Coastguard Worker 160*1b3f573fSAndroid Build Coastguard Workermessage OneofWithNoneField { 161*1b3f573fSAndroid Build Coastguard Worker oneof test { 162*1b3f573fSAndroid Build Coastguard Worker string x = 1; 163*1b3f573fSAndroid Build Coastguard Worker string none = 2; 164*1b3f573fSAndroid Build Coastguard Worker } 165*1b3f573fSAndroid Build Coastguard Worker} 166*1b3f573fSAndroid Build Coastguard Worker 167*1b3f573fSAndroid Build Coastguard Workermessage OneofWithNoneName { 168*1b3f573fSAndroid Build Coastguard Worker oneof none { 169*1b3f573fSAndroid Build Coastguard Worker string x = 1; 170*1b3f573fSAndroid Build Coastguard Worker string y = 2; 171*1b3f573fSAndroid Build Coastguard Worker } 172*1b3f573fSAndroid Build Coastguard Worker}