@@ -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