diff --git a/tests/auto/utils/treemodel/treemodel.pro b/tests/auto/utils/treemodel/treemodel.pro
new file mode 100644
index 0000000000000000000000000000000000000000..ae913b31b5fa60241f8044250b34adc83c652a38
--- /dev/null
+++ b/tests/auto/utils/treemodel/treemodel.pro
@@ -0,0 +1,6 @@
+QTC_LIB_DEPENDS += utils
+include(../../qttest.pri)
+
+SOURCES += tst_treemodel.cpp
+
+HEADERS += $$UTILS_PATH/treemodel.h
diff --git a/tests/auto/utils/treemodel/treemodel.qbs b/tests/auto/utils/treemodel/treemodel.qbs
new file mode 100644
index 0000000000000000000000000000000000000000..bc86fcb9ff06f540eefd172a16df4c63ab149a8c
--- /dev/null
+++ b/tests/auto/utils/treemodel/treemodel.qbs
@@ -0,0 +1,8 @@
+import qbs
+
+QtcAutotest {
+    name: "TreeModel autotest"
+    Depends { name: "Utils" }
+    Depends { name: "Qt.widgets" } // TODO: Remove when qbs bug is fixed
+    files: "tst_treemodel.cpp"
+}
diff --git a/tests/auto/utils/treemodel/tst_treemodel.cpp b/tests/auto/utils/treemodel/tst_treemodel.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b4982b14829a63977ebaa423429e30540059d2bd
--- /dev/null
+++ b/tests/auto/utils/treemodel/tst_treemodel.cpp
@@ -0,0 +1,99 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://www.qt.io/licensing.  For further information
+** use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file.  Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights.  These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+****************************************************************************/
+
+#include <utils/treemodel.h>
+
+#include <QtTest>
+
+//TESTED_COMPONENT=src/libs/utils/treemodel
+
+using namespace Utils;
+
+class tst_TreeModel : public QObject
+{
+    Q_OBJECT
+
+private slots:
+    void testIteration();
+};
+
+static int countLevelItems(TreeItem *base, int level)
+{
+    int n = 0;
+    foreach (TreeItem *item, base->model()->untypedLevelItems(level, base)) {
+        Q_UNUSED(item);
+        ++n;
+    }
+    return n;
+}
+
+static TreeItem *createItem(const char *name)
+{
+    return new TreeItem(QStringList(QString::fromLatin1(name)));
+}
+
+void tst_TreeModel::testIteration()
+{
+    TreeModel m;
+    TreeItem *r = m.rootItem();
+    TreeItem *group0 = createItem("group0");
+    TreeItem *group1 = createItem("group1");
+    TreeItem *item10 = createItem("item10");
+    TreeItem *item11 = createItem("item11");
+    TreeItem *item12 = createItem("item12");
+    group1->appendChild(item10);
+    group1->appendChild(item11);
+    TreeItem *group2 = createItem("group2");
+    TreeItem *item20 = createItem("item20");
+    TreeItem *item21 = createItem("item21");
+    TreeItem *item22 = createItem("item22");
+    r->appendChild(group0);
+    r->appendChild(group1);
+    r->appendChild(group2);
+    group1->appendChild(item12);
+    group2->appendChild(item20);
+    group2->appendChild(item21);
+    group2->appendChild(item22);
+
+    QCOMPARE(r->rowCount(), 3);
+    QCOMPARE(countLevelItems(r, 1), 3);
+    QCOMPARE(countLevelItems(r, 2), 6);
+    QCOMPARE(countLevelItems(r, 3), 0);
+    QCOMPARE(countLevelItems(group0, 1), 0);
+    QCOMPARE(countLevelItems(group1, 1), 3);
+    QCOMPARE(countLevelItems(group1, 2), 0);
+    QCOMPARE(countLevelItems(group2, 1), 3);
+    QCOMPARE(countLevelItems(group2, 2), 0);
+}
+
+
+QTEST_MAIN(tst_TreeModel)
+
+#include "tst_treemodel.moc"
diff --git a/tests/auto/utils/utils.pro b/tests/auto/utils/utils.pro
index a4d43fec24fbbb094d171d0e11659d69a7b0a48b..5bb6b1f2e3c5f9814ca0decd03519ceeec9b97fa 100644
--- a/tests/auto/utils/utils.pro
+++ b/tests/auto/utils/utils.pro
@@ -1,7 +1,7 @@
 TEMPLATE = subdirs
-CONFIG += ordered
 
 SUBDIRS = \
     fileutils \
     ansiescapecodehandler \
-    stringutils
+    stringutils \
+    treemodel
diff --git a/tests/auto/utils/utils.qbs b/tests/auto/utils/utils.qbs
index cf21bfb64def0af38825f4db60497678c54cedad..b53847046d8ead19140f56fcca4f1d03b93478a2 100644
--- a/tests/auto/utils/utils.qbs
+++ b/tests/auto/utils/utils.qbs
@@ -6,5 +6,6 @@ Project {
         "fileutils/fileutils.qbs",
         "ansiescapecodehandler/ansiescapecodehandler.qbs",
         "stringutils/stringutils.qbs"
+        "treemodel/treemodel.qbs"
     ]
 }