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

Side by Side Diff: third_party/WebKit/Source/platform/image-decoders/SegmentStreamTest.cpp

Issue 2565323003: Move gif image decoder to SkCodec (Closed)
Patch Set: Only include SkCodec for non-iOS targets Created 3 years, 6 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) 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 <array>
8 #include <memory>
9 #include "platform/SharedBuffer.h"
10 #include "platform/wtf/PtrUtil.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 // SegmentStream has 4 accessors which do not alter state:
14 // - isCleared()
15 // - isAtEnd()
16 // - getPosition()
17 // - getLength()
18 //
19 // For every operation which changes state we can test:
20 // - the operation completed as expected,
21 // - the accessors did not change, and/or
22 // - the accessors changed in the way we expected.
23 //
24 // There are actually 2 more accessors:
25 // - hasPosition()
26 // - hasLength()
27 // but these should always return true to indicate that we can call getLength()
28 // for example. So let's not add them to every state changing operation and add
29 // needless complexity.
30
31 namespace {
32
33 constexpr size_t kBufferAllocationSize = 20;
34 constexpr size_t kInsideBufferPosition = 10;
35 constexpr size_t kPastEndOfBufferPosition = 30;
36 constexpr long kFarPastBeginningOfBufferOsset = -60;
37
38 testing::AssertionResult IsCleared(const blink::SegmentStream&);
39 testing::AssertionResult IsAtEnd(const blink::SegmentStream&);
40 testing::AssertionResult PositionIsZero(const blink::SegmentStream&);
41 testing::AssertionResult PositionIsInsideBuffer(const blink::SegmentStream&);
42 testing::AssertionResult PositionIsAtEndOfBuffer(const blink::SegmentStream&);
43 testing::AssertionResult LengthIsZero(const blink::SegmentStream&);
44 testing::AssertionResult LengthIsAllocationSize(const blink::SegmentStream&);
45
46 // Many of these tests require a SegmentStream with populated data.
47 //
48 // This function creates a buffer of size |kBufferAllocationSize| and prepares
49 // a SegmentStream with that buffer.
50 // This also populates other properties such as the length, cleared state, etc.
51 blink::SegmentStream CreatePopulatedSegmentStream();
52
53 // This function creates a buffer of size |kBufferAllocationSize| to be used
54 // when populating a SegmentStream.
55 WTF::RefPtr<blink::SegmentReader> CreateSegmentReader();
56
57 size_t ReadFromSegmentStream(blink::SegmentStream&,
58 size_t amount_to_read = kInsideBufferPosition);
59 size_t PeekIntoSegmentStream(blink::SegmentStream&,
60 size_t amount_to_peek = kInsideBufferPosition);
61
62 } // namespace
63
64 namespace blink {
65
66 TEST(SegmentStreamTest, DefaultConstructorShouldSetIsCleared) {
67 SegmentStream segment_stream;
68
69 ASSERT_TRUE(IsCleared(segment_stream));
70 }
71
72 TEST(SegmentStreamTest, DefaultConstructorShouldSetIsAtEnd) {
73 SegmentStream segment_stream;
74
75 ASSERT_TRUE(IsAtEnd(segment_stream));
76 }
77
78 TEST(SegmentStreamTest, DefaultContructorShouldClearPosition) {
79 SegmentStream segment_stream;
80
81 ASSERT_TRUE(PositionIsZero(segment_stream));
82 }
83
84 TEST(SegmentStreamTest, DefaultConstructorShouldHaveZeroLength) {
85 SegmentStream segment_stream;
86
87 ASSERT_TRUE(LengthIsZero(segment_stream));
88 }
89
90 TEST(SegmentStreamTest, MoveConstructorShouldSetIsClearedWhenRhsIsCleared) {
91 SegmentStream cleared_segment_stream;
92 ASSERT_TRUE(IsCleared(cleared_segment_stream));
93
94 SegmentStream move_constructed_segment_stream =
95 std::move(cleared_segment_stream);
96
97 ASSERT_TRUE(IsCleared(move_constructed_segment_stream));
98 }
99
100 TEST(SegmentStreamTest,
101 MoveConstructorShouldUnsetIsClearedWhenRhsIsNotCleared) {
102 SegmentStream uncleared_segment_stream = CreatePopulatedSegmentStream();
103 ASSERT_FALSE(IsCleared(uncleared_segment_stream));
104
105 SegmentStream move_constructed_segment_stream =
106 std::move(uncleared_segment_stream);
107
108 ASSERT_FALSE(IsCleared(move_constructed_segment_stream));
109 }
110
111 TEST(SegmentStreamTest, MoveConstructorShouldSetIsAtEndWhenRhsIsAtEnd) {
112 SegmentStream at_end_segment_stream;
113 ASSERT_TRUE(IsAtEnd(at_end_segment_stream));
114
115 SegmentStream move_constructed_segment_stream =
116 std::move(at_end_segment_stream);
117
118 ASSERT_TRUE(IsAtEnd(move_constructed_segment_stream));
119 }
120
121 TEST(SegmentStreamTest, MoveConstructorShouldUnsetIsAtEndWhenRhsIsNotAtEnd) {
122 SegmentStream not_at_end_segment_stream = CreatePopulatedSegmentStream();
123 ASSERT_FALSE(IsAtEnd(not_at_end_segment_stream));
124
125 SegmentStream move_constructed_segment_stream =
126 std::move(not_at_end_segment_stream);
127
128 ASSERT_FALSE(IsAtEnd(move_constructed_segment_stream));
129 }
130
131 TEST(SegmentStreamTest, MoveContructorShouldCopyRhsPosition) {
132 SegmentStream segment_stream = CreatePopulatedSegmentStream();
133 segment_stream.seek(kInsideBufferPosition);
134 ASSERT_EQ(kInsideBufferPosition, segment_stream.getPosition());
135
136 SegmentStream move_constructed_segment_stream = std::move(segment_stream);
137
138 ASSERT_EQ(kInsideBufferPosition,
139 move_constructed_segment_stream.getPosition());
140 }
141
142 TEST(SegmentStreamTest, MoveConstructorShouldCopyRhsLength) {
143 SegmentStream segment_stream = CreatePopulatedSegmentStream();
144 ASSERT_EQ(kBufferAllocationSize, segment_stream.getLength());
145
146 SegmentStream move_constructed_segment_stream = std::move(segment_stream);
147
148 ASSERT_EQ(kBufferAllocationSize, move_constructed_segment_stream.getLength());
149 }
150
151 TEST(SegmentStreamTest,
152 MoveAssignmentOperatorShouldSetIsClearedWhenRhsIsCleared) {
153 SegmentStream cleared_segment_stream;
154 ASSERT_TRUE(IsCleared(cleared_segment_stream));
155
156 SegmentStream move_assigned_segment_stream;
157 move_assigned_segment_stream = std::move(cleared_segment_stream);
158
159 ASSERT_TRUE(IsCleared(move_assigned_segment_stream));
160 }
161
162 TEST(SegmentStreamTest,
163 MoveAssignmentOperatorShouldUnsetIsClearedWhenRhsIsNotCleared) {
164 SegmentStream uncleared_segment_stream = CreatePopulatedSegmentStream();
165 ASSERT_FALSE(IsCleared(uncleared_segment_stream));
166
167 SegmentStream move_assigned_segment_stream;
168 move_assigned_segment_stream = std::move(uncleared_segment_stream);
169
170 ASSERT_FALSE(IsCleared(move_assigned_segment_stream));
171 }
172
173 TEST(SegmentStreamTest, MoveAssignmentOperatorShouldSetIsAtEndWhenRhsIsAtEnd) {
174 SegmentStream at_end_segment_stream;
175 ASSERT_TRUE(IsAtEnd(at_end_segment_stream));
176
177 SegmentStream move_assigned_segment_stream;
178 move_assigned_segment_stream = std::move(at_end_segment_stream);
179
180 ASSERT_TRUE(IsAtEnd(move_assigned_segment_stream));
181 }
182
183 TEST(SegmentStreamTest,
184 MoveAssignmentOperatorShouldUnsetIsAtEndWhenRhsIsNotAtEnd) {
185 SegmentStream not_at_end_segment_stream = CreatePopulatedSegmentStream();
186 ASSERT_FALSE(IsAtEnd(not_at_end_segment_stream));
187
188 SegmentStream move_assigned_segment_stream;
189 move_assigned_segment_stream = std::move(not_at_end_segment_stream);
190
191 ASSERT_FALSE(IsAtEnd(move_assigned_segment_stream));
192 }
193
194 TEST(SegmentStreamTest, MoveAssignmentOperatorShouldCopyRhsPosition) {
195 SegmentStream segment_stream = CreatePopulatedSegmentStream();
196 segment_stream.seek(kInsideBufferPosition);
197 ASSERT_EQ(kInsideBufferPosition, segment_stream.getPosition());
198
199 SegmentStream move_assigned_segment_stream;
200 move_assigned_segment_stream = std::move(segment_stream);
201
202 ASSERT_EQ(kInsideBufferPosition, move_assigned_segment_stream.getPosition());
203 }
204
205 TEST(SegmentStreamTest, MoveAssignmentOperatorShouldCopyRhsLength) {
206 SegmentStream segment_stream = CreatePopulatedSegmentStream();
207 ASSERT_EQ(kBufferAllocationSize, segment_stream.getLength());
208
209 SegmentStream move_assigned_segment_stream;
210 move_assigned_segment_stream = std::move(segment_stream);
211
212 ASSERT_EQ(kBufferAllocationSize, move_assigned_segment_stream.getLength());
213 }
214
215 TEST(SegmentStreamTest, SetReaderShouldUnsetIsCleared) {
216 SegmentStream segment_stream;
217 WTF::RefPtr<SegmentReader> segment_reader = CreateSegmentReader();
218 ASSERT_TRUE(IsCleared(segment_stream));
219
220 segment_stream.SetReader(segment_reader);
221
222 ASSERT_FALSE(IsCleared(segment_stream));
223 }
224
225 TEST(SegmentStreamTest, SetReaderShouldUnsetIsAtEnd) {
226 SegmentStream segment_stream;
227 WTF::RefPtr<SegmentReader> segment_reader = CreateSegmentReader();
228 ASSERT_TRUE(IsAtEnd(segment_stream));
229
230 segment_stream.SetReader(segment_reader);
231
232 ASSERT_FALSE(IsAtEnd(segment_stream));
233 }
234
235 TEST(SegmentStreamTest, SetReaderShouldNotChangePosition) {
236 SegmentStream segment_stream;
237 WTF::RefPtr<SegmentReader> segment_reader = CreateSegmentReader();
238 ASSERT_TRUE(PositionIsZero(segment_stream));
239
240 segment_stream.SetReader(segment_reader);
241
242 ASSERT_TRUE(PositionIsZero(segment_stream));
243 }
244
245 TEST(SegmentStreamTest, SetReaderShouldUpdateLength) {
246 SegmentStream segment_stream;
247 WTF::RefPtr<SegmentReader> segment_reader = CreateSegmentReader();
248 ASSERT_FALSE(LengthIsAllocationSize(segment_stream));
249
250 segment_stream.SetReader(segment_reader);
251
252 ASSERT_TRUE(LengthIsAllocationSize(segment_stream));
253 }
254
255 TEST(SegmentStreamTest, SetReaderShouldSetIsClearedWhenSetToNull) {
256 SegmentStream segment_stream = CreatePopulatedSegmentStream();
257 ASSERT_FALSE(IsCleared(segment_stream));
258
259 segment_stream.SetReader(nullptr);
260
261 ASSERT_TRUE(IsCleared(segment_stream));
262 }
263
264 TEST(SegmentStreamTest, SetReaderShouldSetIsClearedWhenReaderSizeNotBigEnough) {
265 SegmentStream segment_stream;
266 segment_stream.seek(kPastEndOfBufferPosition);
267 RefPtr<blink::SegmentReader> segment_reader = CreateSegmentReader();
268
269 segment_stream.SetReader(segment_reader);
270
271 ASSERT_TRUE(IsCleared(segment_stream));
272 }
273
274 TEST(SegmentStreamTest, SetReaderShouldSetIsAtEndWhenReaderSizeNotBigEnough) {
275 SegmentStream segment_stream;
276 segment_stream.seek(kPastEndOfBufferPosition);
277 RefPtr<blink::SegmentReader> segment_reader = CreateSegmentReader();
278
279 segment_stream.SetReader(segment_reader);
280
281 ASSERT_TRUE(IsAtEnd(segment_stream));
282 }
283
284 TEST(SegmentStreamTest,
285 SetReaderShouldNotChangePositionWhenReaderSizeNotBigEnough) {
286 SegmentStream segment_stream;
287 segment_stream.seek(kPastEndOfBufferPosition);
288 RefPtr<blink::SegmentReader> segment_reader = CreateSegmentReader();
289
290 segment_stream.SetReader(segment_reader);
291
292 ASSERT_EQ(kPastEndOfBufferPosition, segment_stream.getPosition());
293 }
294
295 TEST(SegmentStreamTest, SetReaderShouldChangeLengthWhenReaderSizeNotBigEnough) {
296 SegmentStream segment_stream;
297 segment_stream.seek(kPastEndOfBufferPosition);
298 RefPtr<blink::SegmentReader> segment_reader = CreateSegmentReader();
299
300 segment_stream.SetReader(segment_reader);
301
302 ASSERT_TRUE(LengthIsAllocationSize(segment_stream));
303 }
304
305 TEST(SegmentStreamTest, SetReaderShouldSetIsAtEndWhenSetToNull) {
306 SegmentStream segment_stream = CreatePopulatedSegmentStream();
307 ASSERT_FALSE(IsAtEnd(segment_stream));
308
309 segment_stream.SetReader(nullptr);
310 ASSERT_TRUE(IsAtEnd(segment_stream));
311 }
312
313 TEST(SegmentStreamTest, SetReaderShouldNotChangePositionWhenSetToNull) {
314 SegmentStream segment_stream = CreatePopulatedSegmentStream();
315 const size_t amount_read = ReadFromSegmentStream(segment_stream);
316 ASSERT_EQ(kInsideBufferPosition, amount_read);
317 const size_t pre_nulled_position = segment_stream.getPosition();
318 ASSERT_EQ(kInsideBufferPosition, pre_nulled_position);
319
320 segment_stream.SetReader(nullptr);
321
322 ASSERT_EQ(kInsideBufferPosition, segment_stream.getPosition());
323 }
324
325 TEST(SegmentStreamTest, SetReaderShouldClearLengthWhenSetToNull) {
326 SegmentStream segment_stream = CreatePopulatedSegmentStream();
327 ASSERT_FALSE(LengthIsZero(segment_stream));
328
329 segment_stream.SetReader(nullptr);
330
331 ASSERT_TRUE(LengthIsZero(segment_stream));
332 }
333
334 TEST(SegmentStreamTest, ReadShouldConsumeBuffer) {
335 SegmentStream segment_stream = CreatePopulatedSegmentStream();
336
337 const size_t amount_read = ReadFromSegmentStream(segment_stream);
338
339 ASSERT_EQ(kInsideBufferPosition, amount_read);
340 }
341
342 TEST(SegmentStreamTest, ReadShouldNotClear) {
343 SegmentStream segment_stream = CreatePopulatedSegmentStream();
344
345 ReadFromSegmentStream(segment_stream);
346
347 ASSERT_FALSE(IsCleared(segment_stream));
348 }
349
350 TEST(SegmentStreamTest, ReadShouldUpdateIsAtEnd) {
351 SegmentStream segment_stream = CreatePopulatedSegmentStream();
352 ASSERT_FALSE(IsAtEnd(segment_stream));
353
354 ReadFromSegmentStream(segment_stream, kBufferAllocationSize);
355
356 ASSERT_TRUE(IsAtEnd(segment_stream));
357 }
358
359 TEST(SegmentStreamTest, ReadShouldUpdatePosition) {
360 SegmentStream segment_stream = CreatePopulatedSegmentStream();
361 ASSERT_TRUE(PositionIsZero(segment_stream));
362
363 ReadFromSegmentStream(segment_stream);
364
365 ASSERT_TRUE(PositionIsInsideBuffer(segment_stream));
366 }
367
368 TEST(SegmentStreamTest, ReadShouldNotChangeLength) {
369 SegmentStream segment_stream = CreatePopulatedSegmentStream();
370 ASSERT_EQ(kBufferAllocationSize, segment_stream.getLength());
371
372 ReadFromSegmentStream(segment_stream);
373
374 ASSERT_EQ(kBufferAllocationSize, segment_stream.getLength());
375 }
376
377 TEST(SegmentStreamTest, ReadShouldNotConsumeBufferWhenCleared) {
378 SegmentStream segment_stream = CreatePopulatedSegmentStream();
379 // Clear |segment_stream|
380 segment_stream.SetReader(nullptr);
381 ASSERT_TRUE(IsCleared(segment_stream));
382
383 const size_t amount_read = ReadFromSegmentStream(segment_stream);
384
385 ASSERT_EQ(0u, amount_read);
386 }
387
388 TEST(SegmentStreamTest, ReadShouldConsumeBufferWithoutGoingPastTheEnd) {
389 SegmentStream segment_stream = CreatePopulatedSegmentStream();
390
391 const size_t amount_read =
392 ReadFromSegmentStream(segment_stream, kPastEndOfBufferPosition);
393
394 ASSERT_EQ(kBufferAllocationSize, amount_read);
395 }
396
397 TEST(SegmentStreamTest, ReadShouldSetIsAtEndWhenPastEnd) {
398 SegmentStream segment_stream = CreatePopulatedSegmentStream();
399 ASSERT_FALSE(IsAtEnd(segment_stream));
400
401 ReadFromSegmentStream(segment_stream, kPastEndOfBufferPosition);
402
403 ASSERT_TRUE(IsAtEnd(segment_stream));
404 }
405
406 TEST(SegmentStreamTest, ReadShouldTruncatePositionWhenPastEnd) {
407 SegmentStream segment_stream = CreatePopulatedSegmentStream();
408 ASSERT_TRUE(PositionIsZero(segment_stream));
409
410 ReadFromSegmentStream(segment_stream, kPastEndOfBufferPosition);
411
412 ASSERT_TRUE(PositionIsAtEndOfBuffer(segment_stream));
413 }
414
415 TEST(SegmentStreamTest, PeekShouldConsumeBuffer) {
416 SegmentStream segment_stream = CreatePopulatedSegmentStream();
417
418 const size_t amount_peeked = PeekIntoSegmentStream(segment_stream);
419
420 ASSERT_EQ(kInsideBufferPosition, amount_peeked);
421 }
422
423 TEST(SegmentStreamTest, PeekShouldNotClear) {
424 SegmentStream segment_stream = CreatePopulatedSegmentStream();
425
426 PeekIntoSegmentStream(segment_stream);
427
428 ASSERT_FALSE(IsCleared(segment_stream));
429 }
430
431 TEST(SegmentStreamTest, PeekShouldNotUpdateIsAtEnd) {
432 SegmentStream segment_stream = CreatePopulatedSegmentStream();
433 ASSERT_FALSE(IsAtEnd(segment_stream));
434
435 PeekIntoSegmentStream(segment_stream, kBufferAllocationSize);
436
437 ASSERT_FALSE(IsAtEnd(segment_stream));
438 }
439
440 TEST(SegmentStreamTest, PeekShouldNotUpdatePosition) {
441 SegmentStream segment_stream = CreatePopulatedSegmentStream();
442 ASSERT_TRUE(PositionIsZero(segment_stream));
443
444 PeekIntoSegmentStream(segment_stream);
445
446 ASSERT_TRUE(PositionIsZero(segment_stream));
447 }
448
449 TEST(SegmentStreamTest, PeekShouldNotChangeLength) {
450 SegmentStream segment_stream = CreatePopulatedSegmentStream();
451
452 PeekIntoSegmentStream(segment_stream);
453
454 ASSERT_EQ(kBufferAllocationSize, segment_stream.getLength());
455 }
456
457 TEST(SegmentStreamTest, PeekShouldNotConsumeBufferWhenCleared) {
458 SegmentStream segment_stream = CreatePopulatedSegmentStream();
459 // Clear |segment_stream|
460 segment_stream.SetReader(nullptr);
461 ASSERT_TRUE(IsCleared(segment_stream));
462
463 const size_t amount_peeked = PeekIntoSegmentStream(segment_stream);
464
465 ASSERT_EQ(0u, amount_peeked);
466 }
467
468 TEST(SegmentStreamTest, PeekShouldConsumeBufferWithoutGoingPastTheEnd) {
469 SegmentStream segment_stream = CreatePopulatedSegmentStream();
470
471 const size_t amount_peeked =
472 PeekIntoSegmentStream(segment_stream, kPastEndOfBufferPosition);
473
474 ASSERT_EQ(kBufferAllocationSize, amount_peeked);
475 }
476
477 TEST(SegmentStreamTest, PeekShouldNotSetIsAtEndWhenPastEnd) {
478 SegmentStream segment_stream = CreatePopulatedSegmentStream();
479 ASSERT_FALSE(IsAtEnd(segment_stream));
480
481 PeekIntoSegmentStream(segment_stream, kPastEndOfBufferPosition);
482
483 ASSERT_FALSE(IsAtEnd(segment_stream));
484 }
485
486 TEST(SegmentStreamTest, PeekShouldNotTruncatePositionWhenPastEnd) {
487 SegmentStream segment_stream = CreatePopulatedSegmentStream();
488 ASSERT_TRUE(PositionIsZero(segment_stream));
489
490 PeekIntoSegmentStream(segment_stream, kPastEndOfBufferPosition);
491
492 ASSERT_TRUE(PositionIsZero(segment_stream));
493 }
494
495 TEST(SegmentStreamTest, RewindShouldNotClear) {
496 SegmentStream segment_stream = CreatePopulatedSegmentStream();
497 ReadFromSegmentStream(segment_stream);
498 ASSERT_FALSE(IsCleared(segment_stream));
499
500 segment_stream.rewind();
501
502 ASSERT_FALSE(IsCleared(segment_stream));
503 }
504
505 TEST(SegmentStreamTest, RewindShouldNotSetAtEnd) {
506 SegmentStream segment_stream = CreatePopulatedSegmentStream();
507 ReadFromSegmentStream(segment_stream);
508 ASSERT_FALSE(IsAtEnd(segment_stream));
509
510 segment_stream.rewind();
511
512 ASSERT_FALSE(IsAtEnd(segment_stream));
513 }
514
515 TEST(SegmentStreamTest, RewindShouldResetPosition) {
516 SegmentStream segment_stream = CreatePopulatedSegmentStream();
517 ReadFromSegmentStream(segment_stream);
518 ASSERT_TRUE(PositionIsInsideBuffer(segment_stream));
519
520 segment_stream.rewind();
521
522 ASSERT_TRUE(PositionIsZero(segment_stream));
523 }
524
525 TEST(SegmentStreamTest, RewindShouldNotChangeLength) {
526 SegmentStream segment_stream = CreatePopulatedSegmentStream();
527 ReadFromSegmentStream(segment_stream);
528
529 segment_stream.rewind();
530
531 ASSERT_EQ(kBufferAllocationSize, segment_stream.getLength());
532 }
533
534 TEST(SegmentStreamTest, HasPositionShouldBeSupported) {
535 blink::SegmentStream segment_stream;
536
537 ASSERT_TRUE(segment_stream.hasPosition());
538 }
539
540 TEST(SegmentStreamTest, SeekShouldNotSetIsCleared) {
541 SegmentStream segment_stream = CreatePopulatedSegmentStream();
542 ASSERT_FALSE(IsCleared(segment_stream));
543
544 segment_stream.seek(kInsideBufferPosition);
545
546 ASSERT_FALSE(IsCleared(segment_stream));
547 }
548
549 TEST(SegmentStreamTest, SeekShouldNotSetIsAtEndWhenSeekingInsideTheBuffer) {
550 SegmentStream segment_stream = CreatePopulatedSegmentStream();
551 ASSERT_FALSE(IsAtEnd(segment_stream));
552
553 segment_stream.seek(kInsideBufferPosition);
554
555 ASSERT_FALSE(IsAtEnd(segment_stream));
556 }
557
558 TEST(SegmentStreamTest, SeekShouldSetIsAtEndWhenSeekingToTheEndOfTheBuffer) {
559 SegmentStream segment_stream = CreatePopulatedSegmentStream();
560 ASSERT_FALSE(IsAtEnd(segment_stream));
561
562 segment_stream.seek(kBufferAllocationSize);
563
564 ASSERT_TRUE(IsAtEnd(segment_stream));
565 }
566
567 TEST(SegmentStreamTest, SeekShouldUpdatePosition) {
568 SegmentStream segment_stream = CreatePopulatedSegmentStream();
569 ASSERT_TRUE(PositionIsZero(segment_stream));
570
571 segment_stream.seek(kInsideBufferPosition);
572
573 ASSERT_EQ(kInsideBufferPosition, segment_stream.getPosition());
574 }
575
576 TEST(SegmentStreamTest, SeekShouldNotTruncatePositionWhenPastEnd) {
577 SegmentStream segment_stream = CreatePopulatedSegmentStream();
578 ASSERT_TRUE(PositionIsZero(segment_stream));
579
580 segment_stream.seek(kPastEndOfBufferPosition);
581
582 ASSERT_EQ(kPastEndOfBufferPosition, segment_stream.getPosition());
583 }
584
585 TEST(SegmentStreamTest, SeekShouldNotUpdateLength) {
586 SegmentStream segment_stream = CreatePopulatedSegmentStream();
587
588 segment_stream.seek(kInsideBufferPosition);
589
590 ASSERT_EQ(kBufferAllocationSize, segment_stream.getLength());
591 }
592
593 TEST(SegmentStreamTest, MoveShouldNotSetCleared) {
594 SegmentStream segment_stream = CreatePopulatedSegmentStream();
595
596 segment_stream.move(kInsideBufferPosition);
597
598 ASSERT_FALSE(IsCleared(segment_stream));
599 }
600
601 TEST(SegmentStreamTest, MoveShouldUpdatePosition) {
602 SegmentStream segment_stream = CreatePopulatedSegmentStream();
603 ASSERT_TRUE(PositionIsZero(segment_stream));
604
605 segment_stream.move(kInsideBufferPosition);
606
607 ASSERT_TRUE(PositionIsInsideBuffer(segment_stream));
608 }
609
610 TEST(SegmentStreamTest, MoveShouldNotTruncatePositionWhenPastEnd) {
611 SegmentStream segment_stream = CreatePopulatedSegmentStream();
612 ASSERT_TRUE(PositionIsZero(segment_stream));
613
614 segment_stream.move(kPastEndOfBufferPosition);
615
616 ASSERT_EQ(kPastEndOfBufferPosition, segment_stream.getPosition());
617 }
618
619 TEST(SegmentStreamTest, MoveShouldClampPositionToZeroWhenGoingNegative) {
620 SegmentStream segment_stream = CreatePopulatedSegmentStream();
621 ReadFromSegmentStream(segment_stream);
622 ASSERT_TRUE(PositionIsInsideBuffer);
623
624 // Move into the negative
625 segment_stream.move(kFarPastBeginningOfBufferOsset);
626
627 ASSERT_TRUE(PositionIsZero(segment_stream));
628 }
629
630 TEST(SegmentStreamTest, MoveShouldNotChangeLength) {
631 SegmentStream segment_stream = CreatePopulatedSegmentStream();
632 ASSERT_TRUE(LengthIsAllocationSize(segment_stream));
633
634 segment_stream.move(kInsideBufferPosition);
635
636 ASSERT_TRUE(LengthIsAllocationSize(segment_stream));
637 }
638
639 TEST(SegmentStreamTest, HasLengthShouldBeSupported) {
640 blink::SegmentStream segment_stream;
641 ASSERT_TRUE(segment_stream.hasLength());
642 }
643
644 } // namespace blink
645
646 namespace {
647
648 testing::AssertionResult IsCleared(const blink::SegmentStream& segment_stream) {
649 if (segment_stream.IsCleared())
650 return testing::AssertionSuccess();
651
652 return testing::AssertionFailure() << "SegmentStream is not clear";
653 }
654
655 testing::AssertionResult IsAtEnd(const blink::SegmentStream& segment_stream) {
656 if (segment_stream.isAtEnd())
657 return testing::AssertionSuccess();
658
659 return testing::AssertionFailure() << "SegmentStream is not at the end";
660 }
661
662 testing::AssertionResult PositionIsZero(
663 const blink::SegmentStream& segment_stream) {
664 if (segment_stream.getPosition() == 0ul)
665 return testing::AssertionSuccess();
666
667 return testing::AssertionFailure() << "SegmentStream position is not 0";
668 }
669
670 testing::AssertionResult PositionIsInsideBuffer(
671 const blink::SegmentStream& segment_stream) {
672 if (segment_stream.getPosition() == kInsideBufferPosition)
673 return testing::AssertionSuccess();
674
675 return testing::AssertionFailure()
676 << "SegmentStream position is not inside the buffer";
677 }
678
679 testing::AssertionResult PositionIsAtEndOfBuffer(
680 const blink::SegmentStream& segment_stream) {
681 if (segment_stream.getPosition() == kBufferAllocationSize)
682 return testing::AssertionSuccess();
683
684 return testing::AssertionFailure()
685 << "SegmentStream position is not at the end of the buffer";
686 }
687
688 testing::AssertionResult LengthIsZero(
689 const blink::SegmentStream& segment_stream) {
690 if (segment_stream.getLength() == 0ul)
691 return testing::AssertionSuccess();
692
693 return testing::AssertionFailure() << "SegmentStream length is not 0";
694 }
695
696 testing::AssertionResult LengthIsAllocationSize(
697 const blink::SegmentStream& segment_stream) {
698 if (segment_stream.getLength() == kBufferAllocationSize)
699 return testing::AssertionSuccess();
700
701 return testing::AssertionFailure()
702 << "SegmentStream length is not the allocation size";
703 }
704
705 blink::SegmentStream CreatePopulatedSegmentStream() {
706 blink::SegmentStream segment_stream;
707 segment_stream.SetReader(CreateSegmentReader());
708 return segment_stream;
709 }
710
711 WTF::RefPtr<blink::SegmentReader> CreateSegmentReader() {
712 std::array<char, kBufferAllocationSize> raw_buffer;
713
714 WTF::RefPtr<blink::SharedBuffer> shared_buffer =
715 blink::SharedBuffer::Create(raw_buffer.data(), kBufferAllocationSize);
716
717 WTF::RefPtr<blink::SegmentReader> segment_reader =
718 blink::SegmentReader::CreateFromSharedBuffer(std::move(shared_buffer));
719
720 return segment_reader;
721 }
722
723 size_t ReadFromSegmentStream(blink::SegmentStream& segment_stream,
724 size_t amount_to_read) {
725 std::array<char, kBufferAllocationSize> read_buffer;
726 return segment_stream.read(read_buffer.data(), amount_to_read);
727 }
728
729 size_t PeekIntoSegmentStream(blink::SegmentStream& segment_stream,
730 size_t amount_to_peek) {
731 std::array<char, kBufferAllocationSize> peek_buffer;
732 return segment_stream.peek(peek_buffer.data(), amount_to_peek);
733 }
734
735 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698