//===- llvm/unittest/Support/raw_fd_stream_test.cpp - raw_fd_stream tests -===// // // 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 "llvm/ADT/SmallString.h" #include "llvm/Config/llvm-config.h" #include "llvm/Support/Casting.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/FileUtilities.h" #include "llvm/Support/raw_ostream.h" #include "gtest/gtest.h" using namespace llvm; namespace { TEST(raw_fd_streamTest, ReadAfterWrite) { SmallString<64> Path; int FD; ASSERT_FALSE(sys::fs::createTemporaryFile("foo", "bar", FD, Path)); FileRemover Cleanup(Path); std::error_code EC; raw_fd_stream OS(Path, EC); EXPECT_TRUE(!EC); char Bytes[8]; OS.write("01234567", 8); OS.seek(3); EXPECT_EQ(OS.read(Bytes, 2), 2); EXPECT_EQ(Bytes[0], '3'); EXPECT_EQ(Bytes[1], '4'); OS.seek(4); OS.write("xyz", 3); OS.seek(0); EXPECT_EQ(OS.read(Bytes, 8), 8); EXPECT_EQ(Bytes[0], '0'); EXPECT_EQ(Bytes[1], '1'); EXPECT_EQ(Bytes[2], '2'); EXPECT_EQ(Bytes[3], '3'); EXPECT_EQ(Bytes[4], 'x'); EXPECT_EQ(Bytes[5], 'y'); EXPECT_EQ(Bytes[6], 'z'); EXPECT_EQ(Bytes[7], '7'); } TEST(raw_fd_streamTest, DynCast) { { std::error_code EC; raw_fd_stream OS("-", EC); EXPECT_TRUE(dyn_cast(&OS)); } { std::error_code EC; raw_fd_ostream OS("-", EC); EXPECT_FALSE(dyn_cast(&OS)); } } } // namespace