Upload upstream chromium 94.0.4606.31
[platform/framework/web/chromium-efl.git] / media / filters / memory_data_source_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 "media/filters/memory_data_source.h"
6
7 #include <memory>
8
9 #include "base/bind.h"
10 #include "base/macros.h"
11 #include "base/rand_util.h"
12 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace media {
16
17 class MemoryDataSourceTest : public ::testing::Test {
18  public:
19   MemoryDataSourceTest() = default;
20
21  protected:
22   void Initialize(size_t size) {
23     data_.assign(size, 0);
24     base::RandBytes(data_.data(), size);
25     memory_data_source_ =
26         std::make_unique<MemoryDataSource>(data_.data(), size);
27     EXPECT_EQ(size, GetSize());
28   }
29
30   // Reads |size| bytes starting from |position|, expects |expected_read_size|
31   // bytes to be read and checks the read data. Expects error when
32   // |expected_read_size| is DataSource::kReadError.
33   void ReadAndExpect(int64_t position, int size, int expected_read_size) {
34     std::vector<uint8_t> data(size < 0 ? 0 : size, 0);
35
36     EXPECT_CALL(*this, ReadCB(expected_read_size));
37     memory_data_source_->Read(
38         position, size, data.data(),
39         base::BindOnce(&MemoryDataSourceTest::ReadCB, base::Unretained(this)));
40
41     if (expected_read_size != DataSource::kReadError) {
42       EXPECT_EQ(
43           0, memcmp(data_.data() + position, data.data(), expected_read_size));
44     }
45   }
46
47   size_t GetSize() {
48     int64_t size = 0;
49     EXPECT_TRUE(memory_data_source_->GetSize(&size));
50     EXPECT_GE(size, 0);
51     return size;
52   }
53
54   void Stop() { memory_data_source_->Stop(); }
55
56   MOCK_METHOD1(ReadCB, void(int size));
57
58  private:
59   std::vector<uint8_t> data_;
60   std::unique_ptr<MemoryDataSource> memory_data_source_;
61
62   DISALLOW_COPY_AND_ASSIGN(MemoryDataSourceTest);
63 };
64
65 TEST_F(MemoryDataSourceTest, EmptySource) {
66   Initialize(0);
67   ReadAndExpect(0, 0, 0);
68 }
69
70 TEST_F(MemoryDataSourceTest, ReadData) {
71   Initialize(128);
72   ReadAndExpect(0, 0, 0);
73   ReadAndExpect(0, 128, 128);
74   ReadAndExpect(12, 64, 64);
75   ReadAndExpect(128, 0, 0);
76 }
77
78 TEST_F(MemoryDataSourceTest, ReadData_InvalidPosition) {
79   Initialize(128);
80   ReadAndExpect(-7, 64, DataSource::kReadError);
81   ReadAndExpect(129, 64, DataSource::kReadError);
82 }
83
84 TEST_F(MemoryDataSourceTest, ReadData_InvalidSize) {
85   Initialize(128);
86   ReadAndExpect(0, -12, DataSource::kReadError);
87 }
88
89 TEST_F(MemoryDataSourceTest, ReadData_PartialRead) {
90   Initialize(128);
91   ReadAndExpect(0, 129, 128);
92   ReadAndExpect(96, 100, 32);
93 }
94
95 // All ReadData() will fail after Stop().
96 TEST_F(MemoryDataSourceTest, Stop) {
97   Initialize(128);
98   ReadAndExpect(12, 64, 64);
99   Stop();
100   ReadAndExpect(12, 64, DataSource::kReadError);
101 }
102
103 // ReadData() doesn't affect GetSize().
104 TEST_F(MemoryDataSourceTest, GetSize) {
105   Initialize(128);
106   ReadAndExpect(12, 64, 64);
107   EXPECT_EQ(128u, GetSize());
108   ReadAndExpect(-7, 64, DataSource::kReadError);
109   EXPECT_EQ(128u, GetSize());
110 }
111
112 }  // namespace media