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
|
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/browser/download/download_buffer.h"
#include <string.h>
#include "net/base/io_buffer.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace content {
namespace {
const char* kTestData[] = {
"Four score and twenty years ago",
"Our four (or five) fathers",
"Danced and sang in the woods"
};
const size_t kTestDataQty = arraysize(kTestData);
class DownloadBufferTest : public testing::Test {
public:
DownloadBufferTest() {
}
~DownloadBufferTest() {
}
void CreateBuffer() {
EXPECT_EQ(0u, content_buffer_.size());
for (size_t i = 0; i < kTestDataQty; ++i) {
net::StringIOBuffer* io_buffer = new net::StringIOBuffer(kTestData[i]);
content_buffer_.push_back(std::make_pair(io_buffer, io_buffer->size()));
EXPECT_EQ(i + 1, content_buffer_.size());
}
}
ContentVector* content_buffer() {
return &content_buffer_;
}
private:
ContentVector content_buffer_;
};
TEST_F(DownloadBufferTest, CreateContentVector) {
CreateBuffer();
ContentVector* contents = content_buffer();
EXPECT_EQ(kTestDataQty, content_buffer()->size());
EXPECT_EQ(kTestDataQty, contents->size());
for (size_t i = 0; i < kTestDataQty; ++i) {
size_t io_buffer_size = strlen(kTestData[i]);
EXPECT_STREQ(kTestData[i], (*contents)[i].first->data());
EXPECT_EQ(io_buffer_size, (*contents)[i].second);
}
}
TEST_F(DownloadBufferTest, CreateDownloadBuffer) {
scoped_refptr<DownloadBuffer> content_buffer(new DownloadBuffer);
EXPECT_EQ(0u, content_buffer->size());
for (size_t i = 0; i < kTestDataQty; ++i) {
net::StringIOBuffer* io_buffer = new net::StringIOBuffer(kTestData[i]);
EXPECT_EQ(i + 1, content_buffer->AddData(io_buffer, io_buffer->size()));
}
scoped_ptr<ContentVector> contents(content_buffer->ReleaseContents());
EXPECT_EQ(0u, content_buffer->size());
EXPECT_EQ(kTestDataQty, contents->size());
for (size_t i = 0; i < kTestDataQty; ++i) {
size_t io_buffer_size = strlen(kTestData[i]);
EXPECT_STREQ(kTestData[i], (*contents)[i].first->data());
EXPECT_EQ(io_buffer_size, (*contents)[i].second);
}
}
TEST_F(DownloadBufferTest, AssembleData) {
CreateBuffer();
size_t assembled_bytes = 0;
scoped_refptr<net::IOBuffer> assembled_buffer =
AssembleData(*content_buffer(), &assembled_bytes);
// Did not change the content buffer.
EXPECT_EQ(kTestDataQty, content_buffer()->size());
// Verify the data.
size_t total_size = 0;
for (size_t i = 0; i < kTestDataQty; ++i) {
size_t len = strlen(kTestData[i]);
// assembled_buffer->data() may not be NULL-terminated, so we can't use
// EXPECT_STREQ().
EXPECT_EQ(
0, memcmp(kTestData[i], assembled_buffer->data() + total_size, len));
total_size += len;
}
// Verify the data length.
EXPECT_EQ(total_size, assembled_bytes);
}
TEST_F(DownloadBufferTest, AssembleDataWithEmptyBuffer) {
ContentVector buffer;
EXPECT_EQ(0u, buffer.size());
size_t assembled_bytes = 0;
scoped_refptr<net::IOBuffer> assembled_buffer =
AssembleData(buffer, &assembled_bytes);
// Did not change the content buffer.
EXPECT_EQ(0u, buffer.size());
EXPECT_EQ(0u, assembled_bytes);
EXPECT_TRUE(NULL == assembled_buffer.get());
}
} // namespace
} // namespace content
|