1 // Protocol Buffers - Google's data interchange format 2 // Copyright 2008 Google Inc. All rights reserved. 3 // https://developers.google.com/protocol-buffers/ 4 // 5 // Redistribution and use in source and binary forms, with or without 6 // modification, are permitted provided that the following conditions are 7 // met: 8 // 9 // * Redistributions of source code must retain the above copyright 10 // notice, this list of conditions and the following disclaimer. 11 // * Redistributions in binary form must reproduce the above 12 // copyright notice, this list of conditions and the following disclaimer 13 // in the documentation and/or other materials provided with the 14 // distribution. 15 // * Neither the name of Google Inc. nor the names of its 16 // contributors may be used to endorse or promote products derived from 17 // this software without specific prior written permission. 18 // 19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 31 // Author: kenton@google.com (Kenton Varda) 32 // emulates google3/file/base/file.h 33 34 #ifndef GOOGLE_PROTOBUF_TESTING_FILE_H__ 35 #define GOOGLE_PROTOBUF_TESTING_FILE_H__ 36 37 #include <google/protobuf/stubs/common.h> 38 39 namespace google { 40 namespace protobuf { 41 42 const int DEFAULT_FILE_MODE = 0777; 43 44 // Protocol buffer code only uses a couple static methods of File, and only 45 // in tests. 46 class File { 47 public: 48 // Check if the file exists. 49 static bool Exists(const string& name); 50 51 // Read an entire file to a string. Return true if successful, false 52 // otherwise. 53 static bool ReadFileToString(const string& name, string* output, bool text_mode = false); 54 55 // Same as above, but crash on failure. 56 static void ReadFileToStringOrDie(const string& name, string* output); 57 58 // Create a file and write a string to it. 59 static bool WriteStringToFile(const string& contents, 60 const string& name); 61 62 // Same as above, but crash on failure. 63 static void WriteStringToFileOrDie(const string& contents, 64 const string& name); 65 66 // Create a directory. 67 static bool CreateDir(const string& name, int mode); 68 69 // Create a directory and all parent directories if necessary. 70 static bool RecursivelyCreateDir(const string& path, int mode); 71 72 // If "name" is a file, we delete it. If it is a directory, we 73 // call DeleteRecursively() for each file or directory (other than 74 // dot and double-dot) within it, and then delete the directory itself. 75 // The "dummy" parameters have a meaning in the original version of this 76 // method but they are not used anywhere in protocol buffers. 77 static void DeleteRecursively(const string& name, 78 void* dummy1, void* dummy2); 79 80 // Change working directory to given directory. 81 static bool ChangeWorkingDirectory(const string& new_working_directory); 82 GetContents(const string & name,string * output,bool)83 static bool GetContents( 84 const string& name, string* output, bool /*is_default*/) { 85 return ReadFileToString(name, output); 86 } 87 GetContentsAsText(const string & name,string * output,bool)88 static bool GetContentsAsText( 89 const string& name, string* output, bool /*is_default*/) { 90 return ReadFileToString(name, output, true); 91 } 92 SetContents(const string & name,const string & contents,bool)93 static bool SetContents( 94 const string& name, const string& contents, bool /*is_default*/) { 95 return WriteStringToFile(contents, name); 96 } 97 98 private: 99 GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(File); 100 }; 101 102 } // namespace protobuf 103 } // namespace google 104 105 #endif // GOOGLE_PROTOBUF_TESTING_FILE_H__ 106