153 lines · cpp
1//===----------------------------------------------------------------------===//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-exception6//7//===----------------------------------------------------------------------===//8 9#include "llvm/Support/VirtualOutputConfig.h"10#include "llvm/Support/FileSystem.h"11#include "gtest/gtest.h"12 13using namespace llvm;14using namespace llvm::vfs;15 16namespace {17 18TEST(VirtualOutputConfigTest, construct) {19 // Test defaults.20 EXPECT_FALSE(OutputConfig().getText());21 EXPECT_FALSE(OutputConfig().getCRLF());22 EXPECT_TRUE(OutputConfig().getDiscardOnSignal());23 EXPECT_TRUE(OutputConfig().getAtomicWrite());24 EXPECT_TRUE(OutputConfig().getImplyCreateDirectories());25 EXPECT_FALSE(OutputConfig().getOnlyIfDifferent());26 EXPECT_FALSE(OutputConfig().getAppend());27 28 // Test inverted defaults.29 EXPECT_TRUE(OutputConfig().getNoText());30 EXPECT_TRUE(OutputConfig().getNoCRLF());31 EXPECT_FALSE(OutputConfig().getNoDiscardOnSignal());32 EXPECT_FALSE(OutputConfig().getNoAtomicWrite());33 EXPECT_FALSE(OutputConfig().getNoImplyCreateDirectories());34 EXPECT_TRUE(OutputConfig().getNoOnlyIfDifferent());35 EXPECT_TRUE(OutputConfig().getNoAppend());36}37 38TEST(VirtualOutputConfigTest, set) {39 // Check a flag that defaults to false. Try both 'get's, all three 'set's,40 // and turning back off after turning it on.41 ASSERT_TRUE(OutputConfig().getNoText());42 EXPECT_TRUE(OutputConfig().setText().getText());43 EXPECT_FALSE(OutputConfig().setText().getNoText());44 EXPECT_TRUE(OutputConfig().setText(true).getText());45 EXPECT_FALSE(OutputConfig().setText().setNoText().getText());46 EXPECT_FALSE(OutputConfig().setText().setText(false).getText());47 48 // Check a flag that defaults to true. Try both 'get's, all three 'set's, and49 // turning back on after turning it off.50 ASSERT_TRUE(OutputConfig().getDiscardOnSignal());51 EXPECT_FALSE(OutputConfig().setNoDiscardOnSignal().getDiscardOnSignal());52 EXPECT_TRUE(OutputConfig().setNoDiscardOnSignal().getNoDiscardOnSignal());53 EXPECT_FALSE(OutputConfig().setDiscardOnSignal(false).getDiscardOnSignal());54 EXPECT_TRUE(OutputConfig()55 .setNoDiscardOnSignal()56 .setDiscardOnSignal()57 .getDiscardOnSignal());58 EXPECT_TRUE(OutputConfig()59 .setNoDiscardOnSignal()60 .setDiscardOnSignal(true)61 .getDiscardOnSignal());62 63 // Set multiple flags.64 OutputConfig Config;65 Config.setText().setNoDiscardOnSignal().setNoImplyCreateDirectories();66 EXPECT_TRUE(Config.getText());67 EXPECT_TRUE(Config.getNoDiscardOnSignal());68 EXPECT_TRUE(Config.getNoImplyCreateDirectories());69}70 71TEST(VirtualOutputConfigTest, equals) {72 EXPECT_TRUE(OutputConfig() == OutputConfig());73 EXPECT_FALSE(OutputConfig() != OutputConfig());74 EXPECT_EQ(OutputConfig().setAtomicWrite(), OutputConfig().setAtomicWrite());75 EXPECT_NE(OutputConfig().setAtomicWrite(), OutputConfig().setNoAtomicWrite());76}77 78static std::string toString(OutputConfig Config) {79 std::string Printed;80 raw_string_ostream OS(Printed);81 Config.print(OS);82 return Printed;83}84 85TEST(VirtualOutputConfigTest, print) {86 EXPECT_EQ("{}", toString(OutputConfig()));87 EXPECT_EQ("{Text}", toString(OutputConfig().setText()));88 EXPECT_EQ("{Text,NoDiscardOnSignal}",89 toString(OutputConfig().setText().setNoDiscardOnSignal()));90 EXPECT_EQ("{Text,NoDiscardOnSignal}",91 toString(OutputConfig().setNoDiscardOnSignal().setText()));92}93 94TEST(VirtualOutputConfigTest, BinaryAndTextWithCRLF) {95 // Test defaults.96 EXPECT_TRUE(OutputConfig().getBinary());97 EXPECT_FALSE(OutputConfig().getTextWithCRLF());98 EXPECT_FALSE(OutputConfig().getText());99 EXPECT_FALSE(OutputConfig().getCRLF());100 101 // Test setting.102 EXPECT_TRUE(OutputConfig().setTextWithCRLF().getTextWithCRLF());103 EXPECT_TRUE(OutputConfig().setTextWithCRLF().getText());104 EXPECT_TRUE(OutputConfig().setTextWithCRLF().getCRLF());105 EXPECT_TRUE(OutputConfig().setText().setCRLF().getTextWithCRLF());106 EXPECT_FALSE(OutputConfig().setText().getBinary());107 EXPECT_FALSE(OutputConfig().setTextWithCRLF().getBinary());108 EXPECT_FALSE(OutputConfig().setTextWithCRLF().setBinary().getText());109 EXPECT_FALSE(OutputConfig().setTextWithCRLF().setBinary().getCRLF());110 111 // Test setTextWithCRLF(bool).112 EXPECT_TRUE(OutputConfig().setBinary().setTextWithCRLF(true).getText());113 EXPECT_TRUE(OutputConfig().setBinary().setTextWithCRLF(true).getCRLF());114 EXPECT_TRUE(115 OutputConfig().setTextWithCRLF().setTextWithCRLF(false).getBinary());116 117 // Test printing.118 EXPECT_EQ("{Text,CRLF}", toString(OutputConfig().setTextWithCRLF()));119}120 121TEST(VirtualOutputConfigTest, OpenFlags) {122 using namespace llvm::sys::fs;123 124 // Confirm the default is binary.125 ASSERT_EQ(OutputConfig().setBinary(), OutputConfig());126 127 // Most flags are not supported / have no effect.128 EXPECT_EQ(OutputConfig(), OutputConfig().setOpenFlags(OF_None));129 EXPECT_EQ(OutputConfig(), OutputConfig().setOpenFlags(OF_Delete));130 EXPECT_EQ(OutputConfig(), OutputConfig().setOpenFlags(OF_ChildInherit));131 EXPECT_EQ(OutputConfig(), OutputConfig().setOpenFlags(OF_UpdateAtime));132 133 // Check setting OF_Text and OF_CRLF.134 for (OutputConfig Init : {135 OutputConfig(),136 OutputConfig().setText(),137 OutputConfig().setTextWithCRLF(),138 OutputConfig().setAppend(),139 140 // Should be overridden despite being invalid.141 OutputConfig().setCRLF(),142 }) {143 EXPECT_EQ(OutputConfig(), Init.setOpenFlags(OF_None));144 EXPECT_EQ(OutputConfig(), Init.setOpenFlags(OF_CRLF));145 EXPECT_EQ(OutputConfig().setText(), Init.setOpenFlags(OF_Text));146 EXPECT_EQ(OutputConfig().setTextWithCRLF(),147 Init.setOpenFlags(OF_TextWithCRLF));148 EXPECT_EQ(OutputConfig().setAppend(), Init.setOpenFlags(OF_Append));149 }150}151 152} // anonymous namespace153