blob: 187a6acf35ffdf1329b4b3bda3ec9d22d3341d2f [file] [log] [blame]
/*
* 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 <cstdint>
#include <memory>
#include <ostream>
#include <string>
#include <vector>
#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<FileReaderInterface> reader_;
std::vector<uint8_t> tu_data_;
};
class FileReaderFailTest
: public FileReaderTestBase,
public testing::TestWithParam<FileReaderTestParameters> {
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<FileReaderTestParameters> {
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<FileReaderTestParameters> {
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<FileReaderTestWithTimeStampsParameters> {
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_