summaryrefslogtreecommitdiffstats
path: root/tests/auto/tools
diff options
context:
space:
mode:
authorBogDan Vatra <bogdan@kdab.com>2016-09-28 19:27:11 +0300
committerBogDan Vatra <bogdan@kdab.com>2016-09-28 16:44:19 +0000
commit87583738f960e83918da3b66e455e75c144fbf8e (patch)
treefb009e76e859d76837d3f7fd8a0b1549be553ea1 /tests/auto/tools
parent5dbcced3bff9dffd102d07e913bdfccc6f1d2213 (diff)
moc: support nested q_namespaces
Nested namespaces are quite common, therefore moc should support them. Task-number: QTBUG-55415 Change-Id: I756cab36d498eb4342b402d255836d5d30f07b30 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'tests/auto/tools')
-rw-r--r--tests/auto/tools/moc/namespace.h72
-rw-r--r--tests/auto/tools/moc/namespace_no_merge.h74
-rw-r--r--tests/auto/tools/moc/tst_moc.cpp4
3 files changed, 149 insertions, 1 deletions
diff --git a/tests/auto/tools/moc/namespace.h b/tests/auto/tools/moc/namespace.h
index 2bb1d8e958..6e04831589 100644
--- a/tests/auto/tools/moc/namespace.h
+++ b/tests/auto/tools/moc/namespace.h
@@ -1,7 +1,77 @@
-#pragma once
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** 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 The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef NAMESPACE_H
+#define NAMESPACE_H
#include <QObject>
+#include "namespace_no_merge.h"
+// moc should not merge namespace_no_merge.h content with this one !
+
namespace FooNamespace {
Q_NAMESPACE
+ enum class Enum1 {
+ Key1,
+ Key2
+ };
+ Q_ENUM_NS(Enum1)
+
+ namespace FooNestedNamespace {
+ Q_NAMESPACE
+ enum class Enum2 {
+ Key3,
+ Key4
+ };
+ Q_ENUM_NS(Enum2)
+ }
+
+ using namespace FooNamespace;
+ namespace Bar = FooNamespace;
+
+ // Moc should merge this namespace with the previous one
+ namespace FooNestedNamespace {
+ Q_NAMESPACE
+ enum class Enum3 {
+ Key5,
+ Key6
+ };
+ Q_ENUM_NS(Enum3)
+
+ namespace FooMoreNestedNamespace {
+ Q_NAMESPACE
+ enum class Enum4 {
+ Key7,
+ Key8
+ };
+ Q_ENUM_NS(Enum4)
+ }
+ }
}
+
+#endif // NAMESPACE_H
diff --git a/tests/auto/tools/moc/namespace_no_merge.h b/tests/auto/tools/moc/namespace_no_merge.h
new file mode 100644
index 0000000000..8d1639ad4c
--- /dev/null
+++ b/tests/auto/tools/moc/namespace_no_merge.h
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** 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 The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef NAMESPACE_NO_MERGE_H
+#define NAMESPACE_NO_MERGE_H
+
+#include <QObject>
+
+namespace FooNamespace {
+ Q_NAMESPACE
+ enum class MEnum1 {
+ Key1,
+ Key2
+ };
+ Q_ENUM_NS(MEnum1)
+
+ namespace FooNestedNamespace {
+ Q_NAMESPACE
+ enum class MEnum2 {
+ Key3,
+ Key4
+ };
+ Q_ENUM_NS(MEnum2)
+ }
+
+ using namespace FooNamespace;
+ namespace Bar = FooNamespace;
+
+ // Moc should merge this namespace with the previous one
+ namespace FooNestedNamespace {
+ Q_NAMESPACE
+ enum class MEnum3 {
+ Key5,
+ Key6
+ };
+ Q_ENUM_NS(MEnum3)
+
+ namespace FooMoreNestedNamespace {
+ Q_NAMESPACE
+ enum class MEnum4 {
+ Key7,
+ Key8
+ };
+ Q_ENUM_NS(MEnum4)
+ }
+ }
+}
+
+#endif // NAMESPACE_NO_MERGE_H
diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp
index 601b1bb36b..ecf6c7e992 100644
--- a/tests/auto/tools/moc/tst_moc.cpp
+++ b/tests/auto/tools/moc/tst_moc.cpp
@@ -3777,6 +3777,10 @@ void tst_Moc::testQNamespace()
QCOMPARE(meta.name(), "TestEnum1");
QCOMPARE(meta.enclosingMetaObject(), &TestQNamespace::staticMetaObject);
QCOMPARE(meta.keyCount(), 2);
+
+ QCOMPARE(FooNamespace::staticMetaObject.enumeratorCount(), 1);
+ QCOMPARE(FooNamespace::FooNestedNamespace::staticMetaObject.enumeratorCount(), 2);
+ QCOMPARE(FooNamespace::FooNestedNamespace::FooMoreNestedNamespace::staticMetaObject.enumeratorCount(), 1);
}
QTEST_MAIN(tst_Moc)