Chromium Code Reviews| 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 |