1 #include <string>
2
3 #include <gmock/gmock.h>
4 #include <gtest/gtest.h>
5 #include "absl/strings/string_view.h"
6 #include "rust/test/shared/utf8/feature_verify.pb.h"
7 #include "rust/test/shared/utf8/no_features_proto2.pb.h"
8 #include "rust/test/shared/utf8/no_features_proto3.pb.h"
9
10 namespace {
11
12 using ::testing::Eq;
13 using ::testing::IsEmpty;
14 using ::testing::Not;
15
16 // We use 0b1000_0000, since 0b1XXX_XXXX in UTF-8 denotes a byte 2-4, but never
17 // the first byte.
18 constexpr char kInvalidUtf8[] = "\x80";
19
TEST(Utf8Test,TestProto2)20 TEST(Utf8Test, TestProto2) {
21 utf8::NoFeaturesProto2 no_features_proto2;
22
23 // No error on setter.
24 no_features_proto2.set_my_field(kInvalidUtf8);
25 EXPECT_THAT(no_features_proto2.my_field(),
26 Eq(absl::string_view(kInvalidUtf8)));
27
28 // No error on serialization.
29 std::string serialized_nonutf8 = no_features_proto2.SerializeAsString();
30 EXPECT_THAT(serialized_nonutf8, Not(IsEmpty()));
31
32 // No error on parsing.
33 utf8::NoFeaturesProto2 parsed;
34 EXPECT_THAT(parsed.ParseFromString(serialized_nonutf8), Eq(true));
35 }
36
TEST(Utf8Test,TestProto3)37 TEST(Utf8Test, TestProto3) {
38 utf8::NoFeaturesProto3 no_features_proto3;
39
40 // No error on setter.
41 no_features_proto3.set_my_field(kInvalidUtf8);
42 EXPECT_THAT(no_features_proto3.my_field(),
43 Eq(absl::string_view(kInvalidUtf8)));
44
45 // No error on serialization.
46 std::string serialized_nonutf8 = no_features_proto3.SerializeAsString();
47 EXPECT_THAT(serialized_nonutf8, Not(IsEmpty()));
48
49 // Error on parsing.
50 utf8::NoFeaturesProto3 parsed;
51 EXPECT_THAT(parsed.ParseFromString(serialized_nonutf8), Eq(false));
52 }
53
TEST(Utf8Test,TestEditionsVerify)54 TEST(Utf8Test, TestEditionsVerify) {
55 utf8::Verify verify;
56
57 // No error on setter.
58 verify.set_my_field(kInvalidUtf8);
59 EXPECT_THAT(verify.my_field(), Eq(absl::string_view(kInvalidUtf8)));
60
61 // No error on serialization.
62 std::string serialized_nonutf8 = verify.SerializeAsString();
63 EXPECT_THAT(serialized_nonutf8, Not(IsEmpty()));
64
65 // Error on parsing.
66 utf8::Verify parsed;
67 EXPECT_THAT(parsed.ParseFromString(serialized_nonutf8), Eq(false));
68 }
69
70 } // namespace
71