1*0ece51c6SJianzhou Zhao //===- llvm/unittest/Support/raw_fd_stream_test.cpp - raw_fd_stream tests -===//
2*0ece51c6SJianzhou Zhao //
3*0ece51c6SJianzhou Zhao // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*0ece51c6SJianzhou Zhao // See https://llvm.org/LICENSE.txt for license information.
5*0ece51c6SJianzhou Zhao // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*0ece51c6SJianzhou Zhao //
7*0ece51c6SJianzhou Zhao //===----------------------------------------------------------------------===//
8*0ece51c6SJianzhou Zhao
9*0ece51c6SJianzhou Zhao #include "llvm/ADT/SmallString.h"
10*0ece51c6SJianzhou Zhao #include "llvm/Config/llvm-config.h"
11*0ece51c6SJianzhou Zhao #include "llvm/Support/Casting.h"
12*0ece51c6SJianzhou Zhao #include "llvm/Support/FileSystem.h"
13*0ece51c6SJianzhou Zhao #include "llvm/Support/FileUtilities.h"
14*0ece51c6SJianzhou Zhao #include "llvm/Support/raw_ostream.h"
15*0ece51c6SJianzhou Zhao #include "gtest/gtest.h"
16*0ece51c6SJianzhou Zhao
17*0ece51c6SJianzhou Zhao using namespace llvm;
18*0ece51c6SJianzhou Zhao
19*0ece51c6SJianzhou Zhao namespace {
20*0ece51c6SJianzhou Zhao
TEST(raw_fd_streamTest,ReadAfterWrite)21*0ece51c6SJianzhou Zhao TEST(raw_fd_streamTest, ReadAfterWrite) {
22*0ece51c6SJianzhou Zhao SmallString<64> Path;
23*0ece51c6SJianzhou Zhao int FD;
24*0ece51c6SJianzhou Zhao ASSERT_FALSE(sys::fs::createTemporaryFile("foo", "bar", FD, Path));
25*0ece51c6SJianzhou Zhao FileRemover Cleanup(Path);
26*0ece51c6SJianzhou Zhao std::error_code EC;
27*0ece51c6SJianzhou Zhao raw_fd_stream OS(Path, EC);
28*0ece51c6SJianzhou Zhao EXPECT_TRUE(!EC);
29*0ece51c6SJianzhou Zhao
30*0ece51c6SJianzhou Zhao char Bytes[8];
31*0ece51c6SJianzhou Zhao
32*0ece51c6SJianzhou Zhao OS.write("01234567", 8);
33*0ece51c6SJianzhou Zhao
34*0ece51c6SJianzhou Zhao OS.seek(3);
35*0ece51c6SJianzhou Zhao EXPECT_EQ(OS.read(Bytes, 2), 2);
36*0ece51c6SJianzhou Zhao EXPECT_EQ(Bytes[0], '3');
37*0ece51c6SJianzhou Zhao EXPECT_EQ(Bytes[1], '4');
38*0ece51c6SJianzhou Zhao
39*0ece51c6SJianzhou Zhao OS.seek(4);
40*0ece51c6SJianzhou Zhao OS.write("xyz", 3);
41*0ece51c6SJianzhou Zhao
42*0ece51c6SJianzhou Zhao OS.seek(0);
43*0ece51c6SJianzhou Zhao EXPECT_EQ(OS.read(Bytes, 8), 8);
44*0ece51c6SJianzhou Zhao EXPECT_EQ(Bytes[0], '0');
45*0ece51c6SJianzhou Zhao EXPECT_EQ(Bytes[1], '1');
46*0ece51c6SJianzhou Zhao EXPECT_EQ(Bytes[2], '2');
47*0ece51c6SJianzhou Zhao EXPECT_EQ(Bytes[3], '3');
48*0ece51c6SJianzhou Zhao EXPECT_EQ(Bytes[4], 'x');
49*0ece51c6SJianzhou Zhao EXPECT_EQ(Bytes[5], 'y');
50*0ece51c6SJianzhou Zhao EXPECT_EQ(Bytes[6], 'z');
51*0ece51c6SJianzhou Zhao EXPECT_EQ(Bytes[7], '7');
52*0ece51c6SJianzhou Zhao }
53*0ece51c6SJianzhou Zhao
TEST(raw_fd_streamTest,DynCast)54*0ece51c6SJianzhou Zhao TEST(raw_fd_streamTest, DynCast) {
55*0ece51c6SJianzhou Zhao {
56*0ece51c6SJianzhou Zhao std::error_code EC;
57*0ece51c6SJianzhou Zhao raw_fd_stream OS("-", EC);
58*0ece51c6SJianzhou Zhao EXPECT_TRUE(dyn_cast<raw_fd_stream>(&OS));
59*0ece51c6SJianzhou Zhao }
60*0ece51c6SJianzhou Zhao {
61*0ece51c6SJianzhou Zhao std::error_code EC;
62*0ece51c6SJianzhou Zhao raw_fd_ostream OS("-", EC);
63*0ece51c6SJianzhou Zhao EXPECT_FALSE(dyn_cast<raw_fd_stream>(&OS));
64*0ece51c6SJianzhou Zhao }
65*0ece51c6SJianzhou Zhao }
66*0ece51c6SJianzhou Zhao
67*0ece51c6SJianzhou Zhao } // namespace
68