| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <string> |
| |
| #include "base/base_paths.h" |
| #include "base/basictypes.h" |
| #include "base/bind.h" |
| #include "base/files/file_path.h" |
| #include "base/path_service.h" |
| #include "base/utf_string_conversions.h" |
| #include "cobalt/media/base/test_helpers.h" |
| #include "cobalt/media/filters/file_data_source.h" |
| #include "starboard/types.h" |
| |
| using ::testing::NiceMock; |
| using ::testing::StrictMock; |
| |
| namespace cobalt { |
| namespace media { |
| |
| class ReadCBHandler { |
| public: |
| ReadCBHandler() {} |
| |
| MOCK_METHOD1(ReadCB, void(int size)); |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(ReadCBHandler); |
| }; |
| |
| // Returns a path to the test file which contains the string "0123456789" |
| // without the quotes or any trailing space or null termination. The file lives |
| // under the media/test/data directory. Under Windows, strings for the |
| // FilePath class are unicode, and the pipeline wants char strings. Convert |
| // the string to UTF8 under Windows. For Mac and Linux, file paths are already |
| // chars so just return the string from the base::FilePath. |
| base::FilePath TestFileURL() { |
| base::FilePath data_dir; |
| EXPECT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &data_dir)); |
| data_dir = data_dir.Append(FILE_PATH_LITERAL("media")) |
| .Append(FILE_PATH_LITERAL("test")) |
| .Append(FILE_PATH_LITERAL("data")) |
| .Append(FILE_PATH_LITERAL("ten_byte_file")); |
| return data_dir; |
| } |
| |
| // Use the mock filter host to directly call the Read and GetPosition methods. |
| TEST(FileDataSourceTest, ReadData) { |
| int64_t size; |
| uint8_t ten_bytes[10]; |
| |
| // Create our mock filter host and initialize the data source. |
| FileDataSource data_source; |
| |
| EXPECT_TRUE(data_source.Initialize(TestFileURL())); |
| EXPECT_TRUE(data_source.GetSize(&size)); |
| EXPECT_EQ(10, size); |
| |
| ReadCBHandler handler; |
| EXPECT_CALL(handler, ReadCB(10)); |
| data_source.Read(0, 10, ten_bytes, base::Bind(&ReadCBHandler::ReadCB, |
| base::Unretained(&handler))); |
| EXPECT_EQ('0', ten_bytes[0]); |
| EXPECT_EQ('5', ten_bytes[5]); |
| EXPECT_EQ('9', ten_bytes[9]); |
| |
| EXPECT_CALL(handler, ReadCB(1)); |
| data_source.Read(9, 1, ten_bytes, base::Bind(&ReadCBHandler::ReadCB, |
| base::Unretained(&handler))); |
| EXPECT_EQ('9', ten_bytes[0]); |
| |
| EXPECT_CALL(handler, ReadCB(0)); |
| data_source.Read(10, 10, ten_bytes, base::Bind(&ReadCBHandler::ReadCB, |
| base::Unretained(&handler))); |
| |
| EXPECT_CALL(handler, ReadCB(5)); |
| data_source.Read(5, 10, ten_bytes, base::Bind(&ReadCBHandler::ReadCB, |
| base::Unretained(&handler))); |
| EXPECT_EQ('5', ten_bytes[0]); |
| |
| data_source.Stop(); |
| } |
| |
| } // namespace media |
| } // namespace cobalt |