text: // Copyright 2015 The Chromium OS Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  #include "chromiumos-wide-profiling/run_command.h"
  
  #include "chromiumos-wide-profiling/quipper_test.h"
  
  #include <vector>
  #include <string>
  
  namespace quipper {
  
  TEST(RunCommandTest, StoresStdout) {
    std::vector<char> output;
    EXPECT_TRUE(RunCommand({"/bin/sh", "-c", "echo 'Hello, world!'"}, &output));
    std::string output_str(output.begin(), output.end());
    EXPECT_EQ("Hello, world!\n", output_str);
  }
  
  TEST(RunCommandTest, RunsFromPath) {
    std::vector<char> output;
    EXPECT_TRUE(RunCommand({"sh", "-c", "echo 'Hello, world!'"}, &output));
    std::string output_str(output.begin(), output.end());
    EXPECT_EQ("Hello, world!\n", output_str);
  }
  
  TEST(RunCommandTest, LargeStdout) {
    std::vector<char> output;
    EXPECT_TRUE(RunCommand({"dd", "if=/dev/zero", "bs=5", "count=4096"},
                           &output));
    EXPECT_EQ(5 * 4096, output.size());
    EXPECT_EQ('\0', output[0]);
    EXPECT_EQ('\0', output[1]);
    EXPECT_EQ('\0', *output.rbegin());
  }
  
  TEST(RunCommandTest, StdoutToDevnull) {
    EXPECT_TRUE(RunCommand({"/bin/sh", "-c", "echo 'Hello, world!'"}, nullptr));
  }
  
  TEST(RunCommandTest, StderrIsNotStored) {
    std::vector<char> output;
    EXPECT_TRUE(RunCommand({"/bin/sh", "-c", "echo 'Hello, void!' >&2"},
                           &output));
    EXPECT_EQ(0, output.size());
  }
  
  }  // namespace quipper
  
  int main(int argc, char * argv[]) {
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
  }
  