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)73TEST(FileReaderFactoryTest, RegistrationFail) { 74 EXPECT_FALSE(FileReaderFactory::RegisterReader(nullptr)); 75 } 76 TEST(FileReaderFactoryTest,OpenReader)77TEST(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