diff --git a/data/tests/ProjectTest.FCStd b/data/tests/ProjectTest.FCStd new file mode 100644 index 0000000000..b526d955e7 Binary files /dev/null and b/data/tests/ProjectTest.FCStd differ diff --git a/tests/src/App/CMakeLists.txt b/tests/src/App/CMakeLists.txt index 05b489ba92..0bc121285f 100644 --- a/tests/src/App/CMakeLists.txt +++ b/tests/src/App/CMakeLists.txt @@ -1,3 +1,5 @@ +target_compile_definitions(Tests_run PRIVATE DATADIR="${CMAKE_SOURCE_DIR}/data") + target_sources( Tests_run PRIVATE @@ -13,6 +15,7 @@ target_sources( ${CMAKE_CURRENT_SOURCE_DIR}/MappedElement.cpp ${CMAKE_CURRENT_SOURCE_DIR}/MappedName.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Metadata.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/ProjectFile.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Property.cpp ${CMAKE_CURRENT_SOURCE_DIR}/PropertyExpressionEngine.cpp ${CMAKE_CURRENT_SOURCE_DIR}/StringHasher.cpp diff --git a/tests/src/App/ProjectFile.cpp b/tests/src/App/ProjectFile.cpp new file mode 100644 index 0000000000..aa5865c84e --- /dev/null +++ b/tests/src/App/ProjectFile.cpp @@ -0,0 +1,107 @@ +#include "gtest/gtest.h" + +#include "InitApplication.h" +#include +#include +#include + +// NOLINTBEGIN +class ProjectFileTest: public ::testing::Test +{ +protected: + static void SetUpTestSuite() + { + tests::initApplication(); + } + void SetUp() override + {} + void TearDown() override + {} + std::string fileName() const + { + std::string resDir(DATADIR); + resDir.append("/tests/ProjectTest.FCStd"); + return resDir; + } + std::list getInventorObjects() const + { + return {"Body"}; + } + Base::Type getInventorId() const + { + return App::InventorObject::getClassTypeId(); + } +}; + +TEST_F(ProjectFileTest, loadInvalid) +{ + App::ProjectFile proj("non-existing.FCStd"); + EXPECT_FALSE(proj.loadDocument()); +} + +TEST_F(ProjectFileTest, loadDocument) +{ + App::ProjectFile proj(fileName()); + EXPECT_TRUE(proj.loadDocument()); +} + +TEST_F(ProjectFileTest, getObjects) +{ + App::ProjectFile proj(fileName()); + EXPECT_TRUE(proj.loadDocument()); + std::list objs = proj.getObjects(); + EXPECT_EQ(objs.size(), 1); +} + +TEST_F(ProjectFileTest, getPropertyFiles) +{ + App::ProjectFile proj(fileName()); + EXPECT_TRUE(proj.loadDocument()); + std::list files = proj.getPropertyFiles("Body"); + EXPECT_EQ(files.size(), 0); +} + +TEST_F(ProjectFileTest, getMetadata) +{ + App::ProjectFile proj(fileName()); + EXPECT_TRUE(proj.loadDocument()); + auto metadata = proj.getMetadata(); + EXPECT_EQ(std::string("No comment"), metadata.comment); + EXPECT_EQ(std::string("John Doe & Jane Roe"), metadata.company); + EXPECT_EQ(std::string("John Doe"), metadata.createdBy); + EXPECT_EQ(std::string("2024-03-08T10:53:31Z"), metadata.creationDate); + EXPECT_EQ(std::string("ProjectTest"), metadata.label); + EXPECT_EQ(std::string("John Doe"), metadata.lastModifiedBy); + EXPECT_EQ(std::string("2024-03-08T11:03:44Z"), metadata.lastModifiedDate); + EXPECT_EQ(std::string("All rights reserved"), metadata.license); + EXPECT_EQ(std::string("https://en.wikipedia.org/wiki/All_rights_reserved"), + metadata.licenseURL); + EXPECT_EQ(std::string("0.22R36329 (Git)"), metadata.programVersion); + EXPECT_EQ(std::string("6847155d-dcc3-4dea-92c9-c4d32d6a3055"), metadata.uuid); +} + +TEST_F(ProjectFileTest, getObjectsOfType) +{ + App::ProjectFile proj(fileName()); + EXPECT_TRUE(proj.loadDocument()); + std::list objs = proj.getObjectsOfType(getInventorId()); + EXPECT_EQ(objs, getInventorObjects()); +} + +TEST_F(ProjectFileTest, restoreObject) +{ + App::ProjectFile proj(fileName()); + EXPECT_TRUE(proj.loadDocument()); + App::InventorObject obj; + EXPECT_TRUE(proj.restoreObject("Body", &obj, false)); + EXPECT_EQ(obj.Label.getStrValue(), std::string("Body")); +} + +TEST_F(ProjectFileTest, getTypeId) +{ + App::ProjectFile proj(fileName()); + EXPECT_TRUE(proj.loadDocument()); + Base::Type id = proj.getTypeId("Body"); + EXPECT_EQ(id, getInventorId()); +} +// NOLINTEND