diff options
author | Evan Martin <martine@danga.com> | 2010-12-05 00:09:50 (GMT) |
---|---|---|
committer | Evan Martin <martine@danga.com> | 2010-12-05 00:09:50 (GMT) |
commit | 42d237e7841679b27cd5dcae82d143d86a87a807 (patch) | |
tree | 253b0cf88ecf3b0404146a7c7945dd4c660afa04 /src/subprocess_test.cc | |
parent | d0025e234cf3fc0a13f45d179880578285609b59 (diff) | |
download | Ninja-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.cc | 82 |
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]; + } +} + |