commit
502624ff8b
85 changed files with 3022 additions and 1295 deletions
@ -1,6 +1,7 @@ |
||||
Recommended.JsonInput.BytesFieldBase64Url.JsonOutput |
||||
Recommended.JsonInput.BytesFieldBase64Url.ProtobufOutput |
||||
Required.ProtobufInput.IllegalZeroFieldNum_Case_0 |
||||
Required.ProtobufInput.IllegalZeroFieldNum_Case_1 |
||||
Required.ProtobufInput.IllegalZeroFieldNum_Case_2 |
||||
Required.ProtobufInput.IllegalZeroFieldNum_Case_3 |
||||
Recommended.Proto3.JsonInput.BytesFieldBase64Url.JsonOutput |
||||
Recommended.Proto3.JsonInput.BytesFieldBase64Url.ProtobufOutput |
||||
Required.Proto3.ProtobufInput.IllegalZeroFieldNum_Case_0 |
||||
Required.Proto3.ProtobufInput.IllegalZeroFieldNum_Case_1 |
||||
Required.Proto3.ProtobufInput.IllegalZeroFieldNum_Case_2 |
||||
Required.Proto3.ProtobufInput.IllegalZeroFieldNum_Case_3 |
||||
|
||||
|
@ -1,15 +1,19 @@ |
||||
Required.ProtobufInput.RepeatedScalarSelectsLast.INT32.ProtobufOutput |
||||
Required.ProtobufInput.RepeatedScalarSelectsLast.UINT32.ProtobufOutput |
||||
Required.ProtobufInput.ValidDataRepeated.BOOL.ProtobufOutput |
||||
Required.ProtobufInput.ValidDataRepeated.DOUBLE.ProtobufOutput |
||||
Required.ProtobufInput.ValidDataRepeated.FIXED32.ProtobufOutput |
||||
Required.ProtobufInput.ValidDataRepeated.FIXED64.ProtobufOutput |
||||
Required.ProtobufInput.ValidDataRepeated.FLOAT.ProtobufOutput |
||||
Required.ProtobufInput.ValidDataRepeated.INT32.ProtobufOutput |
||||
Required.ProtobufInput.ValidDataRepeated.INT64.ProtobufOutput |
||||
Required.ProtobufInput.ValidDataRepeated.SFIXED32.ProtobufOutput |
||||
Required.ProtobufInput.ValidDataRepeated.SFIXED64.ProtobufOutput |
||||
Required.ProtobufInput.ValidDataRepeated.SINT32.ProtobufOutput |
||||
Required.ProtobufInput.ValidDataRepeated.SINT64.ProtobufOutput |
||||
Required.ProtobufInput.ValidDataRepeated.UINT32.ProtobufOutput |
||||
Required.ProtobufInput.ValidDataRepeated.UINT64.ProtobufOutput |
||||
Required.Proto3.ProtobufInput.RepeatedScalarSelectsLast.INT32.ProtobufOutput |
||||
Required.Proto3.ProtobufInput.RepeatedScalarSelectsLast.UINT32.ProtobufOutput |
||||
Required.Proto3.ProtobufInput.ValidDataRepeated.BOOL.ProtobufOutput |
||||
Required.Proto3.ProtobufInput.ValidDataRepeated.DOUBLE.ProtobufOutput |
||||
Required.Proto3.ProtobufInput.ValidDataRepeated.FIXED32.ProtobufOutput |
||||
Required.Proto3.ProtobufInput.ValidDataRepeated.FIXED64.ProtobufOutput |
||||
Required.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.ProtobufOutput |
||||
Required.Proto3.ProtobufInput.ValidDataRepeated.INT32.ProtobufOutput |
||||
Required.Proto3.ProtobufInput.ValidDataRepeated.INT64.ProtobufOutput |
||||
Required.Proto3.ProtobufInput.ValidDataRepeated.SFIXED32.ProtobufOutput |
||||
Required.Proto3.ProtobufInput.ValidDataRepeated.SFIXED64.ProtobufOutput |
||||
Required.Proto3.ProtobufInput.ValidDataRepeated.SINT32.ProtobufOutput |
||||
Required.Proto3.ProtobufInput.ValidDataRepeated.SINT64.ProtobufOutput |
||||
Required.Proto3.ProtobufInput.ValidDataRepeated.UINT32.ProtobufOutput |
||||
Required.Proto3.ProtobufInput.ValidDataRepeated.UINT64.ProtobufOutput |
||||
Required.Proto2.ProtobufInput.RepeatedScalarSelectsLast.INT32.ProtobufOutput |
||||
Required.Proto2.ProtobufInput.RepeatedScalarSelectsLast.UINT32.ProtobufOutput |
||||
Required.Proto2.ProtobufInput.ValidDataRepeated.INT32.ProtobufOutput |
||||
Required.Proto2.ProtobufInput.ValidDataRepeated.UINT32.ProtobufOutput |
||||
|
@ -1,120 +1,120 @@ |
||||
Recommended.FieldMaskNumbersDontRoundTrip.JsonOutput |
||||
Recommended.FieldMaskPathsDontRoundTrip.JsonOutput |
||||
Recommended.FieldMaskTooManyUnderscore.JsonOutput |
||||
Recommended.JsonInput.BytesFieldBase64Url.JsonOutput |
||||
Recommended.JsonInput.BytesFieldBase64Url.ProtobufOutput |
||||
Recommended.JsonInput.DurationHas3FractionalDigits.Validator |
||||
Recommended.JsonInput.DurationHas6FractionalDigits.Validator |
||||
Recommended.JsonInput.DurationHas9FractionalDigits.Validator |
||||
Recommended.JsonInput.DurationHasZeroFractionalDigit.Validator |
||||
Recommended.JsonInput.TimestampHas3FractionalDigits.Validator |
||||
Recommended.JsonInput.TimestampHas6FractionalDigits.Validator |
||||
Recommended.JsonInput.TimestampHas9FractionalDigits.Validator |
||||
Recommended.JsonInput.TimestampHasZeroFractionalDigit.Validator |
||||
Recommended.JsonInput.TimestampZeroNormalized.Validator |
||||
Recommended.Proto3.JsonInput.BytesFieldBase64Url.JsonOutput |
||||
Recommended.Proto3.JsonInput.BytesFieldBase64Url.ProtobufOutput |
||||
Recommended.Proto3.JsonInput.DurationHas3FractionalDigits.Validator |
||||
Recommended.Proto3.JsonInput.DurationHas6FractionalDigits.Validator |
||||
Recommended.Proto3.JsonInput.DurationHas9FractionalDigits.Validator |
||||
Recommended.Proto3.JsonInput.DurationHasZeroFractionalDigit.Validator |
||||
Recommended.Proto3.JsonInput.TimestampHas3FractionalDigits.Validator |
||||
Recommended.Proto3.JsonInput.TimestampHas6FractionalDigits.Validator |
||||
Recommended.Proto3.JsonInput.TimestampHas9FractionalDigits.Validator |
||||
Recommended.Proto3.JsonInput.TimestampHasZeroFractionalDigit.Validator |
||||
Recommended.Proto3.JsonInput.TimestampZeroNormalized.Validator |
||||
Required.DurationProtoInputTooLarge.JsonOutput |
||||
Required.DurationProtoInputTooSmall.JsonOutput |
||||
Required.JsonInput.Any.JsonOutput |
||||
Required.JsonInput.Any.ProtobufOutput |
||||
Required.JsonInput.AnyNested.JsonOutput |
||||
Required.JsonInput.AnyNested.ProtobufOutput |
||||
Required.JsonInput.AnyUnorderedTypeTag.JsonOutput |
||||
Required.JsonInput.AnyUnorderedTypeTag.ProtobufOutput |
||||
Required.JsonInput.AnyWithDuration.JsonOutput |
||||
Required.JsonInput.AnyWithDuration.ProtobufOutput |
||||
Required.JsonInput.AnyWithFieldMask.JsonOutput |
||||
Required.JsonInput.AnyWithFieldMask.ProtobufOutput |
||||
Required.JsonInput.AnyWithInt32ValueWrapper.JsonOutput |
||||
Required.JsonInput.AnyWithInt32ValueWrapper.ProtobufOutput |
||||
Required.JsonInput.AnyWithStruct.JsonOutput |
||||
Required.JsonInput.AnyWithStruct.ProtobufOutput |
||||
Required.JsonInput.AnyWithTimestamp.JsonOutput |
||||
Required.JsonInput.AnyWithTimestamp.ProtobufOutput |
||||
Required.JsonInput.AnyWithValueForInteger.JsonOutput |
||||
Required.JsonInput.AnyWithValueForInteger.ProtobufOutput |
||||
Required.JsonInput.AnyWithValueForJsonObject.JsonOutput |
||||
Required.JsonInput.AnyWithValueForJsonObject.ProtobufOutput |
||||
Required.JsonInput.DurationMaxValue.JsonOutput |
||||
Required.JsonInput.DurationMaxValue.ProtobufOutput |
||||
Required.JsonInput.DurationMinValue.JsonOutput |
||||
Required.JsonInput.DurationMinValue.ProtobufOutput |
||||
Required.JsonInput.DurationRepeatedValue.JsonOutput |
||||
Required.JsonInput.DurationRepeatedValue.ProtobufOutput |
||||
Required.JsonInput.FieldMask.JsonOutput |
||||
Required.JsonInput.FieldMask.ProtobufOutput |
||||
Required.JsonInput.OptionalBoolWrapper.JsonOutput |
||||
Required.JsonInput.OptionalBoolWrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalBytesWrapper.JsonOutput |
||||
Required.JsonInput.OptionalBytesWrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalDoubleWrapper.JsonOutput |
||||
Required.JsonInput.OptionalDoubleWrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalFloatWrapper.JsonOutput |
||||
Required.JsonInput.OptionalFloatWrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalInt32Wrapper.JsonOutput |
||||
Required.JsonInput.OptionalInt32Wrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalInt64Wrapper.JsonOutput |
||||
Required.JsonInput.OptionalInt64Wrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalStringWrapper.JsonOutput |
||||
Required.JsonInput.OptionalStringWrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalUint32Wrapper.JsonOutput |
||||
Required.JsonInput.OptionalUint32Wrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalUint64Wrapper.JsonOutput |
||||
Required.JsonInput.OptionalUint64Wrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalWrapperTypesWithNonDefaultValue.JsonOutput |
||||
Required.JsonInput.OptionalWrapperTypesWithNonDefaultValue.ProtobufOutput |
||||
Required.JsonInput.RepeatedBoolWrapper.JsonOutput |
||||
Required.JsonInput.RepeatedBoolWrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedBytesWrapper.JsonOutput |
||||
Required.JsonInput.RepeatedBytesWrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedDoubleWrapper.JsonOutput |
||||
Required.JsonInput.RepeatedDoubleWrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedFloatWrapper.JsonOutput |
||||
Required.JsonInput.RepeatedFloatWrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedInt32Wrapper.JsonOutput |
||||
Required.JsonInput.RepeatedInt32Wrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedInt64Wrapper.JsonOutput |
||||
Required.JsonInput.RepeatedInt64Wrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedStringWrapper.JsonOutput |
||||
Required.JsonInput.RepeatedStringWrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedUint32Wrapper.JsonOutput |
||||
Required.JsonInput.RepeatedUint32Wrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedUint64Wrapper.JsonOutput |
||||
Required.JsonInput.RepeatedUint64Wrapper.ProtobufOutput |
||||
Required.JsonInput.Struct.JsonOutput |
||||
Required.JsonInput.Struct.ProtobufOutput |
||||
Required.JsonInput.TimestampMaxValue.JsonOutput |
||||
Required.JsonInput.TimestampMaxValue.ProtobufOutput |
||||
Required.JsonInput.TimestampMinValue.JsonOutput |
||||
Required.JsonInput.TimestampMinValue.ProtobufOutput |
||||
Required.JsonInput.TimestampRepeatedValue.JsonOutput |
||||
Required.JsonInput.TimestampRepeatedValue.ProtobufOutput |
||||
Required.JsonInput.TimestampWithNegativeOffset.JsonOutput |
||||
Required.JsonInput.TimestampWithNegativeOffset.ProtobufOutput |
||||
Required.JsonInput.TimestampWithPositiveOffset.JsonOutput |
||||
Required.JsonInput.TimestampWithPositiveOffset.ProtobufOutput |
||||
Required.JsonInput.ValueAcceptBool.JsonOutput |
||||
Required.JsonInput.ValueAcceptBool.ProtobufOutput |
||||
Required.JsonInput.ValueAcceptFloat.JsonOutput |
||||
Required.JsonInput.ValueAcceptFloat.ProtobufOutput |
||||
Required.JsonInput.ValueAcceptInteger.JsonOutput |
||||
Required.JsonInput.ValueAcceptInteger.ProtobufOutput |
||||
Required.JsonInput.ValueAcceptList.JsonOutput |
||||
Required.JsonInput.ValueAcceptList.ProtobufOutput |
||||
Required.JsonInput.ValueAcceptNull.JsonOutput |
||||
Required.JsonInput.ValueAcceptNull.ProtobufOutput |
||||
Required.JsonInput.ValueAcceptObject.JsonOutput |
||||
Required.JsonInput.ValueAcceptObject.ProtobufOutput |
||||
Required.JsonInput.ValueAcceptString.JsonOutput |
||||
Required.JsonInput.ValueAcceptString.ProtobufOutput |
||||
Required.Proto3.JsonInput.Any.JsonOutput |
||||
Required.Proto3.JsonInput.Any.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyNested.JsonOutput |
||||
Required.Proto3.JsonInput.AnyNested.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyUnorderedTypeTag.JsonOutput |
||||
Required.Proto3.JsonInput.AnyUnorderedTypeTag.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyWithDuration.JsonOutput |
||||
Required.Proto3.JsonInput.AnyWithDuration.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyWithFieldMask.JsonOutput |
||||
Required.Proto3.JsonInput.AnyWithFieldMask.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyWithInt32ValueWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.AnyWithInt32ValueWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyWithStruct.JsonOutput |
||||
Required.Proto3.JsonInput.AnyWithStruct.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyWithTimestamp.JsonOutput |
||||
Required.Proto3.JsonInput.AnyWithTimestamp.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyWithValueForInteger.JsonOutput |
||||
Required.Proto3.JsonInput.AnyWithValueForInteger.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyWithValueForJsonObject.JsonOutput |
||||
Required.Proto3.JsonInput.AnyWithValueForJsonObject.ProtobufOutput |
||||
Required.Proto3.JsonInput.DurationMaxValue.JsonOutput |
||||
Required.Proto3.JsonInput.DurationMaxValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.DurationMinValue.JsonOutput |
||||
Required.Proto3.JsonInput.DurationMinValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.DurationRepeatedValue.JsonOutput |
||||
Required.Proto3.JsonInput.DurationRepeatedValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.FieldMask.JsonOutput |
||||
Required.Proto3.JsonInput.FieldMask.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalBoolWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalBoolWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalBytesWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalBytesWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalDoubleWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalDoubleWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalFloatWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalFloatWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalInt32Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalInt32Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalInt64Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalInt64Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalStringWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalStringWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalUint32Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalUint32Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalUint64Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalUint64Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalWrapperTypesWithNonDefaultValue.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalWrapperTypesWithNonDefaultValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedBoolWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedBoolWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedBytesWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedBytesWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedDoubleWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedDoubleWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedFloatWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedFloatWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedInt32Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedInt32Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedInt64Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedInt64Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedStringWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedStringWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedUint32Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedUint32Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedUint64Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedUint64Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.Struct.JsonOutput |
||||
Required.Proto3.JsonInput.Struct.ProtobufOutput |
||||
Required.Proto3.JsonInput.TimestampMaxValue.JsonOutput |
||||
Required.Proto3.JsonInput.TimestampMaxValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.TimestampMinValue.JsonOutput |
||||
Required.Proto3.JsonInput.TimestampMinValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.TimestampRepeatedValue.JsonOutput |
||||
Required.Proto3.JsonInput.TimestampRepeatedValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.TimestampWithNegativeOffset.JsonOutput |
||||
Required.Proto3.JsonInput.TimestampWithNegativeOffset.ProtobufOutput |
||||
Required.Proto3.JsonInput.TimestampWithPositiveOffset.JsonOutput |
||||
Required.Proto3.JsonInput.TimestampWithPositiveOffset.ProtobufOutput |
||||
Required.Proto3.JsonInput.ValueAcceptBool.JsonOutput |
||||
Required.Proto3.JsonInput.ValueAcceptBool.ProtobufOutput |
||||
Required.Proto3.JsonInput.ValueAcceptFloat.JsonOutput |
||||
Required.Proto3.JsonInput.ValueAcceptFloat.ProtobufOutput |
||||
Required.Proto3.JsonInput.ValueAcceptInteger.JsonOutput |
||||
Required.Proto3.JsonInput.ValueAcceptInteger.ProtobufOutput |
||||
Required.Proto3.JsonInput.ValueAcceptList.JsonOutput |
||||
Required.Proto3.JsonInput.ValueAcceptList.ProtobufOutput |
||||
Required.Proto3.JsonInput.ValueAcceptNull.JsonOutput |
||||
Required.Proto3.JsonInput.ValueAcceptNull.ProtobufOutput |
||||
Required.Proto3.JsonInput.ValueAcceptObject.JsonOutput |
||||
Required.Proto3.JsonInput.ValueAcceptObject.ProtobufOutput |
||||
Required.Proto3.JsonInput.ValueAcceptString.JsonOutput |
||||
Required.Proto3.JsonInput.ValueAcceptString.ProtobufOutput |
||||
Required.TimestampProtoInputTooLarge.JsonOutput |
||||
Required.TimestampProtoInputTooSmall.JsonOutput |
||||
Required.JsonInput.FloatFieldTooLarge |
||||
Required.JsonInput.FloatFieldTooSmall |
||||
Required.JsonInput.DoubleFieldTooSmall |
||||
Required.JsonInput.Int32FieldNotInteger |
||||
Required.JsonInput.Int64FieldNotInteger |
||||
Required.JsonInput.Uint32FieldNotInteger |
||||
Required.JsonInput.Uint64FieldNotInteger |
||||
Required.JsonInput.Int32FieldLeadingSpace |
||||
Required.JsonInput.OneofFieldDuplicate |
||||
Required.ProtobufInput.ValidDataRepeated.FLOAT.JsonOutput |
||||
Required.Proto3.JsonInput.FloatFieldTooLarge |
||||
Required.Proto3.JsonInput.FloatFieldTooSmall |
||||
Required.Proto3.JsonInput.DoubleFieldTooSmall |
||||
Required.Proto3.JsonInput.Int32FieldNotInteger |
||||
Required.Proto3.JsonInput.Int64FieldNotInteger |
||||
Required.Proto3.JsonInput.Uint32FieldNotInteger |
||||
Required.Proto3.JsonInput.Uint64FieldNotInteger |
||||
Required.Proto3.JsonInput.Int32FieldLeadingSpace |
||||
Required.Proto3.JsonInput.OneofFieldDuplicate |
||||
Required.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.JsonOutput |
||||
|
@ -1,197 +1,197 @@ |
||||
Recommended.FieldMaskNumbersDontRoundTrip.JsonOutput |
||||
Recommended.FieldMaskPathsDontRoundTrip.JsonOutput |
||||
Recommended.FieldMaskTooManyUnderscore.JsonOutput |
||||
Recommended.JsonInput.BoolFieldIntegerOne |
||||
Recommended.JsonInput.BoolFieldIntegerZero |
||||
Recommended.JsonInput.DurationHas3FractionalDigits.Validator |
||||
Recommended.JsonInput.DurationHas6FractionalDigits.Validator |
||||
Recommended.JsonInput.DurationHas9FractionalDigits.Validator |
||||
Recommended.JsonInput.DurationHasZeroFractionalDigit.Validator |
||||
Recommended.JsonInput.Int64FieldBeString.Validator |
||||
Recommended.JsonInput.MapFieldValueIsNull |
||||
Recommended.JsonInput.OneofZeroBytes.JsonOutput |
||||
Recommended.JsonInput.OneofZeroBytes.ProtobufOutput |
||||
Recommended.JsonInput.OneofZeroString.JsonOutput |
||||
Recommended.JsonInput.OneofZeroString.ProtobufOutput |
||||
Recommended.JsonInput.RepeatedFieldMessageElementIsNull |
||||
Recommended.JsonInput.RepeatedFieldPrimitiveElementIsNull |
||||
Recommended.JsonInput.StringEndsWithEscapeChar |
||||
Recommended.JsonInput.StringFieldSurrogateInWrongOrder |
||||
Recommended.JsonInput.StringFieldUnpairedHighSurrogate |
||||
Recommended.JsonInput.StringFieldUnpairedLowSurrogate |
||||
Recommended.JsonInput.TimestampHas3FractionalDigits.Validator |
||||
Recommended.JsonInput.TimestampHas6FractionalDigits.Validator |
||||
Recommended.JsonInput.TimestampHas9FractionalDigits.Validator |
||||
Recommended.JsonInput.TimestampHasZeroFractionalDigit.Validator |
||||
Recommended.JsonInput.TimestampZeroNormalized.Validator |
||||
Recommended.JsonInput.Uint64FieldBeString.Validator |
||||
Recommended.ProtobufInput.OneofZeroBytes.JsonOutput |
||||
Recommended.ProtobufInput.OneofZeroBytes.ProtobufOutput |
||||
Recommended.ProtobufInput.OneofZeroString.JsonOutput |
||||
Recommended.ProtobufInput.OneofZeroString.ProtobufOutput |
||||
Recommended.Proto3.JsonInput.BoolFieldIntegerOne |
||||
Recommended.Proto3.JsonInput.BoolFieldIntegerZero |
||||
Recommended.Proto3.JsonInput.DurationHas3FractionalDigits.Validator |
||||
Recommended.Proto3.JsonInput.DurationHas6FractionalDigits.Validator |
||||
Recommended.Proto3.JsonInput.DurationHas9FractionalDigits.Validator |
||||
Recommended.Proto3.JsonInput.DurationHasZeroFractionalDigit.Validator |
||||
Recommended.Proto3.JsonInput.Int64FieldBeString.Validator |
||||
Recommended.Proto3.JsonInput.MapFieldValueIsNull |
||||
Recommended.Proto3.JsonInput.OneofZeroBytes.JsonOutput |
||||
Recommended.Proto3.JsonInput.OneofZeroBytes.ProtobufOutput |
||||
Recommended.Proto3.JsonInput.OneofZeroString.JsonOutput |
||||
Recommended.Proto3.JsonInput.OneofZeroString.ProtobufOutput |
||||
Recommended.Proto3.JsonInput.RepeatedFieldMessageElementIsNull |
||||
Recommended.Proto3.JsonInput.RepeatedFieldPrimitiveElementIsNull |
||||
Recommended.Proto3.JsonInput.StringEndsWithEscapeChar |
||||
Recommended.Proto3.JsonInput.StringFieldSurrogateInWrongOrder |
||||
Recommended.Proto3.JsonInput.StringFieldUnpairedHighSurrogate |
||||
Recommended.Proto3.JsonInput.StringFieldUnpairedLowSurrogate |
||||
Recommended.Proto3.JsonInput.TimestampHas3FractionalDigits.Validator |
||||
Recommended.Proto3.JsonInput.TimestampHas6FractionalDigits.Validator |
||||
Recommended.Proto3.JsonInput.TimestampHas9FractionalDigits.Validator |
||||
Recommended.Proto3.JsonInput.TimestampHasZeroFractionalDigit.Validator |
||||
Recommended.Proto3.JsonInput.TimestampZeroNormalized.Validator |
||||
Recommended.Proto3.JsonInput.Uint64FieldBeString.Validator |
||||
Recommended.Proto3.ProtobufInput.OneofZeroBytes.JsonOutput |
||||
Recommended.Proto3.ProtobufInput.OneofZeroBytes.ProtobufOutput |
||||
Recommended.Proto3.ProtobufInput.OneofZeroString.JsonOutput |
||||
Recommended.Proto3.ProtobufInput.OneofZeroString.ProtobufOutput |
||||
Required.DurationProtoInputTooLarge.JsonOutput |
||||
Required.DurationProtoInputTooSmall.JsonOutput |
||||
Required.JsonInput.Any.JsonOutput |
||||
Required.JsonInput.Any.ProtobufOutput |
||||
Required.JsonInput.AnyNested.JsonOutput |
||||
Required.JsonInput.AnyNested.ProtobufOutput |
||||
Required.JsonInput.AnyUnorderedTypeTag.JsonOutput |
||||
Required.JsonInput.AnyUnorderedTypeTag.ProtobufOutput |
||||
Required.JsonInput.AnyWithDuration.JsonOutput |
||||
Required.JsonInput.AnyWithDuration.ProtobufOutput |
||||
Required.JsonInput.AnyWithFieldMask.JsonOutput |
||||
Required.JsonInput.AnyWithFieldMask.ProtobufOutput |
||||
Required.JsonInput.AnyWithInt32ValueWrapper.JsonOutput |
||||
Required.JsonInput.AnyWithInt32ValueWrapper.ProtobufOutput |
||||
Required.JsonInput.AnyWithStruct.JsonOutput |
||||
Required.JsonInput.AnyWithStruct.ProtobufOutput |
||||
Required.JsonInput.AnyWithTimestamp.JsonOutput |
||||
Required.JsonInput.AnyWithTimestamp.ProtobufOutput |
||||
Required.JsonInput.AnyWithValueForInteger.JsonOutput |
||||
Required.JsonInput.AnyWithValueForInteger.ProtobufOutput |
||||
Required.JsonInput.AnyWithValueForJsonObject.JsonOutput |
||||
Required.JsonInput.AnyWithValueForJsonObject.ProtobufOutput |
||||
Required.JsonInput.BoolMapField.JsonOutput |
||||
Required.JsonInput.DoubleFieldInfinity.JsonOutput |
||||
Required.JsonInput.DoubleFieldInfinity.ProtobufOutput |
||||
Required.JsonInput.DoubleFieldMaxNegativeValue.JsonOutput |
||||
Required.JsonInput.DoubleFieldMaxNegativeValue.ProtobufOutput |
||||
Required.JsonInput.DoubleFieldMaxPositiveValue.JsonOutput |
||||
Required.JsonInput.DoubleFieldMaxPositiveValue.ProtobufOutput |
||||
Required.JsonInput.DoubleFieldMinNegativeValue.JsonOutput |
||||
Required.JsonInput.DoubleFieldMinNegativeValue.ProtobufOutput |
||||
Required.JsonInput.DoubleFieldMinPositiveValue.JsonOutput |
||||
Required.JsonInput.DoubleFieldMinPositiveValue.ProtobufOutput |
||||
Required.JsonInput.DoubleFieldNan.JsonOutput |
||||
Required.JsonInput.DoubleFieldNan.ProtobufOutput |
||||
Required.JsonInput.DoubleFieldNegativeInfinity.JsonOutput |
||||
Required.JsonInput.DoubleFieldNegativeInfinity.ProtobufOutput |
||||
Required.JsonInput.DoubleFieldQuotedValue.JsonOutput |
||||
Required.JsonInput.DoubleFieldQuotedValue.ProtobufOutput |
||||
Required.JsonInput.DurationMaxValue.JsonOutput |
||||
Required.JsonInput.DurationMaxValue.ProtobufOutput |
||||
Required.JsonInput.DurationMinValue.JsonOutput |
||||
Required.JsonInput.DurationMinValue.ProtobufOutput |
||||
Required.JsonInput.DurationRepeatedValue.JsonOutput |
||||
Required.JsonInput.DurationRepeatedValue.ProtobufOutput |
||||
Required.JsonInput.EnumFieldNumericValueNonZero.JsonOutput |
||||
Required.JsonInput.EnumFieldNumericValueNonZero.ProtobufOutput |
||||
Required.JsonInput.EnumFieldNumericValueZero.JsonOutput |
||||
Required.JsonInput.EnumFieldNumericValueZero.ProtobufOutput |
||||
Required.JsonInput.EnumFieldUnknownValue.Validator |
||||
Required.JsonInput.FieldMask.JsonOutput |
||||
Required.JsonInput.FieldMask.ProtobufOutput |
||||
Required.JsonInput.FloatFieldInfinity.JsonOutput |
||||
Required.JsonInput.FloatFieldInfinity.ProtobufOutput |
||||
Required.JsonInput.FloatFieldNan.JsonOutput |
||||
Required.JsonInput.FloatFieldNan.ProtobufOutput |
||||
Required.JsonInput.FloatFieldNegativeInfinity.JsonOutput |
||||
Required.JsonInput.FloatFieldNegativeInfinity.ProtobufOutput |
||||
Required.JsonInput.FloatFieldQuotedValue.JsonOutput |
||||
Required.JsonInput.FloatFieldQuotedValue.ProtobufOutput |
||||
Required.JsonInput.FloatFieldTooLarge |
||||
Required.JsonInput.FloatFieldTooSmall |
||||
Required.JsonInput.Int32FieldExponentialFormat.JsonOutput |
||||
Required.JsonInput.Int32FieldExponentialFormat.ProtobufOutput |
||||
Required.JsonInput.Int32FieldFloatTrailingZero.JsonOutput |
||||
Required.JsonInput.Int32FieldFloatTrailingZero.ProtobufOutput |
||||
Required.JsonInput.Int32FieldMaxFloatValue.JsonOutput |
||||
Required.JsonInput.Int32FieldMaxFloatValue.ProtobufOutput |
||||
Required.JsonInput.Int32FieldMinFloatValue.JsonOutput |
||||
Required.JsonInput.Int32FieldMinFloatValue.ProtobufOutput |
||||
Required.JsonInput.Int32FieldStringValue.JsonOutput |
||||
Required.JsonInput.Int32FieldStringValue.ProtobufOutput |
||||
Required.JsonInput.Int32FieldStringValueEscaped.JsonOutput |
||||
Required.JsonInput.Int32FieldStringValueEscaped.ProtobufOutput |
||||
Required.JsonInput.Int64FieldMaxValue.JsonOutput |
||||
Required.JsonInput.Int64FieldMaxValue.ProtobufOutput |
||||
Required.JsonInput.Int64FieldMinValue.JsonOutput |
||||
Required.JsonInput.Int64FieldMinValue.ProtobufOutput |
||||
Required.JsonInput.MessageField.JsonOutput |
||||
Required.JsonInput.MessageField.ProtobufOutput |
||||
Required.JsonInput.OptionalBoolWrapper.JsonOutput |
||||
Required.JsonInput.OptionalBoolWrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalBytesWrapper.JsonOutput |
||||
Required.JsonInput.OptionalBytesWrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalDoubleWrapper.JsonOutput |
||||
Required.JsonInput.OptionalDoubleWrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalFloatWrapper.JsonOutput |
||||
Required.JsonInput.OptionalFloatWrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalInt32Wrapper.JsonOutput |
||||
Required.JsonInput.OptionalInt32Wrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalInt64Wrapper.JsonOutput |
||||
Required.JsonInput.OptionalInt64Wrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalStringWrapper.JsonOutput |
||||
Required.JsonInput.OptionalStringWrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalUint32Wrapper.JsonOutput |
||||
Required.JsonInput.OptionalUint32Wrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalUint64Wrapper.JsonOutput |
||||
Required.JsonInput.OptionalUint64Wrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalWrapperTypesWithNonDefaultValue.JsonOutput |
||||
Required.JsonInput.OptionalWrapperTypesWithNonDefaultValue.ProtobufOutput |
||||
Required.JsonInput.RepeatedBoolWrapper.JsonOutput |
||||
Required.JsonInput.RepeatedBoolWrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedBytesWrapper.JsonOutput |
||||
Required.JsonInput.RepeatedBytesWrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedDoubleWrapper.JsonOutput |
||||
Required.JsonInput.RepeatedDoubleWrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedFieldWrongElementTypeExpectingMessagesGotInt |
||||
Required.JsonInput.RepeatedFieldWrongElementTypeExpectingStringsGotInt |
||||
Required.JsonInput.RepeatedFloatWrapper.JsonOutput |
||||
Required.JsonInput.RepeatedFloatWrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedInt32Wrapper.JsonOutput |
||||
Required.JsonInput.RepeatedInt32Wrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedInt64Wrapper.JsonOutput |
||||
Required.JsonInput.RepeatedInt64Wrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedStringWrapper.JsonOutput |
||||
Required.JsonInput.RepeatedStringWrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedUint32Wrapper.JsonOutput |
||||
Required.JsonInput.RepeatedUint32Wrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedUint64Wrapper.JsonOutput |
||||
Required.JsonInput.RepeatedUint64Wrapper.ProtobufOutput |
||||
Required.JsonInput.StringFieldEscape.JsonOutput |
||||
Required.JsonInput.StringFieldEscape.ProtobufOutput |
||||
Required.JsonInput.StringFieldNotAString |
||||
Required.JsonInput.StringFieldSurrogatePair.JsonOutput |
||||
Required.JsonInput.StringFieldSurrogatePair.ProtobufOutput |
||||
Required.JsonInput.StringFieldUnicodeEscape.JsonOutput |
||||
Required.JsonInput.StringFieldUnicodeEscape.ProtobufOutput |
||||
Required.JsonInput.StringFieldUnicodeEscapeWithLowercaseHexLetters.JsonOutput |
||||
Required.JsonInput.StringFieldUnicodeEscapeWithLowercaseHexLetters.ProtobufOutput |
||||
Required.JsonInput.Struct.JsonOutput |
||||
Required.JsonInput.Struct.ProtobufOutput |
||||
Required.JsonInput.TimestampMaxValue.JsonOutput |
||||
Required.JsonInput.TimestampMaxValue.ProtobufOutput |
||||
Required.JsonInput.TimestampMinValue.JsonOutput |
||||
Required.JsonInput.TimestampMinValue.ProtobufOutput |
||||
Required.JsonInput.TimestampRepeatedValue.JsonOutput |
||||
Required.JsonInput.TimestampRepeatedValue.ProtobufOutput |
||||
Required.JsonInput.TimestampWithNegativeOffset.JsonOutput |
||||
Required.JsonInput.TimestampWithNegativeOffset.ProtobufOutput |
||||
Required.JsonInput.TimestampWithPositiveOffset.JsonOutput |
||||
Required.JsonInput.TimestampWithPositiveOffset.ProtobufOutput |
||||
Required.JsonInput.Uint32FieldMaxFloatValue.JsonOutput |
||||
Required.JsonInput.Uint32FieldMaxFloatValue.ProtobufOutput |
||||
Required.JsonInput.Uint64FieldMaxValue.JsonOutput |
||||
Required.JsonInput.Uint64FieldMaxValue.ProtobufOutput |
||||
Required.JsonInput.ValueAcceptBool.JsonOutput |
||||
Required.JsonInput.ValueAcceptBool.ProtobufOutput |
||||
Required.JsonInput.ValueAcceptFloat.JsonOutput |
||||
Required.JsonInput.ValueAcceptFloat.ProtobufOutput |
||||
Required.JsonInput.ValueAcceptInteger.JsonOutput |
||||
Required.JsonInput.ValueAcceptInteger.ProtobufOutput |
||||
Required.JsonInput.ValueAcceptList.JsonOutput |
||||
Required.JsonInput.ValueAcceptList.ProtobufOutput |
||||
Required.JsonInput.ValueAcceptNull.JsonOutput |
||||
Required.JsonInput.ValueAcceptNull.ProtobufOutput |
||||
Required.JsonInput.ValueAcceptObject.JsonOutput |
||||
Required.JsonInput.ValueAcceptObject.ProtobufOutput |
||||
Required.JsonInput.ValueAcceptString.JsonOutput |
||||
Required.JsonInput.ValueAcceptString.ProtobufOutput |
||||
Required.ProtobufInput.DoubleFieldNormalizeQuietNan.JsonOutput |
||||
Required.ProtobufInput.DoubleFieldNormalizeSignalingNan.JsonOutput |
||||
Required.ProtobufInput.FloatFieldNormalizeQuietNan.JsonOutput |
||||
Required.ProtobufInput.FloatFieldNormalizeSignalingNan.JsonOutput |
||||
Required.ProtobufInput.ValidDataRepeated.FLOAT.JsonOutput |
||||
Required.Proto3.JsonInput.Any.JsonOutput |
||||
Required.Proto3.JsonInput.Any.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyNested.JsonOutput |
||||
Required.Proto3.JsonInput.AnyNested.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyUnorderedTypeTag.JsonOutput |
||||
Required.Proto3.JsonInput.AnyUnorderedTypeTag.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyWithDuration.JsonOutput |
||||
Required.Proto3.JsonInput.AnyWithDuration.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyWithFieldMask.JsonOutput |
||||
Required.Proto3.JsonInput.AnyWithFieldMask.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyWithInt32ValueWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.AnyWithInt32ValueWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyWithStruct.JsonOutput |
||||
Required.Proto3.JsonInput.AnyWithStruct.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyWithTimestamp.JsonOutput |
||||
Required.Proto3.JsonInput.AnyWithTimestamp.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyWithValueForInteger.JsonOutput |
||||
Required.Proto3.JsonInput.AnyWithValueForInteger.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyWithValueForJsonObject.JsonOutput |
||||
Required.Proto3.JsonInput.AnyWithValueForJsonObject.ProtobufOutput |
||||
Required.Proto3.JsonInput.BoolMapField.JsonOutput |
||||
Required.Proto3.JsonInput.DoubleFieldInfinity.JsonOutput |
||||
Required.Proto3.JsonInput.DoubleFieldInfinity.ProtobufOutput |
||||
Required.Proto3.JsonInput.DoubleFieldMaxNegativeValue.JsonOutput |
||||
Required.Proto3.JsonInput.DoubleFieldMaxNegativeValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.DoubleFieldMaxPositiveValue.JsonOutput |
||||
Required.Proto3.JsonInput.DoubleFieldMaxPositiveValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.DoubleFieldMinNegativeValue.JsonOutput |
||||
Required.Proto3.JsonInput.DoubleFieldMinNegativeValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.DoubleFieldMinPositiveValue.JsonOutput |
||||
Required.Proto3.JsonInput.DoubleFieldMinPositiveValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.DoubleFieldNan.JsonOutput |
||||
Required.Proto3.JsonInput.DoubleFieldNan.ProtobufOutput |
||||
Required.Proto3.JsonInput.DoubleFieldNegativeInfinity.JsonOutput |
||||
Required.Proto3.JsonInput.DoubleFieldNegativeInfinity.ProtobufOutput |
||||
Required.Proto3.JsonInput.DoubleFieldQuotedValue.JsonOutput |
||||
Required.Proto3.JsonInput.DoubleFieldQuotedValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.DurationMaxValue.JsonOutput |
||||
Required.Proto3.JsonInput.DurationMaxValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.DurationMinValue.JsonOutput |
||||
Required.Proto3.JsonInput.DurationMinValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.DurationRepeatedValue.JsonOutput |
||||
Required.Proto3.JsonInput.DurationRepeatedValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.EnumFieldNumericValueNonZero.JsonOutput |
||||
Required.Proto3.JsonInput.EnumFieldNumericValueNonZero.ProtobufOutput |
||||
Required.Proto3.JsonInput.EnumFieldNumericValueZero.JsonOutput |
||||
Required.Proto3.JsonInput.EnumFieldNumericValueZero.ProtobufOutput |
||||
Required.Proto3.JsonInput.EnumFieldUnknownValue.Validator |
||||
Required.Proto3.JsonInput.FieldMask.JsonOutput |
||||
Required.Proto3.JsonInput.FieldMask.ProtobufOutput |
||||
Required.Proto3.JsonInput.FloatFieldInfinity.JsonOutput |
||||
Required.Proto3.JsonInput.FloatFieldInfinity.ProtobufOutput |
||||
Required.Proto3.JsonInput.FloatFieldNan.JsonOutput |
||||
Required.Proto3.JsonInput.FloatFieldNan.ProtobufOutput |
||||
Required.Proto3.JsonInput.FloatFieldNegativeInfinity.JsonOutput |
||||
Required.Proto3.JsonInput.FloatFieldNegativeInfinity.ProtobufOutput |
||||
Required.Proto3.JsonInput.FloatFieldQuotedValue.JsonOutput |
||||
Required.Proto3.JsonInput.FloatFieldQuotedValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.FloatFieldTooLarge |
||||
Required.Proto3.JsonInput.FloatFieldTooSmall |
||||
Required.Proto3.JsonInput.Int32FieldExponentialFormat.JsonOutput |
||||
Required.Proto3.JsonInput.Int32FieldExponentialFormat.ProtobufOutput |
||||
Required.Proto3.JsonInput.Int32FieldFloatTrailingZero.JsonOutput |
||||
Required.Proto3.JsonInput.Int32FieldFloatTrailingZero.ProtobufOutput |
||||
Required.Proto3.JsonInput.Int32FieldMaxFloatValue.JsonOutput |
||||
Required.Proto3.JsonInput.Int32FieldMaxFloatValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.Int32FieldMinFloatValue.JsonOutput |
||||
Required.Proto3.JsonInput.Int32FieldMinFloatValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.Int32FieldStringValue.JsonOutput |
||||
Required.Proto3.JsonInput.Int32FieldStringValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.Int32FieldStringValueEscaped.JsonOutput |
||||
Required.Proto3.JsonInput.Int32FieldStringValueEscaped.ProtobufOutput |
||||
Required.Proto3.JsonInput.Int64FieldMaxValue.JsonOutput |
||||
Required.Proto3.JsonInput.Int64FieldMaxValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.Int64FieldMinValue.JsonOutput |
||||
Required.Proto3.JsonInput.Int64FieldMinValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.MessageField.JsonOutput |
||||
Required.Proto3.JsonInput.MessageField.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalBoolWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalBoolWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalBytesWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalBytesWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalDoubleWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalDoubleWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalFloatWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalFloatWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalInt32Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalInt32Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalInt64Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalInt64Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalStringWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalStringWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalUint32Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalUint32Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalUint64Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalUint64Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalWrapperTypesWithNonDefaultValue.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalWrapperTypesWithNonDefaultValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedBoolWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedBoolWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedBytesWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedBytesWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedDoubleWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedDoubleWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedFieldWrongElementTypeExpectingMessagesGotInt |
||||
Required.Proto3.JsonInput.RepeatedFieldWrongElementTypeExpectingStringsGotInt |
||||
Required.Proto3.JsonInput.RepeatedFloatWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedFloatWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedInt32Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedInt32Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedInt64Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedInt64Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedStringWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedStringWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedUint32Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedUint32Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedUint64Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedUint64Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.StringFieldEscape.JsonOutput |
||||
Required.Proto3.JsonInput.StringFieldEscape.ProtobufOutput |
||||
Required.Proto3.JsonInput.StringFieldNotAString |
||||
Required.Proto3.JsonInput.StringFieldSurrogatePair.JsonOutput |
||||
Required.Proto3.JsonInput.StringFieldSurrogatePair.ProtobufOutput |
||||
Required.Proto3.JsonInput.StringFieldUnicodeEscape.JsonOutput |
||||
Required.Proto3.JsonInput.StringFieldUnicodeEscape.ProtobufOutput |
||||
Required.Proto3.JsonInput.StringFieldUnicodeEscapeWithLowercaseHexLetters.JsonOutput |
||||
Required.Proto3.JsonInput.StringFieldUnicodeEscapeWithLowercaseHexLetters.ProtobufOutput |
||||
Required.Proto3.JsonInput.Struct.JsonOutput |
||||
Required.Proto3.JsonInput.Struct.ProtobufOutput |
||||
Required.Proto3.JsonInput.TimestampMaxValue.JsonOutput |
||||
Required.Proto3.JsonInput.TimestampMaxValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.TimestampMinValue.JsonOutput |
||||
Required.Proto3.JsonInput.TimestampMinValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.TimestampRepeatedValue.JsonOutput |
||||
Required.Proto3.JsonInput.TimestampRepeatedValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.TimestampWithNegativeOffset.JsonOutput |
||||
Required.Proto3.JsonInput.TimestampWithNegativeOffset.ProtobufOutput |
||||
Required.Proto3.JsonInput.TimestampWithPositiveOffset.JsonOutput |
||||
Required.Proto3.JsonInput.TimestampWithPositiveOffset.ProtobufOutput |
||||
Required.Proto3.JsonInput.Uint32FieldMaxFloatValue.JsonOutput |
||||
Required.Proto3.JsonInput.Uint32FieldMaxFloatValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.Uint64FieldMaxValue.JsonOutput |
||||
Required.Proto3.JsonInput.Uint64FieldMaxValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.ValueAcceptBool.JsonOutput |
||||
Required.Proto3.JsonInput.ValueAcceptBool.ProtobufOutput |
||||
Required.Proto3.JsonInput.ValueAcceptFloat.JsonOutput |
||||
Required.Proto3.JsonInput.ValueAcceptFloat.ProtobufOutput |
||||
Required.Proto3.JsonInput.ValueAcceptInteger.JsonOutput |
||||
Required.Proto3.JsonInput.ValueAcceptInteger.ProtobufOutput |
||||
Required.Proto3.JsonInput.ValueAcceptList.JsonOutput |
||||
Required.Proto3.JsonInput.ValueAcceptList.ProtobufOutput |
||||
Required.Proto3.JsonInput.ValueAcceptNull.JsonOutput |
||||
Required.Proto3.JsonInput.ValueAcceptNull.ProtobufOutput |
||||
Required.Proto3.JsonInput.ValueAcceptObject.JsonOutput |
||||
Required.Proto3.JsonInput.ValueAcceptObject.ProtobufOutput |
||||
Required.Proto3.JsonInput.ValueAcceptString.JsonOutput |
||||
Required.Proto3.JsonInput.ValueAcceptString.ProtobufOutput |
||||
Required.Proto3.ProtobufInput.DoubleFieldNormalizeQuietNan.JsonOutput |
||||
Required.Proto3.ProtobufInput.DoubleFieldNormalizeSignalingNan.JsonOutput |
||||
Required.Proto3.ProtobufInput.FloatFieldNormalizeQuietNan.JsonOutput |
||||
Required.Proto3.ProtobufInput.FloatFieldNormalizeSignalingNan.JsonOutput |
||||
Required.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.JsonOutput |
||||
Required.TimestampProtoInputTooLarge.JsonOutput |
||||
Required.TimestampProtoInputTooSmall.JsonOutput |
||||
|
@ -1,18 +1,22 @@ |
||||
Recommended.JsonInput.BytesFieldBase64Url.JsonOutput |
||||
Recommended.JsonInput.BytesFieldBase64Url.ProtobufOutput |
||||
Recommended.JsonInput.DoubleFieldInfinityNotQuoted |
||||
Recommended.JsonInput.DoubleFieldNanNotQuoted |
||||
Recommended.JsonInput.DoubleFieldNegativeInfinityNotQuoted |
||||
Recommended.JsonInput.FloatFieldInfinityNotQuoted |
||||
Recommended.JsonInput.FloatFieldNanNotQuoted |
||||
Recommended.JsonInput.FloatFieldNegativeInfinityNotQuoted |
||||
Required.JsonInput.DoubleFieldTooSmall |
||||
Required.JsonInput.EnumFieldUnknownValue.Validator |
||||
Required.JsonInput.FloatFieldTooLarge |
||||
Required.JsonInput.FloatFieldTooSmall |
||||
Required.JsonInput.RepeatedFieldWrongElementTypeExpectingIntegersGotBool |
||||
Required.JsonInput.TimestampJsonInputLowercaseT |
||||
Required.ProtobufInput.IllegalZeroFieldNum_Case_0 |
||||
Required.ProtobufInput.IllegalZeroFieldNum_Case_1 |
||||
Required.ProtobufInput.IllegalZeroFieldNum_Case_2 |
||||
Required.ProtobufInput.IllegalZeroFieldNum_Case_3 |
||||
Recommended.Proto3.JsonInput.BytesFieldBase64Url.JsonOutput |
||||
Recommended.Proto3.JsonInput.BytesFieldBase64Url.ProtobufOutput |
||||
Recommended.Proto3.JsonInput.DoubleFieldInfinityNotQuoted |
||||
Recommended.Proto3.JsonInput.DoubleFieldNanNotQuoted |
||||
Recommended.Proto3.JsonInput.DoubleFieldNegativeInfinityNotQuoted |
||||
Recommended.Proto3.JsonInput.FloatFieldInfinityNotQuoted |
||||
Recommended.Proto3.JsonInput.FloatFieldNanNotQuoted |
||||
Recommended.Proto3.JsonInput.FloatFieldNegativeInfinityNotQuoted |
||||
Required.Proto3.JsonInput.DoubleFieldTooSmall |
||||
Required.Proto3.JsonInput.EnumFieldUnknownValue.Validator |
||||
Required.Proto3.JsonInput.FloatFieldTooLarge |
||||
Required.Proto3.JsonInput.FloatFieldTooSmall |
||||
Required.Proto3.JsonInput.RepeatedFieldWrongElementTypeExpectingIntegersGotBool |
||||
Required.Proto3.JsonInput.TimestampJsonInputLowercaseT |
||||
Required.Proto2.ProtobufInput.IllegalZeroFieldNum_Case_0 |
||||
Required.Proto2.ProtobufInput.IllegalZeroFieldNum_Case_1 |
||||
Required.Proto2.ProtobufInput.IllegalZeroFieldNum_Case_2 |
||||
Required.Proto2.ProtobufInput.IllegalZeroFieldNum_Case_3 |
||||
Required.Proto3.ProtobufInput.IllegalZeroFieldNum_Case_0 |
||||
Required.Proto3.ProtobufInput.IllegalZeroFieldNum_Case_1 |
||||
Required.Proto3.ProtobufInput.IllegalZeroFieldNum_Case_2 |
||||
Required.Proto3.ProtobufInput.IllegalZeroFieldNum_Case_3 |
||||
|
@ -1,137 +1,137 @@ |
||||
Recommended.FieldMaskNumbersDontRoundTrip.JsonOutput |
||||
Recommended.FieldMaskPathsDontRoundTrip.JsonOutput |
||||
Recommended.FieldMaskTooManyUnderscore.JsonOutput |
||||
Recommended.JsonInput.BytesFieldBase64Url.JsonOutput |
||||
Recommended.JsonInput.BytesFieldBase64Url.ProtobufOutput |
||||
Recommended.JsonInput.DurationHas3FractionalDigits.Validator |
||||
Recommended.JsonInput.DurationHas6FractionalDigits.Validator |
||||
Recommended.JsonInput.DurationHas9FractionalDigits.Validator |
||||
Recommended.JsonInput.DurationHasZeroFractionalDigit.Validator |
||||
Recommended.JsonInput.Int64FieldBeString.Validator |
||||
Recommended.JsonInput.MapFieldValueIsNull |
||||
Recommended.JsonInput.RepeatedFieldMessageElementIsNull |
||||
Recommended.JsonInput.RepeatedFieldPrimitiveElementIsNull |
||||
Recommended.JsonInput.StringEndsWithEscapeChar |
||||
Recommended.JsonInput.StringFieldSurrogateInWrongOrder |
||||
Recommended.JsonInput.StringFieldUnpairedHighSurrogate |
||||
Recommended.JsonInput.StringFieldUnpairedLowSurrogate |
||||
Recommended.JsonInput.TimestampHas3FractionalDigits.Validator |
||||
Recommended.JsonInput.TimestampHas6FractionalDigits.Validator |
||||
Recommended.JsonInput.TimestampHas9FractionalDigits.Validator |
||||
Recommended.JsonInput.TimestampHasZeroFractionalDigit.Validator |
||||
Recommended.JsonInput.TimestampZeroNormalized.Validator |
||||
Recommended.JsonInput.Uint64FieldBeString.Validator |
||||
Recommended.Proto3.JsonInput.BytesFieldBase64Url.JsonOutput |
||||
Recommended.Proto3.JsonInput.BytesFieldBase64Url.ProtobufOutput |
||||
Recommended.Proto3.JsonInput.DurationHas3FractionalDigits.Validator |
||||
Recommended.Proto3.JsonInput.DurationHas6FractionalDigits.Validator |
||||
Recommended.Proto3.JsonInput.DurationHas9FractionalDigits.Validator |
||||
Recommended.Proto3.JsonInput.DurationHasZeroFractionalDigit.Validator |
||||
Recommended.Proto3.JsonInput.Int64FieldBeString.Validator |
||||
Recommended.Proto3.JsonInput.MapFieldValueIsNull |
||||
Recommended.Proto3.JsonInput.RepeatedFieldMessageElementIsNull |
||||
Recommended.Proto3.JsonInput.RepeatedFieldPrimitiveElementIsNull |
||||
Recommended.Proto3.JsonInput.StringEndsWithEscapeChar |
||||
Recommended.Proto3.JsonInput.StringFieldSurrogateInWrongOrder |
||||
Recommended.Proto3.JsonInput.StringFieldUnpairedHighSurrogate |
||||
Recommended.Proto3.JsonInput.StringFieldUnpairedLowSurrogate |
||||
Recommended.Proto3.JsonInput.TimestampHas3FractionalDigits.Validator |
||||
Recommended.Proto3.JsonInput.TimestampHas6FractionalDigits.Validator |
||||
Recommended.Proto3.JsonInput.TimestampHas9FractionalDigits.Validator |
||||
Recommended.Proto3.JsonInput.TimestampHasZeroFractionalDigit.Validator |
||||
Recommended.Proto3.JsonInput.TimestampZeroNormalized.Validator |
||||
Recommended.Proto3.JsonInput.Uint64FieldBeString.Validator |
||||
Required.DurationProtoInputTooLarge.JsonOutput |
||||
Required.DurationProtoInputTooSmall.JsonOutput |
||||
Required.JsonInput.Any.JsonOutput |
||||
Required.JsonInput.Any.ProtobufOutput |
||||
Required.JsonInput.AnyNested.JsonOutput |
||||
Required.JsonInput.AnyNested.ProtobufOutput |
||||
Required.JsonInput.AnyUnorderedTypeTag.JsonOutput |
||||
Required.JsonInput.AnyUnorderedTypeTag.ProtobufOutput |
||||
Required.JsonInput.AnyWithDuration.JsonOutput |
||||
Required.JsonInput.AnyWithDuration.ProtobufOutput |
||||
Required.JsonInput.AnyWithFieldMask.JsonOutput |
||||
Required.JsonInput.AnyWithFieldMask.ProtobufOutput |
||||
Required.JsonInput.AnyWithInt32ValueWrapper.JsonOutput |
||||
Required.JsonInput.AnyWithInt32ValueWrapper.ProtobufOutput |
||||
Required.JsonInput.AnyWithStruct.JsonOutput |
||||
Required.JsonInput.AnyWithStruct.ProtobufOutput |
||||
Required.JsonInput.AnyWithTimestamp.JsonOutput |
||||
Required.JsonInput.AnyWithTimestamp.ProtobufOutput |
||||
Required.JsonInput.AnyWithValueForInteger.JsonOutput |
||||
Required.JsonInput.AnyWithValueForInteger.ProtobufOutput |
||||
Required.JsonInput.AnyWithValueForJsonObject.JsonOutput |
||||
Required.JsonInput.AnyWithValueForJsonObject.ProtobufOutput |
||||
Required.JsonInput.DoubleFieldMaxNegativeValue.JsonOutput |
||||
Required.JsonInput.DoubleFieldMaxNegativeValue.ProtobufOutput |
||||
Required.JsonInput.DoubleFieldMinPositiveValue.JsonOutput |
||||
Required.JsonInput.DoubleFieldMinPositiveValue.ProtobufOutput |
||||
Required.JsonInput.DoubleFieldNan.JsonOutput |
||||
Required.JsonInput.DurationMaxValue.JsonOutput |
||||
Required.JsonInput.DurationMaxValue.ProtobufOutput |
||||
Required.JsonInput.DurationMinValue.JsonOutput |
||||
Required.JsonInput.DurationMinValue.ProtobufOutput |
||||
Required.JsonInput.DurationRepeatedValue.JsonOutput |
||||
Required.JsonInput.DurationRepeatedValue.ProtobufOutput |
||||
Required.JsonInput.FieldMask.JsonOutput |
||||
Required.JsonInput.FieldMask.ProtobufOutput |
||||
Required.JsonInput.FloatFieldInfinity.JsonOutput |
||||
Required.JsonInput.FloatFieldNan.JsonOutput |
||||
Required.JsonInput.FloatFieldNegativeInfinity.JsonOutput |
||||
Required.JsonInput.FloatFieldTooLarge |
||||
Required.JsonInput.FloatFieldTooSmall |
||||
Required.JsonInput.OneofFieldDuplicate |
||||
Required.JsonInput.OptionalBoolWrapper.JsonOutput |
||||
Required.JsonInput.OptionalBoolWrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalBytesWrapper.JsonOutput |
||||
Required.JsonInput.OptionalBytesWrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalDoubleWrapper.JsonOutput |
||||
Required.JsonInput.OptionalDoubleWrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalFloatWrapper.JsonOutput |
||||
Required.JsonInput.OptionalFloatWrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalInt32Wrapper.JsonOutput |
||||
Required.JsonInput.OptionalInt32Wrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalInt64Wrapper.JsonOutput |
||||
Required.JsonInput.OptionalInt64Wrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalStringWrapper.JsonOutput |
||||
Required.JsonInput.OptionalStringWrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalUint32Wrapper.JsonOutput |
||||
Required.JsonInput.OptionalUint32Wrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalUint64Wrapper.JsonOutput |
||||
Required.JsonInput.OptionalUint64Wrapper.ProtobufOutput |
||||
Required.JsonInput.OptionalWrapperTypesWithNonDefaultValue.JsonOutput |
||||
Required.JsonInput.OptionalWrapperTypesWithNonDefaultValue.ProtobufOutput |
||||
Required.JsonInput.RepeatedBoolWrapper.JsonOutput |
||||
Required.JsonInput.RepeatedBoolWrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedBytesWrapper.JsonOutput |
||||
Required.JsonInput.RepeatedBytesWrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedDoubleWrapper.JsonOutput |
||||
Required.JsonInput.RepeatedDoubleWrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedFloatWrapper.JsonOutput |
||||
Required.JsonInput.RepeatedFloatWrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedInt32Wrapper.JsonOutput |
||||
Required.JsonInput.RepeatedInt32Wrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedInt64Wrapper.JsonOutput |
||||
Required.JsonInput.RepeatedInt64Wrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedStringWrapper.JsonOutput |
||||
Required.JsonInput.RepeatedStringWrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedUint32Wrapper.JsonOutput |
||||
Required.JsonInput.RepeatedUint32Wrapper.ProtobufOutput |
||||
Required.JsonInput.RepeatedUint64Wrapper.JsonOutput |
||||
Required.JsonInput.RepeatedUint64Wrapper.ProtobufOutput |
||||
Required.JsonInput.StringFieldSurrogatePair.JsonOutput |
||||
Required.JsonInput.StringFieldSurrogatePair.ProtobufOutput |
||||
Required.JsonInput.Struct.JsonOutput |
||||
Required.JsonInput.Struct.ProtobufOutput |
||||
Required.JsonInput.TimestampMaxValue.JsonOutput |
||||
Required.JsonInput.TimestampMaxValue.ProtobufOutput |
||||
Required.JsonInput.TimestampMinValue.JsonOutput |
||||
Required.JsonInput.TimestampMinValue.ProtobufOutput |
||||
Required.JsonInput.TimestampRepeatedValue.JsonOutput |
||||
Required.JsonInput.TimestampRepeatedValue.ProtobufOutput |
||||
Required.JsonInput.TimestampWithNegativeOffset.JsonOutput |
||||
Required.JsonInput.TimestampWithNegativeOffset.ProtobufOutput |
||||
Required.JsonInput.TimestampWithPositiveOffset.JsonOutput |
||||
Required.JsonInput.TimestampWithPositiveOffset.ProtobufOutput |
||||
Required.JsonInput.ValueAcceptBool.JsonOutput |
||||
Required.JsonInput.ValueAcceptBool.ProtobufOutput |
||||
Required.JsonInput.ValueAcceptFloat.JsonOutput |
||||
Required.JsonInput.ValueAcceptFloat.ProtobufOutput |
||||
Required.JsonInput.ValueAcceptInteger.JsonOutput |
||||
Required.JsonInput.ValueAcceptInteger.ProtobufOutput |
||||
Required.JsonInput.ValueAcceptList.JsonOutput |
||||
Required.JsonInput.ValueAcceptList.ProtobufOutput |
||||
Required.JsonInput.ValueAcceptNull.JsonOutput |
||||
Required.JsonInput.ValueAcceptNull.ProtobufOutput |
||||
Required.JsonInput.ValueAcceptObject.JsonOutput |
||||
Required.JsonInput.ValueAcceptObject.ProtobufOutput |
||||
Required.JsonInput.ValueAcceptString.JsonOutput |
||||
Required.JsonInput.ValueAcceptString.ProtobufOutput |
||||
Required.ProtobufInput.DoubleFieldNormalizeQuietNan.JsonOutput |
||||
Required.ProtobufInput.DoubleFieldNormalizeSignalingNan.JsonOutput |
||||
Required.ProtobufInput.FloatFieldNormalizeQuietNan.JsonOutput |
||||
Required.ProtobufInput.FloatFieldNormalizeSignalingNan.JsonOutput |
||||
Required.ProtobufInput.ValidDataRepeated.FLOAT.JsonOutput |
||||
Required.Proto3.JsonInput.Any.JsonOutput |
||||
Required.Proto3.JsonInput.Any.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyNested.JsonOutput |
||||
Required.Proto3.JsonInput.AnyNested.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyUnorderedTypeTag.JsonOutput |
||||
Required.Proto3.JsonInput.AnyUnorderedTypeTag.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyWithDuration.JsonOutput |
||||
Required.Proto3.JsonInput.AnyWithDuration.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyWithFieldMask.JsonOutput |
||||
Required.Proto3.JsonInput.AnyWithFieldMask.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyWithInt32ValueWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.AnyWithInt32ValueWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyWithStruct.JsonOutput |
||||
Required.Proto3.JsonInput.AnyWithStruct.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyWithTimestamp.JsonOutput |
||||
Required.Proto3.JsonInput.AnyWithTimestamp.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyWithValueForInteger.JsonOutput |
||||
Required.Proto3.JsonInput.AnyWithValueForInteger.ProtobufOutput |
||||
Required.Proto3.JsonInput.AnyWithValueForJsonObject.JsonOutput |
||||
Required.Proto3.JsonInput.AnyWithValueForJsonObject.ProtobufOutput |
||||
Required.Proto3.JsonInput.DoubleFieldMaxNegativeValue.JsonOutput |
||||
Required.Proto3.JsonInput.DoubleFieldMaxNegativeValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.DoubleFieldMinPositiveValue.JsonOutput |
||||
Required.Proto3.JsonInput.DoubleFieldMinPositiveValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.DoubleFieldNan.JsonOutput |
||||
Required.Proto3.JsonInput.DurationMaxValue.JsonOutput |
||||
Required.Proto3.JsonInput.DurationMaxValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.DurationMinValue.JsonOutput |
||||
Required.Proto3.JsonInput.DurationMinValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.DurationRepeatedValue.JsonOutput |
||||
Required.Proto3.JsonInput.DurationRepeatedValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.FieldMask.JsonOutput |
||||
Required.Proto3.JsonInput.FieldMask.ProtobufOutput |
||||
Required.Proto3.JsonInput.FloatFieldInfinity.JsonOutput |
||||
Required.Proto3.JsonInput.FloatFieldNan.JsonOutput |
||||
Required.Proto3.JsonInput.FloatFieldNegativeInfinity.JsonOutput |
||||
Required.Proto3.JsonInput.FloatFieldTooLarge |
||||
Required.Proto3.JsonInput.FloatFieldTooSmall |
||||
Required.Proto3.JsonInput.OneofFieldDuplicate |
||||
Required.Proto3.JsonInput.OptionalBoolWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalBoolWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalBytesWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalBytesWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalDoubleWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalDoubleWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalFloatWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalFloatWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalInt32Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalInt32Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalInt64Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalInt64Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalStringWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalStringWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalUint32Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalUint32Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalUint64Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalUint64Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.OptionalWrapperTypesWithNonDefaultValue.JsonOutput |
||||
Required.Proto3.JsonInput.OptionalWrapperTypesWithNonDefaultValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedBoolWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedBoolWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedBytesWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedBytesWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedDoubleWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedDoubleWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedFloatWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedFloatWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedInt32Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedInt32Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedInt64Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedInt64Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedStringWrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedStringWrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedUint32Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedUint32Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.RepeatedUint64Wrapper.JsonOutput |
||||
Required.Proto3.JsonInput.RepeatedUint64Wrapper.ProtobufOutput |
||||
Required.Proto3.JsonInput.StringFieldSurrogatePair.JsonOutput |
||||
Required.Proto3.JsonInput.StringFieldSurrogatePair.ProtobufOutput |
||||
Required.Proto3.JsonInput.Struct.JsonOutput |
||||
Required.Proto3.JsonInput.Struct.ProtobufOutput |
||||
Required.Proto3.JsonInput.TimestampMaxValue.JsonOutput |
||||
Required.Proto3.JsonInput.TimestampMaxValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.TimestampMinValue.JsonOutput |
||||
Required.Proto3.JsonInput.TimestampMinValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.TimestampRepeatedValue.JsonOutput |
||||
Required.Proto3.JsonInput.TimestampRepeatedValue.ProtobufOutput |
||||
Required.Proto3.JsonInput.TimestampWithNegativeOffset.JsonOutput |
||||
Required.Proto3.JsonInput.TimestampWithNegativeOffset.ProtobufOutput |
||||
Required.Proto3.JsonInput.TimestampWithPositiveOffset.JsonOutput |
||||
Required.Proto3.JsonInput.TimestampWithPositiveOffset.ProtobufOutput |
||||
Required.Proto3.JsonInput.ValueAcceptBool.JsonOutput |
||||
Required.Proto3.JsonInput.ValueAcceptBool.ProtobufOutput |
||||
Required.Proto3.JsonInput.ValueAcceptFloat.JsonOutput |
||||
Required.Proto3.JsonInput.ValueAcceptFloat.ProtobufOutput |
||||
Required.Proto3.JsonInput.ValueAcceptInteger.JsonOutput |
||||
Required.Proto3.JsonInput.ValueAcceptInteger.ProtobufOutput |
||||
Required.Proto3.JsonInput.ValueAcceptList.JsonOutput |
||||
Required.Proto3.JsonInput.ValueAcceptList.ProtobufOutput |
||||
Required.Proto3.JsonInput.ValueAcceptNull.JsonOutput |
||||
Required.Proto3.JsonInput.ValueAcceptNull.ProtobufOutput |
||||
Required.Proto3.JsonInput.ValueAcceptObject.JsonOutput |
||||
Required.Proto3.JsonInput.ValueAcceptObject.ProtobufOutput |
||||
Required.Proto3.JsonInput.ValueAcceptString.JsonOutput |
||||
Required.Proto3.JsonInput.ValueAcceptString.ProtobufOutput |
||||
Required.Proto3.ProtobufInput.DoubleFieldNormalizeQuietNan.JsonOutput |
||||
Required.Proto3.ProtobufInput.DoubleFieldNormalizeSignalingNan.JsonOutput |
||||
Required.Proto3.ProtobufInput.FloatFieldNormalizeQuietNan.JsonOutput |
||||
Required.Proto3.ProtobufInput.FloatFieldNormalizeSignalingNan.JsonOutput |
||||
Required.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.JsonOutput |
||||
Required.TimestampProtoInputTooLarge.JsonOutput |
||||
Required.TimestampProtoInputTooSmall.JsonOutput |
||||
|
@ -0,0 +1,362 @@ |
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// https://developers.google.com/protocol-buffers/
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
// Author: laszlocsomor@google.com (Laszlo Csomor)
|
||||
//
|
||||
// Implementation for long-path-aware open/mkdir/etc. on Windows.
|
||||
//
|
||||
// These functions convert the input path to an absolute Windows path
|
||||
// with "\\?\" prefix if necessary, then pass that to _wopen/_wmkdir/etc.
|
||||
// (declared in <io.h>) respectively. This allows working with files/directories
|
||||
// whose paths are longer than MAX_PATH (260 chars).
|
||||
//
|
||||
// This file is only used on Windows, it's empty on other platforms.
|
||||
|
||||
#if defined(_WIN32) |
||||
|
||||
// Comment this out to fall back to using the ANSI versions (open, mkdir, ...)
|
||||
// instead of the Unicode ones (_wopen, _wmkdir, ...). Doing so can be useful to
|
||||
// debug failing tests if that's caused by the long path support.
|
||||
#define SUPPORT_LONGPATHS |
||||
|
||||
#include <ctype.h> |
||||
#include <direct.h> |
||||
#include <errno.h> |
||||
#include <fcntl.h> |
||||
#include <io.h> |
||||
#include <sys/stat.h> |
||||
#include <sys/types.h> |
||||
#include <wctype.h> |
||||
#include <windows.h> |
||||
|
||||
#include <google/protobuf/stubs/io_win32.h> |
||||
|
||||
#include <cassert> |
||||
#include <memory> |
||||
#include <sstream> |
||||
#include <string> |
||||
#include <vector> |
||||
|
||||
namespace google { |
||||
namespace protobuf { |
||||
namespace internal { |
||||
namespace win32 { |
||||
namespace { |
||||
|
||||
using std::string; |
||||
using std::unique_ptr; |
||||
using std::wstring; |
||||
|
||||
template <typename char_type> |
||||
struct CharTraits { |
||||
static bool is_alpha(char_type ch); |
||||
}; |
||||
|
||||
template <> |
||||
struct CharTraits<char> { |
||||
static bool is_alpha(char ch) { return isalpha(ch); } |
||||
}; |
||||
|
||||
template <> |
||||
struct CharTraits<wchar_t> { |
||||
static bool is_alpha(wchar_t ch) { return iswalpha(ch); } |
||||
}; |
||||
|
||||
// Returns true if the path starts with a drive letter, e.g. "c:".
|
||||
// Note that this won't check for the "\" after the drive letter, so this also
|
||||
// returns true for "c:foo" (which is "c:\${PWD}\foo").
|
||||
// This check requires that a path not have a longpath prefix ("\\?\").
|
||||
template <typename char_type> |
||||
bool has_drive_letter(const char_type* ch) { |
||||
return CharTraits<char_type>::is_alpha(ch[0]) && ch[1] == ':'; |
||||
} |
||||
|
||||
// Returns true if the path starts with a longpath prefix ("\\?\").
|
||||
template <typename char_type> |
||||
bool has_longpath_prefix(const char_type* path) { |
||||
return path[0] == '\\' && path[1] == '\\' && path[2] == '?' && |
||||
path[3] == '\\'; |
||||
} |
||||
|
||||
// Returns true if the path starts with a drive specifier (e.g. "c:\").
|
||||
template <typename char_type> |
||||
bool is_path_absolute(const char_type* path) { |
||||
return has_drive_letter(path) && is_separator(path[2]); |
||||
} |
||||
|
||||
template <typename char_type> |
||||
bool is_separator(char_type c) { |
||||
return c == '/' || c == '\\'; |
||||
} |
||||
|
||||
template <typename char_type> |
||||
bool is_drive_relative(const char_type* path) { |
||||
return has_drive_letter(path) && (path[2] == 0 || !is_separator(path[2])); |
||||
} |
||||
|
||||
template <typename char_type> |
||||
void replace_directory_separators(char_type* p) { |
||||
for (; *p; ++p) { |
||||
if (*p == '/') { |
||||
*p = '\\'; |
||||
} |
||||
} |
||||
} |
||||
|
||||
string join_paths(const string& path1, const string& path2) { |
||||
if (path1.empty() || is_path_absolute(path2.c_str()) || |
||||
has_longpath_prefix(path2.c_str())) { |
||||
return path2; |
||||
} |
||||
if (path2.empty()) { |
||||
return path1; |
||||
} |
||||
|
||||
if (is_separator(path1.back())) { |
||||
return is_separator(path2.front()) ? (path1 + path2.substr(1)) |
||||
: (path1 + path2); |
||||
} else { |
||||
return is_separator(path2.front()) ? (path1 + path2) |
||||
: (path1 + '\\' + path2); |
||||
} |
||||
} |
||||
|
||||
string normalize(string path) { |
||||
if (has_longpath_prefix(path.c_str())) { |
||||
path = path.substr(4); |
||||
} |
||||
|
||||
static const string dot("."); |
||||
static const string dotdot(".."); |
||||
|
||||
std::vector<string> segments; |
||||
int segment_start = -1; |
||||
// Find the path segments in `path` (separated by "/").
|
||||
for (int i = 0;; ++i) { |
||||
if (!is_separator(path[i]) && path[i] != '\0') { |
||||
// The current character does not end a segment, so start one unless it's
|
||||
// already started.
|
||||
if (segment_start < 0) { |
||||
segment_start = i; |
||||
} |
||||
} else if (segment_start >= 0 && i > segment_start) { |
||||
// The current character is "/" or "\0", so this ends a segment.
|
||||
// Add that to `segments` if there's anything to add; handle "." and "..".
|
||||
string segment(path, segment_start, i - segment_start); |
||||
segment_start = -1; |
||||
if (segment == dotdot) { |
||||
if (!segments.empty() && |
||||
(!has_drive_letter(segments[0].c_str()) || segments.size() > 1)) { |
||||
segments.pop_back(); |
||||
} |
||||
} else if (segment != dot && !segment.empty()) { |
||||
segments.push_back(segment); |
||||
} |
||||
} |
||||
if (path[i] == '\0') { |
||||
break; |
||||
} |
||||
} |
||||
|
||||
// Handle the case when `path` is just a drive specifier (or some degenerate
|
||||
// form of it, e.g. "c:\..").
|
||||
if (segments.size() == 1 && segments[0].size() == 2 && |
||||
has_drive_letter(segments[0].c_str())) { |
||||
return segments[0] + '\\'; |
||||
} |
||||
|
||||
// Join all segments.
|
||||
bool first = true; |
||||
std::ostringstream result; |
||||
for (const auto& s : segments) { |
||||
if (!first) { |
||||
result << '\\'; |
||||
} |
||||
first = false; |
||||
result << s; |
||||
} |
||||
// Preserve trailing separator if the input contained it.
|
||||
if (is_separator(path.back())) { |
||||
result << '\\'; |
||||
} |
||||
return result.str(); |
||||
} |
||||
|
||||
std::unique_ptr<WCHAR[]> as_wstring(const string& s) { |
||||
int len = ::MultiByteToWideChar(CP_UTF8, 0, s.c_str(), s.size(), NULL, 0); |
||||
std::unique_ptr<WCHAR[]> result(new WCHAR[len + 1]); |
||||
::MultiByteToWideChar(CP_UTF8, 0, s.c_str(), s.size(), result.get(), len + 1); |
||||
result.get()[len] = 0; |
||||
return std::move(result); |
||||
} |
||||
|
||||
wstring as_wchar_path(const string& path) { |
||||
std::unique_ptr<WCHAR[]> wbuf(as_wstring(path)); |
||||
replace_directory_separators(wbuf.get()); |
||||
return wstring(wbuf.get()); |
||||
} |
||||
|
||||
bool as_windows_path(const string& path, wstring* result) { |
||||
if (path.empty()) { |
||||
result->clear(); |
||||
return true; |
||||
} |
||||
if (is_separator(path[0]) || is_drive_relative(path.c_str())) { |
||||
return false; |
||||
} |
||||
|
||||
string mutable_path = path; |
||||
if (!is_path_absolute(mutable_path.c_str()) && |
||||
!has_longpath_prefix(mutable_path.c_str())) { |
||||
char cwd[MAX_PATH]; |
||||
::GetCurrentDirectoryA(MAX_PATH, cwd); |
||||
mutable_path = join_paths(cwd, mutable_path); |
||||
} |
||||
*result = as_wchar_path(normalize(mutable_path)); |
||||
if (!has_longpath_prefix(result->c_str())) { |
||||
// Add the "\\?\" prefix unconditionally. This way we prevent the Win32 API
|
||||
// from processing the path and "helpfully" removing trailing dots from the
|
||||
// path, for example.
|
||||
// See https://github.com/bazelbuild/bazel/issues/2935
|
||||
*result = wstring(L"\\\\?\\") + *result; |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
} // namespace
|
||||
|
||||
int open(const char* path, int flags, int mode) { |
||||
#ifdef SUPPORT_LONGPATHS |
||||
wstring wpath; |
||||
if (!as_windows_path(path, &wpath)) { |
||||
errno = ENOENT; |
||||
return -1; |
||||
} |
||||
return ::_wopen(wpath.c_str(), flags, mode); |
||||
#else |
||||
return ::_open(path, flags, mode); |
||||
#endif |
||||
} |
||||
|
||||
int mkdir(const char* path, int _mode) { |
||||
#ifdef SUPPORT_LONGPATHS |
||||
wstring wpath; |
||||
if (!as_windows_path(path, &wpath)) { |
||||
errno = ENOENT; |
||||
return -1; |
||||
} |
||||
return ::_wmkdir(wpath.c_str()); |
||||
#else // not SUPPORT_LONGPATHS
|
||||
return ::_mkdir(path); |
||||
#endif // not SUPPORT_LONGPATHS
|
||||
} |
||||
|
||||
int access(const char* path, int mode) { |
||||
#ifdef SUPPORT_LONGPATHS |
||||
wstring wpath; |
||||
if (!as_windows_path(path, &wpath)) { |
||||
errno = ENOENT; |
||||
return -1; |
||||
} |
||||
return ::_waccess(wpath.c_str(), mode); |
||||
#else |
||||
return ::_access(path, mode); |
||||
#endif |
||||
} |
||||
|
||||
int chdir(const char* path) { |
||||
#ifdef SUPPORT_LONGPATHS |
||||
wstring wpath; |
||||
if (!as_windows_path(path, &wpath)) { |
||||
errno = ENOENT; |
||||
return -1; |
||||
} |
||||
return ::_wchdir(wpath.c_str()); |
||||
#else |
||||
return ::_chdir(path); |
||||
#endif |
||||
} |
||||
|
||||
int stat(const char* path, struct _stat* buffer) { |
||||
#ifdef SUPPORT_LONGPATHS |
||||
wstring wpath; |
||||
if (!as_windows_path(path, &wpath)) { |
||||
errno = ENOENT; |
||||
return -1; |
||||
} |
||||
return ::_wstat(wpath.c_str(), buffer); |
||||
#else // not SUPPORT_LONGPATHS
|
||||
return ::_stat(path, buffer); |
||||
#endif // not SUPPORT_LONGPATHS
|
||||
} |
||||
|
||||
FILE* fopen(const char* path, const char* mode) { |
||||
#ifdef SUPPORT_LONGPATHS |
||||
wstring wpath; |
||||
if (!as_windows_path(path, &wpath)) { |
||||
errno = ENOENT; |
||||
return NULL; |
||||
} |
||||
std::unique_ptr<WCHAR[]> wmode(as_wstring(mode)); |
||||
return ::_wfopen(wpath.c_str(), wmode.get()); |
||||
#else |
||||
return ::fopen(path, mode); |
||||
#endif |
||||
} |
||||
|
||||
int close(int fd) { return ::close(fd); } |
||||
|
||||
int dup(int fd) { return ::_dup(fd); } |
||||
|
||||
int dup2(int fd1, int fd2) { return ::_dup2(fd1, fd2); } |
||||
|
||||
int read(int fd, void* buffer, size_t size) { |
||||
return ::_read(fd, buffer, size); |
||||
} |
||||
|
||||
int setmode(int fd, int mode) { return ::_setmode(fd, mode); } |
||||
|
||||
int write(int fd, const void* buffer, size_t size) { |
||||
return ::_write(fd, buffer, size); |
||||
} |
||||
|
||||
wstring testonly_path_to_winpath(const string& path) { |
||||
wstring wpath; |
||||
as_windows_path(path, &wpath); |
||||
return wpath; |
||||
} |
||||
|
||||
} // namespace win32
|
||||
} // namespace internal
|
||||
} // namespace protobuf
|
||||
} // namespace google
|
||||
|
||||
#endif // defined(_WIN32)
|
||||
|
@ -0,0 +1,98 @@ |
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// https://developers.google.com/protocol-buffers/
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
// Author: laszlocsomor@google.com (Laszlo Csomor)
|
||||
//
|
||||
// This file contains the declarations for Windows implementations of
|
||||
// commonly used POSIX functions such as open(2) and access(2), as well
|
||||
// as macro definitions for flags of these functions.
|
||||
//
|
||||
// By including this file you'll redefine open/access/etc. to
|
||||
// ::google::protobuf::internal::win32::{open/access/etc.}.
|
||||
// Make sure you don't include a header that attempts to redeclare or
|
||||
// redefine these functions, that'll lead to confusing compilation
|
||||
// errors. It's best to #include this file as the last one to ensure that.
|
||||
//
|
||||
// This file is only used on Windows, it's empty on other platforms.
|
||||
|
||||
#ifndef GOOGLE_PROTOBUF_STUBS_IO_WIN32_H__ |
||||
#define GOOGLE_PROTOBUF_STUBS_IO_WIN32_H__ |
||||
|
||||
#if defined(_WIN32) |
||||
|
||||
#include <string> |
||||
#include <google/protobuf/stubs/port.h> |
||||
|
||||
namespace google { |
||||
namespace protobuf { |
||||
namespace internal { |
||||
namespace win32 { |
||||
|
||||
LIBPROTOBUF_EXPORT FILE* fopen(const char* path, const char* mode); |
||||
LIBPROTOBUF_EXPORT int access(const char* path, int mode); |
||||
LIBPROTOBUF_EXPORT int chdir(const char* path); |
||||
LIBPROTOBUF_EXPORT int close(int fd); |
||||
LIBPROTOBUF_EXPORT int dup(int fd); |
||||
LIBPROTOBUF_EXPORT int dup2(int fd1, int fd2); |
||||
LIBPROTOBUF_EXPORT int mkdir(const char* path, int _mode); |
||||
LIBPROTOBUF_EXPORT int open(const char* path, int flags, int mode = 0); |
||||
LIBPROTOBUF_EXPORT int read(int fd, void* buffer, size_t size); |
||||
LIBPROTOBUF_EXPORT int setmode(int fd, int mode); |
||||
LIBPROTOBUF_EXPORT int stat(const char* path, struct _stat* buffer); |
||||
LIBPROTOBUF_EXPORT int write(int fd, const void* buffer, size_t size); |
||||
LIBPROTOBUF_EXPORT std::wstring testonly_path_to_winpath( |
||||
const std::string& path); |
||||
|
||||
} // namespace win32
|
||||
} // namespace internal
|
||||
} // namespace protobuf
|
||||
} // namespace google
|
||||
|
||||
#ifndef W_OK |
||||
#define W_OK 02 // not defined by MSVC for whatever reason
|
||||
#endif |
||||
|
||||
#ifndef F_OK |
||||
#define F_OK 00 // not defined by MSVC for whatever reason
|
||||
#endif |
||||
|
||||
#ifndef STDIN_FILENO |
||||
#define STDIN_FILENO 0 |
||||
#endif |
||||
|
||||
#ifndef STDOUT_FILENO |
||||
#define STDOUT_FILENO 1 |
||||
#endif |
||||
|
||||
#endif // defined(_WIN32)
|
||||
|
||||
#endif // GOOGLE_PROTOBUF_STUBS_IO_WIN32_H__
|
||||
|
||||
|
@ -0,0 +1,367 @@ |
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// https://developers.google.com/protocol-buffers/
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
// Author: laszlocsomor@google.com (Laszlo Csomor)
|
||||
//
|
||||
// Unit tests for long-path-aware open/mkdir/access on Windows.
|
||||
//
|
||||
// This file is only used on Windows, it's empty on other platforms.
|
||||
|
||||
#if defined(_WIN32) |
||||
|
||||
#define WIN32_LEAN_AND_MEAN |
||||
#include <errno.h> |
||||
#include <fcntl.h> |
||||
#include <stdlib.h> |
||||
#include <string.h> |
||||
#include <sys/stat.h> |
||||
#include <sys/types.h> |
||||
#include <wchar.h> |
||||
#include <windows.h> |
||||
|
||||
#include <google/protobuf/stubs/io_win32.h> |
||||
#include <google/protobuf/testing/googletest.h> |
||||
#include <gtest/gtest.h> |
||||
|
||||
#include <memory> |
||||
#include <sstream> |
||||
#include <string> |
||||
|
||||
namespace google { |
||||
namespace protobuf { |
||||
namespace internal { |
||||
namespace win32 { |
||||
namespace { |
||||
|
||||
using std::string; |
||||
using std::unique_ptr; |
||||
using std::wstring; |
||||
|
||||
class IoWin32Test : public ::testing::Test { |
||||
public: |
||||
void SetUp() override; |
||||
void TearDown() override; |
||||
|
||||
protected: |
||||
bool CreateAllUnder(wstring path); |
||||
bool DeleteAllUnder(wstring path); |
||||
|
||||
string test_tmpdir; |
||||
wstring wtest_tmpdir; |
||||
}; |
||||
|
||||
#define ASSERT_INITIALIZED \ |
||||
{ \
|
||||
EXPECT_FALSE(test_tmpdir.empty()); \
|
||||
EXPECT_FALSE(wtest_tmpdir.empty()); \
|
||||
} |
||||
|
||||
void IoWin32Test::SetUp() { |
||||
test_tmpdir = string(TestTempDir()); |
||||
wtest_tmpdir.clear(); |
||||
if (test_tmpdir.empty()) { |
||||
const char* test_tmpdir_env = getenv("TEST_TMPDIR"); |
||||
if (test_tmpdir_env != nullptr && *test_tmpdir_env) { |
||||
test_tmpdir = string(test_tmpdir_env); |
||||
} |
||||
|
||||
// Only Bazel defines TEST_TMPDIR, CMake does not, so look for other
|
||||
// suitable environment variables.
|
||||
if (test_tmpdir.empty()) { |
||||
for (const char* name : {"TEMP", "TMP"}) { |
||||
test_tmpdir_env = getenv(name); |
||||
if (test_tmpdir_env != nullptr && *test_tmpdir_env) { |
||||
test_tmpdir = string(test_tmpdir_env); |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
|
||||
// No other temp directory was found. Use the current director
|
||||
if (test_tmpdir.empty()) { |
||||
char buffer[MAX_PATH]; |
||||
// Use GetCurrentDirectoryA instead of GetCurrentDirectoryW, because the
|
||||
// current working directory must always be shorter than MAX_PATH, even
|
||||
// with
|
||||
// "\\?\" prefix (except on Windows 10 version 1607 and beyond, after
|
||||
// opting in to long paths by default [1]).
|
||||
//
|
||||
// [1] https://msdn.microsoft.com/en-us/library/windows/ \
|
||||
// desktop/aa365247(v=vs.85).aspx#maxpath
|
||||
DWORD result = ::GetCurrentDirectoryA(MAX_PATH, buffer); |
||||
if (result > 0) { |
||||
test_tmpdir = string(buffer); |
||||
} else { |
||||
// Using assertions in SetUp/TearDown seems to confuse the test
|
||||
// framework, so just leave the member variables empty in case of
|
||||
// failure.
|
||||
GOOGLE_CHECK_OK(false); |
||||
return; |
||||
} |
||||
} |
||||
} |
||||
|
||||
while (test_tmpdir.back() == '/' || test_tmpdir.back() == '\\') { |
||||
test_tmpdir.pop_back(); |
||||
} |
||||
test_tmpdir += "\\io_win32_unittest.tmp"; |
||||
|
||||
// CreateDirectoryA's limit is 248 chars, see MSDN.
|
||||
// https://msdn.microsoft.com/en-us/library/windows/ \
|
||||
// desktop/aa363855(v=vs.85).aspx
|
||||
wtest_tmpdir = testonly_path_to_winpath(test_tmpdir); |
||||
if (!DeleteAllUnder(wtest_tmpdir) || !CreateAllUnder(wtest_tmpdir)) { |
||||
GOOGLE_CHECK_OK(false); |
||||
test_tmpdir.clear(); |
||||
wtest_tmpdir.clear(); |
||||
} |
||||
} |
||||
|
||||
void IoWin32Test::TearDown() { |
||||
if (!wtest_tmpdir.empty()) { |
||||
DeleteAllUnder(wtest_tmpdir); |
||||
} |
||||
} |
||||
|
||||
bool IoWin32Test::CreateAllUnder(wstring path) { |
||||
// Prepend UNC prefix if the path doesn't have it already. Don't bother
|
||||
// checking if the path is shorter than MAX_PATH, let's just do it
|
||||
// unconditionally.
|
||||
if (path.find(L"\\\\?\\") != 0) { |
||||
path = wstring(L"\\\\?\\") + path; |
||||
} |
||||
if (::CreateDirectoryW(path.c_str(), NULL) || |
||||
GetLastError() == ERROR_ALREADY_EXISTS || |
||||
GetLastError() == ERROR_ACCESS_DENIED) { |
||||
return true; |
||||
} |
||||
if (GetLastError() == ERROR_PATH_NOT_FOUND) { |
||||
size_t pos = path.find_last_of(L'\\'); |
||||
if (pos != wstring::npos) { |
||||
wstring parent(path, 0, pos); |
||||
if (CreateAllUnder(parent) && CreateDirectoryW(path.c_str(), NULL)) { |
||||
return true; |
||||
} |
||||
} |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
bool IoWin32Test::DeleteAllUnder(wstring path) { |
||||
static const wstring kDot(L"."); |
||||
static const wstring kDotDot(L".."); |
||||
|
||||
// Prepend UNC prefix if the path doesn't have it already. Don't bother
|
||||
// checking if the path is shorter than MAX_PATH, let's just do it
|
||||
// unconditionally.
|
||||
if (path.find(L"\\\\?\\") != 0) { |
||||
path = wstring(L"\\\\?\\") + path; |
||||
} |
||||
// Append "\" if necessary.
|
||||
if (path.back() != '\\') { |
||||
path.push_back('\\'); |
||||
} |
||||
|
||||
WIN32_FIND_DATAW metadata; |
||||
HANDLE handle = ::FindFirstFileW((path + L"*").c_str(), &metadata); |
||||
if (handle == INVALID_HANDLE_VALUE) { |
||||
return true; // directory doesn't exist
|
||||
} |
||||
|
||||
bool result = true; |
||||
do { |
||||
wstring childname = metadata.cFileName; |
||||
if (kDot != childname && kDotDot != childname) { |
||||
wstring childpath = path + childname; |
||||
if ((metadata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0) { |
||||
// If this is not a junction, delete its contents recursively.
|
||||
// Finally delete this directory/junction too.
|
||||
if (((metadata.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) == 0 && |
||||
!DeleteAllUnder(childpath)) || |
||||
!::RemoveDirectoryW(childpath.c_str())) { |
||||
result = false; |
||||
break; |
||||
} |
||||
} else { |
||||
if (!::DeleteFileW(childpath.c_str())) { |
||||
result = false; |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
} while (::FindNextFileW(handle, &metadata)); |
||||
::FindClose(handle); |
||||
return result; |
||||
} |
||||
|
||||
TEST_F(IoWin32Test, AccessTest) { |
||||
ASSERT_INITIALIZED; |
||||
|
||||
string path = test_tmpdir; |
||||
while (path.size() < MAX_PATH - 30) { |
||||
path += "\\accesstest"; |
||||
EXPECT_EQ(mkdir(path.c_str(), 0644), 0); |
||||
} |
||||
string file = path + "\\file.txt"; |
||||
int fd = open(file.c_str(), O_CREAT | O_WRONLY, 0644); |
||||
if (fd > 0) { |
||||
EXPECT_EQ(close(fd), 0); |
||||
} else { |
||||
EXPECT_TRUE(false); |
||||
} |
||||
|
||||
EXPECT_EQ(access(test_tmpdir.c_str(), F_OK), 0); |
||||
EXPECT_EQ(access(path.c_str(), F_OK), 0); |
||||
EXPECT_EQ(access(path.c_str(), W_OK), 0); |
||||
EXPECT_EQ(access(file.c_str(), F_OK | W_OK), 0); |
||||
EXPECT_NE(access((file + ".blah").c_str(), F_OK), 0); |
||||
EXPECT_NE(access((file + ".blah").c_str(), W_OK), 0); |
||||
|
||||
EXPECT_EQ(access(".", F_OK), 0); |
||||
EXPECT_EQ(access(".", W_OK), 0); |
||||
EXPECT_EQ(access((test_tmpdir + "/accesstest").c_str(), F_OK | W_OK), 0); |
||||
ASSERT_EQ(access((test_tmpdir + "/./normalize_me/.././accesstest").c_str(), |
||||
F_OK | W_OK), |
||||
0); |
||||
EXPECT_NE(access("io_win32_unittest.AccessTest.nonexistent", F_OK), 0); |
||||
EXPECT_NE(access("io_win32_unittest.AccessTest.nonexistent", W_OK), 0); |
||||
|
||||
ASSERT_EQ(access("c:bad", F_OK), -1); |
||||
ASSERT_EQ(errno, ENOENT); |
||||
ASSERT_EQ(access("/tmp/bad", F_OK), -1); |
||||
ASSERT_EQ(errno, ENOENT); |
||||
ASSERT_EQ(access("\\bad", F_OK), -1); |
||||
ASSERT_EQ(errno, ENOENT); |
||||
} |
||||
|
||||
TEST_F(IoWin32Test, OpenTest) { |
||||
ASSERT_INITIALIZED; |
||||
|
||||
string path = test_tmpdir; |
||||
while (path.size() < MAX_PATH) { |
||||
path += "\\opentest"; |
||||
EXPECT_EQ(mkdir(path.c_str(), 0644), 0); |
||||
} |
||||
string file = path + "\\file.txt"; |
||||
int fd = open(file.c_str(), O_CREAT | O_WRONLY, 0644); |
||||
if (fd > 0) { |
||||
EXPECT_EQ(write(fd, "hello", 5), 5); |
||||
EXPECT_EQ(close(fd), 0); |
||||
} else { |
||||
EXPECT_TRUE(false); |
||||
} |
||||
|
||||
ASSERT_EQ(open("c:bad.txt", O_CREAT | O_WRONLY, 0644), -1); |
||||
ASSERT_EQ(errno, ENOENT); |
||||
ASSERT_EQ(open("/tmp/bad.txt", O_CREAT | O_WRONLY, 0644), -1); |
||||
ASSERT_EQ(errno, ENOENT); |
||||
ASSERT_EQ(open("\\bad.txt", O_CREAT | O_WRONLY, 0644), -1); |
||||
ASSERT_EQ(errno, ENOENT); |
||||
} |
||||
|
||||
TEST_F(IoWin32Test, MkdirTest) { |
||||
ASSERT_INITIALIZED; |
||||
|
||||
string path = test_tmpdir; |
||||
do { |
||||
path += "\\mkdirtest"; |
||||
ASSERT_EQ(mkdir(path.c_str(), 0644), 0); |
||||
} while (path.size() <= MAX_PATH); |
||||
|
||||
ASSERT_EQ(mkdir("c:bad", 0644), -1); |
||||
ASSERT_EQ(errno, ENOENT); |
||||
ASSERT_EQ(mkdir("/tmp/bad", 0644), -1); |
||||
ASSERT_EQ(errno, ENOENT); |
||||
ASSERT_EQ(mkdir("\\bad", 0644), -1); |
||||
ASSERT_EQ(errno, ENOENT); |
||||
} |
||||
|
||||
TEST_F(IoWin32Test, ChdirTest) { |
||||
char owd[MAX_PATH]; |
||||
EXPECT_GT(::GetCurrentDirectoryA(MAX_PATH, owd), 0); |
||||
string path("C:\\"); |
||||
EXPECT_EQ(access(path.c_str(), F_OK), 0); |
||||
ASSERT_EQ(chdir(path.c_str()), 0); |
||||
EXPECT_TRUE(::SetCurrentDirectoryA(owd)); |
||||
|
||||
// Do not try to chdir into the test_tmpdir, it may already contain directory
|
||||
// names with trailing dots.
|
||||
// Instead test here with an obviously dot-trailed path. If the win32_chdir
|
||||
// function would not convert the path to absolute and prefix with "\\?\" then
|
||||
// the Win32 API would ignore the trailing dot, but because of the prefixing
|
||||
// there'll be no path processing done, so we'll actually attempt to chdir
|
||||
// into "C:\some\path\foo."
|
||||
path = test_tmpdir + "/foo."; |
||||
EXPECT_EQ(mkdir(path.c_str(), 644), 0); |
||||
EXPECT_EQ(access(path.c_str(), F_OK), 0); |
||||
ASSERT_NE(chdir(path.c_str()), 0); |
||||
} |
||||
|
||||
TEST_F(IoWin32Test, AsWindowsPathTest) { |
||||
DWORD size = GetCurrentDirectoryW(0, NULL); |
||||
unique_ptr<wchar_t[]> cwd_str(new wchar_t[size]); |
||||
EXPECT_GT(GetCurrentDirectoryW(size, cwd_str.get()), 0); |
||||
wstring cwd = wstring(L"\\\\?\\") + cwd_str.get(); |
||||
|
||||
ASSERT_EQ(testonly_path_to_winpath("relative_mkdirtest"), |
||||
cwd + L"\\relative_mkdirtest"); |
||||
ASSERT_EQ(testonly_path_to_winpath("preserve//\\trailing///"), |
||||
cwd + L"\\preserve\\trailing\\"); |
||||
ASSERT_EQ(testonly_path_to_winpath("./normalize_me\\/../blah"), |
||||
cwd + L"\\blah"); |
||||
std::ostringstream relpath; |
||||
for (wchar_t* p = cwd_str.get(); *p; ++p) { |
||||
if (*p == '/' || *p == '\\') { |
||||
relpath << "../"; |
||||
} |
||||
} |
||||
relpath << ".\\/../\\./beyond-toplevel"; |
||||
ASSERT_EQ(testonly_path_to_winpath(relpath.str()), |
||||
wstring(L"\\\\?\\") + cwd_str.get()[0] + L":\\beyond-toplevel"); |
||||
|
||||
// Absolute unix paths lack drive letters, driveless absolute windows paths
|
||||
// do too. Neither can be converted to a drive-specifying absolute Windows
|
||||
// path.
|
||||
ASSERT_EQ(testonly_path_to_winpath("/absolute/unix/path"), L""); |
||||
// Though valid on Windows, we also don't support UNC paths (\\UNC\\blah).
|
||||
ASSERT_EQ(testonly_path_to_winpath("\\driveless\\absolute"), L""); |
||||
// Though valid in cmd.exe, drive-relative paths are not supported.
|
||||
ASSERT_EQ(testonly_path_to_winpath("c:foo"), L""); |
||||
ASSERT_EQ(testonly_path_to_winpath("c:/foo"), L"\\\\?\\c:\\foo"); |
||||
} |
||||
|
||||
} // namespace
|
||||
} // namespace win32
|
||||
} // namespace internal
|
||||
} // namespace protobuf
|
||||
} // namespace google
|
||||
|
||||
#endif // defined(_WIN32)
|
||||
|
@ -0,0 +1,216 @@ |
||||
// Protocol Buffers - Google's data interchange format |
||||
// Copyright 2008 Google Inc. All rights reserved. |
||||
// https://developers.google.com/protocol-buffers/ |
||||
// |
||||
// Redistribution and use in source and binary forms, with or without |
||||
// modification, are permitted provided that the following conditions are |
||||
// met: |
||||
// |
||||
// * Redistributions of source code must retain the above copyright |
||||
// notice, this list of conditions and the following disclaimer. |
||||
// * Redistributions in binary form must reproduce the above |
||||
// copyright notice, this list of conditions and the following disclaimer |
||||
// in the documentation and/or other materials provided with the |
||||
// distribution. |
||||
// * Neither the name of Google Inc. nor the names of its |
||||
// contributors may be used to endorse or promote products derived from |
||||
// this software without specific prior written permission. |
||||
// |
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
// |
||||
// Test schema for proto2 messages. This test schema is used by: |
||||
// |
||||
// - conformance tests |
||||
// |
||||
|
||||
syntax = "proto2"; |
||||
|
||||
package protobuf_test_messages.proto2; |
||||
option java_package = "com.google.protobuf_test_messages.proto2"; |
||||
|
||||
// This is the default, but we specify it here explicitly. |
||||
option optimize_for = SPEED; |
||||
|
||||
option cc_enable_arenas = true; |
||||
|
||||
// This proto includes every type of field in both singular and repeated |
||||
// forms. |
||||
// |
||||
// Also, crucially, all messages and enums in this file are eventually |
||||
// submessages of this message. So for example, a fuzz test of TestAllTypes |
||||
// could trigger bugs that occur in any message type in this file. We verify |
||||
// this stays true in a unit test. |
||||
message TestAllTypesProto2 { |
||||
message NestedMessage { |
||||
optional int32 a = 1; |
||||
optional TestAllTypesProto2 corecursive = 2; |
||||
} |
||||
|
||||
enum NestedEnum { |
||||
FOO = 0; |
||||
BAR = 1; |
||||
BAZ = 2; |
||||
NEG = -1; // Intentionally negative. |
||||
} |
||||
|
||||
// Singular |
||||
optional int32 optional_int32 = 1; |
||||
optional int64 optional_int64 = 2; |
||||
optional uint32 optional_uint32 = 3; |
||||
optional uint64 optional_uint64 = 4; |
||||
optional sint32 optional_sint32 = 5; |
||||
optional sint64 optional_sint64 = 6; |
||||
optional fixed32 optional_fixed32 = 7; |
||||
optional fixed64 optional_fixed64 = 8; |
||||
optional sfixed32 optional_sfixed32 = 9; |
||||
optional sfixed64 optional_sfixed64 = 10; |
||||
optional float optional_float = 11; |
||||
optional double optional_double = 12; |
||||
optional bool optional_bool = 13; |
||||
optional string optional_string = 14; |
||||
optional bytes optional_bytes = 15; |
||||
|
||||
optional NestedMessage optional_nested_message = 18; |
||||
optional ForeignMessage optional_foreign_message = 19; |
||||
|
||||
optional NestedEnum optional_nested_enum = 21; |
||||
optional ForeignEnum optional_foreign_enum = 22; |
||||
|
||||
optional string optional_string_piece = 24 [ctype=STRING_PIECE]; |
||||
optional string optional_cord = 25 [ctype=CORD]; |
||||
|
||||
optional TestAllTypesProto2 recursive_message = 27; |
||||
|
||||
// Repeated |
||||
repeated int32 repeated_int32 = 31; |
||||
repeated int64 repeated_int64 = 32; |
||||
repeated uint32 repeated_uint32 = 33; |
||||
repeated uint64 repeated_uint64 = 34; |
||||
repeated sint32 repeated_sint32 = 35; |
||||
repeated sint64 repeated_sint64 = 36; |
||||
repeated fixed32 repeated_fixed32 = 37; |
||||
repeated fixed64 repeated_fixed64 = 38; |
||||
repeated sfixed32 repeated_sfixed32 = 39; |
||||
repeated sfixed64 repeated_sfixed64 = 40; |
||||
repeated float repeated_float = 41; |
||||
repeated double repeated_double = 42; |
||||
repeated bool repeated_bool = 43; |
||||
repeated string repeated_string = 44; |
||||
repeated bytes repeated_bytes = 45; |
||||
|
||||
repeated NestedMessage repeated_nested_message = 48; |
||||
repeated ForeignMessage repeated_foreign_message = 49; |
||||
|
||||
repeated NestedEnum repeated_nested_enum = 51; |
||||
repeated ForeignEnum repeated_foreign_enum = 52; |
||||
|
||||
repeated string repeated_string_piece = 54 [ctype=STRING_PIECE]; |
||||
repeated string repeated_cord = 55 [ctype=CORD]; |
||||
|
||||
// Map |
||||
map < int32, int32> map_int32_int32 = 56; |
||||
map < int64, int64> map_int64_int64 = 57; |
||||
map < uint32, uint32> map_uint32_uint32 = 58; |
||||
map < uint64, uint64> map_uint64_uint64 = 59; |
||||
map < sint32, sint32> map_sint32_sint32 = 60; |
||||
map < sint64, sint64> map_sint64_sint64 = 61; |
||||
map < fixed32, fixed32> map_fixed32_fixed32 = 62; |
||||
map < fixed64, fixed64> map_fixed64_fixed64 = 63; |
||||
map <sfixed32, sfixed32> map_sfixed32_sfixed32 = 64; |
||||
map <sfixed64, sfixed64> map_sfixed64_sfixed64 = 65; |
||||
map < int32, float> map_int32_float = 66; |
||||
map < int32, double> map_int32_double = 67; |
||||
map < bool, bool> map_bool_bool = 68; |
||||
map < string, string> map_string_string = 69; |
||||
map < string, bytes> map_string_bytes = 70; |
||||
map < string, NestedMessage> map_string_nested_message = 71; |
||||
map < string, ForeignMessage> map_string_foreign_message = 72; |
||||
map < string, NestedEnum> map_string_nested_enum = 73; |
||||
map < string, ForeignEnum> map_string_foreign_enum = 74; |
||||
|
||||
oneof oneof_field { |
||||
uint32 oneof_uint32 = 111; |
||||
NestedMessage oneof_nested_message = 112; |
||||
string oneof_string = 113; |
||||
bytes oneof_bytes = 114; |
||||
bool oneof_bool = 115; |
||||
uint64 oneof_uint64 = 116; |
||||
float oneof_float = 117; |
||||
double oneof_double = 118; |
||||
NestedEnum oneof_enum = 119; |
||||
} |
||||
|
||||
// extensions |
||||
extensions 120 to 200; |
||||
|
||||
// groups |
||||
optional group Data = 201 { |
||||
optional int32 group_int32 = 202; |
||||
optional uint32 group_uint32 = 203; |
||||
}; |
||||
|
||||
// Test field-name-to-JSON-name convention. |
||||
// (protobuf says names can be any valid C/C++ identifier.) |
||||
optional int32 fieldname1 = 401; |
||||
optional int32 field_name2 = 402; |
||||
optional int32 _field_name3 = 403; |
||||
optional int32 field__name4_ = 404; |
||||
optional int32 field0name5 = 405; |
||||
optional int32 field_0_name6 = 406; |
||||
optional int32 fieldName7 = 407; |
||||
optional int32 FieldName8 = 408; |
||||
optional int32 field_Name9 = 409; |
||||
optional int32 Field_Name10 = 410; |
||||
optional int32 FIELD_NAME11 = 411; |
||||
optional int32 FIELD_name12 = 412; |
||||
optional int32 __field_name13 = 413; |
||||
optional int32 __Field_name14 = 414; |
||||
optional int32 field__name15 = 415; |
||||
optional int32 field__Name16 = 416; |
||||
optional int32 field_name17__ = 417; |
||||
optional int32 Field_name18__ = 418; |
||||
|
||||
// message_set test case. |
||||
message MessageSetCorrect { |
||||
option message_set_wire_format = true; |
||||
extensions 4 to max; |
||||
} |
||||
|
||||
message MessageSetCorrectExtension1 { |
||||
extend MessageSetCorrect { |
||||
optional MessageSetCorrectExtension1 message_set_extension = 1547769; |
||||
} |
||||
optional string str = 25; |
||||
} |
||||
|
||||
message MessageSetCorrectExtension2 { |
||||
extend MessageSetCorrect { |
||||
optional MessageSetCorrectExtension2 message_set_extension = 4135312; |
||||
} |
||||
optional int32 i = 9; |
||||
} |
||||
} |
||||
|
||||
message ForeignMessage { |
||||
optional int32 c = 1; |
||||
} |
||||
|
||||
enum ForeignEnum { |
||||
FOREIGN_FOO = 0; |
||||
FOREIGN_BAR = 1; |
||||
FOREIGN_BAZ = 2; |
||||
} |
||||
|
||||
extend TestAllTypesProto2 { |
||||
optional int32 extension_int32 = 120; |
||||
} |
Loading…
Reference in new issue