1 #include "ProcessTest.hpp"
3 #include "app/Process.hpp"
5 CPPUNIT_TEST_SUITE_REGISTRATION(blank::test::ProcessTest);
13 void ProcessTest::setUp() {
17 void ProcessTest::tearDown() {
22 void ProcessTest::testExit() {
24 # error "TODO: implement Process tests for windows"
28 Process proc("/usr/bin/env", { "env", "true" });
29 int status = proc.Join();
30 CPPUNIT_ASSERT_EQUAL_MESSAGE(
31 "exit status of true assumed 0",
36 Process proc("/usr/bin/env", { "env", "false" });
37 int status = proc.Join();
38 CPPUNIT_ASSERT_EQUAL_MESSAGE(
39 "exit status of false assumed 1",
46 void ProcessTest::testStream() {
48 # error "TODO: implement Process tests for windows"
52 const string test_input("hello, world");
53 const string expected_output("hello, world\n");
54 Process proc("/usr/bin/env", { "env", "echo", test_input.c_str() });
55 char buffer[expected_output.length() + 1];
56 size_t len = proc.ReadOut(buffer, sizeof(buffer));
57 const string output(buffer, len);
58 int status = proc.Join();
59 CPPUNIT_ASSERT_EQUAL_MESSAGE(
60 "exit status of echo assumed 0",
62 CPPUNIT_ASSERT_EQUAL_MESSAGE(
63 "unexpected length of echo output",
64 expected_output.size(), len);
65 CPPUNIT_ASSERT_EQUAL_MESSAGE(
66 "unexpected output of echo",
67 expected_output, output);
71 const string test_input("hello, error");
72 const string expected_output("hello, error\n");
73 Process proc("/usr/bin/env", { "env", "sh", "-c", "echo $1 >&2", "echo", test_input.c_str() }, { });
74 char buffer[expected_output.length() + 1];
75 size_t len = proc.ReadErr(buffer, sizeof(buffer));
76 const string output(buffer, len);
77 int status = proc.Join();
78 CPPUNIT_ASSERT_EQUAL_MESSAGE(
79 "exit status of echo assumed 0",
81 CPPUNIT_ASSERT_EQUAL_MESSAGE(
82 "unexpected length of echo output",
83 expected_output.size(), len);
84 CPPUNIT_ASSERT_EQUAL_MESSAGE(
85 "unexpected error output of echo",
86 expected_output, output);
91 const string test_input("dog");
92 const string expected_output("dog");
93 Process proc("/usr/bin/env", { "env", "cat" });
94 size_t len = proc.WriteIn(test_input.c_str(), test_input.size());
95 CPPUNIT_ASSERT_EQUAL_MESSAGE(
96 "unexpected length of input to cat",
97 test_input.size(), len);
98 // close input stream so cat knows we're done
101 char buffer[expected_output.length() + 1];
102 len = proc.ReadOut(buffer, sizeof(buffer));
103 const string output(buffer, len);
104 int status = proc.Join();
105 CPPUNIT_ASSERT_EQUAL_MESSAGE(
106 "exit status of cat assumed 0",
108 CPPUNIT_ASSERT_EQUAL_MESSAGE(
109 "unexpected length of cat output",
110 expected_output.size(), len);
111 CPPUNIT_ASSERT_EQUAL_MESSAGE(
112 "unexpected output of cat",
113 expected_output, output);
120 void ProcessTest::testEnv() {
122 # error "TODO: implement Process tests for windows"
125 const string test_input("Hello, environment");
126 const string expected_output("Hello, environment\n");
127 Process proc("/usr/bin/env", { "env", "sh", "-c", "echo $BLANK_ENV_TEST" }, { "BLANK_ENV_TEST=" + test_input });
128 char buffer[expected_output.length() + 1];
129 size_t len = proc.ReadOut(buffer, sizeof(buffer));
130 const string output(buffer, len);
131 int status = proc.Join();
132 CPPUNIT_ASSERT_EQUAL_MESSAGE(
133 "exit status of echo assumed 0",
135 CPPUNIT_ASSERT_EQUAL_MESSAGE(
136 "unexpected length of echo output",
137 expected_output.size(), len);
138 CPPUNIT_ASSERT_EQUAL_MESSAGE(
139 "unexpected error output of echo",
140 expected_output, output);