# # # patch "netxx_pipe.cc" # from [d4195cd958d6f394b611aed34bd01754133cf482] # to [2fcd4c740b4e15195fe65426fd50441b1ee8cc99] # # patch "netxx_pipe_stdio_main.cc" # from [38e6df2df0e476cd62e94e347da132a440283e9d] # to [4df1d617bf6619bd73223493e8a2425370d3e46e] # ============================================================ --- netxx_pipe.cc d4195cd958d6f394b611aed34bd01754133cf482 +++ netxx_pipe.cc 2fcd4c740b4e15195fe65426fd50441b1ee8cc99 @@ -283,10 +283,11 @@ Netxx::StdioProbe::add(const StreamBase #ifdef BUILD_UNIT_TESTS #include "unit_tests.hh" -UNIT_TEST(pipe, spawned) +void unit_test_spawn (char *cmd) { try { - Netxx::SpawnedStream spawned("cat",vector()); + // netxx_pipe_stdio_main uses StdioStream, StdioProbe + Netxx::SpawnedStream spawned (cmd, vector()); string result; Netxx::Probe probe; @@ -342,8 +343,16 @@ catch (informative_failure &e) } } -// FIXME: test StdioStream +UNIT_TEST(pipe, spawn_cat) +{ + unit_test_spawn ("cat"); +} +UNIT_TEST(pipe, spawn_stdio) +{ + unit_test_spawn ("netxx_pipe_stdio_main"); +} + #endif // Local Variables: @@ -353,3 +362,5 @@ catch (informative_failure &e) // indent-tabs-mode: nil // End: // vim: et:sw=2:sts=2:ts=2:cino=>2s,{s,\:s,+s,t0,g0,^-2,e-2,n-2,p2s,(0,=s: + +* netxx_pipe.cc (unit_test_spawn): ============================================================ --- netxx_pipe_stdio_main.cc 38e6df2df0e476cd62e94e347da132a440283e9d +++ netxx_pipe_stdio_main.cc 4df1d617bf6619bd73223493e8a2425370d3e46e @@ -17,6 +17,7 @@ #include "netxx_pipe.hh" #include +#include struct tester_sanity : public sanity { @@ -32,49 +33,67 @@ sanity & global_sanity = real_sanity; tester_sanity real_sanity; sanity & global_sanity = real_sanity; -int main (int argc, char *argv[]) +int main (int argc, const char *argv[]) { + int fid = STDIN_FILENO; - Netxx::StdioStream stream (STDIN_FILENO, STDOUT_FILENO); - Netxx::StdioProbe probe; - Netxx::Probe::result_type probe_result; - Netxx::Timeout short_time(0,1000); + // If an argument is given, it is a file to read instead of stdin, for debugging + if (argc == 2) + { + fprintf (stderr, "opening %s\n", argv[1]); + fid = _open (argv[1], 0); + } - char buffer[256]; - Netxx::signed_size_type bytes_read; - int i; + { + Netxx::StdioStream stream (fid, STDOUT_FILENO); + Netxx::StdioProbe probe; + Netxx::Probe::result_type probe_result; + Netxx::Timeout short_time(0,1000); - probe.add (stream, Netxx::Probe::ready_read); + char buffer[256]; + Netxx::signed_size_type bytes_read; + int i; - // if no argument specified, continue forever; else exit after 100 loops - for (i = 0; (argc == 1) || (i < 100); i++) - { - probe_result = probe.ready(short_time); - fprintf (stderr, "probe_result => %d\n", probe_result.second); + probe.add (stream, Netxx::Probe::ready_read); - switch (probe_result.second) - { - case Netxx::Probe::ready_none: - break; + // if no argument specified, continue forever; else exit after 100 loops + for (i = 0; (argc == 1) || (i < 100); i++) + try + { + probe_result = probe.ready(short_time); + fprintf (stderr, "probe_result => %d\n", probe_result.second); - case Netxx::Probe::ready_read: - bytes_read = stream.read (buffer, sizeof (buffer)); - fprintf (stderr, "bytes read => %d\n", bytes_read); - stream.write (buffer, bytes_read); + switch (probe_result.second) + { + case Netxx::Probe::ready_none: + break; - break; + case Netxx::Probe::ready_read: + bytes_read = stream.read (buffer, sizeof (buffer)); + fprintf (stderr, "bytes read => %d\n", bytes_read); + stream.write (buffer, bytes_read); - case Netxx::Probe::ready_write: - break; + break; - case Netxx::Probe::ready_oobd: - continue; - break; - } - } + case Netxx::Probe::ready_write: + break; - stream.close(); + case Netxx::Probe::ready_oobd: + break; + } + } + catch (std::runtime_error &e) + { + fprintf (stderr, "exception: %s\n", e.what()); + break; + } + stream.close(); + + if (fid != STDIN_FILENO) + _close (fid); + + } return 1; } // end main // end of file