/* * Copyright 2021 The libgav1 Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef LIBGAV1_EXAMPLES_FILE_READER_TEST_COMMON_H_ #define LIBGAV1_EXAMPLES_FILE_READER_TEST_COMMON_H_ #include #include #include #include #include #include "examples/file_reader.h" #include "examples/file_reader_factory.h" #include "examples/file_reader_interface.h" #include "gtest/gtest.h" #include "tests/utils.h" namespace libgav1 { struct FileReaderTestParameters { FileReaderTestParameters() = default; FileReaderTestParameters(FileReaderFactory::OpenFunction open_function, const char* file_name) : open_function(open_function), file_name(file_name) {} FileReaderTestParameters(const FileReaderTestParameters&) = default; FileReaderTestParameters& operator=(const FileReaderTestParameters&) = delete; FileReaderTestParameters(FileReaderTestParameters&&) = default; FileReaderTestParameters& operator=(FileReaderTestParameters&&) = default; ~FileReaderTestParameters() = default; FileReaderFactory::OpenFunction open_function = nullptr; const char* file_name = nullptr; }; class FileReaderTestBase { public: FileReaderTestBase() = default; FileReaderTestBase(const FileReaderTestBase&) = delete; FileReaderTestBase& operator=(const FileReaderTestBase&) = delete; FileReaderTestBase(FileReaderTestBase&&) = default; FileReaderTestBase& operator=(FileReaderTestBase&&) = default; ~FileReaderTestBase() = default; protected: void OpenReader(const char* file_name, FileReaderFactory::OpenFunction open_function) { file_name_ = test_utils::GetTestInputFilePath(file_name); reader_ = open_function(file_name_, /*error_tolerant=*/false); ASSERT_NE(reader_, nullptr); } std::string file_name_; std::unique_ptr reader_; std::vector tu_data_; }; class FileReaderFailTest : public FileReaderTestBase, public testing::TestWithParam { public: FileReaderFailTest() = default; FileReaderFailTest(const FileReaderTestBase&) = delete; FileReaderFailTest& operator=(const FileReaderTestBase&) = delete; ~FileReaderFailTest() override = default; protected: void SetUp() override { OpenReader(GetParam().file_name, GetParam().open_function); } }; class FileReaderTestNoTimeStamps : public FileReaderTestBase, public testing::TestWithParam { public: FileReaderTestNoTimeStamps() = default; FileReaderTestNoTimeStamps(const FileReaderTestNoTimeStamps&) = delete; FileReaderTestNoTimeStamps& operator=(const FileReaderTestNoTimeStamps&) = delete; ~FileReaderTestNoTimeStamps() override = default; protected: void SetUp() override { OpenReader(GetParam().file_name, GetParam().open_function); } }; class FileReaderErrorTolerant : public FileReaderTestBase, public testing::TestWithParam { public: FileReaderErrorTolerant() = default; FileReaderErrorTolerant(const FileReaderErrorTolerant&) = delete; FileReaderErrorTolerant& operator=(const FileReaderErrorTolerant&) = delete; ~FileReaderErrorTolerant() override = default; protected: void SetUp() override { file_name_ = test_utils::GetTestInputFilePath(GetParam().file_name); reader_ = GetParam().open_function(file_name_, /*error_tolerant=*/true); ASSERT_NE(reader_, nullptr); } }; struct FileReaderTestWithTimeStampsParameters { FileReaderTestWithTimeStampsParameters() = default; FileReaderTestWithTimeStampsParameters( FileReaderFactory::OpenFunction open_function, const char* file_name, int64_t expected_last_timestamp) : open_function(open_function), file_name(file_name), expected_last_timestamp(expected_last_timestamp) {} FileReaderTestWithTimeStampsParameters( const FileReaderTestWithTimeStampsParameters&) = default; FileReaderTestWithTimeStampsParameters& operator=( const FileReaderTestWithTimeStampsParameters&) = delete; FileReaderTestWithTimeStampsParameters( FileReaderTestWithTimeStampsParameters&&) = default; FileReaderTestWithTimeStampsParameters& operator=( FileReaderTestWithTimeStampsParameters&&) = default; ~FileReaderTestWithTimeStampsParameters() = default; FileReaderFactory::OpenFunction open_function = nullptr; const char* file_name = nullptr; int64_t expected_last_timestamp = 0; }; std::ostream& operator<<(std::ostream& stream, const FileReaderTestParameters& parameters); std::ostream& operator<<( std::ostream& stream, const FileReaderTestWithTimeStampsParameters& parameters); class FileReaderTestWithTimeStamps : public FileReaderTestBase, public testing::TestWithParam { public: FileReaderTestWithTimeStamps() = default; FileReaderTestWithTimeStamps(const FileReaderTestWithTimeStamps&) = delete; FileReaderTestWithTimeStamps& operator=(const FileReaderTestWithTimeStamps&) = delete; ~FileReaderTestWithTimeStamps() override = default; protected: void SetUp() override { FileReaderTestWithTimeStampsParameters parameters = GetParam(); OpenReader(parameters.file_name, parameters.open_function); expected_last_timestamp_ = parameters.expected_last_timestamp; } int64_t last_timestamp_ = 0; int64_t expected_last_timestamp_ = 0; }; } // namespace libgav1 #endif // LIBGAV1_EXAMPLES_FILE_READER_TEST_COMMON_H_