1 /* 2 * Copyright 2021 The libgav1 Authors 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef LIBGAV1_EXAMPLES_FILE_READER_TEST_COMMON_H_ 18 #define LIBGAV1_EXAMPLES_FILE_READER_TEST_COMMON_H_ 19 20 #include <cstdint> 21 #include <memory> 22 #include <ostream> 23 #include <string> 24 #include <vector> 25 26 #include "examples/file_reader.h" 27 #include "examples/file_reader_factory.h" 28 #include "examples/file_reader_interface.h" 29 #include "gtest/gtest.h" 30 #include "tests/utils.h" 31 32 namespace libgav1 { 33 34 struct FileReaderTestParameters { 35 FileReaderTestParameters() = default; FileReaderTestParametersFileReaderTestParameters36 FileReaderTestParameters(FileReaderFactory::OpenFunction open_function, 37 const char* file_name) 38 : open_function(open_function), file_name(file_name) {} 39 FileReaderTestParameters(const FileReaderTestParameters&) = default; 40 FileReaderTestParameters& operator=(const FileReaderTestParameters&) = delete; 41 FileReaderTestParameters(FileReaderTestParameters&&) = default; 42 FileReaderTestParameters& operator=(FileReaderTestParameters&&) = default; 43 ~FileReaderTestParameters() = default; 44 45 FileReaderFactory::OpenFunction open_function = nullptr; 46 const char* file_name = nullptr; 47 }; 48 49 class FileReaderTestBase { 50 public: 51 FileReaderTestBase() = default; 52 FileReaderTestBase(const FileReaderTestBase&) = delete; 53 FileReaderTestBase& operator=(const FileReaderTestBase&) = delete; 54 FileReaderTestBase(FileReaderTestBase&&) = default; 55 FileReaderTestBase& operator=(FileReaderTestBase&&) = default; 56 ~FileReaderTestBase() = default; 57 58 protected: OpenReader(const char * file_name,FileReaderFactory::OpenFunction open_function)59 void OpenReader(const char* file_name, 60 FileReaderFactory::OpenFunction open_function) { 61 file_name_ = test_utils::GetTestInputFilePath(file_name); 62 reader_ = open_function(file_name_, /*error_tolerant=*/false); 63 ASSERT_NE(reader_, nullptr); 64 } 65 66 std::string file_name_; 67 std::unique_ptr<FileReaderInterface> reader_; 68 std::vector<uint8_t> tu_data_; 69 }; 70 71 class FileReaderFailTest 72 : public FileReaderTestBase, 73 public testing::TestWithParam<FileReaderTestParameters> { 74 public: 75 FileReaderFailTest() = default; 76 FileReaderFailTest(const FileReaderTestBase&) = delete; 77 FileReaderFailTest& operator=(const FileReaderTestBase&) = delete; 78 ~FileReaderFailTest() override = default; 79 80 protected: SetUp()81 void SetUp() override { 82 OpenReader(GetParam().file_name, GetParam().open_function); 83 } 84 }; 85 86 class FileReaderTestNoTimeStamps 87 : public FileReaderTestBase, 88 public testing::TestWithParam<FileReaderTestParameters> { 89 public: 90 FileReaderTestNoTimeStamps() = default; 91 FileReaderTestNoTimeStamps(const FileReaderTestNoTimeStamps&) = delete; 92 FileReaderTestNoTimeStamps& operator=(const FileReaderTestNoTimeStamps&) = 93 delete; 94 ~FileReaderTestNoTimeStamps() override = default; 95 96 protected: SetUp()97 void SetUp() override { 98 OpenReader(GetParam().file_name, GetParam().open_function); 99 } 100 }; 101 102 class FileReaderErrorTolerant 103 : public FileReaderTestBase, 104 public testing::TestWithParam<FileReaderTestParameters> { 105 public: 106 FileReaderErrorTolerant() = default; 107 FileReaderErrorTolerant(const FileReaderErrorTolerant&) = delete; 108 FileReaderErrorTolerant& operator=(const FileReaderErrorTolerant&) = delete; 109 ~FileReaderErrorTolerant() override = default; 110 111 protected: SetUp()112 void SetUp() override { 113 file_name_ = test_utils::GetTestInputFilePath(GetParam().file_name); 114 reader_ = GetParam().open_function(file_name_, /*error_tolerant=*/true); 115 ASSERT_NE(reader_, nullptr); 116 } 117 }; 118 119 struct FileReaderTestWithTimeStampsParameters { 120 FileReaderTestWithTimeStampsParameters() = default; FileReaderTestWithTimeStampsParametersFileReaderTestWithTimeStampsParameters121 FileReaderTestWithTimeStampsParameters( 122 FileReaderFactory::OpenFunction open_function, const char* file_name, 123 int64_t expected_last_timestamp) 124 : open_function(open_function), 125 file_name(file_name), 126 expected_last_timestamp(expected_last_timestamp) {} 127 FileReaderTestWithTimeStampsParameters( 128 const FileReaderTestWithTimeStampsParameters&) = default; 129 FileReaderTestWithTimeStampsParameters& operator=( 130 const FileReaderTestWithTimeStampsParameters&) = delete; 131 FileReaderTestWithTimeStampsParameters( 132 FileReaderTestWithTimeStampsParameters&&) = default; 133 FileReaderTestWithTimeStampsParameters& operator=( 134 FileReaderTestWithTimeStampsParameters&&) = default; 135 ~FileReaderTestWithTimeStampsParameters() = default; 136 137 FileReaderFactory::OpenFunction open_function = nullptr; 138 const char* file_name = nullptr; 139 int64_t expected_last_timestamp = 0; 140 }; 141 142 std::ostream& operator<<(std::ostream& stream, 143 const FileReaderTestParameters& parameters); 144 145 std::ostream& operator<<( 146 std::ostream& stream, 147 const FileReaderTestWithTimeStampsParameters& parameters); 148 149 class FileReaderTestWithTimeStamps 150 : public FileReaderTestBase, 151 public testing::TestWithParam<FileReaderTestWithTimeStampsParameters> { 152 public: 153 FileReaderTestWithTimeStamps() = default; 154 FileReaderTestWithTimeStamps(const FileReaderTestWithTimeStamps&) = delete; 155 FileReaderTestWithTimeStamps& operator=(const FileReaderTestWithTimeStamps&) = 156 delete; 157 ~FileReaderTestWithTimeStamps() override = default; 158 159 protected: SetUp()160 void SetUp() override { 161 FileReaderTestWithTimeStampsParameters parameters = GetParam(); 162 OpenReader(parameters.file_name, parameters.open_function); 163 expected_last_timestamp_ = parameters.expected_last_timestamp; 164 } 165 166 int64_t last_timestamp_ = 0; 167 int64_t expected_last_timestamp_ = 0; 168 }; 169 170 } // namespace libgav1 171 #endif // LIBGAV1_EXAMPLES_FILE_READER_TEST_COMMON_H_ 172