diff --git a/tests/hirachicalgroup/HirachicalGroupTests.cpp b/tests/hirachicalgroup/HirachicalGroupTests.cpp new file mode 100644 index 00000000..a36c2ca7 --- /dev/null +++ b/tests/hirachicalgroup/HirachicalGroupTests.cpp @@ -0,0 +1,191 @@ +#include "HirachicalGroupTests.h" + +#include +#include +#include + +void HirachicalGroupTests::init() +{ + root = new QskControl(); +} + +void HirachicalGroupTests::cleanup() +{ + delete root; +} + +void HirachicalGroupTests::higherGroupUpdatesLower() +{ + auto t = new QskTristateCheckBox( root ); + auto group = new QskHirachicalGroup( t ); + auto c1 = new QskCheckBox( root ); + auto c2 = new QskCheckBox( root ); + auto c3 = new QskCheckBox( root ); + + group->add( c1 ); + group->add( c2 ); + group->add( c3 ); + + QVERIFY( t->isChecked() == false ); + QVERIFY( c1->isChecked() == false ); + QVERIFY( c2->isChecked() == false ); + QVERIFY( c3->isChecked() == false ); + + t->setChecked( true ); + QVERIFY( t->isChecked() ); + QVERIFY( c1->isChecked() ); + QVERIFY( c2->isChecked() ); + QVERIFY( c3->isChecked() ); + + t->setChecked( false ); + QVERIFY( t->isChecked() == false ); + QVERIFY( c1->isChecked() == false ); + QVERIFY( c2->isChecked() == false ); + QVERIFY( c3->isChecked() == false ); + +} + +void HirachicalGroupTests::lowerGroupUpdatesHigher() +{ + auto t = new QskTristateCheckBox( root ); + auto group = new QskHirachicalGroup( t ); + + auto c1 = new QskCheckBox( root ); + auto c2 = new QskCheckBox( root ); + + group->add( c1 ); + group->add( c2 ); + + c1->setChecked( true ); + QVERIFY( t->isChecked() ); + QVERIFY( t->checkState() == Qt::CheckState::PartiallyChecked ); + QVERIFY( c1->isChecked() == true ); + QVERIFY( c2->isChecked() == false ); + + c2->setChecked( true ); + QVERIFY( t->isChecked() ); + QVERIFY( t->checkState() == Qt::CheckState::Checked ); + QVERIFY( c1->isChecked() == true ); + QVERIFY( c2->isChecked() == true ); + + c1->setChecked( false ); + QVERIFY( t->isChecked() ); + QVERIFY( t->checkState() == Qt::CheckState::PartiallyChecked ); + QVERIFY( c1->isChecked() == false ); + QVERIFY( c2->isChecked() == true ); + + c2->setChecked( false ); + + QVERIFY( t->isChecked() == false ); + QVERIFY( t->checkState() == Qt::CheckState::Unchecked ); + QVERIFY( c1->isChecked() == false ); + QVERIFY( c2->isChecked() == false ); +} + +void HirachicalGroupTests::addToGroup() +{ + auto t = new QskTristateCheckBox( root ); + auto group = new QskHirachicalGroup( t ); + + auto c1 = new QskCheckBox( root ); + auto c2 = new QskCheckBox( root ); + + group->add( c1 ); + group->add( c2 ); + + t->setChecked( true ); + QVERIFY( t->isChecked() ); + QVERIFY( c1->isChecked() ); + QVERIFY( c2->isChecked() ); + + auto c3 = new QskCheckBox( root ); + group->add( c3 ); + + ( t->checkState() ); + + + c3->setChecked( true ); + QVERIFY( t->checkState() == Qt::CheckState::Checked ); + auto t4 = new QskCheckBox( root ); + t4->setChecked( true ); + group->add( t4 ); + QVERIFY( t->checkState() == Qt::CheckState::Checked ); +} + +void HirachicalGroupTests::addPartlyToGroup() { + auto t1 = new QskTristateCheckBox( root ); + auto t2 = new QskTristateCheckBox( root ); + auto group1 = new QskHirachicalGroup( t1 ); + auto group2 = new QskHirachicalGroup( t2 ); + + auto c1 = new QskCheckBox( root ); + auto c2a = new QskCheckBox( root ); + auto c2b = new QskCheckBox( root ); + + group1->add( c1 ); + group1->add( t2 ); + + group2->add( c2a ); + group2->add( c2b ); + + c2a->setChecked( true ); + + QVERIFY( t1->checkState() == Qt::CheckState::PartiallyChecked ); + QVERIFY( t2->checkState() == Qt::CheckState::PartiallyChecked ); +} + +void HirachicalGroupTests::removeFromGroup() +{ + auto t = new QskTristateCheckBox( root ); + auto group = new QskHirachicalGroup( t ); + + auto c1 = new QskCheckBox( root ); + auto c2 = new QskCheckBox( root ); + + group->add( c1 ); + group->add( c2 ); + + c2->setChecked( true ); + QVERIFY( t->checkState() == Qt::CheckState::PartiallyChecked ); + + group->remove( c2 ); + QVERIFY( t->isChecked() == false ); +} + +void HirachicalGroupTests::groupMemberGetsDeleted() +{ + auto t = new QskTristateCheckBox( root ); + auto group = new QskHirachicalGroup( t ); + auto c1 = new QskCheckBox( root ); + auto c2 = new QskCheckBox( root ); + + group->add( c1 ); + group->add( c2 ); + + c2->setChecked( true ); + QVERIFY( t->checkState() == Qt::CheckState::PartiallyChecked ); + + delete c2; + QVERIFY( t->isChecked() == false ); +} + +void HirachicalGroupTests::addTwiceToSameGroup() +{ + auto t = new QskTristateCheckBox( root ); + auto group = new QskHirachicalGroup( t ); + auto c1 = new QskCheckBox( root ); + auto c2 = new QskCheckBox( root ); + + group->add( c1 ); + group->add( c1 ); + group->remove( c1 ); + + group->add( c2 ); + + c2->setChecked( true ); + + QVERIFY( t->checkState() == Qt::CheckState::Checked ); +} + +#include "moc_HirachicalGroupTests.cpp" + diff --git a/tests/hirachicalgroup/HirachicalGroupTests.h b/tests/hirachicalgroup/HirachicalGroupTests.h new file mode 100644 index 00000000..ad3554da --- /dev/null +++ b/tests/hirachicalgroup/HirachicalGroupTests.h @@ -0,0 +1,25 @@ +#pragma once + +#include +#include + +class QskControl; +class HirachicalGroupTests : public QObject +{ + Q_OBJECT + + QskControl * root; + private Q_SLOTS: + void init(); + void cleanup(); + + void higherGroupUpdatesLower(); + void lowerGroupUpdatesHigher(); + void addToGroup(); + void addPartlyToGroup(); + void removeFromGroup(); + void groupMemberGetsDeleted(); + void addTwiceToSameGroup(); +}; + +QTEST_MAIN( HirachicalGroupTests ) diff --git a/tests/hirachicalgroup/hirachicalgroup.pro b/tests/hirachicalgroup/hirachicalgroup.pro new file mode 100644 index 00000000..8d31b400 --- /dev/null +++ b/tests/hirachicalgroup/hirachicalgroup.pro @@ -0,0 +1,14 @@ +CONFIG += qskexample +CONFIG += console +CONFIG += testcase + +QT += testlib + +HEADERS += \ + HirachicalGroupTests.h + + +SOURCES += \ + HirachicalGroupTests.cpp + + diff --git a/tests/tests.pro b/tests/tests.pro index 5d3a0adf..c65f17be 100644 --- a/tests/tests.pro +++ b/tests/tests.pro @@ -1,4 +1,6 @@ TEMPLATE = subdirs SUBDIRS += \ - tristatecheckbox + tristatecheckbox\ + hirachicalgroup +