|  | //===-- FileTest.cpp ------------------------------------------------------===// | 
|  | // | 
|  | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | // See https://llvm.org/LICENSE.txt for license information. | 
|  | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #include "lldb/Host/File.h" | 
|  | #include "llvm/ADT/SmallString.h" | 
|  | #include "llvm/Support/FileSystem.h" | 
|  | #include "llvm/Support/FileUtilities.h" | 
|  | #include "llvm/Support/Path.h" | 
|  | #include "llvm/Support/Program.h" | 
|  | #include "gtest/gtest.h" | 
|  |  | 
|  | using namespace lldb; | 
|  | using namespace lldb_private; | 
|  |  | 
|  | TEST(File, GetWaitableHandleFileno) { | 
|  | const auto *Info = testing::UnitTest::GetInstance()->current_test_info(); | 
|  |  | 
|  | llvm::SmallString<128> name; | 
|  | int fd; | 
|  | llvm::sys::fs::createTemporaryFile(llvm::Twine(Info->test_case_name()) + "-" + | 
|  | Info->name(), | 
|  | "test", fd, name); | 
|  | llvm::FileRemover remover(name); | 
|  | ASSERT_GE(fd, 0); | 
|  |  | 
|  | FILE *stream = fdopen(fd, "r"); | 
|  | ASSERT_TRUE(stream); | 
|  |  | 
|  | NativeFile file(stream, true); | 
|  | EXPECT_EQ(file.GetWaitableHandle(), fd); | 
|  | } | 
|  |  | 
|  | TEST(File, GetStreamFromDescriptor) { | 
|  | const auto *Info = testing::UnitTest::GetInstance()->current_test_info(); | 
|  | llvm::SmallString<128> name; | 
|  | int fd; | 
|  | llvm::sys::fs::createTemporaryFile(llvm::Twine(Info->test_case_name()) + "-" + | 
|  | Info->name(), | 
|  | "test", fd, name); | 
|  |  | 
|  | llvm::FileRemover remover(name); | 
|  | ASSERT_GE(fd, 0); | 
|  |  | 
|  | NativeFile file(fd, File::eOpenOptionWrite, true); | 
|  | ASSERT_TRUE(file.IsValid()); | 
|  |  | 
|  | FILE *stream = file.GetStream(); | 
|  | ASSERT_TRUE(stream != NULL); | 
|  |  | 
|  | EXPECT_EQ(file.GetDescriptor(), fd); | 
|  | EXPECT_EQ(file.GetWaitableHandle(), fd); | 
|  | } |