Unit test for internal failures.

pull/3375/head
Malcolm Tyrrell 2020-07-23 15:58:18 +01:00
parent b1ed751b83
commit 19cdfd12df
1 changed files with 102 additions and 0 deletions

View File

@ -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);
}
}