Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(342)

Side by Side Diff: ppapi/shared_impl/circular_buffer_unittest.cc

Issue 119853003: [PPAPI] Implement an IOStreamResource for data transmission between plugin and renderer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/compiler_specific.h"
6 #include "ppapi/c/pp_errors.h"
7 #include "ppapi/shared_impl/circular_buffer.h"
8 #include "ppapi/shared_impl/test_globals.h"
yzshen1 2014/01/03 21:51:41 This is not needed.
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace ppapi {
12
13 typedef testing::Test CircularBufferTest;
14
15 TEST_F(CircularBufferTest, TestWrite) {
16 {
17 char buf[] = "0123456789EEEE";
18 scoped_ptr<CircularBuffer> cb(new CircularBuffer(buf, 10));
19
20 cb->MoveLimit(10);
21 EXPECT_EQ(10u, cb->remaining());
22
23 EXPECT_EQ(2, cb->Write("AB", 2));
24 EXPECT_EQ(8U, cb->remaining());
25 EXPECT_STREQ("AB23456789EEEE", buf);
26
27 EXPECT_EQ(4, cb->WriteAll("ABCD", 4));
28 EXPECT_EQ(4U, cb->remaining());
29 EXPECT_STREQ("ABABCD6789EEEE", buf);
30 }
31
32 {
33 char buf[] = "0123456789EEEE";
34 scoped_ptr<CircularBuffer> cb(new CircularBuffer(buf, 10));
35
36 cb->MoveLimit(10);
37 cb->MovePosition(8);
38 EXPECT_EQ(2U, cb->remaining());
39
40 // Do not have enough space for 4 bytes
41 EXPECT_EQ(PP_ERROR_NOSPACE, cb->WriteAll("ABCD", 4));
42 EXPECT_EQ(2U, cb->remaining());
43 EXPECT_STREQ("0123456789EEEE", buf);
44
45 EXPECT_EQ(2, cb->Write("ABCD", 4));
46 EXPECT_EQ(0U, cb->remaining());
47 EXPECT_STREQ("01234567ABEEEE", buf);
48 }
49
50 {
51 char buf[] = "0123456789EEEE";
52 scoped_ptr<CircularBuffer> cb(new CircularBuffer(buf, 10));
53
54 // Make the available range cross border of the buf.
55 cb->MoveLimit(10);
56 cb->MovePosition(8);
57 EXPECT_EQ(2U, cb->remaining());
58
59 cb->MoveLimit(2);
60 EXPECT_EQ(4U, cb->remaining());
61
62 EXPECT_EQ(PP_ERROR_NOSPACE, cb->WriteAll("ABCDEF", 6));
63 EXPECT_EQ(4U, cb->remaining());
64 EXPECT_STREQ("0123456789EEEE", buf);
65
66 EXPECT_EQ(4, cb->Write("ABCDEF", 6));
67 EXPECT_EQ(0U, cb->remaining());
68 EXPECT_STREQ("CD234567ABEEEE", buf);
69 }
70 }
71
72 TEST_F(CircularBufferTest, TestRead) {
73 {
74 char buf[] = "0123456789EEEE";
75 scoped_ptr<CircularBuffer> cb(new CircularBuffer(buf, 10));
76
77 cb->MoveLimit(10);
78 EXPECT_EQ(10u, cb->remaining());
79
80 {
81 char buf1[] = "AAAAAA";
82 EXPECT_EQ(2, cb->Read(buf1, 2));
83 EXPECT_EQ(8U, cb->remaining());
84 EXPECT_STREQ("01AAAA", buf1);
85 }
86
87 {
88 char buf1[] = "AAAAAA";
89 EXPECT_EQ(4, cb->ReadAll(buf1, 4));
90 EXPECT_EQ(4U, cb->remaining());
91 EXPECT_STREQ("2345AA", buf1);
92 }
93 EXPECT_STREQ("0123456789EEEE", buf);
94 }
95
96 {
97 char buf[] = "0123456789EEEE";
98 scoped_ptr<CircularBuffer> cb(new CircularBuffer(buf, 10));
99
100 cb->MoveLimit(10);
101 cb->MovePosition(8);
102 EXPECT_EQ(2U, cb->remaining());
103
104 // Do not have enough space for 4 bytes
105 char buf1[] = "AAAAAA";
106 EXPECT_EQ(PP_ERROR_NOSPACE, cb->ReadAll(buf1, 4));
107 EXPECT_EQ(2U, cb->remaining());
108 EXPECT_STREQ("AAAAAA", buf1);
109
110 EXPECT_EQ(2, cb->Read(buf1, 4));
111 EXPECT_EQ(0U, cb->remaining());
112 EXPECT_STREQ("89AAAA", buf1);
113
114 EXPECT_STREQ("0123456789EEEE", buf);
115 }
116
117 {
118 char buf[] = "0123456789EEEE";
119 scoped_ptr<CircularBuffer> cb(new CircularBuffer(buf, 10));
120
121 // Make the available range cross border of the buf.
122 cb->MoveLimit(10);
123 cb->MovePosition(8);
124 EXPECT_EQ(2U, cb->remaining());
125
126 cb->MoveLimit(2);
127 EXPECT_EQ(4U, cb->remaining());
128
129 char buf1[] = "AAAAAA";
130 EXPECT_EQ(PP_ERROR_NOSPACE, cb->ReadAll(buf1, 6));
131 EXPECT_EQ(4U, cb->remaining());
132 EXPECT_STREQ("AAAAAA", buf1);
133
134 EXPECT_EQ(4, cb->Read(buf1, 6));
135 EXPECT_EQ(0U, cb->remaining());
136 EXPECT_STREQ("8901AA", buf1);
137
138 EXPECT_STREQ("0123456789EEEE", buf);
139 }
140 }
141
142 TEST_F(CircularBufferTest, TestLock) {
143 {
144 char buf[] = "0123456789EEEE";
145 char *p = NULL;
146 char *p1 = NULL;
147 scoped_ptr<CircularBuffer> cb(new CircularBuffer(buf, 10));
148
149 cb->MoveLimit(8);
150 cb->MovePosition(2);
151 EXPECT_EQ(6U, cb->remaining());
152
153 EXPECT_EQ(PP_ERROR_NOSPACE, cb->Lock(reinterpret_cast<void**>(&p), 8));
154
155 EXPECT_EQ(PP_OK, cb->Lock(reinterpret_cast<void**>(&p), 2));
156 EXPECT_STREQ(buf + 2, p);
157
158 EXPECT_STREQ("23456789EEEE", p);
159
160 p[0] = 'A';
161 p[1] = 'B';
162 EXPECT_STREQ("01AB456789EEEE", buf);
163
164 // Write with the CricularBuffer locked.
165 EXPECT_EQ(PP_ERROR_INPROGRESS, cb->Write("CD", 2));
166 EXPECT_EQ(PP_ERROR_INPROGRESS, cb->WriteAll("CD", 2));
167
168 // Read with the CricularBuffer locked.
169 char buf1[2];
170 EXPECT_EQ(PP_ERROR_INPROGRESS, cb->Read(buf1, 2));
171 EXPECT_EQ(PP_ERROR_INPROGRESS, cb->ReadAll(buf1, 2));
172
173 // Lock the CricularBuffer again.
174 EXPECT_EQ(PP_ERROR_INPROGRESS, cb->Lock(reinterpret_cast<void**>(&p1), 2));
175
176 // Unlock with an invalid pointer.
177 EXPECT_EQ(PP_ERROR_BADARGUMENT, cb->Unlock(p + 1));
178 EXPECT_EQ(2, cb->Unlock(p));
179 EXPECT_EQ(4U, cb->remaining());
180
181 EXPECT_EQ(PP_OK, cb->Lock(reinterpret_cast<void**>(&p1), 2));
182 EXPECT_STREQ(buf + 4, p1);
183
184 EXPECT_EQ(2, cb->Unlock(p1));
185 EXPECT_EQ(2U, cb->remaining());
186 }
187
188 {
189 char buf[] = "0123456789EEEE";
190 char *p = NULL;
191 scoped_ptr<CircularBuffer> cb(new CircularBuffer(buf, 10));
192
193 // Make the available range cross border of the buf.
194 cb->MoveLimit(10);
195 cb->MovePosition(5);
196 EXPECT_EQ(5U, cb->remaining());
197
198 cb->MoveLimit(5);
199 EXPECT_EQ(10U, cb->remaining());
200
201 // Try Lock a range cross border of the buf.
202 EXPECT_EQ(PP_ERROR_FAILED, cb->Lock(reinterpret_cast<void**>(&p), 8));
203
204 EXPECT_EQ(PP_OK, cb->Lock(reinterpret_cast<void**>(&p), 5));
205 EXPECT_EQ(buf + 5, p);
206 EXPECT_EQ(5, cb->Unlock(p));
207 }
208 }
209
210 TEST_F(CircularBufferTest, TestCrash) {
211 char buf[] = "0123456789EEEE";
212 scoped_ptr<CircularBuffer> cb(new CircularBuffer(buf, 10));
213
214 cb->MoveLimit(10);
215 EXPECT_EQ(10u, cb->remaining());
216
217 EXPECT_DEATH(cb->MoveLimit(1), ".*Check failed:.*");
218
219 cb->MovePosition(8);
220 EXPECT_DEATH(cb->MovePosition(3), ".*Check failed:.*");
221 }
222
223 } // namespace ppapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698