// Copyright (C) 2003 Davis E. King (davis@dlib.net) // License: Boost Software License See LICENSE.txt for the full license. #ifndef DLIB_CMD_LINE_PARSER_KERNEl_TEST_H_ #define DLIB_CMD_LINE_PARSER_KERNEl_TEST_H_ #include <string> #include <dlib/string.h> #include <dlib/cmd_line_parser.h> #include "tester.h" namespace { using namespace test; using namespace dlib; using namespace std; logger dlog("test.cmd_line_parser"); template < typename clp > void cmd_line_parser_kernel_test ( ) /*! requires - clp is an implementation of cmd_line_parser_kernel_abstract.h ensures - runs tests on clp for compliance with the specs !*/ { typedef typename clp::char_type ct; int argc; const ct* argv[100]; bool ok; for (int j = 0; j < 3; ++j) { clp test, test2; DLIB_TEST(test.current_element_valid() == false); DLIB_TEST(test.at_start()); DLIB_TEST(test.move_next() == false); DLIB_TEST(test.current_element_valid() == false); DLIB_TEST(test.parsed_line() == false); DLIB_TEST(test.option_is_defined(_dT(ct,"a")) == false); DLIB_TEST(test.option_is_defined(_dT(ct,"a")) == false); DLIB_TEST(test.option_is_defined(_dT(ct,"a")) == false); DLIB_TEST(test.parsed_line() == false); DLIB_TEST(test.option_is_defined(_dT(ct,"a")) == false); DLIB_TEST(test.option_is_defined(_dT(ct,"b")) == false); DLIB_TEST(test.option_is_defined(_dT(ct,"\0")) == false); DLIB_TEST(test.current_element_valid() == false); DLIB_TEST(test.at_start() == false); DLIB_TEST(test.move_next() == false); DLIB_TEST(test.current_element_valid() == false); // program arg1 --davis arg2 -cZzarg asdf argv[0] = _dT(ct,"program"); argv[1] = _dT(ct,"arg1"); argv[2] = _dT(ct,"--davis"); argv[3] = _dT(ct,"arg2"); argv[4] = _dT(ct,"-cZzarg"); argv[5] = _dT(ct,"asdf"); argc = 6; test.add_option(_dT(ct,"davis"),_dT(ct,"davis option")); test.add_option(_dT(ct,"c"),_dT(ct,"c option")); test.add_option(_dT(ct,"d"),_dT(ct,"d option")); test.add_option(_dT(ct,"Z"),_dT(ct,"Z option"),2); for (int k = 0; k < 5; ++k) { try { test.parse(argc,argv); } catch (error& e) { DLIB_TEST_MSG(false,e.info); } DLIB_TEST(test.option(_dT(ct,"davis")).name() == _dT(ct,"davis")); DLIB_TEST(test.option(_dT(ct,"c")).name() == _dT(ct,"c")); DLIB_TEST(test.option(_dT(ct,"Z")).name() == _dT(ct,"Z")); DLIB_TEST(test.option(_dT(ct,"davis")).number_of_arguments() == 0); DLIB_TEST(test.option(_dT(ct,"c")).number_of_arguments() == 0); DLIB_TEST(test.option(_dT(ct,"Z")).number_of_arguments() == 2); DLIB_TEST(test.number_of_arguments() == 2); DLIB_TEST(test[0] == _dT(ct,"arg1")); DLIB_TEST(test[1] == _dT(ct,"arg2")); DLIB_TEST(test.option(_dT(ct,"d")).count()==0); DLIB_TEST(test.option(_dT(ct,"davis")).count()==1); DLIB_TEST_MSG(test.option(_dT(ct,"c")).count()==1,test.option(_dT(ct,"c")).count()); DLIB_TEST(test.option(_dT(ct,"Z")).count()==1); DLIB_TEST(test.option(_dT(ct,"Z")).argument(0,0) == _dT(ct,"zarg")); DLIB_TEST(test.option(_dT(ct,"Z")).argument(1,0) == _dT(ct,"asdf")); } swap(test,test2); // program arg1 --davis arg2 -cZ zarg asdf argv[0] = _dT(ct,"program"); argv[1] = _dT(ct,"arg1"); argv[2] = _dT(ct,"--davis"); argv[3] = _dT(ct,"arg2"); argv[4] = _dT(ct,"-cZ"); argv[5] = _dT(ct,"zarg"); argv[6] = _dT(ct,"asdf"); argc = 7; for (int k = 0; k < 5; ++k) { try { test2.parse(argc,argv); } catch (error& e) { DLIB_TEST_MSG(false,e.info); } DLIB_TEST(test2.option(_dT(ct,"davis")).name() == _dT(ct,"davis")); DLIB_TEST(test2.option(_dT(ct,"c")).name() == _dT(ct,"c")); DLIB_TEST(test2.option(_dT(ct,"Z")).name() == _dT(ct,"Z")); DLIB_TEST(test2.option(_dT(ct,"davis")).number_of_arguments() == 0); DLIB_TEST(test2.option(_dT(ct,"c")).number_of_arguments() == 0); DLIB_TEST(test2.option(_dT(ct,"Z")).number_of_arguments() == 2); DLIB_TEST(test2.number_of_arguments() == 2); DLIB_TEST(test2[0] == _dT(ct,"arg1")); DLIB_TEST(test2[1] == _dT(ct,"arg2")); DLIB_TEST(test2.option(_dT(ct,"d")).count()==0); DLIB_TEST(test2.option(_dT(ct,"davis")).count()==1); DLIB_TEST(test2.option(_dT(ct,"c")).count()==1); DLIB_TEST(test2.option(_dT(ct,"Z")).count()==1); DLIB_TEST(test2.option(_dT(ct,"Z")).argument(1,0) == _dT(ct,"asdf")); DLIB_TEST_MSG(test2.option(_dT(ct,"Z")).argument(0,0) == _dT(ct,"zarg"), narrow(_dT(ct,"*") + test2.option(_dT(ct,"Z")).argument(0,0) + _dT(ct,"*"))); } // program arg1 --davis= darg darg2 arg2 -cZzarg asdf argv[0] = _dT(ct,"program"); argv[1] = _dT(ct,"arg1"); argv[2] = _dT(ct,"--davis="); argv[3] = _dT(ct,"darg"); argv[4] = _dT(ct,"darg2"); argv[5] = _dT(ct,"arg2"); argv[6] = _dT(ct,"-cZzarg"); argv[7] = _dT(ct,"asdf"); argc = 8; test.add_option(_dT(ct,"davis"),_dT(ct,"davis option"), 2); test.add_option(_dT(ct,"c"),_dT(ct,"c option")); test.add_option(_dT(ct,"d"),_dT(ct,"d option")); test.add_option(_dT(ct,"Z"),_dT(ct,"Z option"),2); for (int k = 0; k < 5; ++k) { try { test.parse(argc,argv); } catch (error& e) { DLIB_TEST_MSG(false,e.info); } DLIB_TEST(test.parsed_line()); int count = 0; while (test.move_next()) { ++count; if (test.element().name() == _dT(ct,"d")) { DLIB_TEST(test.element().count() == 0); } else { DLIB_TEST(test.element().count() == 1); } } DLIB_TEST_MSG(count == 4,count); DLIB_TEST(test.option(_dT(ct,"davis")).name() == _dT(ct,"davis")); DLIB_TEST(test.option(_dT(ct,"c")).name() == _dT(ct,"c")); DLIB_TEST(test.option(_dT(ct,"Z")).name() == _dT(ct,"Z")); DLIB_TEST(test.option(_dT(ct,"davis")).number_of_arguments() == 2); DLIB_TEST(test.option(_dT(ct,"c")).number_of_arguments() == 0); DLIB_TEST(test.option(_dT(ct,"Z")).number_of_arguments() == 2); DLIB_TEST(test.number_of_arguments() == 2); DLIB_TEST(test[0] == _dT(ct,"arg1")); DLIB_TEST(test[1] == _dT(ct,"arg2")); DLIB_TEST(test.option(_dT(ct,"d")).count()==0); DLIB_TEST(test.option(_dT(ct,"davis")).count()==1); DLIB_TEST(test.option(_dT(ct,"c")).count()==1); DLIB_TEST(test.option(_dT(ct,"Z")).count()==1); DLIB_TEST(test.option(_dT(ct,"Z")).argument(0,0) == _dT(ct,"zarg")); DLIB_TEST(test.option(_dT(ct,"Z")).argument(1,0) == _dT(ct,"asdf")); DLIB_TEST(test.option(_dT(ct,"davis")).argument(0,0) == _dT(ct,"darg")); DLIB_TEST_MSG(test.option(_dT(ct,"davis")).argument(1,0) == _dT(ct,"darg2"), narrow(test.option(_dT(ct,"davis")).argument(1,0))); } test.clear(); // program arg1 --dav-is=darg darg2 arg2 -cZzarg asdf argv[0] = _dT(ct,"program"); argv[1] = _dT(ct,"arg1"); argv[2] = _dT(ct,"--dav-is=darg"); argv[3] = _dT(ct,"darg2"); argv[4] = _dT(ct,"arg2"); argv[5] = _dT(ct,"-cZzarg"); argv[6] = _dT(ct,"asdf"); argc = 7; test.add_option(_dT(ct,"dav-is"),_dT(ct,"davis option"), 2); test.add_option(_dT(ct,"c"),_dT(ct,"c option")); test.add_option(_dT(ct,"d"),_dT(ct,"d option")); test.add_option(_dT(ct,"Z"),_dT(ct,"Z option"),2); for (int k = 0; k < 5; ++k) { try { test.parse(argc,argv); } catch (error& e) { DLIB_TEST_MSG(false,e.info); } DLIB_TEST(test.parsed_line()); int count = 0; while (test.move_next()) { ++count; if (test.element().name() == _dT(ct,"d")) { DLIB_TEST(test.element().count() == 0); } else { DLIB_TEST(test.element().count() == 1); } } DLIB_TEST_MSG(count == 4,count); DLIB_TEST(test.option(_dT(ct,"dav-is")).name() == _dT(ct,"dav-is")); DLIB_TEST(test.option(_dT(ct,"c")).name() == _dT(ct,"c")); DLIB_TEST(test.option(_dT(ct,"Z")).name() == _dT(ct,"Z")); DLIB_TEST(test.option(_dT(ct,"dav-is")).number_of_arguments() == 2); DLIB_TEST(test.option(_dT(ct,"c")).number_of_arguments() == 0); DLIB_TEST(test.option(_dT(ct,"Z")).number_of_arguments() == 2); DLIB_TEST(test.number_of_arguments() == 2); DLIB_TEST(test[0] == _dT(ct,"arg1")); DLIB_TEST(test[1] == _dT(ct,"arg2")); DLIB_TEST(test.option(_dT(ct,"d")).count()==0); DLIB_TEST(test.option(_dT(ct,"dav-is")).count()==1); DLIB_TEST(test.option(_dT(ct,"c")).count()==1); DLIB_TEST(test.option(_dT(ct,"Z")).count()==1); DLIB_TEST(test.option(_dT(ct,"Z")).argument(0,0) == _dT(ct,"zarg")); DLIB_TEST(test.option(_dT(ct,"Z")).argument(1,0) == _dT(ct,"asdf")); DLIB_TEST(test.option(_dT(ct,"dav-is")).argument(0,0) == _dT(ct,"darg")); DLIB_TEST_MSG(test.option(_dT(ct,"dav-is")).argument(1,0) == _dT(ct,"darg2"), narrow(test.option(_dT(ct,"dav-is")).argument(1,0))); } test.clear(); // program arg1 --davis=darg darg2 arg2 -cZzarg asdf argv[0] = _dT(ct,"program"); argv[1] = _dT(ct,"arg1"); argv[2] = _dT(ct,"--davis=darg"); argv[3] = _dT(ct,"darg2"); argv[4] = _dT(ct,"arg2"); argv[5] = _dT(ct,"-cZzarg"); argv[6] = _dT(ct,"asdf"); argc = 7; test.add_option(_dT(ct,"davis"),_dT(ct,"davis option"), 2); test.add_option(_dT(ct,"c"),_dT(ct,"c option")); test.add_option(_dT(ct,"d"),_dT(ct,"d option")); test.add_option(_dT(ct,"Z"),_dT(ct,"Z option"),2); for (int k = 0; k < 5; ++k) { try { test.parse(argc,argv); } catch (error& e) { DLIB_TEST_MSG(false,e.info); } DLIB_TEST(test.parsed_line()); int count = 0; while (test.move_next()) { ++count; if (test.element().name() == _dT(ct,"d")) { DLIB_TEST(test.element().count() == 0); } else { DLIB_TEST(test.element().count() == 1); } } DLIB_TEST_MSG(count == 4,count); DLIB_TEST(test.option(_dT(ct,"davis")).name() == _dT(ct,"davis")); DLIB_TEST(test.option(_dT(ct,"c")).name() == _dT(ct,"c")); DLIB_TEST(test.option(_dT(ct,"Z")).name() == _dT(ct,"Z")); DLIB_TEST(test.option(_dT(ct,"davis")).number_of_arguments() == 2); DLIB_TEST(test.option(_dT(ct,"c")).number_of_arguments() == 0); DLIB_TEST(test.option(_dT(ct,"Z")).number_of_arguments() == 2); DLIB_TEST(test.number_of_arguments() == 2); DLIB_TEST(test[0] == _dT(ct,"arg1")); DLIB_TEST(test[1] == _dT(ct,"arg2")); DLIB_TEST(test.option(_dT(ct,"d")).count()==0); DLIB_TEST(test.option(_dT(ct,"davis")).count()==1); DLIB_TEST(test.option(_dT(ct,"c")).count()==1); DLIB_TEST(test.option(_dT(ct,"Z")).count()==1); DLIB_TEST(test.option(_dT(ct,"Z")).argument(0,0) == _dT(ct,"zarg")); DLIB_TEST(test.option(_dT(ct,"Z")).argument(1,0) == _dT(ct,"asdf")); DLIB_TEST(test.option(_dT(ct,"davis")).argument(0,0) == _dT(ct,"darg")); DLIB_TEST_MSG(test.option(_dT(ct,"davis")).argument(1,0) == _dT(ct,"darg2"), narrow(test.option(_dT(ct,"davis")).argument(1,0))); } test.clear(); // program arg1 --davis=darg arg2 -cZzarg asdf argv[0] = _dT(ct,"program"); argv[1] = _dT(ct,"arg1"); argv[2] = _dT(ct,"--davis=darg"); argv[3] = _dT(ct,"arg2"); argv[4] = _dT(ct,"-cZzarg"); argv[5] = _dT(ct,"asdf"); argc = 6; test.add_option(_dT(ct,"davis"),_dT(ct,"davis option"), 1); test.add_option(_dT(ct,"c"),_dT(ct,"c option")); test.add_option(_dT(ct,"d"),_dT(ct,"d option")); test.add_option(_dT(ct,"Z"),_dT(ct,"Z option"),2); for (int k = 0; k < 5; ++k) { try { test.parse(argc,argv); } catch (error& e) { DLIB_TEST_MSG(false,e.info); } DLIB_TEST(test.parsed_line()); int count = 0; while (test.move_next()) { ++count; if (test.element().name() == _dT(ct,"d")) { DLIB_TEST(test.element().count() == 0); } else { DLIB_TEST(test.element().count() == 1); } } DLIB_TEST_MSG(count == 4,count); DLIB_TEST(test.option(_dT(ct,"davis")).name() == _dT(ct,"davis")); DLIB_TEST(test.option(_dT(ct,"c")).name() == _dT(ct,"c")); DLIB_TEST(test.option(_dT(ct,"Z")).name() == _dT(ct,"Z")); DLIB_TEST(test.option(_dT(ct,"davis")).number_of_arguments() == 1); DLIB_TEST(test.option(_dT(ct,"c")).number_of_arguments() == 0); DLIB_TEST(test.option(_dT(ct,"Z")).number_of_arguments() == 2); DLIB_TEST(test.number_of_arguments() == 2); DLIB_TEST(test[0] == _dT(ct,"arg1")); DLIB_TEST(test[1] == _dT(ct,"arg2")); DLIB_TEST(test.option(_dT(ct,"d")).count()==0); DLIB_TEST(test.option(_dT(ct,"davis")).count()==1); DLIB_TEST(test.option(_dT(ct,"c")).count()==1); DLIB_TEST(test.option(_dT(ct,"Z")).count()==1); DLIB_TEST(test.option(_dT(ct,"Z")).argument(0,0) == _dT(ct,"zarg")); DLIB_TEST(test.option(_dT(ct,"Z")).argument(1,0) == _dT(ct,"asdf")); DLIB_TEST(test.option(_dT(ct,"davis")).argument(0,0) == _dT(ct,"darg")); } test.clear(); // program arg1 --davis darg arg2 -cZzarg asdf argv[0] = _dT(ct,"program"); argv[1] = _dT(ct,"arg1"); argv[2] = _dT(ct,"--davis"); argv[3] = _dT(ct,"darg"); argv[4] = _dT(ct,"arg2"); argv[5] = _dT(ct,"-cZzarg"); argv[6] = _dT(ct,"asdf"); argc = 7; test.add_option(_dT(ct,"davis"),_dT(ct,"davis option"), 1); test.add_option(_dT(ct,"c"),_dT(ct,"c option")); test.add_option(_dT(ct,"d"),_dT(ct,"d option")); test.add_option(_dT(ct,"Z"),_dT(ct,"Z option"),2); for (int k = 0; k < 5; ++k) { try { test.parse(argc,argv); } catch (error& e) { DLIB_TEST_MSG(false,e.info); } DLIB_TEST(test.parsed_line()); int count = 0; while (test.move_next()) { ++count; if (test.element().name() == _dT(ct,"d")) { DLIB_TEST(test.element().count() == 0); } else { DLIB_TEST(test.element().count() == 1); } } DLIB_TEST_MSG(count == 4,count); DLIB_TEST(test.option(_dT(ct,"davis")).name() == _dT(ct,"davis")); DLIB_TEST(test.option(_dT(ct,"c")).name() == _dT(ct,"c")); DLIB_TEST(test.option(_dT(ct,"Z")).name() == _dT(ct,"Z")); DLIB_TEST(test.option(_dT(ct,"davis")).number_of_arguments() == 1); DLIB_TEST(test.option(_dT(ct,"c")).number_of_arguments() == 0); DLIB_TEST(test.option(_dT(ct,"Z")).number_of_arguments() == 2); DLIB_TEST(test.number_of_arguments() == 2); DLIB_TEST(test[0] == _dT(ct,"arg1")); DLIB_TEST(test[1] == _dT(ct,"arg2")); DLIB_TEST(test.option(_dT(ct,"d")).count()==0); DLIB_TEST(test.option(_dT(ct,"davis")).count()==1); DLIB_TEST(test.option(_dT(ct,"c")).count()==1); DLIB_TEST(test.option(_dT(ct,"Z")).count()==1); DLIB_TEST(test.option(_dT(ct,"Z")).argument(0,0) == _dT(ct,"zarg")); DLIB_TEST(test.option(_dT(ct,"Z")).argument(1) == _dT(ct,"asdf")); DLIB_TEST(test.option(_dT(ct,"davis")).argument(0,0) == _dT(ct,"darg")); } test.clear(); // this string is incorrect because there is no avis option // program arg1 --avis darg arg2 -cZzarg asdf argv[0] = _dT(ct,"program"); argv[1] = _dT(ct,"arg1"); argv[2] = _dT(ct,"--avis"); argv[3] = _dT(ct,"darg"); argv[4] = _dT(ct,"arg2"); argv[5] = _dT(ct,"-cZzarg"); argv[6] = _dT(ct,"asdf"); argc = 7; test.add_option(_dT(ct,"davis"),_dT(ct,"davis option"), 1); test.add_option(_dT(ct,"c"),_dT(ct,"c option")); test.add_option(_dT(ct,"d"),_dT(ct,"d option")); test.add_option(_dT(ct,"Z"),_dT(ct,"Z option"),2); for (int k = 0; k < 5; ++k) { ok = false; try { test.parse(argc,argv); } catch (typename clp::cmd_line_parse_error& e) { DLIB_TEST(e.type == EINVALID_OPTION); DLIB_TEST(e.item == _dT(ct,"avis")); ok = true; } DLIB_TEST(ok); } test.clear(); // the c argument appears twice. make sure its count is correct // program arg1 --davis darg arg2 -ccZzarg asdf argv[0] = _dT(ct,"program"); argv[1] = _dT(ct,"arg1"); argv[2] = _dT(ct,"--davis"); argv[3] = _dT(ct,"darg"); argv[4] = _dT(ct,"arg2"); argv[5] = _dT(ct,"-ccZ"); argv[6] = _dT(ct,"zarg"); argv[7] = _dT(ct,"asdf"); argc = 8; test.add_option(_dT(ct,"davis"),_dT(ct,"davis option"), 1); test.add_option(_dT(ct,"c"),_dT(ct,"c option")); test.add_option(_dT(ct,"d"),_dT(ct,"d option")); test.add_option(_dT(ct,"Z"),_dT(ct,"Z option"),2); for (int k = 0; k < 5; ++k) { ok = false; test.parse(argc,argv); DLIB_TEST(test.option(_dT(ct,"c")).count()==2); } test.clear(); // this is a bad line because the davis argument requires 2 arguments but // only gets one. // program arg1 --davis darg darg2 --davis zarg argv[0] = _dT(ct,"program"); argv[1] = _dT(ct,"arg1"); argv[2] = _dT(ct,"--davis"); argv[3] = _dT(ct,"darg"); argv[4] = _dT(ct,"darg2"); argv[5] = _dT(ct,"--davis"); argv[6] = _dT(ct,"zarg"); argc = 7; test.add_option(_dT(ct,"davis"),_dT(ct,"davis option"), 2); test.add_option(_dT(ct,"b"),_dT(ct,"b option")); test.add_option(_dT(ct,"d"),_dT(ct,"d option")); test.add_option(_dT(ct,"Z"),_dT(ct,"Z option"),2); DLIB_TEST(test.option(_dT(ct,"davis")).description() == _dT(ct,"davis option")); DLIB_TEST(test.option(_dT(ct,"b")).description() == _dT(ct,"b option")); DLIB_TEST(test.option(_dT(ct,"d")).description() == _dT(ct,"d option")); DLIB_TEST(test.option(_dT(ct,"Z")).description() == _dT(ct,"Z option")); for (int k = 0; k < 5; ++k) { ok = false; try { test.parse(argc,argv); } catch (typename clp::cmd_line_parse_error& e) { DLIB_TEST(e.type == ETOO_FEW_ARGS); DLIB_TEST(e.num == 2); DLIB_TEST(e.item == _dT(ct,"davis")); ok = true; } DLIB_TEST(ok); int count = 0; while (test.move_next()) { ++count; DLIB_TEST(test.element().count() == 0); DLIB_TEST(test.option_is_defined(test.element().name())); } DLIB_TEST_MSG(count == 4,count); } test.clear(); // this is a bad line because the davis argument is not defined // program arg1 --davis darg arg2 -davis zarg asdf argv[0] = _dT(ct,"program"); argv[1] = _dT(ct,"arg1"); argv[2] = _dT(ct,"--davis"); argv[3] = _dT(ct,"darg"); argv[4] = _dT(ct,"arg2"); argv[5] = _dT(ct,"--davis"); argv[6] = _dT(ct,"zarg"); argv[7] = _dT(ct,"asdf"); argc = 8; DLIB_TEST(std::basic_string<ct>(argv[0]) == _dT(ct,"program")); test.add_option(_dT(ct,"mavis"),_dT(ct,"mavis option"), 1); test.add_option(_dT(ct,"b"),_dT(ct,"b option")); test.add_option(_dT(ct,"d"),_dT(ct,"d option")); test.add_option(_dT(ct,"Z"),_dT(ct,"Z option"),2); DLIB_TEST(test.option(_dT(ct,"mavis")).description() == _dT(ct,"mavis option")); DLIB_TEST(test.option(_dT(ct,"b")).description() == _dT(ct,"b option")); DLIB_TEST(test.option(_dT(ct,"d")).description() == _dT(ct,"d option")); DLIB_TEST(test.option(_dT(ct,"Z")).description() == _dT(ct,"Z option")); for (int k = 0; k < 5; ++k) { ok = false; try { test.parse(argc,argv); } catch (typename clp::cmd_line_parse_error& e) { DLIB_TEST(e.type == EINVALID_OPTION); DLIB_TEST(e.item == _dT(ct,"davis")); ok = true; } DLIB_TEST(ok); int count = 0; while (test.move_next()) { ++count; DLIB_TEST(test.element().count() == 0); DLIB_TEST(test.option_is_defined(test.element().name())); } DLIB_TEST_MSG(count == 4,count); } test.clear(); argv[0] = _dT(ct,"program"); argc = 1; test.add_option(_dT(ct,"davis"),_dT(ct,"davis option"), 1); test.add_option(_dT(ct,"c"),_dT(ct,"c option")); test.add_option(_dT(ct,"d"),_dT(ct,"d option")); test.add_option(_dT(ct,"Z"),_dT(ct,"Z option"),2); DLIB_TEST(test.option(_dT(ct,"davis")).description() == _dT(ct,"davis option")); DLIB_TEST(test.option(_dT(ct,"c")).description() == _dT(ct,"c option")); DLIB_TEST(test.option(_dT(ct,"d")).description() == _dT(ct,"d option")); DLIB_TEST(test.option(_dT(ct,"Z")).description() == _dT(ct,"Z option")); for (int k = 0; k < 5; ++k) { test.parse(argc,argv); DLIB_TEST(test.number_of_arguments() == 0); int count = 0; while (test.move_next()) { ++count; DLIB_TEST(test.element().count() == 0); DLIB_TEST(test.option_is_defined(test.element().name())); } DLIB_TEST_MSG(count == 4,count); } test.clear(); // this is to make sure the -- command works right // program arg1 --davis -darg -- arg2 -c asdf -Zeat -Zat -Zjoe's argv[0] = _dT(ct,"program"); argv[1] = _dT(ct,"arg1"); argv[2] = _dT(ct,"--davis"); argv[3] = _dT(ct,"-darg"); argv[4] = _dT(ct,"-Zeat"); argv[5] = _dT(ct,"-Zat"); argv[6] = _dT(ct,"-Zjoe's"); argv[7] = _dT(ct,"--"); argv[8] = _dT(ct,"arg2"); argv[9] = _dT(ct,"-c"); argv[10] = _dT(ct,"asdf"); argc = 11; test.add_option(_dT(ct,"davis"),_dT(ct,"davis option"), 1); test.add_option(_dT(ct,"c"),_dT(ct,"c option")); test.add_option(_dT(ct,"d"),_dT(ct,"d option")); test.add_option(_dT(ct,"Z"),_dT(ct,"Z option"),1); DLIB_TEST(test.option(_dT(ct,"davis")).description() == _dT(ct,"davis option")); DLIB_TEST(test.option(_dT(ct,"c")).description() == _dT(ct,"c option")); DLIB_TEST(test.option(_dT(ct,"d")).description() == _dT(ct,"d option")); DLIB_TEST(test.option(_dT(ct,"Z")).description() == _dT(ct,"Z option")); for (int k = 0; k < 5; ++k) { test.parse(argc,argv); DLIB_TEST_MSG(test.number_of_arguments() == 4,test.number_of_arguments()); DLIB_TEST(test[0] == _dT(ct,"arg1")); DLIB_TEST(test[1] == _dT(ct,"arg2")); DLIB_TEST(test[2] == _dT(ct,"-c")); DLIB_TEST(test[3] == _dT(ct,"asdf")); DLIB_TEST(test.option(_dT(ct,"davis")).count()==1); DLIB_TEST(test.option(_dT(ct,"davis")).argument() == _dT(ct,"-darg")); DLIB_TEST(test.option(_dT(ct,"c")).count()==0); DLIB_TEST(test.option(_dT(ct,"d")).count()==0); DLIB_TEST(test.option(_dT(ct,"Z")).count()==3); DLIB_TEST(test.option(_dT(ct,"Z")).argument(0,0) == _dT(ct,"eat")); DLIB_TEST(test.option(_dT(ct,"Z")).argument(0,1) == _dT(ct,"at")); DLIB_TEST(test.option(_dT(ct,"Z")).argument(0,2) == _dT(ct,"joe's")); } } } } #endif // DLIB_CMD_LINE_PARSER_KERNEl_TEST_H_