|
|
@@ -7,6 +7,8 @@
|
|
|
|
|
|
#include "program_args/arguments.h"
|
|
|
|
|
|
+#include <filesystem>
|
|
|
+
|
|
|
#include "xcode_gtest_helper.h"
|
|
|
|
|
|
using testing::ElementsAre;
|
|
|
@@ -164,3 +166,25 @@ TEST(LongOptionRepeatWithDefaultTest, ArgumentOverwritesDefault) {
|
|
|
parse<LongOptionRepeatWithDefaultTest>({"", "--port", "443"});
|
|
|
EXPECT_THAT(options.port, ElementsAre(443));
|
|
|
}
|
|
|
+
|
|
|
+namespace fs = std::filesystem;
|
|
|
+struct DeferOptionTest : program::Arguments<DeferOptionTest> {
|
|
|
+ using Arguments::Arguments;
|
|
|
+ fs::path path = option("path") = ".";
|
|
|
+ fs::path log = option("log") = PROGRAM_DEFER(path / "test.log");
|
|
|
+};
|
|
|
+
|
|
|
+TEST(DeferOptionTest, DefaultResolves) {
|
|
|
+ auto const options = parse<DeferOptionTest>({""});
|
|
|
+ EXPECT_THAT(options.log.string(), "./test.log");
|
|
|
+}
|
|
|
+
|
|
|
+TEST(DeferOptionTest, CapturesUpdateToDependent) {
|
|
|
+ auto const options = parse<DeferOptionTest>({"", "--path", "/var/log"});
|
|
|
+ EXPECT_THAT(options.log.string(), "/var/log/test.log");
|
|
|
+}
|
|
|
+
|
|
|
+TEST(DeferOptionTest, SettingActualArgWillOverwrite) {
|
|
|
+ auto const options = parse<DeferOptionTest>({"", "--path", "/var/log", "--log", "test.log"});
|
|
|
+ EXPECT_THAT(options.log.string(), "test.log");
|
|
|
+}
|