1 #include "draco/io/file_reader_factory.h"
2 
3 #include <memory>
4 #include <string>
5 #include <vector>
6 
7 #include "draco/core/draco_test_base.h"
8 #include "draco/io/file_reader_interface.h"
9 
10 namespace draco {
11 namespace {
12 
13 class AlwaysFailFileReader : public FileReaderInterface {
14  public:
Open(const std::string &)15   static std::unique_ptr<FileReaderInterface> Open(
16       const std::string & /*file_name*/) {
17     return nullptr;
18   }
19 
20   AlwaysFailFileReader() = delete;
21   AlwaysFailFileReader(const AlwaysFailFileReader &) = delete;
22   AlwaysFailFileReader &operator=(const AlwaysFailFileReader &) = delete;
23   // Note this isn't overridden as the class can never be instantiated. This
24   // avoids an unused function warning.
25   // ~AlwaysFailFileReader() override = default;
26 
ReadFileToBuffer(std::vector<char> *)27   bool ReadFileToBuffer(std::vector<char> * /*buffer*/) override {
28     return false;
29   }
30 
ReadFileToBuffer(std::vector<uint8_t> *)31   bool ReadFileToBuffer(std::vector<uint8_t> * /*buffer*/) override {
32     return false;
33   }
34 
GetFileSize()35   size_t GetFileSize() override { return 0; }
36 
37  private:
38   static bool is_registered_;
39 };
40 
41 class AlwaysOkFileReader : public FileReaderInterface {
42  public:
Open(const std::string &)43   static std::unique_ptr<FileReaderInterface> Open(
44       const std::string & /*file_name*/) {
45     return std::unique_ptr<AlwaysOkFileReader>(new AlwaysOkFileReader());
46   }
47 
48   AlwaysOkFileReader(const AlwaysOkFileReader &) = delete;
49   AlwaysOkFileReader &operator=(const AlwaysOkFileReader &) = delete;
50   ~AlwaysOkFileReader() override = default;
51 
ReadFileToBuffer(std::vector<char> *)52   bool ReadFileToBuffer(std::vector<char> * /*buffer*/) override {
53     return true;
54   }
55 
ReadFileToBuffer(std::vector<uint8_t> *)56   bool ReadFileToBuffer(std::vector<uint8_t> * /*buffer*/) override {
57     return true;
58   }
59 
GetFileSize()60   size_t GetFileSize() override { return 0; }
61 
62  private:
63   AlwaysOkFileReader() = default;
64   static bool is_registered_;
65 };
66 
67 bool AlwaysFailFileReader::is_registered_ =
68     FileReaderFactory::RegisterReader(AlwaysFailFileReader::Open);
69 
70 bool AlwaysOkFileReader::is_registered_ =
71     FileReaderFactory::RegisterReader(AlwaysOkFileReader::Open);
72 
TEST(FileReaderFactoryTest,RegistrationFail)73 TEST(FileReaderFactoryTest, RegistrationFail) {
74   EXPECT_FALSE(FileReaderFactory::RegisterReader(nullptr));
75 }
76 
TEST(FileReaderFactoryTest,OpenReader)77 TEST(FileReaderFactoryTest, OpenReader) {
78   auto reader = FileReaderFactory::OpenReader("fake file");
79   EXPECT_NE(reader, nullptr);
80   std::vector<char> *buffer = nullptr;
81   EXPECT_TRUE(reader->ReadFileToBuffer(buffer));
82 }
83 
84 }  // namespace
85 }  // namespace draco
86