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