summaryrefslogtreecommitdiff
path: root/tests/auto/cplusplus
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@theqtcompany.com>2015-02-12 17:36:29 +0100
committerEike Ziller <eike.ziller@theqtcompany.com>2015-02-12 17:36:29 +0100
commit56aadc407d7becadec794e660ae7d7c20e820e0c (patch)
treec9aad23933bc6b0c68406e64e359f57143ef54d8 /tests/auto/cplusplus
parent9926fc2ab12ccaa02b7f03b416c54cd58ef30b31 (diff)
parent28971701fd4baa99f294d9393650b83c40754e18 (diff)
downloadqt-creator-56aadc407d7becadec794e660ae7d7c20e820e0c.tar.gz
Merge remote-tracking branch 'origin/3.3'
Conflicts: src/plugins/debugger/watchhandler.cpp src/plugins/projectexplorer/kitmodel.cpp src/plugins/qbsprojectmanager/qbsprojectmanager.cpp src/shared/qbs Change-Id: I6a68090993a264e93ac7850858cc24ba6bdb5602
Diffstat (limited to 'tests/auto/cplusplus')
-rw-r--r--tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp103
-rw-r--r--tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp18
2 files changed, 94 insertions, 27 deletions
diff --git a/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp b/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp
index 80ff3c8d1d..89e2e624f7 100644
--- a/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp
+++ b/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp
@@ -192,6 +192,7 @@ private slots:
void test_checksymbols_macroUses();
void test_checksymbols_macroUses_data();
+ void test_checksymbols_infiniteLoop_data();
void test_checksymbols_infiniteLoop();
};
@@ -1755,36 +1756,12 @@ void tst_CheckSymbols::test_checksymbols_macroUses_data()
void tst_CheckSymbols::test_checksymbols_infiniteLoop()
{
- const QByteArray source1 =
- "#include \"file2.h\"\n"
- "\n"
- "template<class _Elem, class _Traits>\n"
- "class basic_ios {\n"
- " typedef basic_ostream<_Elem, _Traits> _Myos;\n"
- "};\n"
- "\n"
- "template<class _Elem, class _Traits>\n"
- "class basic_ostream {\n"
- " typedef basic_ostream<_Elem, _Traits> _Myt;\n"
- " typedef ostreambuf_iterator<_Elem, _Traits> _Iter;\n"
- "};\n"
- ;
+ QFETCH(QByteArray, source1);
+ QFETCH(QByteArray, source2);
+
const QString filePath1 = QDir::tempPath() + QLatin1String("/file1.h");
Tests::TestCase::writeFile(filePath1, source1);
- const QByteArray source2 =
- "template<class _Elem, class _Traits>\n"
- "class basic_streambuf {\n"
- " typedef basic_streambuf<_Elem, _Traits> _Myt;\n"
- "};\n"
- "\n"
- "template<class _Elem, class _Traits>\n"
- "class ostreambuf_iterator {\n"
- " typedef _Traits traits_type;\n"
- " typedef basic_streambuf<_Elem, _Traits> streambuf_type;\n"
- " typedef basic_ostream<_Elem, _Traits> ostream_type;\n"
- "};\n"
- ;
const QString filePath2 = QDir::tempPath() + QLatin1String("/file2.h");
Tests::TestCase::writeFile(filePath2, source2);
@@ -1797,5 +1774,77 @@ void tst_CheckSymbols::test_checksymbols_infiniteLoop()
TestCase::runCheckSymbols(document1, snapshot);
}
+void tst_CheckSymbols::test_checksymbols_infiniteLoop_data()
+{
+ QTest::addColumn<QByteArray>("source1");
+ QTest::addColumn<QByteArray>("source2");
+
+ QTest::newRow("1")
+ <<
+ _("#include \"file2.h\"\n"
+ "\n"
+ "template<class _Elem, class _Traits>\n"
+ "class basic_ios {\n"
+ " typedef basic_ostream<_Elem, _Traits> _Myos;\n"
+ "};\n"
+ "\n"
+ "template<class _Elem, class _Traits>\n"
+ "class basic_ostream {\n"
+ " typedef basic_ostream<_Elem, _Traits> _Myt;\n"
+ " typedef ostreambuf_iterator<_Elem, _Traits> _Iter;\n"
+ "};\n")
+ <<
+ _("template<class _Elem, class _Traits>\n"
+ "class basic_streambuf {\n"
+ " typedef basic_streambuf<_Elem, _Traits> _Myt;\n"
+ "};\n"
+ "\n"
+ "template<class _Elem, class _Traits>\n"
+ "class ostreambuf_iterator {\n"
+ " typedef _Traits traits_type;\n"
+ " typedef basic_streambuf<_Elem, _Traits> streambuf_type;\n"
+ " typedef basic_ostream<_Elem, _Traits> ostream_type;\n"
+ "};\n")
+ ;
+
+ QTest::newRow("2")
+ <<
+ _("#include \"file2.h\"\n"
+ "\n"
+ "template<class _Ty >\n"
+ "struct _List_base_types\n"
+ "{\n"
+ " typedef typename _Wrap_alloc<_Alloc>::template rebind<_Ty>::other _Alty;\n"
+ " typedef typename _Alty::template rebind<_Node>::other _Alnod_type;\n"
+ "};\n"
+ "\n"
+ "template<class _Alloc_types>\n"
+ "struct _List_alloc \n"
+ "{\n"
+ " const _Alloc_types::_Alnod_type& _Getal() const {}\n"
+ "};\n"
+ "\n"
+ "template<class _Ty, class _Alloc>\n"
+ "struct _List_buy : public _List_alloc< _List_base_types<_Ty> >\n"
+ "{\n"
+ " void foo()\n"
+ " {\n"
+ " this->_Getal().construct(1, 2);\n"
+ " this->_Getal().deallocate(0, 1);\n"
+ " }\n"
+ "};\n")
+ <<
+ _("template<class _Alloc>\n"
+ "struct _Wrap_alloc : public _Alloc\n"
+ "{\n"
+ " typedef _Alloc _Mybase;\n"
+ " template<class _Other> struct rebind { typedef _Wrap_alloc<_Other_alloc> other; };\n"
+ "\n"
+ " void deallocate(pointer _Ptr, size_type _Count) {}\n"
+ " void construct(value_type *_Ptr) {}\n"
+ "};\n")
+ ;
+}
+
QTEST_APPLESS_MAIN(tst_CheckSymbols)
#include "tst_checksymbols.moc"
diff --git a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp
index 4852e24217..c9e417c59b 100644
--- a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp
+++ b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp
@@ -390,6 +390,7 @@ private slots:
void empty_trailing_lines_data();
void undef();
void concat();
+ void excessive_nesting();
};
// Remove all #... lines, and 'simplify' string, to allow easily comparing the result
@@ -1901,6 +1902,23 @@ void tst_Preprocessor::concat()
QCOMPARE(prep.constData(), output.constData());
}
+void tst_Preprocessor::excessive_nesting()
+{
+ Environment env;
+ Preprocessor preprocess(0, &env);
+ QByteArray input;
+ const QByteArray output =
+ "# 1 \"<stdin>\"\n"
+ "# 2001 \"<stdin>\"\n";
+ for (int i = 0; i < 1000; ++i)
+ input += "#if FOO\n";
+ for (int i = 0; i < 1000; ++i)
+ input += "#endif\n";
+ QByteArray prep = preprocess.run(QLatin1String("<stdin>"), input);
+ // Output cannot be precisely determined, but it shouldn't crash.
+ QCOMPARE(prep, output);
+}
+
void tst_Preprocessor::compare_input_output(bool keepComments)
{
QFETCH(QByteArray, input);