Skip to content

Commit b0a9aa8

Browse files
authored
TestLibrary: added tests showing failure to detect iterator (danmar#6595)
1 parent 8cce83e commit b0a9aa8

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

test/testlibrary.cpp

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -803,6 +803,8 @@ class TestLibrary : public TestFixture {
803803
" <type string=\"std-like\"/>\n"
804804
" <access indexOperator=\"array-like\"/>\n"
805805
" </container>\n"
806+
" <container id=\"E\" startPattern=\"std :: E\"/>\n"
807+
" <container id=\"F\" startPattern=\"std :: F\" itEndPattern=\":: iterator\"/>\n"
806808
"</def>";
807809

808810
Library library;
@@ -811,6 +813,8 @@ class TestLibrary : public TestFixture {
811813
const Library::Container& A = library.containers().at("A");
812814
const Library::Container& B = library.containers().at("B");
813815
const Library::Container& C = library.containers().at("C");
816+
const Library::Container& E = library.containers().at("E");
817+
const Library::Container& F = library.containers().at("F");
814818

815819
ASSERT_EQUALS(A.type_templateArgNo, 1);
816820
ASSERT_EQUALS(A.size_templateArgNo, 4);
@@ -851,6 +855,14 @@ class TestLibrary : public TestFixture {
851855
ASSERT_EQUALS(C.stdStringLike, true);
852856
ASSERT_EQUALS(C.arrayLike_indexOp, true);
853857

858+
ASSERT_EQUALS(E.startPattern, "std :: E");
859+
ASSERT_EQUALS(E.endPattern, "");
860+
ASSERT_EQUALS(E.itEndPattern, "");
861+
862+
ASSERT_EQUALS(F.startPattern, "std :: F");
863+
ASSERT_EQUALS(F.endPattern, "");
864+
ASSERT_EQUALS(F.itEndPattern, ":: iterator");
865+
854866
{
855867
const SimpleTokenizer var(*this, "std::A<int> a;");
856868
ASSERT_EQUALS(&A, library.detectContainer(var.tokens()));
@@ -914,6 +926,68 @@ class TestLibrary : public TestFixture {
914926
ASSERT(!library.detectIterator(var.tokens()));
915927
ASSERT(!library.detectContainerOrIterator(var.tokens()));
916928
}
929+
930+
{
931+
const SimpleTokenizer var(*this, "std::E e;");
932+
ASSERT(library.detectContainer(var.tokens()));
933+
ASSERT(!library.detectIterator(var.tokens()));
934+
bool isIterator;
935+
ASSERT_EQUALS(&E, library.detectContainerOrIterator(var.tokens(), &isIterator));
936+
ASSERT(!isIterator);
937+
ASSERT(!library.detectContainerOrIterator(var.tokens(), nullptr, true));
938+
}
939+
940+
{
941+
const SimpleTokenizer var(*this, "E e;");
942+
ASSERT(!library.detectContainer(var.tokens()));
943+
ASSERT(!library.detectIterator(var.tokens()));
944+
ASSERT(!library.detectContainerOrIterator(var.tokens()));
945+
ASSERT_EQUALS(&E, library.detectContainerOrIterator(var.tokens(), nullptr, true));
946+
}
947+
948+
{
949+
const SimpleTokenizer var(*this, "std::E::iterator I;");
950+
ASSERT(!library.detectContainer(var.tokens()));
951+
ASSERT(!library.detectIterator(var.tokens()));
952+
ASSERT(!library.detectContainerOrIterator(var.tokens()));
953+
ASSERT(!library.detectContainerOrIterator(var.tokens(), nullptr, true));
954+
}
955+
956+
{
957+
const SimpleTokenizer var(*this, "std::E::size_type p;");
958+
ASSERT(!library.detectContainer(var.tokens()));
959+
ASSERT(!library.detectIterator(var.tokens()));
960+
ASSERT(!library.detectContainerOrIterator(var.tokens()));
961+
ASSERT(!library.detectContainerOrIterator(var.tokens(), nullptr, true));
962+
}
963+
964+
{
965+
const SimpleTokenizer var(*this, "std::F f;");
966+
ASSERT(library.detectContainer(var.tokens()));
967+
ASSERT(!library.detectIterator(var.tokens()));
968+
bool isIterator;
969+
ASSERT_EQUALS(&F, library.detectContainerOrIterator(var.tokens(), &isIterator));
970+
ASSERT(!isIterator);
971+
}
972+
973+
{
974+
const SimpleTokenizer var(*this, "std::F::iterator I;");
975+
ASSERT(!library.detectContainer(var.tokens()));
976+
TODO_ASSERT(library.detectIterator(var.tokens()));
977+
bool isIterator = false;
978+
TODO_ASSERT_EQUALS((intptr_t)&F, 0, (intptr_t)library.detectContainerOrIterator(var.tokens(), &isIterator));
979+
TODO_ASSERT(isIterator);
980+
}
981+
982+
{
983+
const SimpleTokenizer var(*this, "F::iterator I;");
984+
ASSERT(!library.detectContainer(var.tokens()));
985+
ASSERT(!library.detectIterator(var.tokens()));
986+
ASSERT(!library.detectContainerOrIterator(var.tokens()));
987+
bool isIterator = false;
988+
TODO_ASSERT_EQUALS((intptr_t)&F, 0, (intptr_t)library.detectContainerOrIterator(var.tokens(), &isIterator, true));
989+
TODO_ASSERT(isIterator);
990+
}
917991
}
918992

919993
#define LOADLIBERROR(xmldata, errorcode) loadLibError(xmldata, errorcode, __FILE__, __LINE__)

0 commit comments

Comments
 (0)