Download tests/src/Base/Parameter.cpp from AbdulElahGwaith/FreeCAD: direct link, hf CLI and curl.
- Browser
- Download file 12.4 kB
-
https://huggingface.co/AbdulElahGwaith/FreeCAD/resolve/main/tests/src/Base/Parameter.cpp
- Command line
-
hf download hf://AbdulElahGwaith/FreeCAD/tests/src/Base/Parameter.cpp
-
curl -L -o Parameter.cpp https://huggingface.co/AbdulElahGwaith/FreeCAD/resolve/main/tests/src/Base/Parameter.cpp
12.4 kB
| class FakeObserver: public ParameterGrp::ObserverType | |
| { | |
| public: | |
| void clearNotifications() | |
| { | |
| notify = 0; | |
| } | |
| int getCountNotifications() const | |
| { | |
| return notify; | |
| } | |
| void attachSelf(ParameterGrp::handle hGrp) | |
| { | |
| hGrp->Attach(this); | |
| } | |
| void detachSelf(ParameterGrp::handle hGrp) | |
| { | |
| hGrp->Detach(this); | |
| } | |
| void OnChange(ParameterGrp::SubjectType& rCaller, ParameterGrp::MessageType Reason) override | |
| { | |
| boost::ignore_unused(rCaller); | |
| boost::ignore_unused(Reason); | |
| notify++; | |
| } | |
| private: | |
| int notify {}; | |
| }; | |
| class ParameterTest: public ::testing::Test | |
| { | |
| protected: | |
| static void SetUpTestSuite() | |
| { | |
| ParameterManager::Init(); | |
| } | |
| ParameterTest() | |
| { | |
| fi.setFile(Base::FileInfo::getTempFileName() + ".cfg"); | |
| } | |
| void SetUp() override | |
| { | |
| config = ParameterManager::Create(); | |
| } | |
| void TearDown() override | |
| { | |
| if (fi.exists()) { | |
| fi.deleteFile(); | |
| } | |
| } | |
| Base::Reference<ParameterManager> getConfig() const | |
| { | |
| return config; | |
| } | |
| Base::Reference<ParameterManager> getCreateConfig() | |
| { | |
| config->CreateDocument(); | |
| return config; | |
| } | |
| std::string getFileName() const | |
| { | |
| return fi.filePath(); | |
| } | |
| FakeObserver& getObserver() | |
| { | |
| return observer; | |
| } | |
| private: | |
| Base::FileInfo fi; | |
| FakeObserver observer; | |
| Base::Reference<ParameterManager> config; | |
| }; | |
| // NOLINTBEGIN(cppcoreguidelines-*,readability-*) | |
| TEST_F(ParameterTest, TestValid) | |
| { | |
| auto cfg = getConfig(); | |
| EXPECT_EQ(cfg.isValid(), true); | |
| EXPECT_EQ(cfg.isNull(), false); | |
| } | |
| TEST_F(ParameterTest, TestCreate) | |
| { | |
| auto cfg = getCreateConfig(); | |
| cfg->CheckDocument(); | |
| EXPECT_TRUE(cfg->IsEmpty()); | |
| } | |
| TEST_F(ParameterTest, TestGroup) | |
| { | |
| auto cfg = getCreateConfig(); | |
| auto grp = cfg->GetGroup("TopLevelGroup"); | |
| EXPECT_EQ(grp->Parent(), static_cast<ParameterGrp*>(cfg)); | |
| EXPECT_EQ(grp->Manager(), static_cast<ParameterGrp*>(cfg)); | |
| EXPECT_FALSE(cfg->IsEmpty()); | |
| EXPECT_TRUE(grp->IsEmpty()); | |
| EXPECT_TRUE(cfg->HasGroup("TopLevelGroup")); | |
| EXPECT_FALSE(cfg->HasGroup("Group")); | |
| EXPECT_EQ(cfg->GetGroups().size(), 1); | |
| } | |
| TEST_F(ParameterTest, TestGroupName) | |
| { | |
| auto cfg = getCreateConfig(); | |
| auto grp = cfg->GetGroup("TopLevelGroup"); | |
| EXPECT_STREQ(grp->GetGroupName(), "TopLevelGroup"); | |
| } | |
| TEST_F(ParameterTest, TestEmptyGroupName) | |
| { | |
| auto cfg = getCreateConfig(); | |
| EXPECT_THROW(cfg->GetGroup(nullptr), Base::ValueError); | |
| EXPECT_THROW(cfg->GetGroup(""), Base::ValueError); | |
| EXPECT_THROW(cfg->GetGroup("///////"), Base::ValueError); | |
| } | |
| TEST_F(ParameterTest, TestGroupNames) | |
| { | |
| auto cfg = getCreateConfig(); | |
| auto grp1 = cfg->GetGroup("////Sub1/////Sub2/////"); | |
| auto grp2 = cfg->GetGroup("Sub1/Sub2"); | |
| EXPECT_STREQ(grp1->GetGroupName(), "Sub2"); | |
| EXPECT_STREQ(grp2->GetGroupName(), "Sub2"); | |
| } | |
| TEST_F(ParameterTest, TestPath) | |
| { | |
| auto cfg = getCreateConfig(); | |
| auto grp1 = cfg->GetGroup("TopLevelGroup"); | |
| auto sub1 = grp1->GetGroup("Sub1"); | |
| auto sub2 = sub1->GetGroup("Sub2"); | |
| EXPECT_EQ(sub2->GetPath(), "TopLevelGroup/Sub1/Sub2"); | |
| } | |
| TEST_F(ParameterTest, TestBool) | |
| { | |
| auto cfg = getCreateConfig(); | |
| auto grp = cfg->GetGroup("TopLevelGroup"); | |
| grp->SetBool("Parameter1", false); | |
| grp->SetBool("Parameter2", true); | |
| EXPECT_EQ(grp->GetBool("Parameter1", true), false); | |
| EXPECT_EQ(grp->GetBool("Parameter3", true), true); | |
| EXPECT_EQ(grp->GetBool("Parameter3", false), false); | |
| EXPECT_TRUE(grp->GetBools("Test").empty()); | |
| EXPECT_EQ(grp->GetBools().size(), 2); | |
| EXPECT_EQ(grp->GetBools().at(0), false); | |
| EXPECT_EQ(grp->GetBools().at(1), true); | |
| EXPECT_EQ(grp->GetBoolMap().size(), 2); | |
| grp->RemoveBool("Parameter1"); | |
| EXPECT_EQ(grp->GetBools().size(), 1); | |
| } | |
| TEST_F(ParameterTest, TestInt) | |
| { | |
| auto cfg = getCreateConfig(); | |
| auto grp = cfg->GetGroup("TopLevelGroup"); | |
| grp->SetInt("Parameter1", -15); | |
| grp->SetInt("Parameter2", 25); | |
| EXPECT_EQ(grp->GetInt("Parameter1", 2), -15); | |
| EXPECT_EQ(grp->GetInt("Parameter3", 2), 2); | |
| EXPECT_EQ(grp->GetInt("Parameter3", 4), 4); | |
| EXPECT_TRUE(grp->GetInts("Test").empty()); | |
| EXPECT_EQ(grp->GetInts().size(), 2); | |
| EXPECT_EQ(grp->GetInts().at(0), -15); | |
| EXPECT_EQ(grp->GetInts().at(1), 25); | |
| EXPECT_EQ(grp->GetIntMap().size(), 2); | |
| grp->RemoveInt("Parameter1"); | |
| EXPECT_EQ(grp->GetInts().size(), 1); | |
| } | |
| TEST_F(ParameterTest, TestUnsigned) | |
| { | |
| auto cfg = getCreateConfig(); | |
| auto grp = cfg->GetGroup("TopLevelGroup"); | |
| grp->SetUnsigned("Parameter1", 15); | |
| grp->SetUnsigned("Parameter2", 25); | |
| EXPECT_EQ(grp->GetUnsigned("Parameter1", 2), 15); | |
| EXPECT_EQ(grp->GetUnsigned("Parameter3", 2), 2); | |
| EXPECT_EQ(grp->GetUnsigned("Parameter3", 4), 4); | |
| EXPECT_TRUE(grp->GetUnsigneds("Test").empty()); | |
| EXPECT_EQ(grp->GetUnsigneds().size(), 2); | |
| EXPECT_EQ(grp->GetUnsigneds().at(0), 15); | |
| EXPECT_EQ(grp->GetUnsigneds().at(1), 25); | |
| EXPECT_EQ(grp->GetUnsignedMap().size(), 2); | |
| grp->RemoveUnsigned("Parameter1"); | |
| EXPECT_EQ(grp->GetUnsigneds().size(), 1); | |
| } | |
| TEST_F(ParameterTest, TestFloat) | |
| { | |
| auto cfg = getCreateConfig(); | |
| auto grp = cfg->GetGroup("TopLevelGroup"); | |
| grp->SetFloat("Parameter1", 1.5); | |
| grp->SetFloat("Parameter2", 2.5); | |
| EXPECT_EQ(grp->GetFloat("Parameter1", 2.0), 1.5); | |
| EXPECT_EQ(grp->GetFloat("Parameter3", 2.0), 2.0); | |
| EXPECT_EQ(grp->GetFloat("Parameter3", 4.0), 4.0); | |
| EXPECT_TRUE(grp->GetFloats("Test").empty()); | |
| EXPECT_EQ(grp->GetFloats().size(), 2); | |
| EXPECT_EQ(grp->GetFloats().at(0), 1.5); | |
| EXPECT_EQ(grp->GetFloats().at(1), 2.5); | |
| EXPECT_EQ(grp->GetFloatMap().size(), 2); | |
| grp->RemoveFloat("Parameter1"); | |
| EXPECT_EQ(grp->GetFloats().size(), 1); | |
| } | |
| TEST_F(ParameterTest, TestString) | |
| { | |
| auto cfg = getCreateConfig(); | |
| auto grp = cfg->GetGroup("TopLevelGroup"); | |
| grp->SetASCII("Parameter1", "Value1"); | |
| grp->SetASCII("Parameter2", "Value2"); | |
| EXPECT_EQ(grp->GetASCII("Parameter1", "Value3"), "Value1"); | |
| EXPECT_EQ(grp->GetASCII("Parameter3", "Value3"), "Value3"); | |
| EXPECT_EQ(grp->GetASCII("Parameter3", "Value4"), "Value4"); | |
| EXPECT_TRUE(grp->GetASCIIs("Test").empty()); | |
| EXPECT_EQ(grp->GetASCIIs().size(), 2); | |
| EXPECT_EQ(grp->GetASCIIs().at(0), "Value1"); | |
| EXPECT_EQ(grp->GetASCIIs().at(1), "Value2"); | |
| EXPECT_EQ(grp->GetASCIIMap().size(), 2); | |
| grp->RemoveASCII("Parameter1"); | |
| EXPECT_EQ(grp->GetASCIIs().size(), 1); | |
| } | |
| TEST_F(ParameterTest, TestCopy) | |
| { | |
| auto cfg = getCreateConfig(); | |
| auto grp = cfg->GetGroup("TopLevelGroup"); | |
| auto sub2 = grp->GetGroup("Sub1/Sub2"); | |
| sub2->SetFloat("Parameter", 1.5); | |
| auto sub3 = grp->GetGroup("Sub3"); | |
| sub3->SetFloat("AnotherParameter", 2.5); | |
| sub2->copyTo(sub3); | |
| EXPECT_TRUE(sub3->GetFloats("Test").empty()); | |
| EXPECT_EQ(sub3->GetFloats().size(), 1); | |
| EXPECT_EQ(sub3->GetFloats().at(0), 1.5); | |
| // Test that old parameter has been removed | |
| EXPECT_TRUE(sub3->GetFloats("AnotherParameter").empty()); | |
| } | |
| TEST_F(ParameterTest, TestInsert) | |
| { | |
| auto cfg = getCreateConfig(); | |
| auto grp = cfg->GetGroup("TopLevelGroup"); | |
| auto sub2 = grp->GetGroup("Sub1/Sub2"); | |
| sub2->SetFloat("Parameter", 1.5); | |
| auto sub3 = grp->GetGroup("Sub3"); | |
| sub3->SetFloat("AnotherParameter", 2.5); | |
| sub2->insertTo(sub3); | |
| EXPECT_EQ(sub3->GetFloats().size(), 2); | |
| EXPECT_EQ(sub3->GetFloats("AnotherParameter").size(), 1); | |
| } | |
| TEST_F(ParameterTest, TestRevert) | |
| { | |
| auto cfg = getCreateConfig(); | |
| auto grp = cfg->GetGroup("TopLevelGroup"); | |
| auto sub1 = grp->GetGroup("Sub1/Sub/Sub"); | |
| sub1->SetFloat("Float", 1.5); | |
| auto sub2 = grp->GetGroup("Sub2/Sub/Sub"); | |
| sub2->SetFloat("Float", 1.5); | |
| grp->GetGroup("Sub1")->revert(grp->GetGroup("Sub2")); | |
| EXPECT_EQ(sub1->GetFloat("Float", 0.0), 0.0); | |
| EXPECT_EQ(sub1->GetFloat("Float", 2.0), 2.0); | |
| EXPECT_EQ(sub2->GetFloat("Float", 2.0), 1.5); | |
| } | |
| TEST_F(ParameterTest, TestRemoveGroup) | |
| { | |
| auto cfg = getCreateConfig(); | |
| auto grp = cfg->GetGroup("TopLevelGroup"); | |
| auto sub1 = grp->GetGroup("Sub1"); | |
| auto sub2 = sub1->GetGroup("Sub2/Sub/Sub"); | |
| sub2->SetFloat("Float", 1.5); | |
| sub1->RemoveGrp("Sub2"); | |
| sub2->SetInt("Int", 2); | |
| EXPECT_EQ(sub2->GetInt("Int", 0), 2); | |
| EXPECT_EQ(sub2->GetInt("Int", 1), 2); | |
| cfg->CheckDocument(); | |
| } | |
| TEST_F(ParameterTest, TestRenameGroup) | |
| { | |
| auto cfg = getCreateConfig(); | |
| auto grp = cfg->GetGroup("TopLevelGroup"); | |
| auto sub1 = grp->GetGroup("Sub1"); | |
| auto sub2 = sub1->GetGroup("Sub2/Sub/Sub"); | |
| sub2->SetFloat("Float", 1.5); | |
| sub1->RenameGrp("Sub2", "Sub3"); | |
| sub2->SetInt("Int", 2); | |
| EXPECT_EQ(sub2->GetInt("Int", 0), 2); | |
| EXPECT_EQ(sub2->GetInt("Int", 1), 2); | |
| cfg->CheckDocument(); | |
| } | |
| TEST_F(ParameterTest, TestSaveRestoreRef) | |
| { | |
| auto cfg = getCreateConfig(); | |
| auto grp = cfg->GetGroup("TopLevelGroup/Sub1/Sub2"); | |
| grp->SetFloat("Float", 1.0); | |
| cfg->CheckDocument(); | |
| std::string fn = getFileName(); | |
| cfg->exportTo(fn.c_str()); | |
| cfg->importFrom(fn.c_str()); | |
| auto grp2 = cfg->GetGroup("TopLevelGroup/Sub1/Sub2"); | |
| EXPECT_EQ(grp, grp2); | |
| grp2->SetFloat("Float", 2.0); | |
| cfg->exportTo(fn.c_str()); | |
| } | |
| TEST_F(ParameterTest, TestSaveRestoreNoRef) | |
| { | |
| auto cfg = getCreateConfig(); | |
| auto grp = cfg->GetGroup("TopLevelGroup/Sub1/Sub2"); | |
| grp->SetFloat("Float", 1.0); | |
| grp = nullptr; | |
| cfg->CheckDocument(); | |
| std::string fn = getFileName(); | |
| cfg->exportTo(fn.c_str()); | |
| cfg->importFrom(fn.c_str()); | |
| auto grp2 = cfg->GetGroup("TopLevelGroup/Sub1/Sub2"); | |
| EXPECT_NE(grp, grp2); | |
| grp2->SetFloat("Float", 2.0); | |
| cfg->exportTo(fn.c_str()); | |
| } | |
| TEST_F(ParameterTest, TestGroupRef) | |
| { | |
| auto cfg = getCreateConfig(); | |
| cfg->GetGroup("TopLevelGroup"); | |
| std::string fn = getFileName(); | |
| cfg->exportTo(fn.c_str()); | |
| // keep reference to prevent the deletion of the group node | |
| auto grp = cfg->GetGroup("TopLevelGroup/Sub1/Sub2"); | |
| cfg->importFrom(fn.c_str()); | |
| auto top = cfg->GetGroup("TopLevelGroup"); | |
| EXPECT_TRUE(top->HasGroup("Sub1")); | |
| } | |
| TEST_F(ParameterTest, TestGroupNoRef) | |
| { | |
| auto cfg = getCreateConfig(); | |
| cfg->GetGroup("TopLevelGroup"); | |
| std::string fn = getFileName(); | |
| cfg->exportTo(fn.c_str()); | |
| // nullify reference to delete the group node | |
| auto grp = cfg->GetGroup("TopLevelGroup/Sub1/Sub2"); | |
| grp = nullptr; | |
| cfg->importFrom(fn.c_str()); | |
| auto top = cfg->GetGroup("TopLevelGroup"); | |
| EXPECT_FALSE(top->HasGroup("Sub1")); | |
| } | |
| TEST_F(ParameterTest, TestObserverRef) | |
| { | |
| auto cfg = getCreateConfig(); | |
| cfg->GetGroup("TopLevelGroup"); | |
| std::string fn = getFileName(); | |
| cfg->exportTo(fn.c_str()); | |
| auto grp = cfg->GetGroup("TopLevelGroup/Sub1/Sub2"); | |
| auto& obs = getObserver(); | |
| obs.attachSelf(grp); | |
| grp->SetFloat("Float", 1.0); | |
| EXPECT_EQ(obs.getCountNotifications(), 1); | |
| obs.clearNotifications(); | |
| cfg->importFrom(fn.c_str()); | |
| grp->SetFloat("Float", 2.0); | |
| EXPECT_EQ(obs.getCountNotifications(), 3); | |
| obs.detachSelf(grp); | |
| } | |
| TEST_F(ParameterTest, TestObserverNoRef) | |
| { | |
| auto cfg = getCreateConfig(); | |
| cfg->GetGroup("TopLevelGroup"); | |
| std::string fn = getFileName(); | |
| cfg->exportTo(fn.c_str()); | |
| auto grp = cfg->GetGroup("TopLevelGroup/Sub1/Sub2"); | |
| auto& obs = getObserver(); | |
| obs.attachSelf(grp); | |
| grp = nullptr; | |
| cfg->importFrom(fn.c_str()); | |
| auto grp2 = cfg->GetGroup("TopLevelGroup/Sub1/Sub2"); | |
| grp2->SetFloat("Float", 2.0); | |
| EXPECT_EQ(obs.getCountNotifications(), 1); | |
| } | |
| TEST_F(ParameterTest, TestLockFile) | |
| { | |
| std::string fn = getFileName(); | |
| fn.append(".lock"); | |
| QLockFile lockFile1(QString::fromStdString(fn)); | |
| EXPECT_TRUE(lockFile1.tryLock(100)); | |
| EXPECT_TRUE(lockFile1.isLocked()); | |
| QLockFile lockFile2(QString::fromStdString(fn)); | |
| EXPECT_FALSE(lockFile2.tryLock(100)); | |
| EXPECT_FALSE(lockFile2.isLocked()); | |
| lockFile1.unlock(); | |
| EXPECT_TRUE(lockFile2.lock()); | |
| EXPECT_FALSE(lockFile1.tryLock(500)); | |
| lockFile2.unlock(); | |
| } | |
| // NOLINTEND(cppcoreguidelines-*,readability-*) | |