xref: /aosp_15_r20/external/libgav1/examples/file_reader_test_common.h (revision 095378508e87ed692bf8dfeb34008b65b3735891)
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