[Boost-bugs] [Boost C++ Libraries] #11825: Parsing command-line arguments on Windows

Subject: [Boost-bugs] [Boost C++ Libraries] #11825: Parsing command-line arguments on Windows
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2015-11-30 14:27:26


#11825: Parsing command-line arguments on Windows
------------------------------+---------------------
 Reporter: mloskot | Owner: rogeeff
     Type: Bugs | Status: new
Milestone: To Be Determined | Component: test
  Version: Boost 1.59.0 | Severity: Problem
 Keywords: |
------------------------------+---------------------
 (I originally posted to the mailing list, thread [http://lists.boost.org
 /boost-users/2015/11/85342.php Parsing command-line arguments on Windows],
 but I suspect it is a bug, hence the ticket.)

 TL;TR: Boost.Test arguments parser is not handling Windows CLI
 patterns/rules correctly.


 Here is table with four example of command-line input on Windows and
 expected values of 'argv' elements, according to the rules when
 interpreting arguments, escape sequences etc.:
 https://msdn.microsoft.com/en-us/library/17w5ykft.aspx

 Here is simple program to test those rules with
 'boost::unit_test::framework::master_test_suite' machinery:

 {{{
 ///////// Boost.Test program ///////////////////////////////////////
 #define BOOST_TEST_MAIN
 #include <boost/test/unit_test.hpp>
 BOOST_AUTO_TEST_CASE(argv_parsing)
 {
     auto argc = boost::unit_test::framework::master_test_suite().argc;
     auto argv = boost::unit_test::framework::master_test_suite().argv;
     for (int i = 0; i < argc; ++i) std::printf("%d: %s\n", i, argv[i]);
 }
 }}}

 and the four rules tested:
 {{{
 F:\test_boost\Debug>test_boost.exe "abc" d e
 Running 1 test case...
 0: test_boost.exe
 1: abc
 2: d
 3: e

 F:\test_boost\Debug>test_boost.exe a\\b d"e f"g h
 Running 1 test case...
 0: test_boost.exe
 1: a\\b
 2: de
 3: fg
 4: h

 F:\test_boost\Debug>test_boost.exe a\\\"b c d
 Running 1 test case...
 0: test_boost.exe
 1: a\"b
 2: c
 3: d

 F:\test_boost\Debug>test_boost.exe a\\\\"b c" d e
 Running 1 test case...
 0: test_boost.exe
 1: a\\b
 2: c
 3: d
 4: e
 }}}

 Results summary: Boost.Test gives different arguments in the runs, than
 presented in the MSDN article above.
 {{{
 #2 (input: a\\b d"e f"g h)
 #4 (input: a\\\\"b c" d e)
 }}}

 I can't see any caveats mentioned in the documentation
 http://www.boost.org/doc/libs/1_59_0/libs/test/doc/html/boost_test/tests_organization/test_suite/master_test_suite.html

 ----

 Just in case, here is the test confirming what is expected output on
 Windows for those rules/argument patterns:

 {{{
 #include <cstdio>
 int main(int argc, char* argv[])
 {
     for (int i = 0; i < argc; ++i) std::printf("%d: %s\n", i, argv[i]);
 }
 }}}

 and the four runs
 {{{
 F:\test_cpp2015\Debug>test_cpp2015.exe "abc" d e
 0: test_cpp2015.exe
 1: abc
 2: d
 3: e

 F:\test_cpp2015\Debug>test_cpp2015.exe a\\b d"e f"g h
 0: test_cpp2015.exe
 1: a\\b
 2: de fg
 3: h

 F:\test_cpp2015\Debug>test_cpp2015.exe a\\\"b c d
 0: test_cpp2015.exe
 1: a\"b
 2: c
 3: d

 F:\test_cpp2015\Debug>test_cpp2015.exe a\\\\"b c" d e
 0: test_cpp2015.exe
 1: a\\b c
 2: d
 3: e
 }}}

-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/11825>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:19 UTC