diff options
Diffstat (limited to 'llvm/unittests/Support/VirtualOutputConfigTest.cpp')
| -rw-r--r-- | llvm/unittests/Support/VirtualOutputConfigTest.cpp | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/llvm/unittests/Support/VirtualOutputConfigTest.cpp b/llvm/unittests/Support/VirtualOutputConfigTest.cpp new file mode 100644 index 000000000000..cf6cd19b619a --- /dev/null +++ b/llvm/unittests/Support/VirtualOutputConfigTest.cpp @@ -0,0 +1,152 @@ +//===- VirtualOutputConfigTest.cpp - vfs::OutputConfig 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/Support/VirtualOutputConfig.h" +#include "llvm/Support/FileSystem.h" +#include "gtest/gtest.h" + +using namespace llvm; +using namespace llvm::vfs; + +namespace { + +TEST(VirtualOutputConfigTest, construct) { + // Test defaults. + EXPECT_FALSE(OutputConfig().getText()); + EXPECT_FALSE(OutputConfig().getCRLF()); + EXPECT_TRUE(OutputConfig().getDiscardOnSignal()); + EXPECT_TRUE(OutputConfig().getAtomicWrite()); + EXPECT_TRUE(OutputConfig().getImplyCreateDirectories()); + EXPECT_FALSE(OutputConfig().getOnlyIfDifferent()); + EXPECT_FALSE(OutputConfig().getAppend()); + + // Test inverted defaults. + EXPECT_TRUE(OutputConfig().getNoText()); + EXPECT_TRUE(OutputConfig().getNoCRLF()); + EXPECT_FALSE(OutputConfig().getNoDiscardOnSignal()); + EXPECT_FALSE(OutputConfig().getNoAtomicWrite()); + EXPECT_FALSE(OutputConfig().getNoImplyCreateDirectories()); + EXPECT_TRUE(OutputConfig().getNoOnlyIfDifferent()); + EXPECT_TRUE(OutputConfig().getNoAppend()); +} + +TEST(VirtualOutputConfigTest, set) { + // Check a flag that defaults to false. Try both 'get's, all three 'set's, + // and turning back off after turning it on. + ASSERT_TRUE(OutputConfig().getNoText()); + EXPECT_TRUE(OutputConfig().setText().getText()); + EXPECT_FALSE(OutputConfig().setText().getNoText()); + EXPECT_TRUE(OutputConfig().setText(true).getText()); + EXPECT_FALSE(OutputConfig().setText().setNoText().getText()); + EXPECT_FALSE(OutputConfig().setText().setText(false).getText()); + + // Check a flag that defaults to true. Try both 'get's, all three 'set's, and + // turning back on after turning it off. + ASSERT_TRUE(OutputConfig().getDiscardOnSignal()); + EXPECT_FALSE(OutputConfig().setNoDiscardOnSignal().getDiscardOnSignal()); + EXPECT_TRUE(OutputConfig().setNoDiscardOnSignal().getNoDiscardOnSignal()); + EXPECT_FALSE(OutputConfig().setDiscardOnSignal(false).getDiscardOnSignal()); + EXPECT_TRUE(OutputConfig() + .setNoDiscardOnSignal() + .setDiscardOnSignal() + .getDiscardOnSignal()); + EXPECT_TRUE(OutputConfig() + .setNoDiscardOnSignal() + .setDiscardOnSignal(true) + .getDiscardOnSignal()); + + // Set multiple flags. + OutputConfig Config; + Config.setText().setNoDiscardOnSignal().setNoImplyCreateDirectories(); + EXPECT_TRUE(Config.getText()); + EXPECT_TRUE(Config.getNoDiscardOnSignal()); + EXPECT_TRUE(Config.getNoImplyCreateDirectories()); +} + +TEST(VirtualOutputConfigTest, equals) { + EXPECT_TRUE(OutputConfig() == OutputConfig()); + EXPECT_FALSE(OutputConfig() != OutputConfig()); + EXPECT_EQ(OutputConfig().setAtomicWrite(), OutputConfig().setAtomicWrite()); + EXPECT_NE(OutputConfig().setAtomicWrite(), OutputConfig().setNoAtomicWrite()); +} + +static std::string toString(OutputConfig Config) { + std::string Printed; + raw_string_ostream OS(Printed); + Config.print(OS); + return Printed; +} + +TEST(VirtualOutputConfigTest, print) { + EXPECT_EQ("{}", toString(OutputConfig())); + EXPECT_EQ("{Text}", toString(OutputConfig().setText())); + EXPECT_EQ("{Text,NoDiscardOnSignal}", + toString(OutputConfig().setText().setNoDiscardOnSignal())); + EXPECT_EQ("{Text,NoDiscardOnSignal}", + toString(OutputConfig().setNoDiscardOnSignal().setText())); +} + +TEST(VirtualOutputConfigTest, BinaryAndTextWithCRLF) { + // Test defaults. + EXPECT_TRUE(OutputConfig().getBinary()); + EXPECT_FALSE(OutputConfig().getTextWithCRLF()); + EXPECT_FALSE(OutputConfig().getText()); + EXPECT_FALSE(OutputConfig().getCRLF()); + + // Test setting. + EXPECT_TRUE(OutputConfig().setTextWithCRLF().getTextWithCRLF()); + EXPECT_TRUE(OutputConfig().setTextWithCRLF().getText()); + EXPECT_TRUE(OutputConfig().setTextWithCRLF().getCRLF()); + EXPECT_TRUE(OutputConfig().setText().setCRLF().getTextWithCRLF()); + EXPECT_FALSE(OutputConfig().setText().getBinary()); + EXPECT_FALSE(OutputConfig().setTextWithCRLF().getBinary()); + EXPECT_FALSE(OutputConfig().setTextWithCRLF().setBinary().getText()); + EXPECT_FALSE(OutputConfig().setTextWithCRLF().setBinary().getCRLF()); + + // Test setTextWithCRLF(bool). + EXPECT_TRUE(OutputConfig().setBinary().setTextWithCRLF(true).getText()); + EXPECT_TRUE(OutputConfig().setBinary().setTextWithCRLF(true).getCRLF()); + EXPECT_TRUE( + OutputConfig().setTextWithCRLF().setTextWithCRLF(false).getBinary()); + + // Test printing. + EXPECT_EQ("{Text,CRLF}", toString(OutputConfig().setTextWithCRLF())); +} + +TEST(VirtualOutputConfigTest, OpenFlags) { + using namespace llvm::sys::fs; + + // Confirm the default is binary. + ASSERT_EQ(OutputConfig().setBinary(), OutputConfig()); + + // Most flags are not supported / have no effect. + EXPECT_EQ(OutputConfig(), OutputConfig().setOpenFlags(OF_None)); + EXPECT_EQ(OutputConfig(), OutputConfig().setOpenFlags(OF_Delete)); + EXPECT_EQ(OutputConfig(), OutputConfig().setOpenFlags(OF_ChildInherit)); + EXPECT_EQ(OutputConfig(), OutputConfig().setOpenFlags(OF_UpdateAtime)); + + // Check setting OF_Text and OF_CRLF. + for (OutputConfig Init : { + OutputConfig(), + OutputConfig().setText(), + OutputConfig().setTextWithCRLF(), + OutputConfig().setAppend(), + + // Should be overridden despite being invalid. + OutputConfig().setCRLF(), + }) { + EXPECT_EQ(OutputConfig(), Init.setOpenFlags(OF_None)); + EXPECT_EQ(OutputConfig(), Init.setOpenFlags(OF_CRLF)); + EXPECT_EQ(OutputConfig().setText(), Init.setOpenFlags(OF_Text)); + EXPECT_EQ(OutputConfig().setTextWithCRLF(), + Init.setOpenFlags(OF_TextWithCRLF)); + EXPECT_EQ(OutputConfig().setAppend(), Init.setOpenFlags(OF_Append)); + } +} + +} // anonymous namespace |
