1 
2 #include <test.hpp>
3 
4 TEST_CASE("read string field using get_string: empty") {
5     const std::string buffer = load_data("string/data-empty");
6 
7     protozero::pbf_reader item{buffer};
8 
9     REQUIRE(item.next());
10     REQUIRE(item.get_string().empty());
11     REQUIRE_FALSE(item.next());
12 }
13 
14 TEST_CASE("read string field using get_string: one") {
15     const std::string buffer = load_data("string/data-one");
16 
17     protozero::pbf_reader item{buffer};
18 
19     REQUIRE(item.next());
20     REQUIRE(item.get_string() == "x");
21     REQUIRE_FALSE(item.next());
22 }
23 
24 TEST_CASE("read string field using get_string: string") {
25     const std::string buffer = load_data("string/data-string");
26 
27     protozero::pbf_reader item{buffer};
28 
29     REQUIRE(item.next());
30     REQUIRE(item.get_string() == "foobar");
31     REQUIRE_FALSE(item.next());
32 }
33 
34 TEST_CASE("read string field using get_string: end of buffer") {
35     const std::string buffer = load_data("string/data-string");
36 
37     for (std::string::size_type i = 1; i < buffer.size(); ++i) {
38         protozero::pbf_reader item{buffer.data(), i};
39         REQUIRE(item.next());
40         REQUIRE_THROWS_AS(item.get_string(), protozero::end_of_buffer_exception);
41     }
42 }
43 
44 TEST_CASE("read string field using get_view: empty") {
45     const std::string buffer = load_data("string/data-empty");
46 
47     protozero::pbf_reader item{buffer};
48 
49     REQUIRE(item.next());
50     const auto v = item.get_view();
51     REQUIRE(v.empty());
52     REQUIRE_FALSE(item.next());
53 }
54 
55 TEST_CASE("read string field using get_view: one") {
56     const std::string buffer = load_data("string/data-one");
57 
58     protozero::pbf_reader item{buffer};
59 
60     REQUIRE(item.next());
61     const auto v = item.get_view();
62     REQUIRE(*v.data() == 'x');
63     REQUIRE(v.size() == 1);
64     REQUIRE_FALSE(item.next());
65 }
66 
67 TEST_CASE("read string field using get_view: string") {
68     const std::string buffer = load_data("string/data-string");
69 
70     protozero::pbf_reader item{buffer};
71 
72     REQUIRE(item.next());
73     REQUIRE(std::string(item.get_view()) == "foobar");
74     REQUIRE_FALSE(item.next());
75 }
76 
77 TEST_CASE("read string field using get_view: end of buffer") {
78     const std::string buffer = load_data("string/data-string");
79 
80     for (std::string::size_type i = 1; i < buffer.size(); ++i) {
81         protozero::pbf_reader item{buffer.data(), i};
82         REQUIRE(item.next());
83         REQUIRE_THROWS_AS(item.get_view(), protozero::end_of_buffer_exception);
84     }
85 }
86 
87 TEST_CASE("write string field") {
88     std::string buffer_test;
89     protozero::pbf_writer pbf_test{buffer_test};
90 
91     SECTION("empty") {
92         pbf_test.add_string(1, "");
93         REQUIRE(buffer_test == load_data("string/data-empty"));
94     }
95 
96     SECTION("one") {
97         pbf_test.add_string(1, "x");
98         REQUIRE(buffer_test == load_data("string/data-one"));
99     }
100 
101     SECTION("string") {
102         pbf_test.add_string(1, "foobar");
103         REQUIRE(buffer_test == load_data("string/data-string"));
104     }
105 }
106 
107