From 2d050cddb8a4aa3ada8f956e071efed9d53898fd Mon Sep 17 00:00:00 2001
From: Renato Araujo Oliveira Filho <renato.filho@canonical.com>
Date: Thu, 3 Jan 2013 18:38:23 -0300
Subject: Implmeneted QMenuModel as tree model.

---
 tests/client/CMakeLists.txt   |   8 +--
 tests/client/treetest.cpp     | 114 ++++++++++++++++++++++++++++++++++++++++++
 tests/client/treeviewtest.cpp |  88 ++++++++++++++++++++++++++++++++
 3 files changed, 207 insertions(+), 3 deletions(-)
 create mode 100644 tests/client/treetest.cpp
 create mode 100644 tests/client/treeviewtest.cpp

(limited to 'tests')

diff --git a/tests/client/CMakeLists.txt b/tests/client/CMakeLists.txt
index 54faf34..62f7ccb 100644
--- a/tests/client/CMakeLists.txt
+++ b/tests/client/CMakeLists.txt
@@ -27,7 +27,7 @@ endmacro(declare_test testname)
 
 macro(declare_simple_test testname)
     add_executable(${testname} ${testname}.cpp)
-    qt5_use_modules(${testname} Core Test)
+    qt5_use_modules(${testname} Core Test Widgets)
     target_link_libraries(${testname}
                           qmenumodel
                           ${GLIB_LDFLAGS}
@@ -54,12 +54,14 @@ endif()
 
 declare_test(servicetest)
 declare_test(menuchangestest)
-declare_test(modeltest)
+#declare_test(modeltest)
 declare_test(actiongrouptest)
 declare_test(qmltest)
 declare_simple_test(convertertest)
-declare_simple_test(cachetest)
+#declare_simple_test(cachetest)
 declare_simple_test(modelsignalstest)
+declare_simple_test(treetest)
+declare_simple_test(treeviewtest)
 
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/qmlfiles.h.in
                ${CMAKE_CURRENT_BINARY_DIR}/qmlfiles.h)
