|
@@ -279,3 +279,105 @@ TEST_F(ImporterTest, SearchFileHeaderForTokenTest) {
|
|
|
//DefaultIOSystem ioSystem;
|
|
//DefaultIOSystem ioSystem;
|
|
|
// BaseImporter::SearchFileHeaderForToken( &ioSystem, assetPath, Token, 2 )
|
|
// BaseImporter::SearchFileHeaderForToken( &ioSystem, assetPath, Token, 2 )
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+namespace
|
|
|
|
|
+{
|
|
|
|
|
+ // Description for an importer which fails in specific ways.
|
|
|
|
|
+ aiImporterDesc s_failingImporterDescription = {
|
|
|
|
|
+ "Failing importer",
|
|
|
|
|
+ "assimp team",
|
|
|
|
|
+ "",
|
|
|
|
|
+ "",
|
|
|
|
|
+ 0,
|
|
|
|
|
+ 1,
|
|
|
|
|
+ 0,
|
|
|
|
|
+ 1,
|
|
|
|
|
+ 0,
|
|
|
|
|
+ "fail"
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ // This importer fails in specific ways.
|
|
|
|
|
+ class FailingImporter : public Assimp::BaseImporter {
|
|
|
|
|
+ public:
|
|
|
|
|
+ virtual ~FailingImporter() = default;
|
|
|
|
|
+ virtual bool CanRead( const std::string&, Assimp::IOSystem*, bool ) const override
|
|
|
|
|
+ {
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ protected:
|
|
|
|
|
+ virtual const aiImporterDesc* GetInfo() const { return &s_failingImporterDescription; }
|
|
|
|
|
+
|
|
|
|
|
+ virtual void InternReadFile( const std::string& pFile, aiScene*, Assimp::IOSystem* ) override
|
|
|
|
|
+ {
|
|
|
|
|
+ if (pFile == "deadlyImportError.fail")
|
|
|
|
|
+ {
|
|
|
|
|
+ throw DeadlyImportError("Deadly import error test");
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (pFile == "stdException.fail")
|
|
|
|
|
+ {
|
|
|
|
|
+ throw std::exception("std::exception test");
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (pFile == "unexpectedException.fail")
|
|
|
|
|
+ {
|
|
|
|
|
+ throw 5;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ };
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+TEST_F(ImporterTest, deadlyImportError)
|
|
|
|
|
+{
|
|
|
|
|
+ pImp->RegisterLoader(new FailingImporter);
|
|
|
|
|
+ pImp->SetIOHandler(new TestIOSystem);
|
|
|
|
|
+ const aiScene* scene = pImp->ReadFile("deadlyImportError.fail", 0);
|
|
|
|
|
+ EXPECT_EQ(scene, nullptr);
|
|
|
|
|
+ EXPECT_STREQ(pImp->GetErrorString(), "Deadly import error test");
|
|
|
|
|
+ EXPECT_EQ(pImp->GetInternalException(), std::exception_ptr());
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+TEST_F(ImporterTest, stdException)
|
|
|
|
|
+{
|
|
|
|
|
+ pImp->RegisterLoader(new FailingImporter);
|
|
|
|
|
+ pImp->SetIOHandler(new TestIOSystem);
|
|
|
|
|
+ const aiScene* scene = pImp->ReadFile("stdException.fail", 0);
|
|
|
|
|
+ EXPECT_EQ(scene, nullptr);
|
|
|
|
|
+ EXPECT_STREQ(pImp->GetErrorString(), "Internal error");
|
|
|
|
|
+ EXPECT_NE(pImp->GetInternalException(), std::exception_ptr());
|
|
|
|
|
+ try
|
|
|
|
|
+ {
|
|
|
|
|
+ std::rethrow_exception(pImp->GetInternalException());
|
|
|
|
|
+ }
|
|
|
|
|
+ catch(const std::exception& e)
|
|
|
|
|
+ {
|
|
|
|
|
+ EXPECT_STREQ(e.what(), "std::exception test");
|
|
|
|
|
+ }
|
|
|
|
|
+ catch(...)
|
|
|
|
|
+ {
|
|
|
|
|
+ EXPECT_TRUE(false);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+TEST_F(ImporterTest, unexpectedException)
|
|
|
|
|
+{
|
|
|
|
|
+ pImp->RegisterLoader(new FailingImporter);
|
|
|
|
|
+ pImp->SetIOHandler(new TestIOSystem);
|
|
|
|
|
+ const aiScene* scene = pImp->ReadFile("unexpectedException.fail", 0);
|
|
|
|
|
+
|
|
|
|
|
+ EXPECT_EQ(scene, nullptr);
|
|
|
|
|
+ EXPECT_STREQ(pImp->GetErrorString(), "Internal error");
|
|
|
|
|
+ ASSERT_NE(pImp->GetInternalException(), std::exception_ptr());
|
|
|
|
|
+ try
|
|
|
|
|
+ {
|
|
|
|
|
+ std::rethrow_exception(pImp->GetInternalException());
|
|
|
|
|
+ }
|
|
|
|
|
+ catch(int x)
|
|
|
|
|
+ {
|
|
|
|
|
+ EXPECT_EQ(x, 5);
|
|
|
|
|
+ }
|
|
|
|
|
+ catch(...)
|
|
|
|
|
+ {
|
|
|
|
|
+ EXPECT_TRUE(false);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|