+#endif
+
+TEST(String, readFile) {
+ srand(time(nullptr));
+ const string tmpPrefix = to<string>("/tmp/folly-file-util-test-",
+ getpid(), "-", rand(), "-");
+ const string afile = tmpPrefix + "myfile";
+ const string emptyFile = tmpPrefix + "myfile2";
+
+ SCOPE_EXIT {
+ unlink(afile.c_str());
+ unlink(emptyFile.c_str());
+ };
+
+ EXPECT_TRUE(writeFile(string(), emptyFile.c_str()));
+ EXPECT_TRUE(writeFile(StringPiece("bar"), afile.c_str()));
+
+ {
+ string contents;
+ EXPECT_TRUE(readFile(emptyFile.c_str(), contents));
+ EXPECT_EQ(contents, "");
+ EXPECT_TRUE(readFile(afile.c_str(), contents, 0));
+ EXPECT_EQ("", contents);
+ EXPECT_TRUE(readFile(afile.c_str(), contents, 2));
+ EXPECT_EQ("ba", contents);
+ EXPECT_TRUE(readFile(afile.c_str(), contents));
+ EXPECT_EQ("bar", contents);
+ }
+ {
+ vector<unsigned char> contents;
+ EXPECT_TRUE(readFile(emptyFile.c_str(), contents));
+ EXPECT_EQ(vector<unsigned char>(), contents);
+ EXPECT_TRUE(readFile(afile.c_str(), contents, 0));
+ EXPECT_EQ(vector<unsigned char>(), contents);
+ EXPECT_TRUE(readFile(afile.c_str(), contents, 2));
+ EXPECT_EQ(vector<unsigned char>({'b', 'a'}), contents);
+ EXPECT_TRUE(readFile(afile.c_str(), contents));
+ EXPECT_EQ(vector<unsigned char>({'b', 'a', 'r'}), contents);
+ }
+}