29
29
#include " json/config.h"
30
30
#include " json/reader.h"
31
31
#include " json/value.h"
32
+ #include " binary_wireformat.h"
32
33
#include " conformance/conformance.pb.h"
33
34
#include " conformance_test.h"
34
35
#include " conformance/test_protos/test_messages_edition2023.pb.h"
35
36
#include " editions/golden/test_messages_proto2_editions.pb.h"
36
37
#include " editions/golden/test_messages_proto3_editions.pb.h"
37
- #include " google/protobuf/endian.h"
38
38
#include " google/protobuf/json/json.h"
39
39
#include " google/protobuf/test_messages_proto2.pb.h"
40
40
#include " google/protobuf/test_messages_proto3.pb.h"
43
43
#include " google/protobuf/util/type_resolver_util.h"
44
44
#include " google/protobuf/wire_format_lite.h"
45
45
46
- using conformance::ConformanceRequest;
47
- using conformance::ConformanceResponse;
48
- using conformance::TestStatus;
49
- using conformance::WireFormat;
46
+ using :: conformance::ConformanceRequest;
47
+ using :: conformance::ConformanceResponse;
48
+ using :: conformance::TestStatus;
49
+ using :: conformance::WireFormat;
50
50
using google::protobuf::Descriptor;
51
51
using google::protobuf::FieldDescriptor;
52
52
using google::protobuf::internal::WireFormatLite;
53
- using google::protobuf::internal::little_endian::FromHost;
54
53
using google::protobuf::util::NewTypeResolverForDescriptorPool;
55
54
using protobuf_test_messages::editions::TestAllTypesEdition2023;
56
55
using protobuf_test_messages::proto2::TestAllTypesProto2;
@@ -77,74 +76,29 @@ std::string GetTypeUrl(const Descriptor* message) {
77
76
// We would use CodedOutputStream except that we want more freedom to build
78
77
// arbitrary protos (even invalid ones).
79
78
80
- // The maximum number of bytes that it takes to encode a 64-bit varint.
81
- #define VARINT_MAX_LEN 10
82
-
83
- size_t vencode64 (uint64_t val, int over_encoded_bytes, char * buf) {
84
- if (val == 0 ) {
85
- buf[0 ] = 0 ;
86
- return 1 ;
87
- }
88
- size_t i = 0 ;
89
- while (val) {
90
- uint8_t byte = val & 0x7fU ;
91
- val >>= 7 ;
92
- if (val || over_encoded_bytes) byte |= 0x80U ;
93
- buf[i++] = byte;
94
- }
95
- while (over_encoded_bytes--) {
96
- assert (i < 10 );
97
- uint8_t byte = over_encoded_bytes ? 0x80 : 0 ;
98
- buf[i++] = byte;
99
- }
100
- return i;
101
- }
102
-
103
- std::string varint (uint64_t x) {
104
- char buf[VARINT_MAX_LEN];
105
- size_t len = vencode64 (x, 0 , buf);
106
- return std::string (buf, len);
107
- }
108
-
109
- // Encodes a varint that is |extra| bytes longer than it needs to be, but still
110
- // valid.
79
+ std::string varint (uint64_t x) { return google::protobuf::conformance::Varint (x).str (); }
111
80
std::string longvarint (uint64_t x, int extra) {
112
- char buf[VARINT_MAX_LEN];
113
- size_t len = vencode64 (x, extra, buf);
114
- return std::string (buf, len);
115
- }
116
-
117
- std::string fixed32 (void * data) {
118
- uint32_t data_le;
119
- std::memcpy (&data_le, data, 4 );
120
- data_le = FromHost (data_le);
121
- return std::string (reinterpret_cast <char *>(&data_le), 4 );
81
+ return google::protobuf::conformance::LongVarint (x, extra).str ();
122
82
}
123
- std::string fixed64 (void * data) {
124
- uint64_t data_le;
125
- std::memcpy (&data_le, data, 8 );
126
- data_le = FromHost (data_le);
127
- return std::string (reinterpret_cast <char *>(&data_le), 8 );
128
- }
129
-
130
83
std::string delim (const std::string& buf) {
131
- return absl::StrCat ( varint ( buf. size ()), buf );
84
+ return google::protobuf::conformance::LengthPrefixed ( buf). str ( );
132
85
}
133
- std::string u32 (uint32_t u32) { return fixed32 (&u32); }
134
- std::string u64 (uint64_t u64) { return fixed64 (&u64); }
135
- std::string flt (float f) { return fixed32 (&f); }
136
- std::string dbl (double d) { return fixed64 (&d); }
137
- std::string zz32 (int32_t x) {
138
- return varint (WireFormatLite::ZigZagEncode32 (x));
86
+ std::string u32 (uint32_t u32) {
87
+ return google::protobuf::conformance::Fixed32 (u32).str ();
139
88
}
140
- std::string zz64 ( int64_t x ) {
141
- return varint ( WireFormatLite::ZigZagEncode64 (x) );
89
+ std::string u64 ( uint64_t u64 ) {
90
+ return google::protobuf::conformance::Fixed64 (u64). str ( );
142
91
}
92
+ std::string flt (float f) { return google::protobuf::conformance::Float (f).str (); }
93
+ std::string dbl (double d) { return google::protobuf::conformance::Double (d).str (); }
94
+ std::string zz32 (int32_t x) { return google::protobuf::conformance::SInt32 (x).str (); }
95
+ std::string zz64 (int64_t x) { return google::protobuf::conformance::SInt64 (x).str (); }
143
96
144
97
std::string tag (uint32_t fieldnum, char wire_type) {
145
- return varint ((fieldnum << 3 ) | wire_type);
98
+ return google::protobuf::conformance::Tag (
99
+ fieldnum, static_cast <google::protobuf::conformance::WireType>(wire_type))
100
+ .str ();
146
101
}
147
-
148
102
std::string tag (int fieldnum, char wire_type) {
149
103
return tag (static_cast <uint32_t >(fieldnum), wire_type);
150
104
}
@@ -154,14 +108,13 @@ std::string field(uint32_t fieldnum, char wire_type, std::string content) {
154
108
}
155
109
156
110
std::string group (uint32_t fieldnum, std::string content) {
157
- return absl::StrCat (tag (fieldnum, WireFormatLite::WIRETYPE_START_GROUP),
158
- content,
159
- tag (fieldnum, WireFormatLite::WIRETYPE_END_GROUP));
111
+ return google::protobuf::conformance::DelimitedField (fieldnum, std::move (content))
112
+ .str ();
160
113
}
161
114
162
115
std::string len (uint32_t fieldnum, std::string content) {
163
- return absl::StrCat ( tag ( fieldnum, WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
164
- delim (content) );
116
+ return google::protobuf::conformance::LengthPrefixedField ( fieldnum, std::move (content))
117
+ . str ( );
165
118
}
166
119
167
120
std::string GetDefaultValue (FieldDescriptor::Type type) {
@@ -309,7 +262,7 @@ bool BinaryAndJsonConformanceSuite::ParseResponse(
309
262
test.set_name (test_name);
310
263
switch (response.result_case ()) {
311
264
case ConformanceResponse::kProtobufPayload : {
312
- if (requested_output != conformance::PROTOBUF) {
265
+ if (requested_output != :: conformance::PROTOBUF) {
313
266
test.set_failure_message (absl::StrCat (
314
267
" Test was asked for " , WireFormatToString (requested_output),
315
268
" output but provided PROTOBUF instead." ));
@@ -328,7 +281,7 @@ bool BinaryAndJsonConformanceSuite::ParseResponse(
328
281
}
329
282
330
283
case ConformanceResponse::kJsonPayload : {
331
- if (requested_output != conformance::JSON) {
284
+ if (requested_output != :: conformance::JSON) {
332
285
test.set_failure_message (absl::StrCat (
333
286
" Test was asked for " , WireFormatToString (requested_output),
334
287
" output but provided JSON instead." ));
@@ -524,8 +477,8 @@ void BinaryAndJsonConformanceSuiteImpl<MessageType>::
524
477
// We don't expect output, but if the program erroneously accepts the protobuf
525
478
// we let it send its response as this. We must not leave it unspecified.
526
479
ConformanceRequestSetting setting (
527
- level, conformance::PROTOBUF, conformance::PROTOBUF,
528
- conformance::BINARY_TEST, prototype, test_name, proto);
480
+ level, :: conformance::PROTOBUF, :: conformance::PROTOBUF,
481
+ :: conformance::BINARY_TEST, prototype, test_name, proto);
529
482
530
483
const ConformanceRequest& request = setting.GetRequest ();
531
484
ConformanceResponse response;
@@ -587,12 +540,12 @@ void BinaryAndJsonConformanceSuiteImpl<MessageType>::
587
540
const std::string& equivalent_text_format,
588
541
const Message& prototype) {
589
542
ConformanceRequestSetting setting1 (
590
- level, conformance::JSON, conformance::PROTOBUF, conformance::JSON_TEST ,
591
- prototype, test_name, input_json);
543
+ level, :: conformance::JSON, :: conformance::PROTOBUF ,
544
+ ::conformance::JSON_TEST, prototype, test_name, input_json);
592
545
suite_.RunValidInputTest (setting1, equivalent_text_format);
593
- ConformanceRequestSetting setting2 (level, conformance::JSON,
594
- conformance::JSON, conformance::JSON_TEST,
595
- prototype, test_name, input_json);
546
+ ConformanceRequestSetting setting2 (
547
+ level, ::conformance::JSON, :: conformance::JSON, :: conformance::JSON_TEST,
548
+ prototype, test_name, input_json);
596
549
suite_.RunValidInputTest (setting2, equivalent_text_format);
597
550
}
598
551
@@ -602,8 +555,8 @@ void BinaryAndJsonConformanceSuiteImpl<MessageType>::
602
555
const std::string& test_name, ConformanceLevel level,
603
556
const MessageType& input, const std::string& equivalent_text_format) {
604
557
ConformanceRequestSetting setting (
605
- level, conformance::PROTOBUF, conformance::JSON, conformance::JSON_TEST ,
606
- input, test_name, input.SerializeAsString ());
558
+ level, :: conformance::PROTOBUF, :: conformance::JSON ,
559
+ ::conformance::JSON_TEST, input, test_name, input.SerializeAsString ());
607
560
suite_.RunValidInputTest (setting, equivalent_text_format);
608
561
}
609
562
@@ -615,8 +568,8 @@ void BinaryAndJsonConformanceSuiteImpl<MessageType>::
615
568
const std::string& equivalent_text_format) {
616
569
MessageType prototype;
617
570
ConformanceRequestSetting setting (
618
- level, conformance::JSON, conformance::PROTOBUF,
619
- conformance::JSON_IGNORE_UNKNOWN_PARSING_TEST, prototype, test_name,
571
+ level, :: conformance::JSON, :: conformance::PROTOBUF,
572
+ :: conformance::JSON_IGNORE_UNKNOWN_PARSING_TEST, prototype, test_name,
620
573
input_json);
621
574
suite_.RunValidInputTest (setting, equivalent_text_format);
622
575
}
@@ -629,8 +582,8 @@ void BinaryAndJsonConformanceSuite::RunValidBinaryProtobufTest(
629
582
MessageType prototype;
630
583
631
584
ConformanceRequestSetting binary_to_binary (
632
- level, conformance::PROTOBUF, conformance::PROTOBUF,
633
- conformance::BINARY_TEST, prototype, test_name, input_protobuf);
585
+ level, :: conformance::PROTOBUF, :: conformance::PROTOBUF,
586
+ :: conformance::BINARY_TEST, prototype, test_name, input_protobuf);
634
587
RunValidInputTest (binary_to_binary, equivalent_text_format);
635
588
}
636
589
@@ -641,8 +594,8 @@ void BinaryAndJsonConformanceSuite::RunValidRoundtripProtobufTest(
641
594
MessageType prototype;
642
595
643
596
ConformanceRequestSetting binary_to_binary (
644
- level, conformance::PROTOBUF, conformance::PROTOBUF,
645
- conformance::BINARY_TEST, prototype, test_name, input_protobuf);
597
+ level, :: conformance::PROTOBUF, :: conformance::PROTOBUF,
598
+ :: conformance::BINARY_TEST, prototype, test_name, input_protobuf);
646
599
RunValidBinaryInputTest (binary_to_binary, input_protobuf);
647
600
}
648
601
@@ -654,13 +607,13 @@ void BinaryAndJsonConformanceSuite::RunValidProtobufTest(
654
607
MessageType prototype;
655
608
656
609
ConformanceRequestSetting binary_to_binary (
657
- level, conformance::PROTOBUF, conformance::PROTOBUF,
658
- conformance::BINARY_TEST, prototype, test_name, input_protobuf);
610
+ level, :: conformance::PROTOBUF, :: conformance::PROTOBUF,
611
+ :: conformance::BINARY_TEST, prototype, test_name, input_protobuf);
659
612
RunValidInputTest (binary_to_binary, equivalent_text_format);
660
613
661
614
ConformanceRequestSetting binary_to_json (
662
- level, conformance::PROTOBUF, conformance::JSON, conformance::BINARY_TEST ,
663
- prototype, test_name, input_protobuf);
615
+ level, :: conformance::PROTOBUF, :: conformance::JSON ,
616
+ ::conformance::BINARY_TEST, prototype, test_name, input_protobuf);
664
617
RunValidInputTest (binary_to_json, equivalent_text_format);
665
618
}
666
619
@@ -686,8 +639,8 @@ void BinaryAndJsonConformanceSuiteImpl<MessageType>::RunValidBinaryProtobufTest(
686
639
const std::string& input_protobuf, const std::string& expected_protobuf) {
687
640
MessageType prototype;
688
641
ConformanceRequestSetting setting (
689
- level, conformance::PROTOBUF, conformance::PROTOBUF,
690
- conformance::BINARY_TEST, prototype, test_name, input_protobuf);
642
+ level, :: conformance::PROTOBUF, :: conformance::PROTOBUF,
643
+ :: conformance::BINARY_TEST, prototype, test_name, input_protobuf);
691
644
suite_.RunValidBinaryInputTest (setting, expected_protobuf, true );
692
645
}
693
646
@@ -735,9 +688,9 @@ void BinaryAndJsonConformanceSuiteImpl<
735
688
const std::string& input_json,
736
689
const Validator& validator) {
737
690
MessageType prototype;
738
- ConformanceRequestSetting setting (level, conformance::JSON, conformance::JSON,
739
- conformance::JSON_TEST, prototype ,
740
- test_name, input_json);
691
+ ConformanceRequestSetting setting (
692
+ level, ::conformance::JSON, :: conformance::JSON, ::conformance::JSON_TEST ,
693
+ prototype, test_name, input_json);
741
694
const ConformanceRequest& request = setting.GetRequest ();
742
695
ConformanceResponse response;
743
696
std::string effective_test_name = absl::StrCat (
@@ -789,9 +742,9 @@ void BinaryAndJsonConformanceSuiteImpl<MessageType>::ExpectParseFailureForJson(
789
742
MessageType prototype;
790
743
// We don't expect output, but if the program erroneously accepts the protobuf
791
744
// we let it send its response as this. We must not leave it unspecified.
792
- ConformanceRequestSetting setting (level, conformance::JSON, conformance::JSON,
793
- conformance::JSON_TEST, prototype ,
794
- test_name, input_json);
745
+ ConformanceRequestSetting setting (
746
+ level, ::conformance::JSON, :: conformance::JSON, ::conformance::JSON_TEST ,
747
+ prototype, test_name, input_json);
795
748
const ConformanceRequest& request = setting.GetRequest ();
796
749
ConformanceResponse response;
797
750
std::string effective_test_name =
@@ -825,8 +778,9 @@ void BinaryAndJsonConformanceSuiteImpl<MessageType>::
825
778
826
779
MessageType prototype;
827
780
ConformanceRequestSetting setting (
828
- level, conformance::PROTOBUF, conformance::JSON, conformance::JSON_TEST,
829
- prototype, test_name, payload_message.SerializeAsString ());
781
+ level, ::conformance::PROTOBUF, ::conformance::JSON,
782
+ ::conformance::JSON_TEST, prototype, test_name,
783
+ payload_message.SerializeAsString ());
830
784
const ConformanceRequest& request = setting.GetRequest ();
831
785
ConformanceResponse response;
832
786
std::string effective_test_name =
@@ -1595,8 +1549,8 @@ void BinaryAndJsonConformanceSuiteImpl<MessageType>::TestUnknownOrdering() {
1595
1549
std::string serialized = message.SerializeAsString ();
1596
1550
1597
1551
ConformanceRequestSetting setting (
1598
- REQUIRED, conformance::PROTOBUF, conformance::PROTOBUF,
1599
- conformance::BINARY_TEST, prototype, " UnknownOrdering" , serialized);
1552
+ REQUIRED, :: conformance::PROTOBUF, :: conformance::PROTOBUF,
1553
+ :: conformance::BINARY_TEST, prototype, " UnknownOrdering" , serialized);
1600
1554
const ConformanceRequest& request = setting.GetRequest ();
1601
1555
ConformanceResponse response;
1602
1556
if (!suite_.RunTest (setting.GetTestName (), request, &response)) {
0 commit comments