blob: cf6cd19b619aa9b2fe65b28df0a9092162542916 [file] [log] [blame]
//===- 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