• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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