UnitTests/Path: Add magical tests. This will also test identify_magic.
authorMichael J. Spencer <bigcheesegs@gmail.com>
Thu, 6 Jan 2011 05:58:02 +0000 (05:58 +0000)
committerMichael J. Spencer <bigcheesegs@gmail.com>
Thu, 6 Jan 2011 05:58:02 +0000 (05:58 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122948 91177308-0d34-0410-b5e6-96231b3b80d8

unittests/Support/Path.cpp

index a84ea732dabc20d7c05ad5da4cba000c71cf6065..fa2b45f03b3296e533553c4eec95268a82487fba 100644 (file)
@@ -211,6 +211,29 @@ TEST_F(FileSystemTest, DirectoryIteration) {
   for (fs::directory_iterator i(".", ec), e; i != e; i.increment(ec))
     ASSERT_NO_ERROR(ec);
 }
+
+TEST_F(FileSystemTest, Magic) {
+  struct type {
+    const char *filename;
+    const char *magic_str;
+    size_t      magic_str_len;
+  } types [] = {{"magic.archive", "!<arch>\x0A", 8}};
+
+  // Create some files filled with magic.
+  for (type *i = types, *e = types + (sizeof(types) / sizeof(type)); i != e;
+                                                                     ++i) {
+    SmallString<128> file_pathname(TestDirectory);
+    path::append(file_pathname, i->filename);
+    std::string ErrMsg;
+    raw_fd_ostream file(file_pathname.c_str(), ErrMsg,
+                        raw_fd_ostream::F_Binary);
+    ASSERT_FALSE(file.has_error());
+    StringRef magic(i->magic_str, i->magic_str_len);
+    file << magic;
+    file.flush();
+    bool res = false;
+    ASSERT_NO_ERROR(fs::has_magic(file_pathname.c_str(), magic, res));
+    EXPECT_TRUE(res);
   }
 }