File: Message.cpp

package info (click to toggle)
odil 0.13.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,476 kB
  • sloc: cpp: 55,982; python: 3,947; javascript: 460; xml: 182; makefile: 99; sh: 36
file content (119 lines) | stat: -rw-r--r-- 3,706 bytes parent folder | download | duplicates (5)
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
#define BOOST_TEST_MODULE Message
#include <boost/test/unit_test.hpp>

#include <sstream>

#include <odil/Exception.h>
#include <odil/webservices/Message.h>

BOOST_AUTO_TEST_CASE(DefaultConstructor)
{
    odil::webservices::Message const message;
    BOOST_REQUIRE(message.get_headers().empty());
    BOOST_REQUIRE(message.get_body().empty());
}

BOOST_AUTO_TEST_CASE(OneParameterConstructor)
{
    odil::webservices::Message const message(
        odil::webservices::Message::Headers{{"foo", "bar"}, {"plip", "plop"}});
    BOOST_REQUIRE(
        message.get_headers()
            == odil::webservices::Message::Headers(
                {{"foo", "bar"}, {"plip", "plop"}}));
    BOOST_REQUIRE(message.get_body().empty());
}

BOOST_AUTO_TEST_CASE(TwoParametersConstructor)
{
    odil::webservices::Message const message(
        odil::webservices::Message::Headers{{"foo", "bar"}, {"plip", "plop"}},
        "body");
    BOOST_REQUIRE(
        message.get_headers()
            == odil::webservices::Message::Headers(
                {{"foo", "bar"}, {"plip", "plop"}}));
    BOOST_REQUIRE_EQUAL(message.get_body(), "body");
}

BOOST_AUTO_TEST_CASE(Headers)
{
    odil::webservices::Message message;
    message.set_headers({{"foo", "bar"}, {"plip", "plop"}});

    BOOST_REQUIRE(
        message.get_headers()
            == odil::webservices::Message::Headers(
                {{"foo", "bar"}, {"plip", "plop"}}));

    BOOST_REQUIRE(message.has_header("foo"));
    BOOST_REQUIRE(message.has_header("FoO"));
    BOOST_REQUIRE(!message.has_header("bar"));

    BOOST_REQUIRE_EQUAL(message.get_header("foo"), "bar");
    BOOST_REQUIRE_EQUAL(message.get_header("FoO"), "bar");
    BOOST_REQUIRE_THROW(message.get_header("bar"), odil::Exception);

    message.set_header("foo", "other");
    BOOST_REQUIRE_EQUAL(message.get_header("foo"), "other");
}

BOOST_AUTO_TEST_CASE(Body)
{
    odil::webservices::Message message;
    message.set_body("body");
    BOOST_REQUIRE_EQUAL(message.get_body(), "body");
}

BOOST_AUTO_TEST_CASE(Input)
{
    std::stringstream stream(
        "From: John Doe <jdoe@machine.example>\r\n"
        "To: Mary Smith <mary@example.net>\r\n"
        "Subject: Saying Hello\r\n"
        "Date: Fri, 21 Nov 1997 09:55:06 -0600\r\n"
        "Message-ID: <1234@local.machine.example>\r\n"
        "\r\n"
        "This is a message just to say hello.\r\n"
        "So, \"Hello\".\r\n");
    odil::webservices::Message message;
    stream >> message;

    BOOST_REQUIRE(
        message.get_headers()
            == odil::webservices::Message::Headers({
                {"From", "John Doe <jdoe@machine.example>"},
                {"To", "Mary Smith <mary@example.net>"},
                {"Subject", "Saying Hello"},
                {"Date", "Fri, 21 Nov 1997 09:55:06 -0600"},
                {"Message-ID", "<1234@local.machine.example>"}
    }));
    BOOST_REQUIRE_EQUAL(
        message.get_body(),
        "This is a message just to say hello.\r\n"
        "So, \"Hello\".\r\n");
}

BOOST_AUTO_TEST_CASE(Output)
{
    odil::webservices::Message const message{
        {
            {"From", "John Doe <jdoe@machine.example>"},
            {"To", "Mary Smith <mary@example.net>"},
            {"Subject", "Saying Hello"},
            {"Date", "Fri, 21 Nov 1997 09:55:06 -0600"},
            {"Message-ID", "<1234@local.machine.example>"}
        },
        "This is a message just to say hello.\r\n"
        "So, \"Hello\".\r\n"
    };

    std::stringstream stream;
    stream << message;

    odil::webservices::Message result;
    stream >> result;

    BOOST_REQUIRE(message.get_headers() == result.get_headers());
    BOOST_REQUIRE_EQUAL(message.get_body(), result.get_body());
}