-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathtest_multipart.cc
72 lines (68 loc) · 1.92 KB
/
test_multipart.cc
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
#include <cassert>
#include "multipart.h"
struct t_target
{
std::vector<std::string> v_log;
void f_boundary()
{
v_log.push_back("boundary");
}
void f_part(const std::string& a_type, const std::string& a_id)
{
v_log.push_back("part: " + a_type + ", " + a_id);
}
void f_content(const char* a_p, size_t a_n)
{
v_log.push_back("content: " + std::string(a_p, a_n));
}
};
int main(int argc, char* argv[])
{
t_target target;
t_multipart<t_target> multipart(target, "foo");
for (char c :
"--foo\r\n"
"Content-Type: application/json; charset=UTF-8\r\n"
"\r\n"
"{\r\n"
"}\r\n"
"--foo\r\n"
"Content-Type: application/octet-stream\r\n"
"Content-ID: <bar>\r\n"
"\r\n"
"\r\n"
"--foo\r\n"
"Content-Type: application/octet-stream\r\n"
"Content-ID: <zot>\r\n"
"\r\n"
"--fo\r\n"
"--fooo\r\n"
"--foo-\r\n"
"--foo---\r\n"
"--foo--\r\n"
) multipart(c);
for (auto& x : target.v_log) std::fprintf(stderr, "%s\n", x.c_str());
size_t i = 0;
assert(target.v_log[i++] == "boundary");
assert(target.v_log[i++] == "part: application/json, ");
assert(target.v_log[i++] == "content: {");
assert(target.v_log[i++] == "content: \r\n");
assert(target.v_log[i++] == "content: }");
assert(target.v_log[i++] == "boundary");
assert(target.v_log[i++] == "part: application/octet-stream, bar");
assert(target.v_log[i++] == "content: ");
assert(target.v_log[i++] == "boundary");
assert(target.v_log[i++] == "part: application/octet-stream, zot");
assert(target.v_log[i++] == "content: --fo");
assert(target.v_log[i++] == "content: ");
assert(target.v_log[i++] == "content: \r\n--foo");
assert(target.v_log[i++] == "content: o");
assert(target.v_log[i++] == "content: \r\n--foo");
assert(target.v_log[i++] == "content: -");
assert(target.v_log[i++] == "content: ");
assert(target.v_log[i++] == "content: \r\n--foo");
assert(target.v_log[i++] == "content: --");
assert(target.v_log[i++] == "content: -");
assert(target.v_log[i++] == "boundary");
return 0;
}