From e891c29f9bc6aec94db80d44ed8c24d4142f7c3f Mon Sep 17 00:00:00 2001 From: Josh Haberman Date: Wed, 30 Dec 2015 16:03:49 -0800 Subject: [PATCH] Allow conformance test runner to tolerate crashes, and re-enable conformance tests. --- conformance/Makefile.am | 15 +- conformance/conformance_test.cc | 8 +- conformance/conformance_test_runner.cc | 64 ++++- conformance/failure_list_cpp.txt | 3 - conformance/failure_list_java.txt | 25 -- conformance/failure_list_python.txt | 173 ++++++++++++ conformance/failure_list_python_cpp.txt | 173 ++++++++++++ conformance/failure_list_ruby.txt | 335 ++++++++++++++++++++++++ python/setup.py | 4 + python/tox.ini | 6 +- ruby/travis-test.sh | 5 +- travis.sh | 4 +- 12 files changed, 760 insertions(+), 55 deletions(-) diff --git a/conformance/Makefile.am b/conformance/Makefile.am index 89d87d3e96..7913463470 100644 --- a/conformance/Makefile.am +++ b/conformance/Makefile.am @@ -1,7 +1,14 @@ ## Process this file with automake to produce Makefile.in protoc_inputs = \ - conformance.proto + conformance.proto \ + $(top_srcdir)/src/google/protobuf/any.proto \ + $(top_srcdir)/src/google/protobuf/duration.proto \ + $(top_srcdir)/src/google/protobuf/field_mask.proto \ + $(top_srcdir)/src/google/protobuf/struct.proto \ + $(top_srcdir)/src/google/protobuf/timestamp.proto \ + $(top_srcdir)/src/google/protobuf/wrappers.proto + protoc_outputs = \ conformance.pb.cc \ @@ -75,7 +82,7 @@ endif if USE_EXTERNAL_PROTOC protoc_middleman: $(protoc_inputs) - $(PROTOC) -I$(srcdir) --cpp_out=. --java_out=. --ruby_out=. --objc_out=. --python_out=.$^ + $(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=. --ruby_out=. --objc_out=. --python_out=.$^ touch protoc_middleman else @@ -135,10 +142,10 @@ test_ruby: protoc_middleman conformance-test-runner $(other_language_protoc_outp # These depend on library paths being properly set up. The easiest way to # run them is to just use "tox" from the python dir. test_python: protoc_middleman conformance-test-runner - ./conformance-test-runner --failure_list failure_list_python.txt ./conformance_python.py + ./conformance-test-runner --failure_list failure_list_python.txt $(CONFORMANCE_PYTHON_EXTRA_FAILURES) ./conformance_python.py test_python_cpp: protoc_middleman conformance-test-runner - ./conformance-test-runner --failure_list failure_list_python_cpp.txt ./conformance_python.py + ./conformance-test-runner --failure_list failure_list_python_cpp.txt $(CONFORMANCE_PYTHON_EXTRA_FAILURES) ./conformance_python.py if OBJC_CONFORMANCE_TEST diff --git a/conformance/conformance_test.cc b/conformance/conformance_test.cc index a232ecc5d2..fc0605bfc4 100644 --- a/conformance/conformance_test.cc +++ b/conformance/conformance_test.cc @@ -299,7 +299,13 @@ void ConformanceTestSuite::RunValidInputTest( return; } - GOOGLE_CHECK(test_message.ParseFromString(binary_protobuf)); + if (!test_message.ParseFromString(binary_protobuf)) { + ReportFailure(test_name, request, response, + "INTERNAL ERROR: internal JSON->protobuf transcode " + "yielded unparseable proto."); + return; + } + break; } diff --git a/conformance/conformance_test_runner.cc b/conformance/conformance_test_runner.cc index f2b0dabf29..376a60b9aa 100644 --- a/conformance/conformance_test_runner.cc +++ b/conformance/conformance_test_runner.cc @@ -55,16 +55,21 @@ #include #include -#include #include +#include +#include +#include #include +#include + #include "conformance.pb.h" #include "conformance_test.h" using conformance::ConformanceRequest; using conformance::ConformanceResponse; using google::protobuf::internal::scoped_array; +using google::protobuf::StringAppendF; using std::string; using std::vector; @@ -81,14 +86,14 @@ using std::vector; class ForkPipeRunner : public google::protobuf::ConformanceTestRunner { public: ForkPipeRunner(const std::string &executable) - : running_(false), executable_(executable) {} + : child_pid_(-1), executable_(executable) {} virtual ~ForkPipeRunner() {} void RunTest(const std::string& test_name, const std::string& request, std::string* response) { - if (!running_) { + if (child_pid_ < 0) { SpawnTestProgram(); } @@ -97,7 +102,31 @@ class ForkPipeRunner : public google::protobuf::ConformanceTestRunner { uint32_t len = request.size(); CheckedWrite(write_fd_, &len, sizeof(uint32_t)); CheckedWrite(write_fd_, request.c_str(), request.size()); - CheckedRead(read_fd_, &len, sizeof(uint32_t)); + + if (!TryRead(read_fd_, &len, sizeof(uint32_t))) { + // We failed to read from the child, assume a crash and try to reap. + GOOGLE_LOG(INFO) << "Trying to reap child, pid=" << child_pid_; + + int status; + waitpid(child_pid_, &status, WEXITED); + + string error_msg; + if (WIFEXITED(status)) { + StringAppendF(&error_msg, + "child exited, status=%d", WEXITSTATUS(status)); + } else if (WIFSIGNALED(status)) { + StringAppendF(&error_msg, + "child killed by signal %d", WTERMSIG(status)); + } + GOOGLE_LOG(INFO) << error_msg; + child_pid_ = -1; + + conformance::ConformanceResponse response_obj; + response_obj.set_runtime_error(error_msg); + response_obj.SerializeToString(response); + return; + } + response->resize(len); CheckedRead(read_fd_, (void*)response->c_str(), len); } @@ -141,7 +170,7 @@ class ForkPipeRunner : public google::protobuf::ConformanceTestRunner { CHECK_SYSCALL(close(fromproc_pipe_fd[1])); write_fd_ = toproc_pipe_fd[1]; read_fd_ = fromproc_pipe_fd[0]; - running_ = true; + child_pid_ = pid; } else { // Child. CHECK_SYSCALL(close(STDIN_FILENO)); @@ -171,28 +200,40 @@ class ForkPipeRunner : public google::protobuf::ConformanceTestRunner { } } - void CheckedRead(int fd, void *buf, size_t len) { + bool TryRead(int fd, void *buf, size_t len) { size_t ofs = 0; while (len > 0) { ssize_t bytes_read = read(fd, (char*)buf + ofs, len); if (bytes_read == 0) { - GOOGLE_LOG(FATAL) << current_test_name_ + GOOGLE_LOG(ERROR) << current_test_name_ << ": unexpected EOF from test program"; + return false; } else if (bytes_read < 0) { - GOOGLE_LOG(FATAL) << current_test_name_ + GOOGLE_LOG(ERROR) << current_test_name_ << ": error reading from test program: " << strerror(errno); + return false; } len -= bytes_read; ofs += bytes_read; } + + return true; + } + + void CheckedRead(int fd, void *buf, size_t len) { + if (!TryRead(fd, buf, len)) { + GOOGLE_LOG(FATAL) << current_test_name_ + << ": error reading from test program: " + << strerror(errno); + } } int write_fd_; int read_fd_; - bool running_; + pid_t child_pid_; std::string executable_; std::string current_test_name_; }; @@ -239,12 +280,12 @@ int main(int argc, char *argv[]) { char *program; google::protobuf::ConformanceTestSuite suite; + vector failure_list; + for (int arg = 1; arg < argc; ++arg) { if (strcmp(argv[arg], "--failure_list") == 0) { if (++arg == argc) UsageError(); - vector failure_list; ParseFailureList(argv[arg], &failure_list); - suite.SetFailureList(failure_list); } else if (strcmp(argv[arg], "--verbose") == 0) { suite.SetVerbose(true); } else if (argv[arg][0] == '-') { @@ -259,6 +300,7 @@ int main(int argc, char *argv[]) { } } + suite.SetFailureList(failure_list); ForkPipeRunner runner(program); std::string output; diff --git a/conformance/failure_list_cpp.txt b/conformance/failure_list_cpp.txt index 240d4118a1..2ddf831c03 100644 --- a/conformance/failure_list_cpp.txt +++ b/conformance/failure_list_cpp.txt @@ -36,9 +36,6 @@ JsonInput.FieldNameInLowerCamelCase.Validator JsonInput.FieldNameInSnakeCase.JsonOutput JsonInput.FieldNameInSnakeCase.ProtobufOutput JsonInput.FieldNameNotQuoted -JsonInput.FieldNameWithMixedCases.JsonOutput -JsonInput.FieldNameWithMixedCases.ProtobufOutput -JsonInput.FieldNameWithMixedCases.Validator JsonInput.FloatFieldTooLarge JsonInput.FloatFieldTooSmall JsonInput.Int32FieldLeadingSpace diff --git a/conformance/failure_list_java.txt b/conformance/failure_list_java.txt index 86af18b92f..552c0cc9c4 100644 --- a/conformance/failure_list_java.txt +++ b/conformance/failure_list_java.txt @@ -17,48 +17,27 @@ JsonInput.BoolFieldCamelCaseTrue JsonInput.BoolFieldDoubleQuotedFalse JsonInput.BoolFieldDoubleQuotedTrue JsonInput.BoolMapFieldKeyNotQuoted -JsonInput.BytesFieldNoPadding JsonInput.DoubleFieldInfinityNotQuoted JsonInput.DoubleFieldNanNotQuoted JsonInput.DoubleFieldNegativeInfinityNotQuoted JsonInput.EnumFieldNotQuoted -JsonInput.EnumFieldNumericValueNonZero.JsonOutput -JsonInput.EnumFieldNumericValueNonZero.ProtobufOutput -JsonInput.EnumFieldNumericValueZero.JsonOutput -JsonInput.EnumFieldNumericValueZero.ProtobufOutput -JsonInput.EnumFieldUnknownValue.Validator JsonInput.FieldMask.ProtobufOutput JsonInput.FieldMaskInvalidCharacter JsonInput.FieldNameDuplicate -JsonInput.FieldNameDuplicateDifferentCasing1 -JsonInput.FieldNameDuplicateDifferentCasing2 JsonInput.FieldNameInSnakeCase.JsonOutput JsonInput.FieldNameNotQuoted -JsonInput.FieldNameWithMixedCases.JsonOutput JsonInput.FloatFieldInfinityNotQuoted JsonInput.FloatFieldNanNotQuoted JsonInput.FloatFieldNegativeInfinityNotQuoted -JsonInput.Int32FieldExponentialFormat.JsonOutput -JsonInput.Int32FieldExponentialFormat.ProtobufOutput -JsonInput.Int32FieldFloatTrailingZero.JsonOutput -JsonInput.Int32FieldFloatTrailingZero.ProtobufOutput JsonInput.Int32FieldLeadingZero -JsonInput.Int32FieldMaxFloatValue.JsonOutput -JsonInput.Int32FieldMaxFloatValue.ProtobufOutput JsonInput.Int32FieldMinFloatValue.JsonOutput -JsonInput.Int32FieldMinFloatValue.ProtobufOutput JsonInput.Int32FieldMinValue.JsonOutput JsonInput.Int32FieldNegativeWithLeadingZero JsonInput.Int32FieldPlusSign JsonInput.Int32MapFieldKeyNotQuoted JsonInput.Int64MapFieldKeyNotQuoted JsonInput.JsonWithComments -JsonInput.MapFieldValueIsNull -JsonInput.OneofFieldDuplicate JsonInput.OriginalProtoFieldName.JsonOutput -JsonInput.RepeatedFieldMessageElementIsNull -JsonInput.RepeatedFieldPrimitiveElementIsNull -JsonInput.RepeatedFieldTrailingComma JsonInput.RepeatedFieldWrongElementTypeExpectingStringsGotBool JsonInput.RepeatedFieldWrongElementTypeExpectingStringsGotInt JsonInput.StringFieldNotAString @@ -66,9 +45,5 @@ JsonInput.StringFieldSurrogateInWrongOrder JsonInput.StringFieldUnpairedHighSurrogate JsonInput.StringFieldUnpairedLowSurrogate JsonInput.StringFieldUppercaseEscapeLetter -JsonInput.Uint32FieldMaxFloatValue.JsonOutput -JsonInput.Uint32FieldMaxFloatValue.ProtobufOutput JsonInput.Uint32MapFieldKeyNotQuoted JsonInput.Uint64MapFieldKeyNotQuoted -JsonInput.ValueAcceptNull.JsonOutput -JsonInput.ValueAcceptNull.ProtobufOutput diff --git a/conformance/failure_list_python.txt b/conformance/failure_list_python.txt index e69de29bb2..c99345988e 100644 --- a/conformance/failure_list_python.txt +++ b/conformance/failure_list_python.txt @@ -0,0 +1,173 @@ +DurationProtoInputTooLarge.JsonOutput +DurationProtoInputTooSmall.JsonOutput +FieldMaskNumbersDontRoundTrip.JsonOutput +FieldMaskPathsDontRoundTrip.JsonOutput +FieldMaskTooManyUnderscore.JsonOutput +JsonInput.AllFieldAcceptNull.JsonOutput +JsonInput.Any.JsonOutput +JsonInput.AnyNested.JsonOutput +JsonInput.AnyNested.ProtobufOutput +JsonInput.Any.ProtobufOutput +JsonInput.AnyUnorderedTypeTag.JsonOutput +JsonInput.AnyUnorderedTypeTag.ProtobufOutput +JsonInput.AnyWithDuration.JsonOutput +JsonInput.AnyWithDuration.ProtobufOutput +JsonInput.AnyWithFieldMask.JsonOutput +JsonInput.AnyWithFieldMask.ProtobufOutput +JsonInput.AnyWithInt32ValueWrapper.JsonOutput +JsonInput.AnyWithInt32ValueWrapper.ProtobufOutput +JsonInput.AnyWithStruct.JsonOutput +JsonInput.AnyWithStruct.ProtobufOutput +JsonInput.AnyWithTimestamp.JsonOutput +JsonInput.AnyWithTimestamp.ProtobufOutput +JsonInput.AnyWithValueForInteger.JsonOutput +JsonInput.AnyWithValueForInteger.ProtobufOutput +JsonInput.AnyWithValueForJsonObject.JsonOutput +JsonInput.AnyWithValueForJsonObject.ProtobufOutput +JsonInput.BoolFieldFalse.JsonOutput +JsonInput.BoolFieldTrue.JsonOutput +JsonInput.BoolMapEscapedKey.JsonOutput +JsonInput.BoolMapField.JsonOutput +JsonInput.BytesFieldInvalidBase64Characters +JsonInput.BytesField.JsonOutput +JsonInput.BytesRepeatedField.JsonOutput +JsonInput.DoubleFieldInfinity.JsonOutput +JsonInput.DoubleFieldInfinityNotQuoted +JsonInput.DoubleFieldMaxNegativeValue.JsonOutput +JsonInput.DoubleFieldMaxPositiveValue.JsonOutput +JsonInput.DoubleFieldMinNegativeValue.JsonOutput +JsonInput.DoubleFieldMinPositiveValue.JsonOutput +JsonInput.DoubleFieldNan.JsonOutput +JsonInput.DoubleFieldNanNotQuoted +JsonInput.DoubleFieldNegativeInfinity.JsonOutput +JsonInput.DoubleFieldNegativeInfinityNotQuoted +JsonInput.DoubleFieldQuotedValue.JsonOutput +JsonInput.DoubleFieldTooSmall +JsonInput.DurationJsonInputTooLarge +JsonInput.DurationJsonInputTooSmall +JsonInput.DurationMaxValue.JsonOutput +JsonInput.DurationMinValue.JsonOutput +JsonInput.DurationMissingS +JsonInput.DurationRepeatedValue.JsonOutput +JsonInput.EnumField.JsonOutput +JsonInput.EnumFieldNumericValueNonZero.JsonOutput +JsonInput.EnumFieldNumericValueNonZero.ProtobufOutput +JsonInput.EnumFieldNumericValueZero.JsonOutput +JsonInput.EnumFieldNumericValueZero.ProtobufOutput +JsonInput.EnumFieldUnknownValue.Validator +JsonInput.EnumRepeatedField.JsonOutput +JsonInput.FieldMaskInvalidCharacter +JsonInput.FieldMask.JsonOutput +JsonInput.FieldMask.ProtobufOutput +JsonInput.FieldNameEscaped.JsonOutput +JsonInput.FieldNameInLowerCamelCase.Validator +JsonInput.FieldNameInSnakeCase.JsonOutput +JsonInput.FieldNameInSnakeCase.ProtobufOutput +JsonInput.FieldNameWithMixedCases.JsonOutput +JsonInput.FieldNameWithNumbers.JsonOutput +JsonInput.FloatFieldInfinity.JsonOutput +JsonInput.FloatFieldInfinityNotQuoted +JsonInput.FloatFieldMaxNegativeValue.JsonOutput +JsonInput.FloatFieldMaxPositiveValue.JsonOutput +JsonInput.FloatFieldMinNegativeValue.JsonOutput +JsonInput.FloatFieldMinPositiveValue.JsonOutput +JsonInput.FloatFieldNan.JsonOutput +JsonInput.FloatFieldNanNotQuoted +JsonInput.FloatFieldNegativeInfinity.JsonOutput +JsonInput.FloatFieldNegativeInfinityNotQuoted +JsonInput.FloatFieldQuotedValue.JsonOutput +JsonInput.FloatFieldTooLarge +JsonInput.FloatFieldTooSmall +JsonInput.HelloWorld.JsonOutput +JsonInput.Int32FieldExponentialFormat.JsonOutput +JsonInput.Int32FieldExponentialFormat.ProtobufOutput +JsonInput.Int32FieldFloatTrailingZero.JsonOutput +JsonInput.Int32FieldFloatTrailingZero.ProtobufOutput +JsonInput.Int32FieldMaxFloatValue.JsonOutput +JsonInput.Int32FieldMaxFloatValue.ProtobufOutput +JsonInput.Int32FieldMaxValue.JsonOutput +JsonInput.Int32FieldMinFloatValue.JsonOutput +JsonInput.Int32FieldMinFloatValue.ProtobufOutput +JsonInput.Int32FieldMinValue.JsonOutput +JsonInput.Int32FieldStringValueEscaped.JsonOutput +JsonInput.Int32FieldStringValue.JsonOutput +JsonInput.Int32MapEscapedKey.JsonOutput +JsonInput.Int32MapField.JsonOutput +JsonInput.Int64FieldMaxValue.JsonOutput +JsonInput.Int64FieldMaxValueNotQuoted.JsonOutput +JsonInput.Int64FieldMinValue.JsonOutput +JsonInput.Int64FieldMinValueNotQuoted.JsonOutput +JsonInput.Int64MapEscapedKey.JsonOutput +JsonInput.Int64MapField.JsonOutput +JsonInput.MessageField.JsonOutput +JsonInput.MessageMapField.JsonOutput +JsonInput.MessageRepeatedField.JsonOutput +JsonInput.OptionalBoolWrapper.JsonOutput +JsonInput.OptionalBytesWrapper.JsonOutput +JsonInput.OptionalDoubleWrapper.JsonOutput +JsonInput.OptionalFloatWrapper.JsonOutput +JsonInput.OptionalInt32Wrapper.JsonOutput +JsonInput.OptionalInt64Wrapper.JsonOutput +JsonInput.OptionalStringWrapper.JsonOutput +JsonInput.OptionalUint32Wrapper.JsonOutput +JsonInput.OptionalUint64Wrapper.JsonOutput +JsonInput.OptionalWrapperTypesWithNonDefaultValue.JsonOutput +JsonInput.OriginalProtoFieldName.JsonOutput +JsonInput.OriginalProtoFieldName.ProtobufOutput +JsonInput.PrimitiveRepeatedField.JsonOutput +JsonInput.RepeatedBoolWrapper.JsonOutput +JsonInput.RepeatedBytesWrapper.JsonOutput +JsonInput.RepeatedDoubleWrapper.JsonOutput +JsonInput.RepeatedFieldMessageElementIsNull +JsonInput.RepeatedFieldPrimitiveElementIsNull +JsonInput.RepeatedFieldWrongElementTypeExpectingIntegersGotBool +JsonInput.RepeatedFloatWrapper.JsonOutput +JsonInput.RepeatedInt32Wrapper.JsonOutput +JsonInput.RepeatedInt64Wrapper.JsonOutput +JsonInput.RepeatedStringWrapper.JsonOutput +JsonInput.RepeatedUint32Wrapper.JsonOutput +JsonInput.RepeatedUint64Wrapper.JsonOutput +JsonInput.StringFieldEscape.JsonOutput +JsonInput.StringField.JsonOutput +JsonInput.StringFieldSurrogatePair.JsonOutput +JsonInput.StringFieldUnicodeEscape.JsonOutput +JsonInput.StringFieldUnicodeEscapeWithLowercaseHexLetters.JsonOutput +JsonInput.StringFieldUnicode.JsonOutput +JsonInput.StringFieldUnpairedLowSurrogate +JsonInput.StringRepeatedField.JsonOutput +JsonInput.Struct.JsonOutput +JsonInput.Struct.ProtobufOutput +JsonInput.TimestampJsonInputLowercaseT +JsonInput.TimestampMaxValue.JsonOutput +JsonInput.TimestampMinValue.JsonOutput +JsonInput.TimestampRepeatedValue.JsonOutput +JsonInput.TimestampWithNegativeOffset.JsonOutput +JsonInput.TimestampWithPositiveOffset.JsonOutput +JsonInput.Uint32FieldMaxFloatValue.JsonOutput +JsonInput.Uint32FieldMaxFloatValue.ProtobufOutput +JsonInput.Uint32FieldMaxValue.JsonOutput +JsonInput.Uint32MapField.JsonOutput +JsonInput.Uint64FieldMaxValue.JsonOutput +JsonInput.Uint64FieldMaxValueNotQuoted.JsonOutput +JsonInput.Uint64MapField.JsonOutput +JsonInput.ValueAcceptBool.JsonOutput +JsonInput.ValueAcceptBool.ProtobufOutput +JsonInput.ValueAcceptFloat.JsonOutput +JsonInput.ValueAcceptFloat.ProtobufOutput +JsonInput.ValueAcceptInteger.JsonOutput +JsonInput.ValueAcceptInteger.ProtobufOutput +JsonInput.ValueAcceptList.JsonOutput +JsonInput.ValueAcceptList.ProtobufOutput +JsonInput.ValueAcceptNull.JsonOutput +JsonInput.ValueAcceptNull.ProtobufOutput +JsonInput.ValueAcceptObject.JsonOutput +JsonInput.ValueAcceptObject.ProtobufOutput +JsonInput.ValueAcceptString.JsonOutput +JsonInput.ValueAcceptString.ProtobufOutput +JsonInput.WrapperTypesWithNullValue.JsonOutput +ProtobufInput.DoubleFieldNormalizeQuietNan.JsonOutput +ProtobufInput.DoubleFieldNormalizeSignalingNan.JsonOutput +ProtobufInput.FloatFieldNormalizeQuietNan.JsonOutput +ProtobufInput.FloatFieldNormalizeSignalingNan.JsonOutput +TimestampProtoInputTooLarge.JsonOutput +TimestampProtoInputTooSmall.JsonOutput diff --git a/conformance/failure_list_python_cpp.txt b/conformance/failure_list_python_cpp.txt index 4b16a88b72..9c710e99c7 100644 --- a/conformance/failure_list_python_cpp.txt +++ b/conformance/failure_list_python_cpp.txt @@ -7,6 +7,177 @@ # TODO(haberman): insert links to corresponding bugs tracking the issue. # Should we use GitHub issues or the Google-internal bug tracker? +DurationProtoInputTooLarge.JsonOutput +DurationProtoInputTooSmall.JsonOutput +FieldMaskNumbersDontRoundTrip.JsonOutput +FieldMaskPathsDontRoundTrip.JsonOutput +FieldMaskTooManyUnderscore.JsonOutput +JsonInput.AllFieldAcceptNull.JsonOutput +JsonInput.Any.JsonOutput +JsonInput.AnyNested.JsonOutput +JsonInput.AnyNested.ProtobufOutput +JsonInput.Any.ProtobufOutput +JsonInput.AnyUnorderedTypeTag.JsonOutput +JsonInput.AnyUnorderedTypeTag.ProtobufOutput +JsonInput.AnyWithDuration.JsonOutput +JsonInput.AnyWithDuration.ProtobufOutput +JsonInput.AnyWithFieldMask.JsonOutput +JsonInput.AnyWithFieldMask.ProtobufOutput +JsonInput.AnyWithInt32ValueWrapper.JsonOutput +JsonInput.AnyWithInt32ValueWrapper.ProtobufOutput +JsonInput.AnyWithStruct.JsonOutput +JsonInput.AnyWithStruct.ProtobufOutput +JsonInput.AnyWithTimestamp.JsonOutput +JsonInput.AnyWithTimestamp.ProtobufOutput +JsonInput.AnyWithValueForInteger.JsonOutput +JsonInput.AnyWithValueForInteger.ProtobufOutput +JsonInput.AnyWithValueForJsonObject.JsonOutput +JsonInput.AnyWithValueForJsonObject.ProtobufOutput +JsonInput.BoolFieldFalse.JsonOutput +JsonInput.BoolFieldTrue.JsonOutput +JsonInput.BoolMapEscapedKey.JsonOutput +JsonInput.BoolMapField.JsonOutput +JsonInput.BytesFieldInvalidBase64Characters +JsonInput.BytesField.JsonOutput +JsonInput.BytesRepeatedField.JsonOutput +JsonInput.DoubleFieldInfinity.JsonOutput +JsonInput.DoubleFieldInfinityNotQuoted +JsonInput.DoubleFieldMaxNegativeValue.JsonOutput +JsonInput.DoubleFieldMaxPositiveValue.JsonOutput +JsonInput.DoubleFieldMinNegativeValue.JsonOutput +JsonInput.DoubleFieldMinPositiveValue.JsonOutput +JsonInput.DoubleFieldNan.JsonOutput +JsonInput.DoubleFieldNanNotQuoted +JsonInput.DoubleFieldNegativeInfinity.JsonOutput +JsonInput.DoubleFieldNegativeInfinityNotQuoted +JsonInput.DoubleFieldQuotedValue.JsonOutput +JsonInput.DoubleFieldTooSmall +JsonInput.DurationJsonInputTooLarge +JsonInput.DurationJsonInputTooSmall +JsonInput.DurationMaxValue.JsonOutput +JsonInput.DurationMinValue.JsonOutput +JsonInput.DurationMissingS +JsonInput.DurationRepeatedValue.JsonOutput +JsonInput.EnumField.JsonOutput +JsonInput.EnumFieldNumericValueNonZero.JsonOutput +JsonInput.EnumFieldNumericValueNonZero.ProtobufOutput +JsonInput.EnumFieldNumericValueZero.JsonOutput +JsonInput.EnumFieldNumericValueZero.ProtobufOutput +JsonInput.EnumFieldUnknownValue.Validator +JsonInput.EnumRepeatedField.JsonOutput +JsonInput.FieldMaskInvalidCharacter +JsonInput.FieldMask.JsonOutput +JsonInput.FieldMask.ProtobufOutput +JsonInput.FieldNameEscaped.JsonOutput +JsonInput.FieldNameInLowerCamelCase.Validator +JsonInput.FieldNameInSnakeCase.JsonOutput +JsonInput.FieldNameInSnakeCase.ProtobufOutput +JsonInput.FieldNameWithMixedCases.JsonOutput +JsonInput.FieldNameWithNumbers.JsonOutput +JsonInput.FloatFieldInfinity.JsonOutput +JsonInput.FloatFieldInfinityNotQuoted +JsonInput.FloatFieldMaxNegativeValue.JsonOutput +JsonInput.FloatFieldMaxPositiveValue.JsonOutput +JsonInput.FloatFieldMinNegativeValue.JsonOutput +JsonInput.FloatFieldMinPositiveValue.JsonOutput +JsonInput.FloatFieldNan.JsonOutput +JsonInput.FloatFieldNanNotQuoted +JsonInput.FloatFieldNegativeInfinity.JsonOutput +JsonInput.FloatFieldNegativeInfinityNotQuoted +JsonInput.FloatFieldQuotedValue.JsonOutput +JsonInput.FloatFieldTooLarge +JsonInput.FloatFieldTooSmall +JsonInput.HelloWorld.JsonOutput +JsonInput.Int32FieldExponentialFormat.JsonOutput +JsonInput.Int32FieldExponentialFormat.ProtobufOutput +JsonInput.Int32FieldFloatTrailingZero.JsonOutput +JsonInput.Int32FieldFloatTrailingZero.ProtobufOutput +JsonInput.Int32FieldMaxFloatValue.JsonOutput +JsonInput.Int32FieldMaxFloatValue.ProtobufOutput +JsonInput.Int32FieldMaxValue.JsonOutput +JsonInput.Int32FieldMinFloatValue.JsonOutput +JsonInput.Int32FieldMinFloatValue.ProtobufOutput +JsonInput.Int32FieldMinValue.JsonOutput +JsonInput.Int32FieldStringValueEscaped.JsonOutput +JsonInput.Int32FieldStringValue.JsonOutput +JsonInput.Int32MapEscapedKey.JsonOutput +JsonInput.Int32MapField.JsonOutput +JsonInput.Int64FieldMaxValue.JsonOutput +JsonInput.Int64FieldMaxValueNotQuoted.JsonOutput +JsonInput.Int64FieldMinValue.JsonOutput +JsonInput.Int64FieldMinValueNotQuoted.JsonOutput +JsonInput.Int64MapEscapedKey.JsonOutput +JsonInput.Int64MapField.JsonOutput +JsonInput.MessageField.JsonOutput +JsonInput.MessageMapField.JsonOutput +JsonInput.MessageRepeatedField.JsonOutput +JsonInput.OptionalBoolWrapper.JsonOutput +JsonInput.OptionalBytesWrapper.JsonOutput +JsonInput.OptionalDoubleWrapper.JsonOutput +JsonInput.OptionalFloatWrapper.JsonOutput +JsonInput.OptionalInt32Wrapper.JsonOutput +JsonInput.OptionalInt64Wrapper.JsonOutput +JsonInput.OptionalStringWrapper.JsonOutput +JsonInput.OptionalUint32Wrapper.JsonOutput +JsonInput.OptionalUint64Wrapper.JsonOutput +JsonInput.OptionalWrapperTypesWithNonDefaultValue.JsonOutput +JsonInput.OriginalProtoFieldName.JsonOutput +JsonInput.OriginalProtoFieldName.ProtobufOutput +JsonInput.PrimitiveRepeatedField.JsonOutput +JsonInput.RepeatedBoolWrapper.JsonOutput +JsonInput.RepeatedBytesWrapper.JsonOutput +JsonInput.RepeatedDoubleWrapper.JsonOutput +JsonInput.RepeatedFieldMessageElementIsNull +JsonInput.RepeatedFieldPrimitiveElementIsNull +JsonInput.RepeatedFieldWrongElementTypeExpectingIntegersGotBool +JsonInput.RepeatedFloatWrapper.JsonOutput +JsonInput.RepeatedInt32Wrapper.JsonOutput +JsonInput.RepeatedInt64Wrapper.JsonOutput +JsonInput.RepeatedStringWrapper.JsonOutput +JsonInput.RepeatedUint32Wrapper.JsonOutput +JsonInput.RepeatedUint64Wrapper.JsonOutput +JsonInput.StringFieldEscape.JsonOutput +JsonInput.StringField.JsonOutput +JsonInput.StringFieldSurrogatePair.JsonOutput +JsonInput.StringFieldUnicodeEscape.JsonOutput +JsonInput.StringFieldUnicodeEscapeWithLowercaseHexLetters.JsonOutput +JsonInput.StringFieldUnicode.JsonOutput +JsonInput.StringFieldUnpairedLowSurrogate +JsonInput.StringRepeatedField.JsonOutput +JsonInput.Struct.JsonOutput +JsonInput.Struct.ProtobufOutput +JsonInput.TimestampJsonInputLowercaseT +JsonInput.TimestampMaxValue.JsonOutput +JsonInput.TimestampMinValue.JsonOutput +JsonInput.TimestampRepeatedValue.JsonOutput +JsonInput.TimestampWithNegativeOffset.JsonOutput +JsonInput.TimestampWithPositiveOffset.JsonOutput +JsonInput.Uint32FieldMaxFloatValue.JsonOutput +JsonInput.Uint32FieldMaxFloatValue.ProtobufOutput +JsonInput.Uint32FieldMaxValue.JsonOutput +JsonInput.Uint32MapField.JsonOutput +JsonInput.Uint64FieldMaxValue.JsonOutput +JsonInput.Uint64FieldMaxValueNotQuoted.JsonOutput +JsonInput.Uint64MapField.JsonOutput +JsonInput.ValueAcceptBool.JsonOutput +JsonInput.ValueAcceptBool.ProtobufOutput +JsonInput.ValueAcceptFloat.JsonOutput +JsonInput.ValueAcceptFloat.ProtobufOutput +JsonInput.ValueAcceptInteger.JsonOutput +JsonInput.ValueAcceptInteger.ProtobufOutput +JsonInput.ValueAcceptList.JsonOutput +JsonInput.ValueAcceptList.ProtobufOutput +JsonInput.ValueAcceptNull.JsonOutput +JsonInput.ValueAcceptNull.ProtobufOutput +JsonInput.ValueAcceptObject.JsonOutput +JsonInput.ValueAcceptObject.ProtobufOutput +JsonInput.ValueAcceptString.JsonOutput +JsonInput.ValueAcceptString.ProtobufOutput +JsonInput.WrapperTypesWithNullValue.JsonOutput +ProtobufInput.DoubleFieldNormalizeQuietNan.JsonOutput +ProtobufInput.DoubleFieldNormalizeSignalingNan.JsonOutput +ProtobufInput.FloatFieldNormalizeQuietNan.JsonOutput +ProtobufInput.FloatFieldNormalizeSignalingNan.JsonOutput ProtobufInput.PrematureEofInDelimitedDataForKnownNonRepeatedValue.MESSAGE ProtobufInput.PrematureEofInDelimitedDataForKnownRepeatedValue.MESSAGE ProtobufInput.PrematureEofInPackedField.BOOL @@ -23,3 +194,5 @@ ProtobufInput.PrematureEofInPackedField.SINT32 ProtobufInput.PrematureEofInPackedField.SINT64 ProtobufInput.PrematureEofInPackedField.UINT32 ProtobufInput.PrematureEofInPackedField.UINT64 +TimestampProtoInputTooLarge.JsonOutput +TimestampProtoInputTooSmall.JsonOutput diff --git a/conformance/failure_list_ruby.txt b/conformance/failure_list_ruby.txt index ff220cb990..1b2e7d9492 100644 --- a/conformance/failure_list_ruby.txt +++ b/conformance/failure_list_ruby.txt @@ -1,2 +1,337 @@ +# Many of the JSON tests are failing due to a simple bug: +# fields are not camel-cased at all right now. Once this +# is fixed, this list should grow a lot shorter. + +DurationProtoInputTooLarge.JsonOutput +DurationProtoInputTooSmall.JsonOutput +FieldMaskNumbersDontRoundTrip.JsonOutput +FieldMaskPathsDontRoundTrip.JsonOutput +FieldMaskTooManyUnderscore.JsonOutput +JsonInput.AllFieldAcceptNull.JsonOutput +JsonInput.AllFieldAcceptNull.ProtobufOutput +JsonInput.Any.JsonOutput +JsonInput.AnyNested.JsonOutput +JsonInput.AnyNested.ProtobufOutput +JsonInput.Any.ProtobufOutput +JsonInput.AnyUnorderedTypeTag.JsonOutput +JsonInput.AnyUnorderedTypeTag.ProtobufOutput +JsonInput.AnyWithDuration.JsonOutput +JsonInput.AnyWithDuration.ProtobufOutput +JsonInput.AnyWithFieldMask.JsonOutput +JsonInput.AnyWithFieldMask.ProtobufOutput +JsonInput.AnyWithInt32ValueWrapper.JsonOutput +JsonInput.AnyWithInt32ValueWrapper.ProtobufOutput +JsonInput.AnyWithStruct.JsonOutput +JsonInput.AnyWithStruct.ProtobufOutput +JsonInput.AnyWithTimestamp.JsonOutput +JsonInput.AnyWithTimestamp.ProtobufOutput +JsonInput.AnyWithValueForInteger.JsonOutput +JsonInput.AnyWithValueForInteger.ProtobufOutput +JsonInput.AnyWithValueForJsonObject.JsonOutput +JsonInput.AnyWithValueForJsonObject.ProtobufOutput +JsonInput.BoolFieldAllCapitalFalse +JsonInput.BoolFieldAllCapitalTrue +JsonInput.BoolFieldCamelCaseFalse +JsonInput.BoolFieldCamelCaseTrue +JsonInput.BoolFieldDoubleQuotedFalse +JsonInput.BoolFieldDoubleQuotedTrue +JsonInput.BoolFieldFalse.JsonOutput +JsonInput.BoolFieldFalse.ProtobufOutput +JsonInput.BoolFieldIntegerOne +JsonInput.BoolFieldIntegerZero +JsonInput.BoolFieldTrue.JsonOutput +JsonInput.BoolFieldTrue.ProtobufOutput +JsonInput.BoolMapEscapedKey.JsonOutput +JsonInput.BoolMapEscapedKey.ProtobufOutput +JsonInput.BoolMapField.JsonOutput +JsonInput.BoolMapFieldKeyNotQuoted +JsonInput.BoolMapField.ProtobufOutput +JsonInput.BytesFieldInvalidBase64Characters +JsonInput.BytesField.JsonOutput +JsonInput.BytesFieldNoPadding +JsonInput.BytesField.ProtobufOutput +JsonInput.BytesRepeatedField.JsonOutput +JsonInput.BytesRepeatedField.ProtobufOutput +JsonInput.DoubleFieldInfinity.JsonOutput +JsonInput.DoubleFieldInfinityNotQuoted +JsonInput.DoubleFieldInfinity.ProtobufOutput +JsonInput.DoubleFieldMaxNegativeValue.JsonOutput +JsonInput.DoubleFieldMaxNegativeValue.ProtobufOutput +JsonInput.DoubleFieldMaxPositiveValue.JsonOutput +JsonInput.DoubleFieldMaxPositiveValue.ProtobufOutput +JsonInput.DoubleFieldMinNegativeValue.JsonOutput +JsonInput.DoubleFieldMinNegativeValue.ProtobufOutput +JsonInput.DoubleFieldMinPositiveValue.JsonOutput +JsonInput.DoubleFieldMinPositiveValue.ProtobufOutput +JsonInput.DoubleFieldNan.JsonOutput +JsonInput.DoubleFieldNanNotQuoted +JsonInput.DoubleFieldNan.ProtobufOutput +JsonInput.DoubleFieldNegativeInfinity.JsonOutput +JsonInput.DoubleFieldNegativeInfinityNotQuoted +JsonInput.DoubleFieldNegativeInfinity.ProtobufOutput +JsonInput.DoubleFieldQuotedValue.JsonOutput +JsonInput.DoubleFieldQuotedValue.ProtobufOutput +JsonInput.DoubleFieldTooLarge +JsonInput.DoubleFieldTooSmall +JsonInput.DurationHas3FractionalDigits.Validator +JsonInput.DurationHas6FractionalDigits.Validator +JsonInput.DurationHas9FractionalDigits.Validator +JsonInput.DurationHasZeroFractionalDigit.Validator +JsonInput.DurationJsonInputTooLarge +JsonInput.DurationJsonInputTooSmall +JsonInput.DurationMaxValue.JsonOutput +JsonInput.DurationMaxValue.ProtobufOutput +JsonInput.DurationMinValue.JsonOutput +JsonInput.DurationMinValue.ProtobufOutput +JsonInput.DurationMissingS +JsonInput.DurationRepeatedValue.JsonOutput +JsonInput.DurationRepeatedValue.ProtobufOutput +JsonInput.EnumField.JsonOutput +JsonInput.EnumFieldNotQuoted +JsonInput.EnumFieldNumericValueNonZero.JsonOutput +JsonInput.EnumFieldNumericValueNonZero.ProtobufOutput +JsonInput.EnumFieldNumericValueZero.JsonOutput +JsonInput.EnumFieldNumericValueZero.ProtobufOutput +JsonInput.EnumField.ProtobufOutput +JsonInput.EnumFieldUnknownValue.Validator +JsonInput.EnumRepeatedField.JsonOutput +JsonInput.EnumRepeatedField.ProtobufOutput +JsonInput.FieldMaskInvalidCharacter +JsonInput.FieldMask.JsonOutput +JsonInput.FieldMask.ProtobufOutput +JsonInput.FieldNameDuplicate +JsonInput.FieldNameDuplicateDifferentCasing1 +JsonInput.FieldNameDuplicateDifferentCasing2 +JsonInput.FieldNameEscaped.JsonOutput +JsonInput.FieldNameInLowerCamelCase.Validator +JsonInput.FieldNameInSnakeCase.JsonOutput +JsonInput.FieldNameInSnakeCase.ProtobufOutput +JsonInput.FieldNameNotQuoted +JsonInput.FieldNameWithMixedCases.JsonOutput +JsonInput.FieldNameWithMixedCases.ProtobufOutput +JsonInput.FieldNameWithMixedCases.Validator +JsonInput.FieldNameWithNumbers.JsonOutput +JsonInput.FieldNameWithNumbers.ProtobufOutput +JsonInput.FieldNameWithNumbers.Validator +JsonInput.FloatFieldInfinity.JsonOutput +JsonInput.FloatFieldInfinityNotQuoted +JsonInput.FloatFieldInfinity.ProtobufOutput +JsonInput.FloatFieldMaxNegativeValue.JsonOutput +JsonInput.FloatFieldMaxNegativeValue.ProtobufOutput +JsonInput.FloatFieldMaxPositiveValue.JsonOutput +JsonInput.FloatFieldMaxPositiveValue.ProtobufOutput +JsonInput.FloatFieldMinNegativeValue.JsonOutput +JsonInput.FloatFieldMinNegativeValue.ProtobufOutput +JsonInput.FloatFieldMinPositiveValue.JsonOutput +JsonInput.FloatFieldMinPositiveValue.ProtobufOutput +JsonInput.FloatFieldNan.JsonOutput +JsonInput.FloatFieldNanNotQuoted +JsonInput.FloatFieldNan.ProtobufOutput +JsonInput.FloatFieldNegativeInfinity.JsonOutput +JsonInput.FloatFieldNegativeInfinityNotQuoted +JsonInput.FloatFieldNegativeInfinity.ProtobufOutput +JsonInput.FloatFieldQuotedValue.JsonOutput +JsonInput.FloatFieldQuotedValue.ProtobufOutput +JsonInput.FloatFieldTooLarge +JsonInput.FloatFieldTooSmall JsonInput.HelloWorld.JsonOutput JsonInput.HelloWorld.ProtobufOutput +JsonInput.Int32FieldExponentialFormat.JsonOutput +JsonInput.Int32FieldExponentialFormat.ProtobufOutput +JsonInput.Int32FieldFloatTrailingZero.JsonOutput +JsonInput.Int32FieldFloatTrailingZero.ProtobufOutput +JsonInput.Int32FieldLeadingSpace +JsonInput.Int32FieldLeadingZero +JsonInput.Int32FieldMaxFloatValue.JsonOutput +JsonInput.Int32FieldMaxFloatValue.ProtobufOutput +JsonInput.Int32FieldMaxValue.JsonOutput +JsonInput.Int32FieldMaxValue.ProtobufOutput +JsonInput.Int32FieldMinFloatValue.JsonOutput +JsonInput.Int32FieldMinFloatValue.ProtobufOutput +JsonInput.Int32FieldMinValue.JsonOutput +JsonInput.Int32FieldMinValue.ProtobufOutput +JsonInput.Int32FieldNegativeWithLeadingZero +JsonInput.Int32FieldNotInteger +JsonInput.Int32FieldNotNumber +JsonInput.Int32FieldPlusSign +JsonInput.Int32FieldStringValueEscaped.JsonOutput +JsonInput.Int32FieldStringValueEscaped.ProtobufOutput +JsonInput.Int32FieldStringValue.JsonOutput +JsonInput.Int32FieldStringValue.ProtobufOutput +JsonInput.Int32FieldTooLarge +JsonInput.Int32FieldTooSmall +JsonInput.Int32FieldTrailingSpace +JsonInput.Int32MapEscapedKey.JsonOutput +JsonInput.Int32MapEscapedKey.ProtobufOutput +JsonInput.Int32MapField.JsonOutput +JsonInput.Int32MapFieldKeyNotQuoted +JsonInput.Int32MapField.ProtobufOutput +JsonInput.Int64FieldBeString.Validator +JsonInput.Int64FieldMaxValue.JsonOutput +JsonInput.Int64FieldMaxValueNotQuoted.JsonOutput +JsonInput.Int64FieldMaxValueNotQuoted.ProtobufOutput +JsonInput.Int64FieldMaxValue.ProtobufOutput +JsonInput.Int64FieldMinValue.JsonOutput +JsonInput.Int64FieldMinValueNotQuoted.JsonOutput +JsonInput.Int64FieldMinValueNotQuoted.ProtobufOutput +JsonInput.Int64FieldMinValue.ProtobufOutput +JsonInput.Int64FieldNotInteger +JsonInput.Int64FieldNotNumber +JsonInput.Int64FieldTooLarge +JsonInput.Int64FieldTooSmall +JsonInput.Int64MapEscapedKey.JsonOutput +JsonInput.Int64MapEscapedKey.ProtobufOutput +JsonInput.Int64MapField.JsonOutput +JsonInput.Int64MapFieldKeyNotQuoted +JsonInput.Int64MapField.ProtobufOutput +JsonInput.JsonWithComments +JsonInput.MapFieldKeyIsNull +JsonInput.MapFieldValueIsNull +JsonInput.MessageField.JsonOutput +JsonInput.MessageField.ProtobufOutput +JsonInput.MessageMapField.JsonOutput +JsonInput.MessageMapField.ProtobufOutput +JsonInput.MessageRepeatedField.JsonOutput +JsonInput.MessageRepeatedField.ProtobufOutput +JsonInput.OneofFieldDuplicate +JsonInput.OptionalBoolWrapper.JsonOutput +JsonInput.OptionalBoolWrapper.ProtobufOutput +JsonInput.OptionalBytesWrapper.JsonOutput +JsonInput.OptionalBytesWrapper.ProtobufOutput +JsonInput.OptionalDoubleWrapper.JsonOutput +JsonInput.OptionalDoubleWrapper.ProtobufOutput +JsonInput.OptionalFloatWrapper.JsonOutput +JsonInput.OptionalFloatWrapper.ProtobufOutput +JsonInput.OptionalInt32Wrapper.JsonOutput +JsonInput.OptionalInt32Wrapper.ProtobufOutput +JsonInput.OptionalInt64Wrapper.JsonOutput +JsonInput.OptionalInt64Wrapper.ProtobufOutput +JsonInput.OptionalStringWrapper.JsonOutput +JsonInput.OptionalStringWrapper.ProtobufOutput +JsonInput.OptionalUint32Wrapper.JsonOutput +JsonInput.OptionalUint32Wrapper.ProtobufOutput +JsonInput.OptionalUint64Wrapper.JsonOutput +JsonInput.OptionalUint64Wrapper.ProtobufOutput +JsonInput.OptionalWrapperTypesWithNonDefaultValue.JsonOutput +JsonInput.OptionalWrapperTypesWithNonDefaultValue.ProtobufOutput +JsonInput.OriginalProtoFieldName.JsonOutput +JsonInput.PrimitiveRepeatedField.JsonOutput +JsonInput.PrimitiveRepeatedField.ProtobufOutput +JsonInput.RepeatedBoolWrapper.JsonOutput +JsonInput.RepeatedBoolWrapper.ProtobufOutput +JsonInput.RepeatedBytesWrapper.JsonOutput +JsonInput.RepeatedBytesWrapper.ProtobufOutput +JsonInput.RepeatedDoubleWrapper.JsonOutput +JsonInput.RepeatedDoubleWrapper.ProtobufOutput +JsonInput.RepeatedFieldMessageElementIsNull +JsonInput.RepeatedFieldPrimitiveElementIsNull +JsonInput.RepeatedFieldTrailingComma +JsonInput.RepeatedFieldWrongElementTypeExpectingIntegersGotBool +JsonInput.RepeatedFieldWrongElementTypeExpectingIntegersGotMessage +JsonInput.RepeatedFieldWrongElementTypeExpectingIntegersGotString +JsonInput.RepeatedFieldWrongElementTypeExpectingMessagesGotBool +JsonInput.RepeatedFieldWrongElementTypeExpectingMessagesGotInt +JsonInput.RepeatedFieldWrongElementTypeExpectingMessagesGotString +JsonInput.RepeatedFieldWrongElementTypeExpectingStringsGotBool +JsonInput.RepeatedFieldWrongElementTypeExpectingStringsGotInt +JsonInput.RepeatedFieldWrongElementTypeExpectingStringsGotMessage +JsonInput.RepeatedFloatWrapper.JsonOutput +JsonInput.RepeatedFloatWrapper.ProtobufOutput +JsonInput.RepeatedInt32Wrapper.JsonOutput +JsonInput.RepeatedInt32Wrapper.ProtobufOutput +JsonInput.RepeatedInt64Wrapper.JsonOutput +JsonInput.RepeatedInt64Wrapper.ProtobufOutput +JsonInput.RepeatedStringWrapper.JsonOutput +JsonInput.RepeatedStringWrapper.ProtobufOutput +JsonInput.RepeatedUint32Wrapper.JsonOutput +JsonInput.RepeatedUint32Wrapper.ProtobufOutput +JsonInput.RepeatedUint64Wrapper.JsonOutput +JsonInput.RepeatedUint64Wrapper.ProtobufOutput +JsonInput.StringFieldEscape.JsonOutput +JsonInput.StringFieldEscape.ProtobufOutput +JsonInput.StringFieldInvalidEscape +JsonInput.StringField.JsonOutput +JsonInput.StringFieldNotAString +JsonInput.StringField.ProtobufOutput +JsonInput.StringFieldSurrogateInWrongOrder +JsonInput.StringFieldSurrogatePair.JsonOutput +JsonInput.StringFieldSurrogatePair.ProtobufOutput +JsonInput.StringFieldUnicodeEscape.JsonOutput +JsonInput.StringFieldUnicodeEscape.ProtobufOutput +JsonInput.StringFieldUnicodeEscapeWithLowercaseHexLetters.JsonOutput +JsonInput.StringFieldUnicodeEscapeWithLowercaseHexLetters.ProtobufOutput +JsonInput.StringFieldUnicode.JsonOutput +JsonInput.StringFieldUnicode.ProtobufOutput +JsonInput.StringFieldUnpairedHighSurrogate +JsonInput.StringFieldUnpairedLowSurrogate +JsonInput.StringFieldUnterminatedEscape +JsonInput.StringFieldUppercaseEscapeLetter +JsonInput.StringRepeatedField.JsonOutput +JsonInput.StringRepeatedField.ProtobufOutput +JsonInput.Struct.JsonOutput +JsonInput.Struct.ProtobufOutput +JsonInput.TimestampHas3FractionalDigits.Validator +JsonInput.TimestampHas6FractionalDigits.Validator +JsonInput.TimestampHas9FractionalDigits.Validator +JsonInput.TimestampHasZeroFractionalDigit.Validator +JsonInput.TimestampJsonInputLowercaseT +JsonInput.TimestampJsonInputLowercaseZ +JsonInput.TimestampJsonInputMissingT +JsonInput.TimestampJsonInputMissingZ +JsonInput.TimestampJsonInputTooLarge +JsonInput.TimestampJsonInputTooSmall +JsonInput.TimestampMaxValue.JsonOutput +JsonInput.TimestampMaxValue.ProtobufOutput +JsonInput.TimestampMinValue.JsonOutput +JsonInput.TimestampMinValue.ProtobufOutput +JsonInput.TimestampRepeatedValue.JsonOutput +JsonInput.TimestampRepeatedValue.ProtobufOutput +JsonInput.TimestampWithNegativeOffset.JsonOutput +JsonInput.TimestampWithNegativeOffset.ProtobufOutput +JsonInput.TimestampWithPositiveOffset.JsonOutput +JsonInput.TimestampWithPositiveOffset.ProtobufOutput +JsonInput.TimestampZeroNormalized.Validator +JsonInput.TrailingCommaInAnObject +JsonInput.Uint32FieldMaxFloatValue.JsonOutput +JsonInput.Uint32FieldMaxFloatValue.ProtobufOutput +JsonInput.Uint32FieldMaxValue.JsonOutput +JsonInput.Uint32FieldMaxValue.ProtobufOutput +JsonInput.Uint32FieldNotInteger +JsonInput.Uint32FieldNotNumber +JsonInput.Uint32FieldTooLarge +JsonInput.Uint32MapField.JsonOutput +JsonInput.Uint32MapFieldKeyNotQuoted +JsonInput.Uint32MapField.ProtobufOutput +JsonInput.Uint64FieldBeString.Validator +JsonInput.Uint64FieldMaxValue.JsonOutput +JsonInput.Uint64FieldMaxValueNotQuoted.JsonOutput +JsonInput.Uint64FieldMaxValueNotQuoted.ProtobufOutput +JsonInput.Uint64FieldMaxValue.ProtobufOutput +JsonInput.Uint64FieldNotInteger +JsonInput.Uint64FieldNotNumber +JsonInput.Uint64FieldTooLarge +JsonInput.Uint64MapField.JsonOutput +JsonInput.Uint64MapFieldKeyNotQuoted +JsonInput.Uint64MapField.ProtobufOutput +JsonInput.ValueAcceptBool.JsonOutput +JsonInput.ValueAcceptBool.ProtobufOutput +JsonInput.ValueAcceptFloat.JsonOutput +JsonInput.ValueAcceptFloat.ProtobufOutput +JsonInput.ValueAcceptInteger.JsonOutput +JsonInput.ValueAcceptInteger.ProtobufOutput +JsonInput.ValueAcceptList.JsonOutput +JsonInput.ValueAcceptList.ProtobufOutput +JsonInput.ValueAcceptNull.JsonOutput +JsonInput.ValueAcceptNull.ProtobufOutput +JsonInput.ValueAcceptObject.JsonOutput +JsonInput.ValueAcceptObject.ProtobufOutput +JsonInput.ValueAcceptString.JsonOutput +JsonInput.ValueAcceptString.ProtobufOutput +JsonInput.WrapperTypesWithNullValue.JsonOutput +JsonInput.WrapperTypesWithNullValue.ProtobufOutput +ProtobufInput.DoubleFieldNormalizeQuietNan.JsonOutput +ProtobufInput.DoubleFieldNormalizeSignalingNan.JsonOutput +ProtobufInput.FloatFieldNormalizeQuietNan.JsonOutput +ProtobufInput.FloatFieldNormalizeSignalingNan.JsonOutput +TimestampProtoInputTooLarge.JsonOutput +TimestampProtoInputTooSmall.JsonOutput diff --git a/python/setup.py b/python/setup.py index 1223775ce5..6ea3bad736 100755 --- a/python/setup.py +++ b/python/setup.py @@ -149,6 +149,10 @@ class build_py(_build_py): class test_conformance(_build_py): target = 'test_python' def run(self): + if sys.version_info >= (2, 7): + # Python 2.6 dodges these extra failures. + os.environ["CONFORMANCE_PYTHON_EXTRA_FAILURES"] = ( + "--failure_list failure_list_python-post26.txt") cmd = 'cd ../conformance && make %s' % (test_conformance.target) status = subprocess.check_call(cmd, shell=True) diff --git a/python/tox.ini b/python/tox.ini index 301335bd41..cf8d540168 100644 --- a/python/tox.ini +++ b/python/tox.ini @@ -15,10 +15,8 @@ commands = cpp: python setup.py -q build --cpp_implementation --warnings_as_errors python: python setup.py -q test -q cpp: python setup.py -q test -q --cpp_implementation -# TODO(xiaofeng): Disabled because the Python testee program crashes on -# some conformance test inputs. -# python: python setup.py -q test_conformance -# cpp: python setup.py -q test_conformance --cpp_implementation + python: python setup.py -q test_conformance + cpp: python setup.py -q test_conformance --cpp_implementation deps = # Keep this list of dependencies in sync with setup.py. six>=1.9 diff --git a/ruby/travis-test.sh b/ruby/travis-test.sh index 1b53dd789f..4c09d7676a 100755 --- a/ruby/travis-test.sh +++ b/ruby/travis-test.sh @@ -18,10 +18,7 @@ test_version() { which ruby && \ gem install bundler && bundle && \ rake test" - # TODO(xiaofeng): Conformance tests are disabled because the ruby testee - # program crashes on some inputs. - # cd ../conformance && \ - # make test_ruby + cd ../conformance && make test_ruby fi } diff --git a/travis.sh b/travis.sh index 97a769d7e5..5a77a2a83e 100755 --- a/travis.sh +++ b/travis.sh @@ -53,9 +53,7 @@ build_csharp() { (cd csharp/src; mono ../../nuget.exe restore) csharp/buildall.sh - # TODO(xiaofeng): The conformance tests are disable because the testee program - # crashes on some inputs. - # cd conformance && make test_csharp && cd .. + cd conformance && make test_csharp && cd .. } build_golang() {