diff --git a/test/testlibrary.cpp b/test/testlibrary.cpp index 11acc0364282..d81bf4f9f0de 100644 --- a/test/testlibrary.cpp +++ b/test/testlibrary.cpp @@ -803,6 +803,8 @@ class TestLibrary : public TestFixture { " \n" " \n" " \n" + " \n" + " \n" ""; Library library; @@ -811,6 +813,8 @@ class TestLibrary : public TestFixture { const Library::Container& A = library.containers().at("A"); const Library::Container& B = library.containers().at("B"); const Library::Container& C = library.containers().at("C"); + const Library::Container& E = library.containers().at("E"); + const Library::Container& F = library.containers().at("F"); ASSERT_EQUALS(A.type_templateArgNo, 1); ASSERT_EQUALS(A.size_templateArgNo, 4); @@ -851,6 +855,14 @@ class TestLibrary : public TestFixture { ASSERT_EQUALS(C.stdStringLike, true); ASSERT_EQUALS(C.arrayLike_indexOp, true); + ASSERT_EQUALS(E.startPattern, "std :: E"); + ASSERT_EQUALS(E.endPattern, ""); + ASSERT_EQUALS(E.itEndPattern, ""); + + ASSERT_EQUALS(F.startPattern, "std :: F"); + ASSERT_EQUALS(F.endPattern, ""); + ASSERT_EQUALS(F.itEndPattern, ":: iterator"); + { const SimpleTokenizer var(*this, "std::A a;"); ASSERT_EQUALS(&A, library.detectContainer(var.tokens())); @@ -914,6 +926,68 @@ class TestLibrary : public TestFixture { ASSERT(!library.detectIterator(var.tokens())); ASSERT(!library.detectContainerOrIterator(var.tokens())); } + + { + const SimpleTokenizer var(*this, "std::E e;"); + ASSERT(library.detectContainer(var.tokens())); + ASSERT(!library.detectIterator(var.tokens())); + bool isIterator; + ASSERT_EQUALS(&E, library.detectContainerOrIterator(var.tokens(), &isIterator)); + ASSERT(!isIterator); + ASSERT(!library.detectContainerOrIterator(var.tokens(), nullptr, true)); + } + + { + const SimpleTokenizer var(*this, "E e;"); + ASSERT(!library.detectContainer(var.tokens())); + ASSERT(!library.detectIterator(var.tokens())); + ASSERT(!library.detectContainerOrIterator(var.tokens())); + ASSERT_EQUALS(&E, library.detectContainerOrIterator(var.tokens(), nullptr, true)); + } + + { + const SimpleTokenizer var(*this, "std::E::iterator I;"); + ASSERT(!library.detectContainer(var.tokens())); + ASSERT(!library.detectIterator(var.tokens())); + ASSERT(!library.detectContainerOrIterator(var.tokens())); + ASSERT(!library.detectContainerOrIterator(var.tokens(), nullptr, true)); + } + + { + const SimpleTokenizer var(*this, "std::E::size_type p;"); + ASSERT(!library.detectContainer(var.tokens())); + ASSERT(!library.detectIterator(var.tokens())); + ASSERT(!library.detectContainerOrIterator(var.tokens())); + ASSERT(!library.detectContainerOrIterator(var.tokens(), nullptr, true)); + } + + { + const SimpleTokenizer var(*this, "std::F f;"); + ASSERT(library.detectContainer(var.tokens())); + ASSERT(!library.detectIterator(var.tokens())); + bool isIterator; + ASSERT_EQUALS(&F, library.detectContainerOrIterator(var.tokens(), &isIterator)); + ASSERT(!isIterator); + } + + { + const SimpleTokenizer var(*this, "std::F::iterator I;"); + ASSERT(!library.detectContainer(var.tokens())); + TODO_ASSERT(library.detectIterator(var.tokens())); + bool isIterator; + TODO_ASSERT_EQUALS((intptr_t)&F, 0, (intptr_t)library.detectContainerOrIterator(var.tokens(), &isIterator)); + TODO_ASSERT(isIterator); + } + + { + const SimpleTokenizer var(*this, "F::iterator I;"); + ASSERT(!library.detectContainer(var.tokens())); + ASSERT(!library.detectIterator(var.tokens())); + ASSERT(!library.detectContainerOrIterator(var.tokens())); + bool isIterator; + TODO_ASSERT_EQUALS((intptr_t)&F, 0, (intptr_t)library.detectContainerOrIterator(var.tokens(), &isIterator, true)); + TODO_ASSERT(isIterator); + } } #define LOADLIBERROR(xmldata, errorcode) loadLibError(xmldata, errorcode, __FILE__, __LINE__)