1 // Copyright 2016 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "media/filters/memory_data_source.h"
10 #include "base/callback.h"
11 #include "base/rand_util.h"
12 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h"
17 class MemoryDataSourceTest : public ::testing::Test {
19 MemoryDataSourceTest() = default;
21 MemoryDataSourceTest(const MemoryDataSourceTest&) = delete;
22 MemoryDataSourceTest& operator=(const MemoryDataSourceTest&) = delete;
25 void Initialize(size_t size) {
26 data_.assign(size, 0);
27 base::RandBytes(data_.data(), size);
29 std::make_unique<MemoryDataSource>(data_.data(), size);
30 EXPECT_EQ(size, GetSize());
33 // Reads |size| bytes starting from |position|, expects |expected_read_size|
34 // bytes to be read and checks the read data. Expects error when
35 // |expected_read_size| is DataSource::kReadError.
36 void ReadAndExpect(int64_t position, int size, int expected_read_size) {
37 std::vector<uint8_t> data(size < 0 ? 0 : size, 0);
39 EXPECT_CALL(*this, ReadCB(expected_read_size));
40 memory_data_source_->Read(
41 position, size, data.data(),
42 base::BindOnce(&MemoryDataSourceTest::ReadCB, base::Unretained(this)));
44 if (expected_read_size != DataSource::kReadError) {
46 0, memcmp(data_.data() + position, data.data(), expected_read_size));
52 EXPECT_TRUE(memory_data_source_->GetSize(&size));
57 void Stop() { memory_data_source_->Stop(); }
59 MOCK_METHOD1(ReadCB, void(int size));
62 std::vector<uint8_t> data_;
63 std::unique_ptr<MemoryDataSource> memory_data_source_;
66 TEST_F(MemoryDataSourceTest, EmptySource) {
68 ReadAndExpect(0, 0, 0);
71 TEST_F(MemoryDataSourceTest, ReadData) {
73 ReadAndExpect(0, 0, 0);
74 ReadAndExpect(0, 128, 128);
75 ReadAndExpect(12, 64, 64);
76 ReadAndExpect(128, 0, 0);
79 TEST_F(MemoryDataSourceTest, ReadData_InvalidPosition) {
81 ReadAndExpect(-7, 64, DataSource::kReadError);
82 ReadAndExpect(129, 64, DataSource::kReadError);
85 TEST_F(MemoryDataSourceTest, ReadData_InvalidSize) {
87 ReadAndExpect(0, -12, DataSource::kReadError);
90 TEST_F(MemoryDataSourceTest, ReadData_PartialRead) {
92 ReadAndExpect(0, 129, 128);
93 ReadAndExpect(96, 100, 32);
96 // All ReadData() will fail after Stop().
97 TEST_F(MemoryDataSourceTest, Stop) {
99 ReadAndExpect(12, 64, 64);
101 ReadAndExpect(12, 64, DataSource::kReadError);
104 // ReadData() doesn't affect GetSize().
105 TEST_F(MemoryDataSourceTest, GetSize) {
107 ReadAndExpect(12, 64, 64);
108 EXPECT_EQ(128u, GetSize());
109 ReadAndExpect(-7, 64, DataSource::kReadError);
110 EXPECT_EQ(128u, GetSize());