diff --git a/tests/client/treetest.cpp b/tests/client/treetest.cpp
new file mode 100644
index 0000000..3fce236
--- /dev/null
+++ b/tests/client/treetest.cpp
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2012 Canonical Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ *      Renato Araujo Oliveira Filho <renato@canonical.com>
+ *      Olivier Tilloy <olivier.tilloy@canonical.com>
+ */
+
+#include "qmenumodel.h"
+
+extern "C" {
+#include <gio/gio.h>
+}
+
+#include <QtTest>
+
+
+class TestModel : public QMenuModel
+{
+    Q_OBJECT
+public:
+    TestModel() : QMenuModel(0)
+    {
+        GMenu *menu5 = g_menu_new();
+        g_menu_append(menu5, "menu6", NULL);
+        g_menu_append(menu5, "menu7", NULL);
+
+        GMenu *menu3 = g_menu_new();
+        g_menu_append(menu3, "menu4", NULL);
+        g_menu_append_section(menu3, "menu5", G_MENU_MODEL(menu5));
+        g_menu_append(menu3, "menu8", NULL);
+
+        GMenu *menu = g_menu_new();
+        g_menu_append(menu, "menu0", NULL);
+        g_menu_append(menu, "menu1", NULL);
+        g_menu_append(menu, "menu2", NULL);
+        g_menu_append_section(menu, "menu3", G_MENU_MODEL(menu3));
+
+        setMenuModel(G_MENU_MODEL(menu));
+
+        m_menus << menu << menu3 << menu5;
+    }
+
+private:
+    QList<GMenu*> m_menus;
+};
+
+class TreeTest : public QObject
+{
+    Q_OBJECT
+
+private Q_SLOTS:
+    void initTestCase()
+    {
+        g_type_init();
+    }
+
+    void testMenuBuild()
+    {
+        TestModel menu;
+        QCOMPARE(menu.rowCount(), 4);
+        QModelIndex row0 = menu.index(0);
+        QVERIFY(row0.isValid());
+        QCOMPARE(menu.rowCount(row0), 0);
+
+        QModelIndex row3 = menu.index(3);
+        QVERIFY(row3.isValid());
+        QCOMPARE(menu.rowCount(row3), 3);
+        QCOMPARE(menu.data(row3, QMenuModel::Label).toString(), QString("menu3"));
+
+        QModelIndex row4 = row3.child(0, 0);
+        QVERIFY(row4.isValid());
+        QCOMPARE(menu.rowCount(row4), 0);
+        QCOMPARE(menu.data(row4, QMenuModel::Label).toString(), QString("menu4"));
+
+        QModelIndex row5 = row3.child(1, 0);
+        QVERIFY(row5.isValid());
+        QCOMPARE(menu.rowCount(row5), 2);
+        QCOMPARE(menu.data(row5, QMenuModel::Label).toString(), QString("menu5"));
+
+        QModelIndex row6 = row5.child(0, 0);
+        QVERIFY(row6.isValid());
+        QCOMPARE(menu.rowCount(row6), 0);
+        QCOMPARE(menu.data(row6, QMenuModel::Label).toString(), QString("menu6"));
+
+        QModelIndex row7 = row5.child(1, 0);
+        QVERIFY(row7.isValid());
+        QCOMPARE(menu.rowCount(row7), 0);
+        QCOMPARE(menu.data(row7, QMenuModel::Label).toString(), QString("menu7"));
+
+        QModelIndex parent_6 = menu.parent(row6);
+        QVERIFY(parent_6.isValid());
+        QCOMPARE(menu.rowCount(parent_6), 2);
+        QCOMPARE(menu.data(parent_6, QMenuModel::Label).toString(), QString("menu5"));
+    }
+
+};
+
+QTEST_MAIN(TreeTest)
+
+#include "treetest.moc"
+
diff --git a/tests/client/treeviewtest.cpp b/tests/client/treeviewtest.cpp
new file mode 100644
index 0000000..527ebd3
--- /dev/null
+++ b/tests/client/treeviewtest.cpp
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2012 Canonical Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ *      Renato Araujo Oliveira Filho <renato@canonical.com>
+ *      Olivier Tilloy <olivier.tilloy@canonical.com>
+ */
+
+#include "qmenumodel.h"
+
+extern "C" {
+#include <gio/gio.h>
+}
+
+#include <QtTest>
+#include <QTreeView>
+#include <QFileSystemModel>
+
+
+class TestModel : public QMenuModel
+{
+    Q_OBJECT
+public:
+    TestModel() : QMenuModel(0)
+    {
+        GMenu *menu5 = g_menu_new();
+        g_menu_append(menu5, "menu6", NULL);
+        g_menu_append(menu5, "menu7", NULL);
+
+        GMenu *menu3 = g_menu_new();
+        g_menu_append(menu3, "menu4", NULL);
+        g_menu_append_section(menu3, "menu5", G_MENU_MODEL(menu5));
+        g_menu_append(menu3, "menu8", NULL);
+
+        GMenu *menu = g_menu_new();
+        g_menu_append(menu, "menu0", NULL);
+        g_menu_append(menu, "menu1", NULL);
+        g_menu_append(menu, "menu2", NULL);
+        g_menu_append_section(menu, "menu3", G_MENU_MODEL(menu3));
+
+        setMenuModel(G_MENU_MODEL(menu));
+
+        m_menus << menu << menu3 << menu5;
+    }
+
+private:
+    QList<GMenu*> m_menus;
+};
+
+class TreeViewTest : public QObject
+{
+    Q_OBJECT
+
+private Q_SLOTS:
+    void initTestCase()
+    {
+        g_type_init();
+    }
+
+    void testView()
+    {
+        TestModel menu;
+        //QFileSystemModel menu; // = new QFileSystemModel;
+        //menu.setRootPath(QDir::currentPath());
+        QTreeView *tree = new QTreeView;
+        tree->setModel(&menu);
+        tree->show();
+        QApplication::exec();
+    }
+
+};
+
+QTEST_MAIN(TreeViewTest)
+
+#include "treeviewtest.moc"
+
-- 
cgit v1.2.3