1 //===- ArchiveTest.cpp ----------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "llvm/Object/Archive.h" 10 #include "llvm/Testing/Support/Error.h" 11 #include "gtest/gtest.h" 12 13 using namespace llvm; 14 using namespace object; 15 using namespace testing; 16 17 static const char ArchiveWithMember[] = "!<arch>\n" // Global header 18 "test/ " // Member name 19 "0 " // Timestamp 20 "0 " // Owner ID 21 "0 " // Group ID 22 "0 " // File mode 23 "9999999999" // Size 24 "`\n"; 25 26 static const char ThinArchiveWithMember[] = "!<thin>\n" // Global header 27 "test/ " // Member name 28 "0 " // Timestamp 29 "0 " // Owner ID 30 "0 " // Group ID 31 "0 " // File mode 32 "9999999999" // Size 33 "`\n"; 34 35 struct ArchiveTestsFixture : Test { 36 Expected<Archive::child_iterator> createChild(StringRef Src) { 37 MemoryBufferRef Source(Src, "archive"); 38 Expected<std::unique_ptr<Archive>> AOrErr = Archive::create(Source); 39 if (!AOrErr) 40 return AOrErr.takeError(); 41 A = std::move(*AOrErr); 42 43 Error ChildErr = Error::success(); 44 auto Child = A->child_begin(ChildErr); 45 if (ChildErr) 46 return std::move(ChildErr); 47 return Child; 48 } 49 50 std::unique_ptr<Archive> A; 51 }; 52 53 TEST_F(ArchiveTestsFixture, ArchiveChildGetSizeRegularArchive) { 54 auto Child = createChild(ArchiveWithMember); 55 ASSERT_THAT_EXPECTED(Child, Succeeded()); 56 57 Expected<uint64_t> Size = (*Child)->getSize(); 58 ASSERT_THAT_EXPECTED(Size, Succeeded()); 59 EXPECT_EQ(9999999999, *Size); 60 } 61 62 TEST_F(ArchiveTestsFixture, ArchiveChildGetSizeThinArchive) { 63 auto Child = createChild(ThinArchiveWithMember); 64 ASSERT_THAT_EXPECTED(Child, Succeeded()); 65 66 Expected<uint64_t> Size = (*Child)->getSize(); 67 ASSERT_THAT_EXPECTED(Size, Succeeded()); 68 EXPECT_EQ(9999999999, *Size); 69 } 70 71 TEST_F(ArchiveTestsFixture, ArchiveChildGetBuffer) { 72 auto Child = createChild(ArchiveWithMember); 73 ASSERT_THAT_EXPECTED(Child, Succeeded()); 74 75 Expected<StringRef> Buffer = (*Child)->getBuffer(); 76 // Cannot use ASSERT_THAT_EXPECTED, as that will attempt to print the 77 // StringRef (which has an invalid size). 78 ASSERT_TRUE((bool)Buffer); 79 EXPECT_EQ(9999999999, Buffer->size()); 80 EXPECT_EQ(ArchiveWithMember + sizeof(ArchiveWithMember) - 1, Buffer->data()); 81 } 82