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