1*486b6013SSenran Zhang //===- llvm/unittest/Support/CommandLineInit/CommandLineInitTest.cpp ------===//
2*486b6013SSenran Zhang //
3*486b6013SSenran Zhang // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*486b6013SSenran Zhang // See https://llvm.org/LICENSE.txt for license information.
5*486b6013SSenran Zhang // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*486b6013SSenran Zhang //
7*486b6013SSenran Zhang //===----------------------------------------------------------------------===//
8*486b6013SSenran Zhang //
9*486b6013SSenran Zhang /// \file
10*486b6013SSenran Zhang /// Check if preset options in libSupport -- e.g., "help", "version", etc. --
11*486b6013SSenran Zhang /// are correctly initialized and registered before getRegisteredOptions is
12*486b6013SSenran Zhang /// invoked.
13*486b6013SSenran Zhang ///
14*486b6013SSenran Zhang /// Most code here comes from llvm/utils/unittest/UnitTestMain/TestMain.cpp,
15*486b6013SSenran Zhang /// except that llvm::cl::ParseCommandLineOptions() call is removed.
16*486b6013SSenran Zhang //
17*486b6013SSenran Zhang //===----------------------------------------------------------------------===//
18*486b6013SSenran Zhang
19*486b6013SSenran Zhang #include "llvm/Support/CommandLine.h"
20*486b6013SSenran Zhang #include "gtest/gtest.h"
21*486b6013SSenran Zhang
22*486b6013SSenran Zhang #if defined(_WIN32)
23*486b6013SSenran Zhang #include <windows.h>
24*486b6013SSenran Zhang #if defined(_MSC_VER)
25*486b6013SSenran Zhang #include <crtdbg.h>
26*486b6013SSenran Zhang #endif
27*486b6013SSenran Zhang #endif
28*486b6013SSenran Zhang
29*486b6013SSenran Zhang using namespace llvm;
30*486b6013SSenran Zhang
main(int argc,char ** argv)31*486b6013SSenran Zhang int main(int argc, char **argv) {
32*486b6013SSenran Zhang testing::InitGoogleTest(&argc, argv);
33*486b6013SSenran Zhang
34*486b6013SSenran Zhang #if defined(_WIN32)
35*486b6013SSenran Zhang // Disable all of the possible ways Windows conspires to make automated
36*486b6013SSenran Zhang // testing impossible.
37*486b6013SSenran Zhang ::SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
38*486b6013SSenran Zhang #if defined(_MSC_VER)
39*486b6013SSenran Zhang ::_set_error_mode(_OUT_TO_STDERR);
40*486b6013SSenran Zhang _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
41*486b6013SSenran Zhang _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
42*486b6013SSenran Zhang _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
43*486b6013SSenran Zhang _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
44*486b6013SSenran Zhang _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
45*486b6013SSenran Zhang _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
46*486b6013SSenran Zhang #endif
47*486b6013SSenran Zhang #endif
48*486b6013SSenran Zhang
49*486b6013SSenran Zhang return RUN_ALL_TESTS();
50*486b6013SSenran Zhang }
51*486b6013SSenran Zhang
TEST(CommandLineInitTest,GetPresetOptions)52*486b6013SSenran Zhang TEST(CommandLineInitTest, GetPresetOptions) {
53*486b6013SSenran Zhang StringMap<cl::Option *> &Map =
54*486b6013SSenran Zhang cl::getRegisteredOptions(*cl::TopLevelSubCommand);
55*486b6013SSenran Zhang
56*486b6013SSenran Zhang for (auto *Str :
57*486b6013SSenran Zhang {"help", "help-hidden", "help-list", "help-list-hidden", "version"})
58*486b6013SSenran Zhang EXPECT_EQ(Map.count(Str), (size_t)1)
59*486b6013SSenran Zhang << "Could not get preset option `" << Str << '`';
60*486b6013SSenran Zhang }
61