1a7d186c7SJonas Devlieghere //===-- FileTest.cpp --------------------------------------------*- C++ -*-===// 2a7d186c7SJonas Devlieghere // 3a7d186c7SJonas Devlieghere // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4a7d186c7SJonas Devlieghere // See https://llvm.org/LICENSE.txt for license information. 5a7d186c7SJonas Devlieghere // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6a7d186c7SJonas Devlieghere // 7a7d186c7SJonas Devlieghere //===----------------------------------------------------------------------===// 8a7d186c7SJonas Devlieghere 9a7d186c7SJonas Devlieghere #include "lldb/Host/File.h" 10a7d186c7SJonas Devlieghere #include "llvm/ADT/SmallString.h" 11a7d186c7SJonas Devlieghere #include "llvm/Support/FileSystem.h" 12a7d186c7SJonas Devlieghere #include "llvm/Support/FileUtilities.h" 13a7d186c7SJonas Devlieghere #include "llvm/Support/Path.h" 14a7d186c7SJonas Devlieghere #include "llvm/Support/Program.h" 15a7d186c7SJonas Devlieghere #include "gtest/gtest.h" 16a7d186c7SJonas Devlieghere 17a7d186c7SJonas Devlieghere using namespace lldb; 18a7d186c7SJonas Devlieghere using namespace lldb_private; 19a7d186c7SJonas Devlieghere 20a7d186c7SJonas Devlieghere TEST(File, GetWaitableHandleFileno) { 21a7d186c7SJonas Devlieghere const auto *Info = testing::UnitTest::GetInstance()->current_test_info(); 22a7d186c7SJonas Devlieghere 23a7d186c7SJonas Devlieghere llvm::SmallString<128> name; 24a7d186c7SJonas Devlieghere int fd; 25a7d186c7SJonas Devlieghere llvm::sys::fs::createTemporaryFile(llvm::Twine(Info->test_case_name()) + "-" + 26a7d186c7SJonas Devlieghere Info->name(), 27a7d186c7SJonas Devlieghere "test", fd, name); 28a7d186c7SJonas Devlieghere llvm::FileRemover remover(name); 29a7d186c7SJonas Devlieghere ASSERT_GE(fd, 0); 30a7d186c7SJonas Devlieghere 31a7d186c7SJonas Devlieghere FILE *stream = fdopen(fd, "r"); 32a7d186c7SJonas Devlieghere ASSERT_TRUE(stream); 33a7d186c7SJonas Devlieghere 34a7d186c7SJonas Devlieghere File file(stream, true); 35a7d186c7SJonas Devlieghere EXPECT_EQ(file.GetWaitableHandle(), fd); 36a7d186c7SJonas Devlieghere } 37*948786c9SJonas Devlieghere 38*948786c9SJonas Devlieghere TEST(File, GetStreamFromDescriptor) { 39*948786c9SJonas Devlieghere const auto *Info = testing::UnitTest::GetInstance()->current_test_info(); 40*948786c9SJonas Devlieghere llvm::SmallString<128> name; 41*948786c9SJonas Devlieghere int fd; 42*948786c9SJonas Devlieghere llvm::sys::fs::createTemporaryFile(llvm::Twine(Info->test_case_name()) + "-" + 43*948786c9SJonas Devlieghere Info->name(), 44*948786c9SJonas Devlieghere "test", fd, name); 45*948786c9SJonas Devlieghere 46*948786c9SJonas Devlieghere llvm::FileRemover remover(name); 47*948786c9SJonas Devlieghere ASSERT_GE(fd, 0); 48*948786c9SJonas Devlieghere 49*948786c9SJonas Devlieghere File file(fd, File::eOpenOptionWrite, true); 50*948786c9SJonas Devlieghere ASSERT_TRUE(file.IsValid()); 51*948786c9SJonas Devlieghere 52*948786c9SJonas Devlieghere FILE *stream = file.GetStream(); 53*948786c9SJonas Devlieghere ASSERT_TRUE(stream != NULL); 54*948786c9SJonas Devlieghere 55*948786c9SJonas Devlieghere EXPECT_EQ(file.GetDescriptor(), fd); 56*948786c9SJonas Devlieghere EXPECT_EQ(file.GetWaitableHandle(), fd); 57*948786c9SJonas Devlieghere } 58