make DiskInterfaceTest.StatBadPath quiet
authorEvan Martin <martine@danga.com>
Fri, 19 Apr 2013 21:32:29 +0000 (14:32 -0700)
committerEvan Martin <martine@danga.com>
Fri, 19 Apr 2013 21:32:59 +0000 (14:32 -0700)
Add a flag to temporarily suppress error output.

Fixes issue #281.

src/disk_interface.cc
src/disk_interface.h
src/disk_interface_test.cc

index 7c557cd..ee3e99a 100644 (file)
@@ -80,8 +80,10 @@ TimeStamp RealDiskInterface::Stat(const string& path) {
   // MSDN: "Naming Files, Paths, and Namespaces"
   // http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx
   if (!path.empty() && path[0] != '\\' && path.size() > MAX_PATH) {
-    Error("Stat(%s): Filename longer than %i characters",
-          path.c_str(), MAX_PATH);
+    if (!quiet_) {
+      Error("Stat(%s): Filename longer than %i characters",
+            path.c_str(), MAX_PATH);
+    }
     return -1;
   }
   WIN32_FILE_ATTRIBUTE_DATA attrs;
@@ -89,8 +91,10 @@ TimeStamp RealDiskInterface::Stat(const string& path) {
     DWORD err = GetLastError();
     if (err == ERROR_FILE_NOT_FOUND || err == ERROR_PATH_NOT_FOUND)
       return 0;
-    Error("GetFileAttributesEx(%s): %s", path.c_str(),
-          GetLastErrorString().c_str());
+    if (!quiet_) {
+      Error("GetFileAttributesEx(%s): %s", path.c_str(),
+            GetLastErrorString().c_str());
+    }
     return -1;
   }
   const FILETIME& filetime = attrs.ftLastWriteTime;
@@ -107,7 +111,9 @@ TimeStamp RealDiskInterface::Stat(const string& path) {
   if (stat(path.c_str(), &st) < 0) {
     if (errno == ENOENT || errno == ENOTDIR)
       return 0;
-    Error("stat(%s): %s", path.c_str(), strerror(errno));
+    if (!quiet_) {
+      Error("stat(%s): %s", path.c_str(), strerror(errno));
+    }
     return -1;
   }
   return st.st_mtime;
index 55f8a21..ff1e21c 100644 (file)
@@ -55,12 +55,16 @@ struct DiskInterface {
 
 /// Implementation of DiskInterface that actually hits the disk.
 struct RealDiskInterface : public DiskInterface {
+  RealDiskInterface() : quiet_(false) {}
   virtual ~RealDiskInterface() {}
   virtual TimeStamp Stat(const string& path);
   virtual bool MakeDir(const string& path);
   virtual bool WriteFile(const string& path, const string& contents);
   virtual string ReadFile(const string& path, string* err);
   virtual int RemoveFile(const string& path);
+
+  /// Whether to print on errors.  Used to make a test quieter.
+  bool quiet_;
 };
 
 #endif  // NINJA_DISK_INTERFACE_H_
index 9b43d0f..55822a6 100644 (file)
@@ -60,6 +60,7 @@ TEST_F(DiskInterfaceTest, StatMissingFile) {
 }
 
 TEST_F(DiskInterfaceTest, StatBadPath) {
+  disk_.quiet_ = true;
 #ifdef _WIN32
   string bad_path("cc:\\foo");
   EXPECT_EQ(-1, disk_.Stat(bad_path));
@@ -67,6 +68,7 @@ TEST_F(DiskInterfaceTest, StatBadPath) {
   string too_long_name(512, 'x');
   EXPECT_EQ(-1, disk_.Stat(too_long_name));
 #endif
+  disk_.quiet_ = false;
 }
 
 TEST_F(DiskInterfaceTest, StatExistingFile) {