summaryrefslogtreecommitdiffstats
path: root/src/subprocess_test.cc
diff options
context:
space:
mode:
authorEvan Martin <martine@danga.com>2010-12-05 00:09:50 (GMT)
committerEvan Martin <martine@danga.com>2010-12-05 00:09:50 (GMT)
commit42d237e7841679b27cd5dcae82d143d86a87a807 (patch)
tree253b0cf88ecf3b0404146a7c7945dd4c660afa04 /src/subprocess_test.cc
parentd0025e234cf3fc0a13f45d179880578285609b59 (diff)
downloadNinja-42d237e7841679b27cd5dcae82d143d86a87a807.zip
Ninja-42d237e7841679b27cd5dcae82d143d86a87a807.tar.gz
Ninja-42d237e7841679b27cd5dcae82d143d86a87a807.tar.bz2
move src into subdir
Diffstat (limited to 'src/subprocess_test.cc')
-rw-r--r--src/subprocess_test.cc82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/subprocess_test.cc b/src/subprocess_test.cc
new file mode 100644
index 0000000..51d4a11
--- /dev/null
+++ b/src/subprocess_test.cc
@@ -0,0 +1,82 @@
+#include "subprocess.h"
+
+#include "test.h"
+
+TEST(Subprocess, Ls) {
+ Subprocess ls;
+ EXPECT_TRUE(ls.Start("ls /"));
+
+ // Pretend we discovered that stdout was ready for writing.
+ ls.OnFDReady(ls.stdout_.fd_);
+
+ EXPECT_TRUE(ls.Finish());
+ EXPECT_NE("", ls.stdout_.buf_);
+ EXPECT_EQ("", ls.stderr_.buf_);
+}
+
+TEST(Subprocess, BadCommand) {
+ Subprocess subproc;
+ EXPECT_TRUE(subproc.Start("ninja_no_such_command"));
+
+ // Pretend we discovered that stderr was ready for writing.
+ subproc.OnFDReady(subproc.stderr_.fd_);
+
+ EXPECT_FALSE(subproc.Finish());
+ EXPECT_EQ("", subproc.stdout_.buf_);
+ EXPECT_NE("", subproc.stderr_.buf_);
+}
+
+TEST(SubprocessSet, Single) {
+ SubprocessSet subprocs;
+ Subprocess* ls = new Subprocess;
+ EXPECT_TRUE(ls->Start("ls /"));
+ subprocs.Add(ls);
+
+ while (!ls->done()) {
+ subprocs.DoWork();
+ }
+ ASSERT_TRUE(ls->Finish());
+ ASSERT_NE("", ls->stdout_.buf_);
+
+ ASSERT_EQ(1, subprocs.finished_.size());
+}
+
+TEST(SubprocessSet, Multi) {
+ SubprocessSet subprocs;
+ Subprocess* processes[3];
+ const char* kCommands[3] = {
+ "ls /",
+ "whoami",
+ "pwd",
+ };
+
+ for (int i = 0; i < 3; ++i) {
+ processes[i] = new Subprocess;
+ EXPECT_TRUE(processes[i]->Start(kCommands[i]));
+ subprocs.Add(processes[i]);
+ }
+
+ ASSERT_EQ(3, subprocs.running_.size());
+ for (int i = 0; i < 3; ++i) {
+ ASSERT_FALSE(processes[i]->done());
+ ASSERT_EQ("", processes[i]->stdout_.buf_);
+ ASSERT_EQ("", processes[i]->stderr_.buf_);
+ }
+
+ while (!processes[0]->done() || !processes[1]->done() ||
+ !processes[2]->done()) {
+ ASSERT_GT(subprocs.running_.size(), 0);
+ subprocs.DoWork();
+ }
+
+ ASSERT_EQ(0, subprocs.running_.size());
+ ASSERT_EQ(3, subprocs.finished_.size());
+
+ for (int i = 0; i < 3; ++i) {
+ ASSERT_TRUE(processes[i]->Finish());
+ ASSERT_NE("", processes[i]->stdout_.buf_);
+ ASSERT_EQ("", processes[i]->stderr_.buf_);
+ delete processes[i];
+ }
+}
+