Add file-playing channels to voe_cmd_test.

Fix file reading and writing.

TEST=voe_cmd_test

Review URL: http://webrtc-codereview.appspot.com/279001

git-svn-id: http://webrtc.googlecode.com/svn/trunk@938 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/src/modules/audio_device/main/test/func_test_manager.cc b/src/modules/audio_device/main/test/func_test_manager.cc
index 4ba30a1..f27f77f 100644
--- a/src/modules/audio_device/main/test/func_test_manager.cc
+++ b/src/modules/audio_device/main/test/func_test_manager.cc
@@ -569,7 +569,7 @@
 ;
 
 FuncTestManager::FuncTestManager() :
-    _resourcePath(webrtc::test::GetProjectRootPath() +
+    _resourcePath(webrtc::test::ProjectRootPath() +
         "test/data/audio_device/"),
     _processThread(NULL),
     _audioDevice(NULL),
diff --git a/src/modules/audio_processing/test/unit_test.cc b/src/modules/audio_processing/test/unit_test.cc
index e15a1a3..54f9251 100644
--- a/src/modules/audio_processing/test/unit_test.cc
+++ b/src/modules/audio_processing/test/unit_test.cc
@@ -73,7 +73,7 @@
 };
 
 ApmTest::ApmTest()
-    : kResourcePath(webrtc::test::GetProjectRootPath() +
+    : kResourcePath(webrtc::test::ProjectRootPath() +
                     "test/data/audio_processing/"),
 #if defined(WEBRTC_APM_UNIT_TEST_FIXED_PROFILE)
       kOutputFileName(kResourcePath + "output_data_fixed.pb"),
diff --git a/src/voice_engine/main/test/auto_test/voe_standard_test.cc b/src/voice_engine/main/test/auto_test/voe_standard_test.cc
index 566304f..a2b3cc2 100644
--- a/src/voice_engine/main/test/auto_test/voe_standard_test.cc
+++ b/src/voice_engine/main/test/auto_test/voe_standard_test.cc
@@ -622,7 +622,7 @@
 #if defined(WEBRTC_ANDROID)
     resourcePath_ = "/sdcard/";
 #else
-    resourcePath_ = webrtc::test::GetProjectRootPath();
+    resourcePath_ = webrtc::test::ProjectRootPath();
     if (resourcePath_ == webrtc::test::kCannotFindProjectRootDir)
     {
         TEST_LOG("Failed to get project root directory\n");
diff --git a/src/voice_engine/main/test/cmd_test/voe_cmd_test.cc b/src/voice_engine/main/test/cmd_test/voe_cmd_test.cc
index 3720d4d..99e88d2 100644
--- a/src/voice_engine/main/test/cmd_test/voe_cmd_test.cc
+++ b/src/voice_engine/main/test/cmd_test/voe_cmd_test.cc
@@ -15,7 +15,10 @@
 #include <unistd.h>
 #endif
 
+#include <vector>
+
 #include "gtest/gtest.h"
+#include "test/testsupport/fileutils.h"
 
 #include "voe_errors.h"
 #include "voe_base.h"
@@ -65,7 +68,7 @@
 VoEExternalMedia* xmedia = NULL;
 VoENetEqStats* neteqst = NULL;
 
-void run_test();
+void RunTest(std::string out_path);
 
 #ifdef EXTERNAL_TRANSPORT
 
@@ -88,28 +91,6 @@
 }
 
 my_transportation my_transport;
-
-#endif
-// TODO(amyfong): we should share this with autotest in a common place.
-#if defined(MAC_IPHONE)
-char micFile[256] = {0}; // Filename copied to buffer in code
-#elif defined(WEBRTC_MAC) && !defined(WEBRTC_MAC_INTEL)
-const char* micFile = "audio_long16bigendian.pcm";
-#elif defined(WEBRTC_ANDROID)
-const char* micFile = "/sdcard/audio_long16.pcm";
-#elif defined(_WIN32)
-// File path is relative to the location of 'voice_engine.gyp'.
-const char* micFile = "../../test/data/voice_engine/audio_long16.pcm";
-#elif defined(WEBRTC_LINUX)
-// Assumes launch from command line: 
-// $ ./out/<Debug><Release>/audio_device_test_func
-const char* micFile = "./test/data/voice_engine/audio_long16.pcm";
-#elif (defined(WEBRTC_MAC_INTEL) || defined(WEBRTC_MAC))
-// Assumes that the working directory in Xcode 
-// is set to <path-to-src>/xcodebuild/<Debug><Release>.
-const char* micFile = "../../test/data/voice_engine/audio_long16.pcm";
-#else
-const char* micFile = "audio_long16.pcm";
 #endif
 
 class MyObserver : public VoiceEngineObserver {
@@ -163,9 +144,16 @@
 
   MyObserver my_observer;
 
+#if defined(WEBRTC_ANDROID)
+  const std::string out_path = "/sdcard/";
+#else
+  const std::string out_path = webrtc::test::OutputPath();
+#endif
+  const std::string trace_filename = out_path + "webrtc_trace.txt";
+
   printf("Set trace filenames (enable trace)\n");
   VoiceEngine::SetTraceFilter(kTraceAll);
-  res = VoiceEngine::SetTraceFile("webrtc_trace.txt");
+  res = VoiceEngine::SetTraceFile(trace_filename.c_str());
   VALIDATE;
 
   res = VoiceEngine::SetTraceCallback(NULL);
@@ -190,7 +178,7 @@
   cnt++;
   printf("%s\n", tmp);
 
-  run_test();
+  RunTest(out_path);
 
   printf("Terminate \n");
 
@@ -243,7 +231,7 @@
   return 0;
 }
 
-void run_test() {
+void RunTest(std::string out_path) {
   int chan, cnt, res;
   CodecInst cinst;
   cnt = 0;
@@ -259,6 +247,24 @@
   bool muted = false;
   bool on_hold = false;
 
+#if defined(WEBRTC_ANDROID)
+  std::string resource_path = "/sdcard/";
+#else
+  std::string resource_path = webrtc::test::ProjectRootPath();
+  if (resource_path == webrtc::test::kCannotFindProjectRootDir) {
+    printf("*** Unable to get project root directory. "
+           "File playing may fail. ***\n");
+    // Fall back to the current directory.
+    resource_path = "./";
+  } else {
+    resource_path += "test/data/voice_engine/";
+  }
+#endif
+  const std::string audio_filename = resource_path + "audio_long16.pcm";
+
+  const std::string play_filename = out_path + "recorded_playout.pcm";
+  const std::string mic_filename = out_path + "recorded_mic.pcm";
+
   chan = base1->CreateChannel();
   if (chan < 0) {
     printf("Error at position %i\n", cnt);
@@ -356,6 +362,20 @@
   res = codec->SetSendCodec(chan, cinst);
   VALIDATE;
 
+  const int kMaxNumChannels = 8;
+  int channel_index = 0;
+  std::vector<int> channels(kMaxNumChannels);
+  for (i = 0; i < kMaxNumChannels; ++i) {
+    channels[i] = base1->CreateChannel();
+    int port = rPort + (i + 1) * 2;
+    res = base1->SetSendDestination(channels[i], port, ip);
+    VALIDATE;
+    res = base1->SetLocalReceiver(channels[i], port);
+    VALIDATE;
+    res = codec->SetSendCodec(channels[i], cinst);
+    VALIDATE;
+  }
+
   // Call loop
   bool newcall = true;
   while (newcall) {
@@ -486,13 +506,13 @@
       i++;
       printf("\t%i. Play local file (audio_long16.pcm) \n", i);
       i++;
-      printf("\t%i. Change Playout Device \n", i);
+      printf("\t%i. Change playout device \n", i);
       i++;
-      printf("\t%i. Change Recording Device \n", i);
+      printf("\t%i. Change recording device \n", i);
       i++;
-      printf("\t%i. Toggle Remote AGC \n", i);
+      printf("\t%i. Toggle receive-side AGC \n", i);
       i++;
-      printf("\t%i. Toggle Remote NS \n", i);
+      printf("\t%i. Toggle receive-side NS \n", i);
       i++;
       printf("\t%i. AGC status \n", i);
       i++;
@@ -502,7 +522,7 @@
       i++;
       printf("\t%i. Get last error code \n", i);
       i++;
-      printf("\t%i. Toggle typing detection(for Mac/Windows only) \n", i);
+      printf("\t%i. Toggle typing detection (for Mac/Windows only) \n", i);
       i++;
       printf("\t%i. Record a PCM file \n", i);
       i++;
@@ -510,7 +530,10 @@
       i++;
       printf("\t%i. Play a previously recorded PCM file as microphone \n", i);
       i++;
-      printf("\t%i. Stop call \n", i);
+      printf("\t%i. Add an additional file-playing channel \n", i);
+      i++;
+      printf("\t%i. Remove a file-playing channel \n", i);
+      i++;
 
       printf("Select action or %i to stop the call: ", i);
       ASSERT_EQ(1, scanf("%i", &codecinput));
@@ -602,7 +625,8 @@
         VALIDATE;
       }
       else if (codecinput == (noCodecs + 11)) {
-        file->StartPlayingFileLocally(0, micFile);
+        res = file->StartPlayingFileLocally(0, audio_filename.c_str());
+        VALIDATE;
       }
       else if (codecinput == (noCodecs + 12)) {
         // change the playout device with current call
@@ -655,9 +679,9 @@
         res = apm->SetRxAgcStatus(chan, AGC1);
         VALIDATE;
         if (AGC1)
-          printf("\n Remote AGC is now on! \n");
+          printf("\n Receive-side AGC is now on! \n");
         else
-          printf("\n Remote AGC is now off! \n");
+          printf("\n Receive-side AGC is now off! \n");
       }
       else if (codecinput == (noCodecs + 15)) {
         // Remote NS
@@ -665,16 +689,16 @@
         res = apm->SetRxNsStatus(chan, NS);
         VALIDATE;
         if (NS1)
-          printf("\n Remote NS is now on! \n");
+          printf("\n Receive-side NS is now on! \n");
         else
-          printf("\n Remote NS is now off! \n");
+          printf("\n Receive-side NS is now off! \n");
       }
       else if (codecinput == (noCodecs + 16)) {
         AgcModes agcmode;
         bool enable;
         res = apm->GetAgcStatus(enable, agcmode);
         VALIDATE
-            printf("\n AGC enable is %d , mode is %d \n", enable, agcmode);
+            printf("\n AGC enable is %d, mode is %d \n", enable, agcmode);
       }
       else if (codecinput == (noCodecs + 17)) {
         // Toggle Mute on Microphone
@@ -729,15 +753,16 @@
         printf("\n Enter your selection: \n");
         ASSERT_EQ(1, scanf("%i", &file_source));
         if (file_source == 1) {
-          printf("\n Start recording microphone as recordedmic.pcm \n");
-          res = file->StartRecordingMicrophone("recordedmic.pcm");
+          printf("\n Start recording microphone as %s \n",
+                 mic_filename.c_str());
+          res = file->StartRecordingMicrophone(mic_filename.c_str());
           VALIDATE;
-        } 
+        }
         else {
-          printf("\n Start recording playout as recordedplayout.pcm \n");
-          res = file->StartRecordingPlayout(chan, "recordedplayout.pcm");
+          printf("\n Start recording playout as %s \n", play_filename.c_str());
+          res = file->StartRecordingPlayout(chan, play_filename.c_str());
           VALIDATE;
-        } 
+        }
         while (stop_record != 0) {
           printf("\n Type 0 to stop recording file \n");
           ASSERT_EQ(1, scanf("%i", &stop_record));
@@ -745,7 +770,7 @@
         if (file_source == 1) {
           res = file->StopRecordingMicrophone();
           VALIDATE;
-        }          
+        }
         else {
           res = file->StopRecordingPlayout(chan);
           VALIDATE;
@@ -756,20 +781,21 @@
         int file_type = 1;
         int stop_play = 1;
         printf("\n Select a file to play locally in a loop.");
-        printf("\n 1. Play recordedmic.pcm");
-        printf("\n 2. Play recordedplayout.pcm");
+        printf("\n 1. Play %s", mic_filename.c_str());
+        printf("\n 2. Play %s", play_filename.c_str());
         printf("\n Enter your selection\n");
         ASSERT_EQ(1, scanf("%i", &file_type));
         if (file_type == 1)  {
-          printf("\n Start playing recordedmic.pcm locally in a loop\n");
-          res = file->StartPlayingFileLocally(chan, 
-                                              "recordedmic.pcm", true);
+          printf("\n Start playing %s locally in a loop\n",
+                 mic_filename.c_str());
+          res = file->StartPlayingFileLocally(chan, mic_filename.c_str(), true);
           VALIDATE;
         }
-        else { 
-          printf("\n Start playing recordedplayout.pcm locally in a loop\n");
-          res = file->StartPlayingFileLocally(chan, 
-                                              "recordedplayout.pcm", true);
+        else {
+          printf("\n Start playing %s locally in a loop\n",
+                 play_filename.c_str());
+          res = file->StartPlayingFileLocally(chan, play_filename.c_str(),
+                                              true);
           VALIDATE;
         }
         while (stop_play != 0) {
@@ -783,20 +809,22 @@
         int file_type = 1;
         int stop_play = 1;
         printf("\n Select a file to play as microphone in a loop.");
-        printf("\n 1. Play recordedmic.pcm");
-        printf("\n 2. Play recordedplayout.pcm");
+        printf("\n 1. Play %s", mic_filename.c_str());
+        printf("\n 2. Play %s", play_filename.c_str());
         printf("\n Enter your selection\n");
         ASSERT_EQ(1, scanf("%i", &file_type));
         if (file_type == 1)  {
-          printf("\n Start playing recordedmic.pcm as mic in a loop\n");
-          res = file->StartPlayingFileAsMicrophone(chan,
-                                                   "recordedmic.pcm", true);
+          printf("\n Start playing %s as mic in a loop\n",
+                 mic_filename.c_str());
+          res = file->StartPlayingFileAsMicrophone(chan, mic_filename.c_str(),
+                                                   true);
           VALIDATE;
         }
         else {
-          printf("\n Start playing recordedplayout.pcm as mic in a loop\n");
-          res = file->StartPlayingFileAsMicrophone(chan,
-                                                   "recordedplayout.pcm", true);
+          printf("\n Start playing %s as mic in a loop\n",
+                 play_filename.c_str());
+          res = file->StartPlayingFileAsMicrophone(chan, play_filename.c_str(),
+                                                   true);
           VALIDATE;
         }
         while (stop_play != 0) {
@@ -806,6 +834,41 @@
         res = file->StopPlayingFileAsMicrophone(chan);
         VALIDATE;
       }
+      else if (codecinput == (noCodecs + 24)) {
+        if (channel_index < kMaxNumChannels) {
+          res = base1->StartReceive(channels[channel_index]);
+          VALIDATE;
+          res = base1->StartPlayout(channels[channel_index]);
+          VALIDATE;
+          res = base1->StartSend(channels[channel_index]);
+          VALIDATE;
+          res = file->StartPlayingFileAsMicrophone(channels[channel_index],
+                                                   audio_filename.c_str(),
+                                                   true,
+                                                   false);
+          VALIDATE;
+          channel_index++;
+          printf("Using %d additional channels\n", channel_index);
+        } else {
+          printf("Max number of channels reached\n");
+        }
+      }
+      else if (codecinput == (noCodecs + 25)) {
+        if (channel_index > 0) {
+          channel_index--;
+          res = file->StopPlayingFileAsMicrophone(channels[channel_index]);
+          VALIDATE;
+          res = base1->StopSend(channels[channel_index]);
+          VALIDATE;
+          res = base1->StopPlayout(channels[channel_index]);
+          VALIDATE;
+          res = base1->StopReceive(channels[channel_index]);
+          VALIDATE;
+          printf("Using %d additional channels\n", channel_index);
+        } else {
+          printf("All additional channels stopped\n");
+        }
+      }
       else
         break;
     }
@@ -828,6 +891,18 @@
 #endif
     }
 
+    while (channel_index > 0) {
+      --channel_index;
+      res = file->StopPlayingFileAsMicrophone(channels[channel_index]);
+      VALIDATE;
+      res = base1->StopSend(channels[channel_index]);
+      VALIDATE;
+      res = base1->StopPlayout(channels[channel_index]);
+      VALIDATE;
+      res = base1->StopReceive(channels[channel_index]);
+      VALIDATE;
+    }
+
     printf("\n1. New call \n");
     printf("2. Quit \n");
     printf("Select action: ");
@@ -836,7 +911,12 @@
     // Call loop
   }
 
-  printf("Delete Channel \n");
+  printf("Delete channels \n");
   res = base1->DeleteChannel(chan);
   VALIDATE;
+
+  for (i = 0; i < kMaxNumChannels; ++i) {
+    channels[i] = base1->DeleteChannel(channels[i]);
+    VALIDATE;
+  }
 }
diff --git a/src/voice_engine/main/test/voice_engine_tests.gypi b/src/voice_engine/main/test/voice_engine_tests.gypi
index 76c22b9..b4895e1 100644
--- a/src/voice_engine/main/test/voice_engine_tests.gypi
+++ b/src/voice_engine/main/test/voice_engine_tests.gypi
@@ -45,6 +45,7 @@
       'target_name': 'voe_cmd_test',
       'type': 'executable',
       'dependencies': [
+        '<(webrtc_root)/../test/test.gyp:test_support',
         '<(webrtc_root)/../testing/gtest.gyp:gtest',
         'voice_engine_core',
         '<(webrtc_root)/system_wrappers/source/system_wrappers.gyp:system_wrappers',
diff --git a/test/testsupport/fileutils.cc b/test/testsupport/fileutils.cc
index 9b54989..93dfaf6 100644
--- a/test/testsupport/fileutils.cc
+++ b/test/testsupport/fileutils.cc
@@ -36,9 +36,10 @@
 // The file we're looking for to identify the project root dir.
 static const char* kProjectRootFileName = "DEPS";
 static const char* kOutputDirName = "out";
+static const char* kOutputFallbackPath = "./";
 const char* kCannotFindProjectRootDir = "ERROR_CANNOT_FIND_PROJECT_ROOT_DIR";
 
-std::string GetProjectRootPath() {
+std::string ProjectRootPath() {
   char path_buffer[FILENAME_MAX];
   if (!GET_CURRENT_DIR(path_buffer, sizeof(path_buffer))) {
     fprintf(stderr, "Cannot get current directory!\n");
@@ -67,10 +68,10 @@
   return kCannotFindProjectRootDir;
 }
 
-std::string GetOutputDir() {
-  std::string path = GetProjectRootPath();
+std::string OutputPath() {
+  std::string path = ProjectRootPath();
   if (path == kCannotFindProjectRootDir) {
-    return kCannotFindProjectRootDir;
+    return kOutputFallbackPath;
   }
   path += kOutputDirName;
   struct stat path_info = {0};
@@ -79,7 +80,7 @@
     if (!S_ISDIR(path_info.st_mode)) {
       fprintf(stderr, "Path %s exists but is not a directory! Remove this file "
               "and re-run to create the output folder.\n", path.c_str());
-      return kCannotFindProjectRootDir;
+      return kOutputFallbackPath;
     }
   } else {
 #ifdef WIN32
diff --git a/test/testsupport/fileutils.h b/test/testsupport/fileutils.h
index 0dd662a..a111a7a 100644
--- a/test/testsupport/fileutils.h
+++ b/test/testsupport/fileutils.h
@@ -9,7 +9,7 @@
  */
 
 // File utilities for testing purposes.
-// The GetProjectRootPath() method is a convenient way of getting an absolute
+// The ProjectRootPath() method is a convenient way of getting an absolute
 // path to the project source tree root directory. Using this, it is easy to
 // refer to test resource files in a portable way.
 //
@@ -19,7 +19,7 @@
 //
 // Example use:
 // Assume we have the following code being used in a test source file:
-// const std::string kInputFile = webrtc::test::GetProjectRootPath() +
+// const std::string kInputFile = webrtc::test::ProjectRootPath() +
 //     "test/data/voice_engine/audio_long16.wav";
 // // Use the kInputFile for the tests...
 //
@@ -29,7 +29,7 @@
 // * Test project located in /home/user/webrtc/trunk/src/testproject
 // * Test binary compiled as:
 //   /home/user/webrtc/trunk/out/Debug/testproject_unittests
-// Then GetProjectRootPath() will return /home/user/webrtc/trunk/ no matter if
+// Then ProjectRootPath() will return /home/user/webrtc/trunk/ no matter if
 // the test binary is executed from standing in either of:
 // /home/user/webrtc/trunk
 // or
@@ -41,7 +41,7 @@
 // * Test project located in C:\Users\user\webrtc\trunk\src\testproject
 // * Test binary compiled as:
 //   C:\Users\user\webrtc\trunk\src\testproject\Debug\testproject_unittests.exe
-// Then GetProjectRootPath() will return C:\Users\user\webrtc\trunk\ when the
+// Then ProjectRootPath() will return C:\Users\user\webrtc\trunk\ when the
 // test binary is executed from inside Visual Studio.
 // It will also return the same path if the test is executed from a command
 // prompt standing in C:\Users\user\webrtc\trunk\src\testproject\Debug
@@ -51,7 +51,7 @@
 // * Test project located in /Users/user/webrtc/trunk/src/testproject
 // * Test binary compiled as:
 //   /Users/user/webrtc/trunk/xcodebuild/Debug/testproject_unittests
-// Then GetProjectRootPath() will return /Users/user/webrtc/trunk/ no matter if
+// Then ProjectRootPath() will return /Users/user/webrtc/trunk/ no matter if
 // the test binary is executed from standing in either of:
 // /Users/user/webrtc/trunk
 // or
@@ -66,7 +66,7 @@
 namespace webrtc {
 namespace test {
 
-// This is the "directory" returned if the GetProjectPath() function fails
+// This is the "directory" returned if the ProjectPath() function fails
 // to find the project root.
 extern const char* kCannotFindProjectRootDir;
 
@@ -86,20 +86,18 @@
 // WITH a trailing path delimiter.
 // If the project root is not found, the string specified by
 // kCannotFindProjectRootDir is returned.
-std::string GetProjectRootPath();
+std::string ProjectRootPath();
 
 // Creates and returns the absolute path to the output directory where log files
 // and other test artifacts should be put. The output directory is always a
 // directory named "out" at the top-level of the project, i.e. a subfolder to
-// the path returned by GetProjectRootPath().
+// the path returned by ProjectRootPath().
 //
-// Details described for GetProjectRootPath() apply here too.
+// Details described for ProjectRootPath() apply here too.
 //
-// Returns the absolute path to the output directory (named "out") below the
-// project root dir WITH a trailing path delimiter.
-// If the project root is not found, the string specified by
-// kCannotFindProjectRootDir is returned.
-std::string GetOutputDir();
+// Returns the path WITH a trailing path delimiter. If the project root is not
+// found, the current working directory ("./") is returned as a fallback.
+std::string OutputPath();
 
 }  // namespace test
 }  // namespace webrtc
diff --git a/test/testsupport/fileutils_unittest.cc b/test/testsupport/fileutils_unittest.cc
index 1f8a7ac..493256b 100644
--- a/test/testsupport/fileutils_unittest.cc
+++ b/test/testsupport/fileutils_unittest.cc
@@ -53,16 +53,16 @@
 // The test is not fully testing the implementation, since we cannot be sure
 // of where the executable was launched from.
 // The test will fail if the top level directory is not named "trunk".
-TEST_F(FileUtilsTest, GetProjectRootPathFromUnchangedWorkingDir) {
-  std::string path = GetProjectRootPath();
+TEST_F(FileUtilsTest, ProjectRootPathFromUnchangedWorkingDir) {
+  std::string path = ProjectRootPath();
   std::string expected_end = "trunk";
   expected_end = kPathDelimiter + expected_end + kPathDelimiter;
   ASSERT_EQ(path.length() - expected_end.length(), path.find(expected_end));
 }
 
 // Similar to the above test, but for the output dir
-TEST_F(FileUtilsTest, GetOutputDirFromUnchangedWorkingDir) {
-  std::string path = GetOutputDir();
+TEST_F(FileUtilsTest, OutputPathFromUnchangedWorkingDir) {
+  std::string path = OutputPath();
   std::string expected_end = "out";
   expected_end = kPathDelimiter + expected_end + kPathDelimiter;
   ASSERT_EQ(path.length() - expected_end.length(), path.find(expected_end));
@@ -71,38 +71,38 @@
 // Tests setting the current working directory to a directory three levels
 // deeper from the current one. Then testing that the project path returned
 // is still the same, when the function under test is called again.
-TEST_F(FileUtilsTest, GetProjectRootPathFromDeeperWorkingDir) {
-  std::string path = GetProjectRootPath();
+TEST_F(FileUtilsTest, ProjectRootPathFromDeeperWorkingDir) {
+  std::string path = ProjectRootPath();
   std::string original_working_dir = path;  // This is the correct project root
   // Change to a subdirectory path (the full path doesn't have to exist).
   path += "foo/bar/baz";
   chdir(path.c_str());
-  ASSERT_EQ(original_working_dir, GetProjectRootPath());
+  ASSERT_EQ(original_working_dir, ProjectRootPath());
 }
 
 // Similar to the above test, but for the output dir
-TEST_F(FileUtilsTest, GetOutputDirFromDeeperWorkingDir) {
-  std::string path = GetOutputDir();
+TEST_F(FileUtilsTest, OutputPathFromDeeperWorkingDir) {
+  std::string path = OutputPath();
   std::string original_working_dir = path;
   path += "foo/bar/baz";
   chdir(path.c_str());
-  ASSERT_EQ(original_working_dir, GetOutputDir());
+  ASSERT_EQ(original_working_dir, OutputPath());
 }
 
 // Tests with current working directory set to a directory higher up in the
 // directory tree than the project root dir. This case shall return a specified
 // error string as a directory (which will be an invalid path).
-TEST_F(FileUtilsTest, GetProjectRootPathFromRootWorkingDir) {
+TEST_F(FileUtilsTest, ProjectRootPathFromRootWorkingDir) {
   // Change current working dir to the root of the current file system
   // (this will always be "above" our project root dir).
   chdir(kPathDelimiter);
-  ASSERT_EQ(kCannotFindProjectRootDir, GetProjectRootPath());
+  ASSERT_EQ(kCannotFindProjectRootDir, ProjectRootPath());
 }
 
 // Similar to the above test, but for the output dir
-TEST_F(FileUtilsTest, GetOutputDirFromRootWorkingDir) {
+TEST_F(FileUtilsTest, OutputPathFromRootWorkingDir) {
   chdir(kPathDelimiter);
-  ASSERT_EQ(kCannotFindProjectRootDir, GetOutputDir());
+  ASSERT_EQ("./", OutputPath());
 }
 
 }  // namespace test