brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.9 KiB · 7911536 Raw
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