-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConfigureDecisionTests.cpp
More file actions
96 lines (80 loc) · 3.19 KB
/
Copy pathConfigureDecisionTests.cpp
File metadata and controls
96 lines (80 loc) · 3.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <vix/engine/ConfigureDecision.hpp>
#include <vix/engine/ConfigurationSignature.hpp>
#include <cassert>
#include <filesystem>
#include <fstream>
namespace
{
namespace fs = std::filesystem;
using namespace vix::engine;
fs::path temp_root()
{
fs::path root = fs::temp_directory_path() / "vix-engine-configure-decision";
std::error_code ec;
fs::remove_all(root, ec);
fs::create_directories(root, ec);
assert(!ec);
return root;
}
void write_file(const fs::path &path, const std::string &content)
{
fs::create_directories(path.parent_path());
std::ofstream out(path, std::ios::binary);
out << content;
}
}
int main()
{
const fs::path root = temp_root();
const fs::path build = root / "build-ninja";
const fs::path sig = build / ".vix-config.sig";
assert(to_string(ConfigureReason::UpToDate) == std::string("up-to-date"));
assert(to_string(ConfigureReason::CacheDisabled) == std::string("cache-disabled"));
assert(to_string(ConfigureReason::CleanRequested) == std::string("clean-requested"));
assert(to_string(ConfigureReason::MissingCMakeCache) == std::string("missing-cmake-cache"));
assert(to_string(ConfigureReason::MissingSignature) == std::string("missing-signature"));
assert(to_string(ConfigureReason::SignatureMismatch) == std::string("signature-mismatch"));
assert(cmake_cache_path(build) == build / "CMakeCache.txt");
ConfigureDecisionOptions options;
options.buildDir = build;
options.signatureFile = sig;
options.expectedSignature = "expected\n";
auto decision = evaluate_configuration(options);
assert(decision.needs_configure());
assert(decision.reason == ConfigureReason::MissingCMakeCache);
assert(decision.cmakeCacheFile == build / "CMakeCache.txt");
assert(decision.signatureFile == sig);
assert(decision.expectedSignature == "expected\n");
assert(!decision.existingSignature);
assert(needs_configure(options));
options.useCache = false;
options.clean = true;
decision = evaluate_configuration(options);
assert(decision.reason == ConfigureReason::CacheDisabled);
options.useCache = true;
options.clean = true;
decision = evaluate_configuration(options);
assert(decision.reason == ConfigureReason::CleanRequested);
write_file(build / "CMakeCache.txt", "cache");
options.clean = true;
decision = evaluate_configuration(options);
assert(decision.reason == ConfigureReason::CleanRequested);
options.clean = false;
decision = evaluate_configuration(options);
assert(decision.reason == ConfigureReason::MissingSignature);
assert(write_configuration_signature(sig, "old\n"));
decision = evaluate_configuration(options);
assert(decision.reason == ConfigureReason::SignatureMismatch);
assert(decision.existingSignature == "old\n");
assert(write_configuration_signature(sig, "expected\n"));
decision = evaluate_configuration(options);
assert(!decision.needs_configure());
assert(decision.reason == ConfigureReason::UpToDate);
assert(decision.existingSignature == "expected\n");
assert(!needs_configure(options));
fs::remove(build / "CMakeCache.txt");
fs::remove(sig);
decision = evaluate_configuration(options);
assert(decision.reason == ConfigureReason::MissingCMakeCache);
return 0;
}