diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -457,5 +457,14 @@ add_subdirectory(src) +enable_testing() +# Tell CMake to run moc when necessary: +set(CMAKE_AUTOMOC ON) + +# As moc files are generated in the binary dir, tell CMake +# to always look for includes there: +set(CMAKE_INCLUDE_CURRENT_DIR ON) +add_subdirectory(tests) + add_custom_target(binaries) add_dependencies(binaries ${GCOMPRIS_EXECUTABLE_NAME} rcc_core rcc_menu rcc_activities all_activities) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -76,6 +76,20 @@ qt5_use_modules(${GCOMPRIS_EXECUTABLE_NAME} Qml Quick Gui Multimedia Network XmlPatterns Svg Xml Sensors Core) endif() + +add_library(GCompris SHARED ${gcompris_SRCS} ${gcompris_MOC} ${gcompris_RES}) +target_link_libraries(GCompris + Qt5::Qml + Qt5::Quick + Qt5::Gui + Qt5::Multimedia + Qt5::Core + Qt5::Svg + Qt5::Xml + Qt5::XmlPatterns + Qt5::Sensors +) + GCOMPRIS_ADD_RCC(core *.qml *.js resource/*.${COMPRESSED_AUDIO} resource/*.gif resource/*.png resource/*.svg resource/bonus/* resource/sounds/* resource/fonts/* qmldir COPYING) # Installation diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(core) \ No newline at end of file diff --git a/tests/core/CMakeLists.txt b/tests/core/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/tests/core/CMakeLists.txt @@ -0,0 +1,17 @@ +find_package(Qt5 REQUIRED COMPONENTS Test) + +include_directories( + ${CMAKE_SOURCE_DIR}/src/core + ${CMAKE_SOURCE_DIR}/src/core/resource +) + +set(CORE_TEST_LIBRARIES + GCompris + Qt5::Core + Qt5::Test +) + +add_executable(GComprisActivityInfoTest activityinfotest.cpp) +target_link_libraries(GComprisActivityInfoTest ${CORE_TEST_LIBRARIES}) +add_test(NAME GComprisActivityInfoTest COMMAND $) + diff --git a/tests/core/activityinfotest.cpp b/tests/core/activityinfotest.cpp new file mode 100644 --- /dev/null +++ b/tests/core/activityinfotest.cpp @@ -0,0 +1,167 @@ +#include +#include + +#include "ActivityInfo.h" + +Q_DECLARE_METATYPE(unsigned int); + +class GComprisActivityInfoTest : public QObject +{ + Q_OBJECT +private slots: + void ActivityInfoTest(); + void ActivityInfoTest_data(); +}; + +void GComprisActivityInfoTest::ActivityInfoTest_data() +{ + QTest::addColumn("name"); + QTest::addColumn("section"); + QTest::addColumn("difficulty"); + QTest::addColumn("icon"); + QTest::addColumn("author"); + QTest::addColumn("demo"); + QTest::addColumn("title"); + QTest::addColumn("description"); + QTest::addColumn("goal"); + QTest::addColumn("prerequisite"); + QTest::addColumn("manual"); + QTest::addColumn("credit"); + QTest::addColumn("favorite"); + QTest::addColumn("enabled"); + QTest::addColumn("createdInVersion"); + + QTest::newRow("ActivityInfo") << "Name" << "section" << (unsigned int)3 << "icon" << "author" << true << "title" << "description" << "goal" << "prerequisite" << "manual" << "credit" << false << false << 2 ; + QTest::newRow("UnknownInfo") << "Unknown" << "Unknown" << (unsigned int)5 << "Unknown" << "Unknown" << false << "Unknown" << "Unknown" << "Unknown" << "Unknown" << "Unknown" << "Unknown" << true << true << 10 ; + QTest::newRow("Empty") << "" << "" << (unsigned int)0 << "" << "" << false << "" << "" << "" << "" << "" << "" << true << true << 0 ; +} + +void GComprisActivityInfoTest::ActivityInfoTest() +{ + ActivityInfo* activityinfo = new ActivityInfo(); + QCOMPARE(activityinfo->name(), QStringLiteral("")); + QCOMPARE(activityinfo->section(), QStringLiteral("")); + QCOMPARE(activityinfo->icon(), QStringLiteral("")); + QCOMPARE(activityinfo->author(), QStringLiteral("")); + QVERIFY(activityinfo->demo()); + QCOMPARE(activityinfo->title(), QStringLiteral("")); + QCOMPARE(activityinfo->description(), QStringLiteral("")); + QCOMPARE(activityinfo->goal(), QStringLiteral("")); + QCOMPARE(activityinfo->prerequisite(), QStringLiteral("")); + QCOMPARE(activityinfo->manual(), QStringLiteral("")); + QCOMPARE(activityinfo->credit(), QStringLiteral("")); + QVERIFY(!activityinfo->favorite()); + QVERIFY(activityinfo->enabled()); + QCOMPARE(activityinfo->createdInVersion(), 0); + + QFETCH(QString, name); + QFETCH(QString, section); + QFETCH(unsigned int, difficulty); + QFETCH(QString, icon); + QFETCH(QString, author); + QFETCH(bool, demo); + QFETCH(QString, title); + QFETCH(QString, description); + QFETCH(QString, goal); + QFETCH(QString, prerequisite); + QFETCH(QString, manual); + QFETCH(QString, credit); + QFETCH(bool, favorite); + QFETCH(bool, enabled); + QFETCH(int, createdInVersion); + + QSignalSpy spyName(activityinfo, &ActivityInfo::nameChanged); + QVERIFY(spyName.count() == 0); + activityinfo->setName(name); + QVERIFY(spyName.count() == 1); + QCOMPARE(activityinfo->name(), name); + + QSignalSpy spySection(activityinfo, &ActivityInfo::sectionChanged); + QVERIFY(spySection.count() == 0); + activityinfo->setSection(section); + QVERIFY(spySection.count() == 1); + QCOMPARE(activityinfo->section(), section); + + QSignalSpy spyDifficulty(activityinfo, &ActivityInfo::difficultyChanged); + QVERIFY(spyDifficulty.count() == 0); + activityinfo->setDifficulty(difficulty); + QVERIFY(spyDifficulty.count() == 1); + QCOMPARE(activityinfo->difficulty(), difficulty); + + QSignalSpy spyIcon(activityinfo, &ActivityInfo::iconChanged); + QVERIFY(spyIcon.count() == 0); + activityinfo->setIcon(icon); + QVERIFY(spyIcon.count() == 1); + QCOMPARE(activityinfo->icon(), icon); + + QSignalSpy spyAuthor(activityinfo, &ActivityInfo::authorChanged); + QVERIFY(spyAuthor.count() == 0); + activityinfo->setAuthor(author); + QVERIFY(spyAuthor.count() == 1); + QCOMPARE(activityinfo->author(), author); + + QSignalSpy spyDemo(activityinfo, &ActivityInfo::demoChanged); + QVERIFY(spyDemo.count() == 0); + activityinfo->setDemo(demo); + QVERIFY(spyDemo.count() == 1); + QCOMPARE(activityinfo->demo(), demo); + + QSignalSpy spyTitle(activityinfo, &ActivityInfo::titleChanged); + QVERIFY(spyTitle.count() == 0); + activityinfo->setTitle(title); + QVERIFY(spyTitle.count() == 1); + QCOMPARE(activityinfo->title(), title); + + QSignalSpy spyDescription(activityinfo, &ActivityInfo::descriptionChanged); + QVERIFY(spyDescription.count() == 0); + activityinfo->setDescription(description); + QVERIFY(spyDescription.count() == 1); + QCOMPARE(activityinfo->description(), description); + + QSignalSpy spyGoal(activityinfo, &ActivityInfo::goalChanged); + QVERIFY(spyGoal.count() == 0); + activityinfo->setGoal(goal); + QVERIFY(spyGoal.count() == 1); + QCOMPARE(activityinfo->goal(), goal); + + QSignalSpy spyPrerequisite(activityinfo, &ActivityInfo::prerequisiteChanged); + QVERIFY(spyPrerequisite.count() == 0); + activityinfo->setPrerequisite(prerequisite); + QVERIFY(spyPrerequisite.count() == 1); + QCOMPARE(activityinfo->prerequisite(), prerequisite); + + QSignalSpy spyManual(activityinfo, &ActivityInfo::manualChanged); + QVERIFY(spyManual.count() == 0); + activityinfo->setManual(manual); + QVERIFY(spyManual.count() == 1); + QCOMPARE(activityinfo->manual(), manual); + + QSignalSpy spyCredit(activityinfo, &ActivityInfo::creditChanged); + QVERIFY(spyCredit.count() == 0); + activityinfo->setCredit(credit); + QVERIFY(spyCredit.count() == 1); + QCOMPARE(activityinfo->credit(), credit); + + QSignalSpy spyCreatedInVersion(activityinfo, &ActivityInfo::createdInVersionChanged); + QVERIFY(spyCreatedInVersion.count() == 0); + activityinfo->setCreatedInVersion(createdInVersion); + QVERIFY(spyCreatedInVersion.count() == 1); + QCOMPARE(activityinfo->createdInVersion(), createdInVersion); + + QSignalSpy spyFavorite(activityinfo, &ActivityInfo::favoriteChanged); + QVERIFY(spyFavorite.count() == 0); + activityinfo->setFavorite(favorite); + QVERIFY(spyFavorite.count() == 1); + QCOMPARE(activityinfo->favorite(), favorite); + + QSignalSpy spyEnabled(activityinfo, &ActivityInfo::enabledChanged); + QVERIFY(spyEnabled.count() == 0); + activityinfo->setEnabled(enabled); + QVERIFY(spyEnabled.count() == 1); + QCOMPARE(activityinfo->enabled(), enabled); + + delete activityinfo; +} + +QTEST_MAIN(GComprisActivityInfoTest) +#include "activityinfotest.moc"