diff options
author | Eike Ziller <eike.ziller@theqtcompany.com> | 2015-02-12 17:36:29 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@theqtcompany.com> | 2015-02-12 17:36:29 +0100 |
commit | 56aadc407d7becadec794e660ae7d7c20e820e0c (patch) | |
tree | c9aad23933bc6b0c68406e64e359f57143ef54d8 /tests/auto/cplusplus | |
parent | 9926fc2ab12ccaa02b7f03b416c54cd58ef30b31 (diff) | |
parent | 28971701fd4baa99f294d9393650b83c40754e18 (diff) | |
download | qt-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.cpp | 103 | ||||
-rw-r--r-- | tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp | 18 |
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); |