OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2016 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 "pdf/chunk_stream.h" | |
6 | |
7 #include <array> | |
8 #include <memory> | |
9 | |
10 #include "testing/gtest/include/gtest/gtest.h" | |
11 | |
12 namespace chrome_pdf { | |
13 namespace { | |
14 typedef ChunkStream<10> TestChunkStream; | |
15 std::unique_ptr<TestChunkStream::ChunkData> CreateChunkData() { | |
16 return std::unique_ptr<TestChunkStream::ChunkData>( | |
Lei Zhang
2016/10/21 09:33:09
nit: base::MakeUnique ?
snake
2016/10/21 15:13:14
Done.
| |
17 new TestChunkStream::ChunkData()); | |
18 } | |
19 } | |
20 | |
21 TEST(ChunkStreamTest, InRow) { | |
22 TestChunkStream stream; | |
23 EXPECT_FALSE(stream.IsComplete()); | |
24 EXPECT_FALSE(stream.IsRangeAvailable(gfx::Range(0, 10))); | |
25 stream.SetChunkData(0, CreateChunkData()); | |
26 EXPECT_TRUE(stream.IsRangeAvailable(gfx::Range(0, 10))); | |
27 EXPECT_FALSE(stream.IsRangeAvailable(gfx::Range(0, 20))); | |
28 stream.SetChunkData(1, CreateChunkData()); | |
29 EXPECT_TRUE(stream.IsRangeAvailable(gfx::Range(0, 20))); | |
30 EXPECT_FALSE(stream.IsRangeAvailable(gfx::Range(0, 30))); | |
31 stream.SetChunkData(2, CreateChunkData()); | |
32 EXPECT_TRUE(stream.IsRangeAvailable(gfx::Range(0, 30))); | |
33 stream.set_eof_pos(25); | |
34 EXPECT_FALSE(stream.IsRangeAvailable(gfx::Range(0, 30))); | |
35 EXPECT_TRUE(stream.IsRangeAvailable(gfx::Range(0, 25))); | |
36 EXPECT_TRUE(stream.IsComplete()); | |
37 } | |
38 | |
39 TEST(ChunkStreamTest, InBackRow) { | |
40 TestChunkStream stream; | |
41 stream.set_eof_pos(25); | |
42 EXPECT_FALSE(stream.IsComplete()); | |
43 EXPECT_FALSE(stream.IsRangeAvailable(gfx::Range(20, 25))); | |
44 stream.SetChunkData(2, CreateChunkData()); | |
45 EXPECT_TRUE(stream.IsRangeAvailable(gfx::Range(20, 25))); | |
46 EXPECT_FALSE(stream.IsRangeAvailable(gfx::Range(10, 20))); | |
47 stream.SetChunkData(1, CreateChunkData()); | |
48 EXPECT_TRUE(stream.IsRangeAvailable(gfx::Range(10, 20))); | |
49 EXPECT_FALSE(stream.IsRangeAvailable(gfx::Range(0, 10))); | |
50 stream.SetChunkData(0, CreateChunkData()); | |
51 EXPECT_TRUE(stream.IsRangeAvailable(gfx::Range(0, 10))); | |
52 EXPECT_TRUE(stream.IsComplete()); | |
53 } | |
54 | |
55 TEST(ChunkStreamTest, FillGap) { | |
56 TestChunkStream stream; | |
57 stream.set_eof_pos(25); | |
58 EXPECT_FALSE(stream.IsComplete()); | |
59 stream.SetChunkData(0, CreateChunkData()); | |
60 stream.SetChunkData(2, CreateChunkData()); | |
61 EXPECT_TRUE(stream.IsRangeAvailable(gfx::Range(0, 10))); | |
62 EXPECT_TRUE(stream.IsRangeAvailable(gfx::Range(20, 25))); | |
63 EXPECT_FALSE(stream.IsRangeAvailable(gfx::Range(0, 25))); | |
64 stream.SetChunkData(1, CreateChunkData()); | |
65 EXPECT_TRUE(stream.IsRangeAvailable(gfx::Range(0, 25))); | |
66 EXPECT_TRUE(stream.IsComplete()); | |
67 } | |
68 | |
69 TEST(ChunkStreamTest, Read) { | |
70 TestChunkStream stream; | |
71 stream.set_eof_pos(25); | |
72 const unsigned char start_value = 33; | |
73 unsigned char value = start_value; | |
74 auto chunk_0 = CreateChunkData(); | |
75 for (auto& it : *chunk_0) { | |
76 it = ++value; | |
77 } | |
78 auto chunk_1 = CreateChunkData(); | |
79 for (auto& it : *chunk_1) { | |
80 it = ++value; | |
81 } | |
82 auto chunk_2 = CreateChunkData(); | |
83 for (auto& it : *chunk_2) { | |
84 it = ++value; | |
85 } | |
86 stream.SetChunkData(0, std::move(chunk_0)); | |
87 stream.SetChunkData(2, std::move(chunk_2)); | |
88 stream.SetChunkData(1, std::move(chunk_1)); | |
89 | |
90 std::array<unsigned char, 25> result_data; | |
91 EXPECT_TRUE(stream.ReadData(gfx::Range(0, 25), result_data.data())); | |
92 | |
93 value = start_value; | |
94 for (const auto& it : result_data) { | |
95 EXPECT_EQ(++value, it); | |
96 } | |
97 } | |
98 } // namespace chrome_pdf | |
OLD | NEW |