File: reader_test_cases.cpp

package info (click to toggle)
protozero 1.8.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,548 kB
  • sloc: cpp: 20,364; sh: 18; makefile: 14
file content (135 lines) | stat: -rw-r--r-- 3,943 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135

#include <test.hpp>

TEST_CASE("read message field: string") {
    const std::string buffer = load_data("message/data-message");

    protozero::pbf_reader item{buffer};

    REQUIRE(item.data().data() == buffer.data());
    REQUIRE(item.data().size() == buffer.size());

    REQUIRE(item.next());
    protozero::pbf_reader subitem{item.get_message()};
    REQUIRE_FALSE(item.next());

    REQUIRE(item.data().data() == buffer.data() + buffer.size());
    REQUIRE(item.data().empty());

    REQUIRE(subitem.next());
    REQUIRE(subitem.get_string() == "foobar");
    REQUIRE_FALSE(subitem.next());
}

TEST_CASE("read message field: end of buffer") {
    const std::string buffer = load_data("message/data-message");

    for (std::string::size_type i = 1; i < buffer.size(); ++i) {
        protozero::pbf_reader item{buffer.data(), i};
        REQUIRE(item.next());
        REQUIRE_THROWS_AS(item.get_string(), protozero::end_of_buffer_exception);
    }
}

TEST_CASE("read message field: optional contents of message - empty") {
    const std::string buffer = load_data("message/data-opt-empty");

    protozero::pbf_reader item{buffer};

    REQUIRE_FALSE(item.next());
}

TEST_CASE("read message field: string opt") {
    const std::string buffer = load_data("message/data-opt-element");

    protozero::pbf_reader item{buffer};

    REQUIRE(item.next());
    REQUIRE(item.get_string() == "optional");
    REQUIRE_FALSE(item.next());
}

TEST_CASE("write message field") {
    std::string buffer;
    protozero::pbf_writer pbf_test{buffer};

    SECTION("string") {
        std::string buffer_submessage;
        protozero::pbf_writer pbf_submessage{buffer_submessage};
        pbf_submessage.add_string(1, "foobar");

        pbf_test.add_message(1, buffer_submessage);
    }

    SECTION("string with subwriter") {
        protozero::pbf_writer pbf_submessage{pbf_test, 1};
        pbf_submessage.add_string(1, "foobar");
    }

    SECTION("string with subwriter with reserved size") {
        const std::string str{"foobar"};
        const auto size = 1 /* tag */ + 1 /* length field */ + str.size();
        protozero::pbf_writer pbf_submessage{pbf_test, 1, size};
        pbf_submessage.add_string(1, "foobar");
    }

    REQUIRE(buffer == load_data("message/data-message"));
}

TEST_CASE("write message field into non-empty buffer") {
    std::string buffer{"some data already in here"};
    protozero::pbf_writer pbf_test{buffer};

    SECTION("string") {
        std::string buffer_submessage;
        protozero::pbf_writer pbf_submessage{buffer_submessage};
        pbf_submessage.add_string(1, "foobar");

        pbf_test.add_message(1, buffer_submessage);
    }

    SECTION("string with subwriter") {
        protozero::pbf_writer pbf_submessage{pbf_test, 1};
        pbf_submessage.add_string(1, "foobar");
    }

    REQUIRE(buffer == std::string{"some data already in here"} + load_data("message/data-message"));
}

TEST_CASE("write message field reserving memory beforehand") {
    std::string buffer;
    protozero::pbf_writer pbf_test{buffer};
    pbf_test.reserve(100);
    REQUIRE(buffer.capacity() >= 100);

    SECTION("string") {
        std::string buffer_submessage;
        protozero::pbf_writer pbf_submessage{buffer_submessage};
        pbf_submessage.add_string(1, "foobar");

        pbf_test.add_message(1, buffer_submessage);
    }

    SECTION("string with subwriter") {
        protozero::pbf_writer pbf_submessage{pbf_test, 1};
        pbf_submessage.add_string(1, "foobar");
    }

    REQUIRE(buffer == load_data("message/data-message"));
}

TEST_CASE("write optional message field") {
    std::string buffer;
    protozero::pbf_writer pbf_opt{buffer};

    SECTION("add nothing") {
        REQUIRE(buffer == load_data("message/data-opt-empty"));
    }

    SECTION("add string") {
        pbf_opt.add_string(1, "optional");

        REQUIRE(buffer == load_data("message/data-opt-element"));
    }
}