Skip to content

Commit 45dc34c

Browse files
Adding tests for default config version
1 parent 05f0d04 commit 45dc34c

File tree

1 file changed

+209
-0
lines changed

1 file changed

+209
-0
lines changed

Src/Tests/ConfigParsingTest.cpp

Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,215 @@ int main(int argc, char** argv)
156156
versionIfstreamInstance = nullptr;
157157
};
158158

159+
const char* commonUserConfigForVersionFile = R"(
160+
PreferredProfile: "g++"
161+
Profiles:
162+
- Name: "g++"
163+
FileExtensions: [.cpp, .cc, .cxx]
164+
Languages: ["c++"]
165+
FilesTypes:
166+
ObjectLinkFile: &PrefixExtensionTemplate
167+
Prefix:
168+
DefaultPlatform: "prefix"
169+
Extension:
170+
DefaultPlatform: ".extension"
171+
SharedLinkFile: *PrefixExtensionTemplate
172+
SharedLibraryFile: *PrefixExtensionTemplate
173+
StaticLinkFile: *PrefixExtensionTemplate
174+
DebugSymbolFile: *PrefixExtensionTemplate
175+
Compiler:
176+
CheckExistence:
177+
DefaultPlatform: "g++ -v"
178+
CompileTypes: &TypeInfoEntries
179+
Executable: &DefaultTypeInfo
180+
DefaultPlatform:
181+
Flags: "Flags"
182+
Executable: "g++"
183+
RunParts: []
184+
ExpectedOutputFiles: []
185+
ExecutableShared: *DefaultTypeInfo
186+
Static: *DefaultTypeInfo
187+
Shared: *DefaultTypeInfo
188+
Linker:
189+
CheckExistence:
190+
DefaultPlatform: "g++ -v"
191+
LinkTypes: *TypeInfoEntries
192+
)";
193+
194+
ssTEST("ReadUserConfig Should Not Write Default Configs When Updated Version File Exists")
195+
{
196+
ssTEST_OUTPUT_SETUP
197+
(
198+
CO_INSTRUCT_REF (OverrideInstance, std::Mock_ifstream, rdbuf)
199+
.Returns<std::string>(commonUserConfigForVersionFile)
200+
.If
201+
(
202+
[&userConfigIfstreamInstance](void* instance, ...) -> bool
203+
{
204+
return instance == userConfigIfstreamInstance;
205+
}
206+
)
207+
.Times(1)
208+
.Expected();
209+
210+
std::vector<runcpp2::Data::Profile> profiles;
211+
std::string preferredProfile;
212+
commonDefaultOverrideSetup();
213+
);
214+
215+
ssTEST_OUTPUT_EXECUTION
216+
(
217+
bool parseResult = runcpp2::ReadUserConfig(profiles, preferredProfile, configPath);
218+
);
219+
220+
ssTEST_OUTPUT_ASSERT("ReadUserConfig should succeed", parseResult);
221+
ssTEST_OUTPUT_ASSERT("Should parse 1 profiles", profiles.size(), 1);
222+
ssTEST_OUTPUT_ASSERT(preferredProfile == "g++");
223+
ssTEST_OUTPUT_ASSERT("", CO_GET_FAILED_FUNCTIONS(OverrideInstance).size(), 0);
224+
ssTEST_OUTPUT_VALUES_WHEN_FAILED(CO_GET_FAILED_REPORT(OverrideInstance));
225+
};
226+
227+
ssTEST("ReadUserConfig Should Write Default Configs When Outdated Version File Exists")
228+
{
229+
ssTEST_OUTPUT_SETUP
230+
(
231+
CO_REMOVE_INSTRUCT_REF(OverrideInstance, runcpp2, WriteDefaultConfigs);
232+
CO_REMOVE_INSTRUCT_REF(OverrideInstance, std::Mock_ifstream, rdbuf);
233+
234+
const std::string outdatedVersionString = std::to_string(RUNCPP2_CONFIG_VERSION - 1);
235+
CO_INSTRUCT_REF (OverrideInstance, std::Mock_ifstream, rdbuf)
236+
.Returns<std::string>(outdatedVersionString)
237+
.If
238+
(
239+
[&versionIfstreamInstance](void* instance, ...) -> bool
240+
{
241+
return instance == versionIfstreamInstance;
242+
}
243+
)
244+
.Times(1)
245+
.Expected();
246+
CO_INSTRUCT_REF (OverrideInstance, std::Mock_ifstream, rdbuf)
247+
.Returns<std::string>(commonUserConfigForVersionFile)
248+
.If
249+
(
250+
[&userConfigIfstreamInstance](void* instance, ...) -> bool
251+
{
252+
return instance == userConfigIfstreamInstance;
253+
}
254+
)
255+
.Times(1)
256+
.Expected();
257+
CO_INSTRUCT_REF (OverrideInstance, runcpp2, WriteDefaultConfigs)
258+
.WhenCalledWith
259+
<
260+
const ghc::filesystem::path&,
261+
bool,
262+
bool
263+
>
264+
(
265+
configPath,
266+
false, //writeUserConfig
267+
true //writeDefaultConfigs
268+
)
269+
.Returns<bool>(true)
270+
.Expected();
271+
272+
std::vector<runcpp2::Data::Profile> profiles;
273+
std::string preferredProfile;
274+
commonDefaultOverrideSetup();
275+
);
276+
277+
ssTEST_OUTPUT_EXECUTION
278+
(
279+
bool parseResult = runcpp2::ReadUserConfig(profiles, preferredProfile, configPath);
280+
);
281+
282+
ssTEST_OUTPUT_ASSERT("ReadUserConfig should succeed", parseResult);
283+
ssTEST_OUTPUT_ASSERT("Should parse 1 profile", profiles.size(), 1);
284+
ssTEST_OUTPUT_ASSERT(preferredProfile == "g++");
285+
ssTEST_OUTPUT_ASSERT("", CO_GET_FAILED_FUNCTIONS(OverrideInstance).size(), 0);
286+
ssTEST_OUTPUT_VALUES_WHEN_FAILED(CO_GET_FAILED_REPORT(OverrideInstance));
287+
};
288+
289+
ssTEST("ReadUserConfig Should Write Default Configs When Version File Doesn't Exists")
290+
{
291+
ssTEST_OUTPUT_SETUP
292+
(
293+
ssTEST_CALL_COMMON_CLEANUP();
294+
CO_INSTRUCT_REF (OverrideInstance, ghc::filesystem, Mock_exists)
295+
.WhenCalledWith<const std::string&, CO_ANY_TYPE>(configPath, CO_ANY)
296+
.Times(1)
297+
.Returns<bool>(true)
298+
.Expected();
299+
CO_INSTRUCT_REF (OverrideInstance, ghc::filesystem, Mock_exists)
300+
.WhenCalledWith<const std::string&, CO_ANY_TYPE>(versionPath, CO_ANY)
301+
.Times(1)
302+
.Returns<bool>(false)
303+
.Expected();
304+
CO_INSTRUCT_REF (OverrideInstance, runcpp2, WriteDefaultConfigs)
305+
.WhenCalledWith
306+
<
307+
const ghc::filesystem::path&,
308+
bool,
309+
bool
310+
>
311+
(
312+
configPath,
313+
false, //writeUserConfig
314+
true //writeDefaultConfigs
315+
)
316+
.Returns<bool>(true)
317+
.Expected();
318+
CO_INSTRUCT_NO_REF (OverrideInstance, Mock_ifstream)
319+
.WhenCalledWith<const ghc::filesystem::path&>(configPath)
320+
.WhenCalledExpectedly_Do
321+
(
322+
[&userConfigIfstreamInstance](void* instance, ...)
323+
{
324+
userConfigIfstreamInstance = instance;
325+
}
326+
)
327+
.Times(1)
328+
.Expected();
329+
CO_INSTRUCT_REF (OverrideInstance, std::Mock_ifstream, operator!)
330+
.If
331+
(
332+
[&userConfigIfstreamInstance, &versionIfstreamInstance]
333+
(void* instance, ...) -> bool
334+
{
335+
return instance == userConfigIfstreamInstance;
336+
}
337+
)
338+
.Times(1)
339+
.Returns<bool>(false)
340+
.Expected();
341+
CO_INSTRUCT_REF (OverrideInstance, std::Mock_ifstream, rdbuf)
342+
.Returns<std::string>(commonUserConfigForVersionFile)
343+
.If
344+
(
345+
[&userConfigIfstreamInstance](void* instance, ...) -> bool
346+
{
347+
return instance == userConfigIfstreamInstance;
348+
}
349+
)
350+
.Times(1)
351+
.Expected();
352+
353+
std::vector<runcpp2::Data::Profile> profiles;
354+
std::string preferredProfile;
355+
commonDefaultOverrideSetup();
356+
);
357+
358+
ssTEST_OUTPUT_EXECUTION
359+
(
360+
bool parseResult = runcpp2::ReadUserConfig(profiles, preferredProfile, configPath);
361+
);
362+
363+
ssTEST_OUTPUT_ASSERT("ReadUserConfig should succeed", parseResult);
364+
ssTEST_OUTPUT_ASSERT("", CO_GET_FAILED_FUNCTIONS(OverrideInstance).size(), 0);
365+
ssTEST_OUTPUT_VALUES_WHEN_FAILED(CO_GET_FAILED_REPORT(OverrideInstance));
366+
};
367+
159368
ssTEST("ReadUserConfig Should Parse PreferredProfile As String Correctly")
160369
{
161370
ssTEST_OUTPUT_SETUP

0 commit comments

Comments
 (0)