OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2017 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 "platform/image-decoders/SegmentStream.h" | |
6 | |
7 #include <memory> | |
8 #include "platform/SharedBuffer.h" | |
9 #include "platform/wtf/PtrUtil.h" | |
10 #include "testing/gtest/include/gtest/gtest.h" | |
11 | |
12 // SegmentStream has 4 accessors which do not alter state: | |
13 // - isCleared() | |
14 // - isAtEnd() | |
15 // - getPosition() | |
16 // - getLength() | |
17 // | |
18 // For every operation which changes state we can test: | |
19 // - the operation completed as expected, | |
20 // - the accessors did not change, and/or | |
21 // - the accessors changed in the way we expected. | |
22 // | |
23 // There are actually 2 more accessors: | |
24 // - hasPosition() | |
25 // - hasLength() | |
26 // but these should always return true to indicate that we can call getLength() | |
27 // for example. So let's not add them to every state changing operation and add | |
28 // needless complexity. | |
29 | |
30 namespace { | |
31 | |
32 constexpr size_t kBufferAllocationSize = 20; | |
33 constexpr size_t kInsideBufferPosition = 10; | |
34 constexpr size_t kPastEndOfBufferPosition = 30; | |
35 | |
36 testing::AssertionResult IsCleared(const blink::SegmentStream&); | |
37 testing::AssertionResult IsAtEnd(const blink::SegmentStream&); | |
38 testing::AssertionResult PositionIsZero(const blink::SegmentStream&); | |
39 testing::AssertionResult PositionIsInsideBuffer(const blink::SegmentStream&); | |
40 testing::AssertionResult PositionIsAtEndOfBuffer(const blink::SegmentStream&); | |
41 testing::AssertionResult LengthIsZero(const blink::SegmentStream&); | |
42 testing::AssertionResult LengthIsAllocationSize(const blink::SegmentStream&); | |
43 | |
44 // Many of these tests require a SegmentStream that can be read from. | |
45 // This means the stream must have a buffer and contents. | |
46 // | |
47 // This function creates a buffer of size |kBufferAllocationSize| | |
48 // and prepares a SegmentStream with that buffer. | |
49 void MakeSegmentStreamReadable(blink::SegmentStream* segment_stream) { | |
scroggo_chromium
2017/04/26 19:02:23
I guess you named it this because it will make rea
cblume
2017/04/26 19:16:06
I just unblocked moving for SkNoncopyable types, w
| |
50 std::array<char, kBufferAllocationSize> raw_buffer; | |
51 | |
52 RefPtr<blink::SharedBuffer> shared_buffer = | |
53 blink::SharedBuffer::Create(raw_buffer.data(), kBufferAllocationSize); | |
54 | |
55 RefPtr<blink::SegmentReader> segment_reader = | |
56 blink::SegmentReader::CreateFromSharedBuffer(std::move(shared_buffer)); | |
57 | |
58 segment_stream->SetReader(segment_reader.Get()); | |
59 } | |
60 | |
61 } // namespace | |
62 | |
63 namespace blink { | |
64 | |
65 TEST(SegmentStreamTest, DefaultConstructorShouldSetIsCleared) { | |
66 SegmentStream segment_stream; | |
67 | |
68 ASSERT_TRUE(IsCleared(segment_stream)); | |
69 } | |
70 | |
71 TEST(SegmentStreamTest, DefaultConstructorShouldSetIsAtEnd) { | |
72 SegmentStream segment_stream; | |
73 | |
74 ASSERT_TRUE(IsAtEnd(segment_stream)); | |
75 } | |
76 | |
77 TEST(SegmentStreamTest, DefaultContructorShouldClearPosition) { | |
78 SegmentStream segment_stream; | |
79 | |
80 ASSERT_TRUE(PositionIsZero(segment_stream)); | |
81 } | |
82 | |
83 TEST(SegmentStreamTest, DefaultConstructorShouldHaveZeroLength) { | |
84 SegmentStream segment_stream; | |
85 | |
86 ASSERT_TRUE(LengthIsZero(segment_stream)); | |
87 } | |
88 | |
89 TEST(SegmentStreamTest, SetReaderShouldUnsetIsCleared) { | |
90 SegmentStream segment_stream; | |
91 MakeSegmentStreamReadable(&segment_stream); | |
92 | |
93 ASSERT_FALSE(IsCleared(segment_stream)); | |
94 } | |
95 | |
96 TEST(SegmentStreamTest, SetReaderShouldUnsetIsAtEnd) { | |
97 SegmentStream segment_stream; | |
98 MakeSegmentStreamReadable(&segment_stream); | |
99 | |
100 ASSERT_FALSE(IsAtEnd(segment_stream)); | |
101 } | |
102 | |
103 TEST(SegmentStreamTest, SetReaderShouldNotChangePosition) { | |
104 SegmentStream segment_stream; | |
105 MakeSegmentStreamReadable(&segment_stream); | |
106 | |
107 ASSERT_TRUE(PositionIsZero(segment_stream)); | |
108 } | |
109 | |
110 TEST(SegmentStreamTest, SetReaderShouldUpdateLength) { | |
111 SegmentStream segment_stream; | |
112 MakeSegmentStreamReadable(&segment_stream); | |
113 | |
114 ASSERT_TRUE(LengthIsAllocationSize(segment_stream)); | |
115 } | |
116 | |
117 TEST(SegmentStreamTest, SetReaderShouldSetIsClearedWhenSetToNull) { | |
118 SegmentStream segment_stream; | |
119 MakeSegmentStreamReadable(&segment_stream); | |
120 ASSERT_FALSE(IsCleared(segment_stream)); | |
121 | |
122 segment_stream.SetReader(nullptr); | |
123 ASSERT_TRUE(IsCleared(segment_stream)); | |
124 } | |
125 | |
126 TEST(SegmentStreamTest, SetReaderShouldSetIsClearedWhenReaderSizeNotBigEnough) { | |
127 SegmentStream segment_stream; | |
128 | |
129 segment_stream.seek(kPastEndOfBufferPosition); | |
130 | |
131 MakeSegmentStreamReadable(&segment_stream); | |
132 | |
133 ASSERT_TRUE(IsCleared(segment_stream)); | |
134 } | |
135 | |
136 TEST(SegmentStreamTest, SetReaderShouldSetIsAtEndWhenReaderSizeNotBigEnough) { | |
137 SegmentStream segment_stream; | |
138 | |
139 segment_stream.seek(kPastEndOfBufferPosition); | |
140 | |
141 MakeSegmentStreamReadable(&segment_stream); | |
142 | |
143 ASSERT_TRUE(IsAtEnd(segment_stream)); | |
144 } | |
145 | |
146 TEST(SegmentStreamTest, | |
147 SetReaderShouldNotChangePositionWhenReaderSizeNotBigEnough) { | |
148 SegmentStream segment_stream; | |
149 | |
150 segment_stream.seek(kPastEndOfBufferPosition); | |
151 | |
152 MakeSegmentStreamReadable(&segment_stream); | |
153 | |
154 ASSERT_EQ(kPastEndOfBufferPosition, segment_stream.getPosition()); | |
155 } | |
156 | |
157 TEST(SegmentStreamTest, SetReaderShouldChangeLengthWhenReaderSizeNotBigEnough) { | |
158 SegmentStream segment_stream; | |
159 | |
160 segment_stream.seek(kPastEndOfBufferPosition); | |
161 | |
162 MakeSegmentStreamReadable(&segment_stream); | |
163 | |
164 ASSERT_TRUE(LengthIsAllocationSize(segment_stream)); | |
165 } | |
166 | |
167 TEST(SegmentStreamTest, SetReaderShouldSetIsAtEndWhenSetToNull) { | |
168 SegmentStream segment_stream; | |
169 MakeSegmentStreamReadable(&segment_stream); | |
170 ASSERT_FALSE(IsAtEnd(segment_stream)); | |
171 | |
172 segment_stream.SetReader(nullptr); | |
173 ASSERT_TRUE(IsAtEnd(segment_stream)); | |
174 } | |
175 | |
176 TEST(SegmentStreamTest, SetReaderShouldNotChangePositionWhenSetToNull) { | |
177 SegmentStream segment_stream; | |
178 MakeSegmentStreamReadable(&segment_stream); | |
179 | |
180 std::array<char, kInsideBufferPosition> read_buffer; | |
181 const size_t amount_read = | |
182 segment_stream.read(read_buffer.data(), kInsideBufferPosition); | |
183 ASSERT_EQ(kInsideBufferPosition, amount_read); | |
184 const size_t pre_nulled_position = segment_stream.getPosition(); | |
185 ASSERT_EQ(amount_read, pre_nulled_position); | |
186 | |
187 segment_stream.SetReader(nullptr); | |
188 ASSERT_EQ(pre_nulled_position, segment_stream.getPosition()); | |
189 } | |
190 | |
191 TEST(SegmentStreamTest, SetReaderShouldClearLengthWhenSetToNull) { | |
192 SegmentStream segment_stream; | |
193 MakeSegmentStreamReadable(&segment_stream); | |
194 | |
195 segment_stream.SetReader(nullptr); | |
196 ASSERT_TRUE(LengthIsZero(segment_stream)); | |
197 } | |
198 | |
199 TEST(SegmentStreamTest, ReadShouldConsumeBuffer) { | |
200 SegmentStream segment_stream; | |
201 MakeSegmentStreamReadable(&segment_stream); | |
202 | |
203 std::array<char, kInsideBufferPosition> read_buffer; | |
204 const size_t amount_read = | |
205 segment_stream.read(read_buffer.data(), kInsideBufferPosition); | |
206 ASSERT_EQ(kInsideBufferPosition, amount_read); | |
207 } | |
208 | |
209 TEST(SegmentStreamTest, ReadShouldNotClear) { | |
210 SegmentStream segment_stream; | |
211 MakeSegmentStreamReadable(&segment_stream); | |
212 | |
213 std::array<char, kInsideBufferPosition> read_buffer; | |
214 segment_stream.read(read_buffer.data(), kInsideBufferPosition); | |
215 ASSERT_FALSE(IsCleared(segment_stream)); | |
216 } | |
217 | |
218 TEST(SegmentStreamTest, ReadShouldUpdateIsAtEnd) { | |
219 SegmentStream segment_stream; | |
220 MakeSegmentStreamReadable(&segment_stream); | |
221 ASSERT_FALSE(IsAtEnd(segment_stream)); | |
222 | |
223 std::array<char, kBufferAllocationSize> read_buffer; | |
224 const size_t amount_read = | |
225 segment_stream.read(read_buffer.data(), kBufferAllocationSize); | |
226 ASSERT_EQ(kBufferAllocationSize, amount_read); | |
227 ASSERT_TRUE(IsAtEnd(segment_stream)); | |
228 } | |
229 | |
230 TEST(SegmentStreamTest, ReadShouldUpdatePosition) { | |
231 SegmentStream segment_stream; | |
232 MakeSegmentStreamReadable(&segment_stream); | |
233 ASSERT_TRUE(PositionIsZero(segment_stream)); | |
234 | |
235 std::array<char, kInsideBufferPosition> read_buffer; | |
236 const size_t amount_read = | |
237 segment_stream.read(read_buffer.data(), kInsideBufferPosition); | |
238 ASSERT_EQ(amount_read, segment_stream.getPosition()); | |
239 ASSERT_TRUE(PositionIsInsideBuffer(segment_stream)); | |
240 } | |
241 | |
242 TEST(SegmentStreamTest, ReadShouldNotChangeLength) { | |
243 SegmentStream segment_stream; | |
244 MakeSegmentStreamReadable(&segment_stream); | |
245 | |
246 const size_t length = segment_stream.getLength(); | |
247 std::array<char, kInsideBufferPosition> read_buffer; | |
248 segment_stream.read(read_buffer.data(), kInsideBufferPosition); | |
249 ASSERT_EQ(segment_stream.getLength(), length); | |
250 } | |
251 | |
252 TEST(SegmentStreamTest, ReadShouldNotConsumeBufferWhenCleared) { | |
253 SegmentStream segment_stream; | |
254 MakeSegmentStreamReadable(&segment_stream); | |
255 | |
256 std::array<char, kInsideBufferPosition> read_buffer; | |
257 const auto read_buffer_as_void_ptr = | |
258 reinterpret_cast<void*>(read_buffer.data()); | |
259 | |
260 segment_stream.SetReader(nullptr); | |
261 ASSERT_TRUE(IsCleared(segment_stream)); | |
262 | |
263 ASSERT_EQ( | |
264 0u, segment_stream.read(read_buffer_as_void_ptr, kInsideBufferPosition)); | |
265 } | |
266 | |
267 TEST(SegmentStreamTest, ReadShouldConsumeBufferWithoutGoingPastTheEnd) { | |
268 SegmentStream segment_stream; | |
269 MakeSegmentStreamReadable(&segment_stream); | |
270 | |
271 std::array<char, kPastEndOfBufferPosition> read_buffer; | |
272 const size_t amount_read = | |
273 segment_stream.read(read_buffer.data(), kPastEndOfBufferPosition); | |
274 ASSERT_EQ(amount_read, segment_stream.getLength()); | |
275 } | |
276 | |
277 TEST(SegmentStreamTest, ReadShouldSetIsAtEndWhenPastEnd) { | |
278 SegmentStream segment_stream; | |
279 MakeSegmentStreamReadable(&segment_stream); | |
280 ASSERT_FALSE(IsAtEnd(segment_stream)); | |
281 | |
282 std::array<char, kPastEndOfBufferPosition> read_buffer; | |
283 segment_stream.read(read_buffer.data(), kPastEndOfBufferPosition); | |
284 ASSERT_TRUE(IsAtEnd(segment_stream)); | |
285 } | |
286 | |
287 TEST(SegmentStreamTest, ReadShouldTruncatePositionWhenPastEnd) { | |
288 SegmentStream segment_stream; | |
289 MakeSegmentStreamReadable(&segment_stream); | |
290 ASSERT_TRUE(PositionIsZero(segment_stream)); | |
291 | |
292 std::array<char, kPastEndOfBufferPosition> read_buffer; | |
293 const size_t amount_read = | |
294 segment_stream.read(read_buffer.data(), kPastEndOfBufferPosition); | |
295 ASSERT_EQ(amount_read, segment_stream.getPosition()); | |
296 ASSERT_TRUE(PositionIsAtEndOfBuffer(segment_stream)); | |
297 } | |
298 | |
299 TEST(SegmentStreamTest, PeekShouldConsumeBuffer) { | |
300 SegmentStream segment_stream; | |
301 MakeSegmentStreamReadable(&segment_stream); | |
302 | |
303 std::array<char, kInsideBufferPosition> peek_buffer; | |
304 const size_t amount_peeked = | |
305 segment_stream.peek(peek_buffer.data(), kInsideBufferPosition); | |
306 ASSERT_EQ(kInsideBufferPosition, amount_peeked); | |
307 } | |
308 | |
309 TEST(SegmentStreamTest, PeekShouldNotClear) { | |
310 SegmentStream segment_stream; | |
311 MakeSegmentStreamReadable(&segment_stream); | |
312 | |
313 std::array<char, kInsideBufferPosition> peek_buffer; | |
314 segment_stream.peek(peek_buffer.data(), kInsideBufferPosition); | |
315 ASSERT_FALSE(IsCleared(segment_stream)); | |
316 } | |
317 | |
318 TEST(SegmentStreamTest, PeekShouldNotUpdateIsAtEnd) { | |
319 SegmentStream segment_stream; | |
320 MakeSegmentStreamReadable(&segment_stream); | |
321 ASSERT_FALSE(IsAtEnd(segment_stream)); | |
322 | |
323 std::array<char, kBufferAllocationSize> peek_buffer; | |
324 const size_t amount_peeked = | |
325 segment_stream.peek(peek_buffer.data(), kBufferAllocationSize); | |
326 ASSERT_EQ(kBufferAllocationSize, amount_peeked); | |
327 ASSERT_FALSE(IsAtEnd(segment_stream)); | |
328 } | |
329 | |
330 TEST(SegmentStreamTest, PeekShouldNotUpdatePosition) { | |
331 SegmentStream segment_stream; | |
332 MakeSegmentStreamReadable(&segment_stream); | |
333 ASSERT_TRUE(PositionIsZero(segment_stream)); | |
334 | |
335 std::array<char, kInsideBufferPosition> peek_buffer; | |
336 segment_stream.peek(peek_buffer.data(), kInsideBufferPosition); | |
337 ASSERT_TRUE(PositionIsZero(segment_stream)); | |
338 } | |
339 | |
340 TEST(SegmentStreamTest, PeekShouldNotChangeLength) { | |
341 SegmentStream segment_stream; | |
342 MakeSegmentStreamReadable(&segment_stream); | |
343 | |
344 const size_t length = segment_stream.getLength(); | |
345 std::array<char, kInsideBufferPosition> peek_buffer; | |
346 segment_stream.peek(peek_buffer.data(), kInsideBufferPosition); | |
347 ASSERT_EQ(length, segment_stream.getLength()); | |
348 } | |
349 | |
350 TEST(SegmentStreamTest, PeekShouldNotConsumeBufferWhenCleared) { | |
351 SegmentStream segment_stream; | |
352 MakeSegmentStreamReadable(&segment_stream); | |
353 | |
354 std::array<char, kInsideBufferPosition> peek_buffer; | |
355 const auto peek_buffer_as_void_ptr = | |
356 reinterpret_cast<void*>(peek_buffer.data()); | |
357 | |
358 segment_stream.SetReader(nullptr); | |
359 ASSERT_TRUE(IsCleared(segment_stream)); | |
360 | |
361 ASSERT_EQ( | |
362 0u, segment_stream.peek(peek_buffer_as_void_ptr, kInsideBufferPosition)); | |
363 } | |
364 | |
365 TEST(SegmentStreamTest, PeekShouldConsumeBufferWithoutGoingPastTheEnd) { | |
366 SegmentStream segment_stream; | |
367 MakeSegmentStreamReadable(&segment_stream); | |
368 | |
369 std::array<char, kPastEndOfBufferPosition> peek_buffer; | |
370 const size_t amount_peeked = | |
371 segment_stream.peek(peek_buffer.data(), kPastEndOfBufferPosition); | |
372 ASSERT_EQ(amount_peeked, segment_stream.getLength()); | |
373 } | |
374 | |
375 TEST(SegmentStreamTest, PeekShouldNotSetIsAtEndWhenPastEnd) { | |
376 SegmentStream segment_stream; | |
377 MakeSegmentStreamReadable(&segment_stream); | |
378 ASSERT_FALSE(IsAtEnd(segment_stream)); | |
379 | |
380 std::array<char, kPastEndOfBufferPosition> peek_buffer; | |
381 segment_stream.peek(peek_buffer.data(), kPastEndOfBufferPosition); | |
382 ASSERT_FALSE(IsAtEnd(segment_stream)); | |
383 } | |
384 | |
385 TEST(SegmentStreamTest, PeekShouldNotTruncatePositionWhenPastEnd) { | |
386 SegmentStream segment_stream; | |
387 MakeSegmentStreamReadable(&segment_stream); | |
388 ASSERT_TRUE(PositionIsZero(segment_stream)); | |
389 | |
390 std::array<char, kPastEndOfBufferPosition> peek_buffer; | |
391 segment_stream.peek(peek_buffer.data(), kPastEndOfBufferPosition); | |
392 ASSERT_TRUE(PositionIsZero(segment_stream)); | |
393 } | |
394 | |
395 TEST(SegmentStreamTest, RewindShouldNotClear) { | |
396 SegmentStream segment_stream; | |
397 MakeSegmentStreamReadable(&segment_stream); | |
398 | |
399 std::array<char, kInsideBufferPosition> read_buffer; | |
400 segment_stream.read(read_buffer.data(), kInsideBufferPosition); | |
401 ASSERT_FALSE(IsCleared(segment_stream)); | |
402 | |
403 segment_stream.rewind(); | |
404 ASSERT_FALSE(IsCleared(segment_stream)); | |
405 } | |
406 | |
407 TEST(SegmentStreamTest, RewindShouldNotSetAtEnd) { | |
408 SegmentStream segment_stream; | |
409 MakeSegmentStreamReadable(&segment_stream); | |
410 | |
411 std::array<char, kInsideBufferPosition> read_buffer; | |
412 segment_stream.read(read_buffer.data(), kInsideBufferPosition); | |
413 ASSERT_FALSE(IsAtEnd(segment_stream)); | |
414 | |
415 segment_stream.rewind(); | |
416 ASSERT_FALSE(IsAtEnd(segment_stream)); | |
417 } | |
418 | |
419 TEST(SegmentStreamTest, RewindShouldResetPosition) { | |
420 SegmentStream segment_stream; | |
421 MakeSegmentStreamReadable(&segment_stream); | |
422 | |
423 std::array<char, kInsideBufferPosition> read_buffer; | |
424 segment_stream.read(read_buffer.data(), kInsideBufferPosition); | |
425 ASSERT_TRUE(PositionIsInsideBuffer(segment_stream)); | |
426 | |
427 segment_stream.rewind(); | |
428 ASSERT_TRUE(PositionIsZero(segment_stream)); | |
429 } | |
430 | |
431 TEST(SegmentStreamTest, RewindShouldNotChangeLength) { | |
432 SegmentStream segment_stream; | |
433 MakeSegmentStreamReadable(&segment_stream); | |
434 | |
435 std::array<char, kInsideBufferPosition> read_buffer; | |
436 segment_stream.read(read_buffer.data(), kInsideBufferPosition); | |
437 const size_t pre_rewind_length = segment_stream.getLength(); | |
438 | |
439 segment_stream.rewind(); | |
440 ASSERT_EQ(pre_rewind_length, segment_stream.getLength()); | |
441 } | |
442 | |
443 TEST(SegmentStreamTest, HasPositionShouldBeSupported) { | |
444 blink::SegmentStream segment_stream; | |
445 ASSERT_TRUE(segment_stream.hasPosition()); | |
446 } | |
447 | |
448 TEST(SegmentStreamTest, SeekShouldNotSetIsCleared) { | |
449 SegmentStream segment_stream; | |
450 MakeSegmentStreamReadable(&segment_stream); | |
451 ASSERT_FALSE(IsCleared(segment_stream)); | |
452 | |
453 segment_stream.seek(kInsideBufferPosition); | |
454 ASSERT_FALSE(IsCleared(segment_stream)); | |
455 } | |
456 | |
457 TEST(SegmentStreamTest, SeekShouldNotSetIsAtEndWhenSeekingInsideTheBuffer) { | |
458 SegmentStream segment_stream; | |
459 MakeSegmentStreamReadable(&segment_stream); | |
460 ASSERT_FALSE(IsAtEnd(segment_stream)); | |
461 | |
462 segment_stream.seek(kInsideBufferPosition); | |
463 ASSERT_FALSE(IsAtEnd(segment_stream)); | |
464 } | |
465 | |
466 TEST(SegmentStreamTest, SeekShouldSetIsAtEndWhenSeekingToTheEndOfTheBuffer) { | |
467 SegmentStream segment_stream; | |
468 MakeSegmentStreamReadable(&segment_stream); | |
469 ASSERT_FALSE(IsAtEnd(segment_stream)); | |
470 | |
471 segment_stream.seek(kBufferAllocationSize); | |
472 ASSERT_TRUE(IsAtEnd(segment_stream)); | |
473 } | |
474 | |
475 TEST(SegmentStreamTest, SeekShouldUpdatePosition) { | |
476 SegmentStream segment_stream; | |
477 MakeSegmentStreamReadable(&segment_stream); | |
478 ASSERT_TRUE(PositionIsZero(segment_stream)); | |
479 | |
480 segment_stream.seek(kInsideBufferPosition); | |
481 ASSERT_EQ(kInsideBufferPosition, segment_stream.getPosition()); | |
482 } | |
483 | |
484 TEST(SegmentStreamTest, SeekShouldNotTruncatePositionWhenPastEnd) { | |
485 SegmentStream segment_stream; | |
486 MakeSegmentStreamReadable(&segment_stream); | |
487 ASSERT_TRUE(PositionIsZero(segment_stream)); | |
488 | |
489 segment_stream.seek(kPastEndOfBufferPosition); | |
490 ASSERT_EQ(kPastEndOfBufferPosition, segment_stream.getPosition()); | |
491 } | |
492 | |
493 TEST(SegmentStreamTest, SeekShouldNotUpdateLength) { | |
494 SegmentStream segment_stream; | |
495 MakeSegmentStreamReadable(&segment_stream); | |
496 | |
497 segment_stream.seek(kInsideBufferPosition); | |
498 ASSERT_EQ(kBufferAllocationSize, segment_stream.getLength()); | |
499 } | |
500 | |
501 TEST(SegmentStreamTest, MoveShouldNotSetCleared) { | |
502 SegmentStream segment_stream; | |
503 MakeSegmentStreamReadable(&segment_stream); | |
504 | |
505 segment_stream.move(kInsideBufferPosition); | |
506 ASSERT_FALSE(IsCleared(segment_stream)); | |
507 } | |
508 | |
509 TEST(SegmentStreamTest, MoveShouldUpdatePosition) { | |
510 SegmentStream segment_stream; | |
511 MakeSegmentStreamReadable(&segment_stream); | |
512 | |
513 segment_stream.move(kInsideBufferPosition); | |
514 ASSERT_EQ(kInsideBufferPosition, segment_stream.getPosition()); | |
515 } | |
516 | |
517 TEST(SegmentStreamTest, MoveShouldNotTruncatePositionWhenPastEnd) { | |
518 SegmentStream segment_stream; | |
519 MakeSegmentStreamReadable(&segment_stream); | |
520 | |
521 segment_stream.move(kPastEndOfBufferPosition); | |
522 ASSERT_EQ(kPastEndOfBufferPosition, segment_stream.getPosition()); | |
523 } | |
524 | |
525 TEST(SegmentStreamTest, MoveShouldClampPositionToZeroWhenGoingNegative) { | |
526 SegmentStream segment_stream; | |
527 MakeSegmentStreamReadable(&segment_stream); | |
528 | |
529 // Move the position off of 0 | |
530 std::array<char, 1> read_buffer; | |
531 segment_stream.read(read_buffer.data(), 1); | |
532 ASSERT_FALSE(PositionIsZero(segment_stream)); | |
533 | |
534 segment_stream.move(-2); | |
535 ASSERT_TRUE(PositionIsZero(segment_stream)); | |
536 } | |
537 | |
538 TEST(SegmentStreamTest, MoveShouldNotChangeLength) { | |
539 SegmentStream segment_stream; | |
540 MakeSegmentStreamReadable(&segment_stream); | |
541 ASSERT_TRUE(LengthIsAllocationSize(segment_stream)); | |
542 | |
543 segment_stream.move(kInsideBufferPosition); | |
544 ASSERT_TRUE(LengthIsAllocationSize(segment_stream)); | |
545 } | |
546 | |
547 TEST(SegmentStreamTest, HasLengthShouldBeSupported) { | |
548 blink::SegmentStream segment_stream; | |
549 ASSERT_TRUE(segment_stream.hasLength()); | |
550 } | |
551 | |
552 } // namespace blink | |
553 | |
554 namespace { | |
555 | |
556 testing::AssertionResult IsCleared(const blink::SegmentStream& segment_stream) { | |
557 if (segment_stream.IsCleared()) | |
558 return testing::AssertionSuccess(); | |
559 | |
560 return testing::AssertionFailure() << "SegmentStream is not clear"; | |
561 } | |
562 | |
563 testing::AssertionResult IsAtEnd(const blink::SegmentStream& segment_stream) { | |
564 if (segment_stream.isAtEnd()) | |
565 return testing::AssertionSuccess(); | |
566 | |
567 return testing::AssertionFailure() << "SegmentStream is not at the end"; | |
568 } | |
569 | |
570 testing::AssertionResult PositionIsZero( | |
571 const blink::SegmentStream& segment_stream) { | |
572 if (segment_stream.getPosition() == 0ul) | |
573 return testing::AssertionSuccess(); | |
574 | |
575 return testing::AssertionFailure() << "SegmentStream position is not 0"; | |
576 } | |
577 | |
578 testing::AssertionResult PositionIsInsideBuffer( | |
579 const blink::SegmentStream& segment_stream) { | |
580 if (segment_stream.getPosition() == kInsideBufferPosition) | |
581 return testing::AssertionSuccess(); | |
582 | |
583 return testing::AssertionFailure() | |
584 << "SegmentStream position is not inside the buffer"; | |
585 } | |
586 | |
587 testing::AssertionResult PositionIsAtEndOfBuffer( | |
588 const blink::SegmentStream& segment_stream) { | |
589 if (segment_stream.getPosition() == kBufferAllocationSize) | |
590 return testing::AssertionSuccess(); | |
591 | |
592 return testing::AssertionFailure() | |
593 << "SegmentStream position is not at the end of the buffer"; | |
594 } | |
595 | |
596 testing::AssertionResult LengthIsZero( | |
597 const blink::SegmentStream& segment_stream) { | |
598 if (segment_stream.getLength() == 0ul) | |
599 return testing::AssertionSuccess(); | |
600 | |
601 return testing::AssertionFailure() << "SegmentStream length is not 0"; | |
602 } | |
603 | |
604 testing::AssertionResult LengthIsAllocationSize( | |
605 const blink::SegmentStream& segment_stream) { | |
606 if (segment_stream.getLength() == kBufferAllocationSize) | |
607 return testing::AssertionSuccess(); | |
608 | |
609 return testing::AssertionFailure() | |
610 << "SegmentStream length is not the allocation size"; | |
611 } | |
612 | |
613 } // namespace | |
OLD | NEW |