diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 74e8f82..edeac9c 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,4 +1,4 @@ -set(test_names test_subprocess test_cat test_env test_err_redirection test_exception test_split test_main test_ret_code) +set(test_names test_subprocess test_cat test_double_quotes test_env test_err_redirection test_exception test_split test_main test_ret_code) set(test_files env_script.sh write_err.sh write_err.txt) diff --git a/test/test_double_quotes.cc b/test/test_double_quotes.cc new file mode 100644 index 0000000..0378822 --- /dev/null +++ b/test/test_double_quotes.cc @@ -0,0 +1,30 @@ +#include + +#include +#include + +namespace sp = subprocess; + +// JSON requires the use of double quotes (see: https://json.org/). +// This test verifies proper handling of them. +void test_double_quotes() +{ + // A simple JSON object. + const std::string expected{"{\"name\": \"value\"}"}; +#ifdef __USING_WINDOWS__ + const std::string command{"cmd.exe /c echo "}; +#else + const std::string command{"echo "}; +#endif + auto p = sp::Popen(command + expected, sp::output{sp::PIPE}); + const auto out = p.communicate().first; + std::string result{out.buf.begin(), out.buf.end()}; + // The `echo` command appends a newline. + result.erase(result.find_last_not_of(" \n\r\t") + 1); + assert(result == expected); +} + +int main() { + test_double_quotes(); + return 0; +}