13 #include "llvm/ADT/None.h"
14 #include "llvm/ADT/StringRef.h"
15 #include "llvm/Support/SMLoc.h"
16 #include "llvm/Support/SourceMgr.h"
17 #include "llvm/Testing/Support/SupportHelpers.h"
18 #include "gmock/gmock.h"
19 #include "gtest/gtest.h"
28 *
OS << ::testing::PrintToString(*V);
32 using ::testing::AllOf;
33 using ::testing::ElementsAre;
34 using ::testing::IsEmpty;
39 *result_listener <<
"value is " << *arg;
44 if (*arg.first == Value1 && *arg.second == Value2)
46 *result_listener <<
"values are [" << *arg.first <<
", " << *arg.second
51 TEST(ParseYAML, SyntacticForms) {
53 const char *YAML = R
"yaml(
57 CompileFlags: { Add: [foo, bar] }
71 example-check.ExampleOption: 0
72 UnusedIncludes: Strict
76 EXPECT_THAT(
Diags.
Files, ElementsAre(
"config.yaml"));
78 EXPECT_FALSE(
Results[0].If.HasUnrecognizedCondition);
79 EXPECT_THAT(
Results[0].If.PathMatch, ElementsAre(val(
"abc")));
80 EXPECT_THAT(
Results[0].CompileFlags.Add, ElementsAre(val(
"foo"), val(
"bar")));
82 EXPECT_THAT(
Results[1].CompileFlags.Add, ElementsAre(val(
"b\naz\n")));
85 EXPECT_EQ(
"Skip", *
Results[2].
Index.Background.getValue());
87 ElementsAre(PairVal(
"IgnoreMacros",
"true"),
88 PairVal(
"example-check.ExampleOption",
"0")));
93 TEST(ParseYAML, Locations) {
95 Annotations
YAML(R
"yaml(
97 PathMatch: [['???bad***regex(((']]
103 ASSERT_NE(
Results.front().Source.Manager,
nullptr);
105 *
Results.front().Source.Manager),
109 TEST(ParseYAML, ConfigDiagnostics) {
111 Annotations
YAML(R
"yaml(
113 $unknown[[UnknownCondition]]: "foo"
117 CompileFlags: {$unexpected^
124 ElementsAre(AllOf(diagMessage(
"Unknown If key 'UnknownCondition'"),
125 diagKind(llvm::SourceMgr::DK_Warning),
126 diagPos(
YAML.range(
"unknown").start),
127 diagRange(
YAML.range(
"unknown"))),
128 AllOf(diagMessage(
"Unexpected token. Expected Key, Flow "
129 "Entry, or Flow Mapping End."),
130 diagKind(llvm::SourceMgr::DK_Error),
131 diagPos(
YAML.point(
"unexpected")),
132 diagRange(llvm::None))));
135 EXPECT_THAT(
Results.front().CompileFlags.Add, ElementsAre(val(
"first")));
136 EXPECT_TRUE(
Results.front().If.HasUnrecognizedCondition);
139 TEST(ParseYAML, Invalid) {
141 const char *
YAML = R
"yaml(
150 ElementsAre(diagMessage(
"If should be a dictionary"),
151 diagMessage(
"Config should be a dictionary")));
152 ASSERT_THAT(
Results, IsEmpty());
155 TEST(ParseYAML, ExternalBlockNone) {
157 Annotations
YAML(R
"yaml(
166 EXPECT_FALSE(
Results[0].
Index.External.getValue()->File.hasValue());
167 EXPECT_FALSE(
Results[0].
Index.External.getValue()->MountPoint.hasValue());
168 EXPECT_FALSE(
Results[0].
Index.External.getValue()->Server.hasValue());
169 EXPECT_THAT(*
Results[0].
Index.External.getValue()->IsNone, testing::Eq(
true));
172 TEST(ParseYAML, ExternalBlock) {
174 Annotations
YAML(R
"yaml(
185 EXPECT_THAT(*
Results[0].
Index.External.getValue()->File, val(
"foo"));
186 EXPECT_THAT(*
Results[0].
Index.External.getValue()->MountPoint, val(
"baz"));
188 EXPECT_THAT(*
Results[0].
Index.External.getValue()->Server, val(
"bar"));
191 TEST(ParseYAML, AllScopes) {
193 Annotations
YAML(R
"yaml(
201 EXPECT_THAT(
Results[0].Completion.AllScopes, llvm::ValueIs(val(
true)));
204 TEST(ParseYAML, AllScopesWarn) {
206 Annotations
YAML(R
"yaml(
208 AllScopes: $diagrange[[Truex]]
213 ElementsAre(AllOf(diagMessage(
"AllScopes should be a boolean"),
214 diagKind(llvm::SourceMgr::DK_Warning),
215 diagPos(
YAML.range(
"diagrange").start),
216 diagRange(
YAML.range(
"diagrange")))));
218 EXPECT_THAT(
Results[0].Completion.AllScopes, testing::Eq(llvm::None));
221 TEST(ParseYAML, ShowAKA) {
223 Annotations
YAML(R
"yaml(
231 EXPECT_THAT(
Results[0].Hover.ShowAKA, llvm::ValueIs(val(
true)));
234 TEST(ParseYAML, InlayHints) {
236 Annotations
YAML(R
"yaml(
245 EXPECT_THAT(
Results[0].InlayHints.Enabled, llvm::ValueIs(val(
false)));
246 EXPECT_THAT(
Results[0].InlayHints.ParameterNames, llvm::ValueIs(val(
true)));
247 EXPECT_EQ(
Results[0].InlayHints.DeducedTypes, llvm::None);
250 TEST(ParseYAML, IncludesIgnoreHeader) {
252 Annotations
YAML(R
"yaml(
255 IgnoreHeader: [foo, bar]
262 ElementsAre(val(
"foo"), val(
"bar")));