Enabled void->list conversion in parse-time

This commit is contained in:
Leonetienne 2021-06-03 01:11:40 +02:00
parent e16bda06a4
commit ce90ff689b
2 changed files with 88 additions and 11 deletions

View File

@ -161,6 +161,11 @@ Value* Hazelnupp::ParseValue(const std::vector<std::string>& values, const Param
// Void-type
if (values.size() == 0)
{
// Is a list forced via a constraint? If yes, return an empty list
if ((constrainType) &&
(constraint->wantedType == DATA_TYPE::LIST))
return new ListValue();
return new VoidValue;
}

View File

@ -244,5 +244,77 @@ namespace TestHazelnupp
return;
}
// Tests that everything can be converted to void
TEST_METHOD(Weird_Load_Conversions_ToVoid)
{
// Setup
ArgList args({
"/my/fake/path/wahoo.out",
"--dummy",
"--void1",
"--void2",
"12",
"--void3",
"9.5",
"--void4",
"hello",
"--void5",
"foo",
"baz"
});
Hazelnupp nupp;
nupp.SetCrashOnFail(false);
nupp.RegisterConstraints({
ParamConstraint::TypeSafety("--void1", DATA_TYPE::VOID),
ParamConstraint::TypeSafety("--void2", DATA_TYPE::VOID),
ParamConstraint::TypeSafety("--void3", DATA_TYPE::VOID),
ParamConstraint::TypeSafety("--void4", DATA_TYPE::VOID),
ParamConstraint::TypeSafety("--void5", DATA_TYPE::VOID)
});
// Exercise
nupp.Parse(C_Ify(args));
// Verify
Assert::IsTrue(nupp["--void1"].GetDataType() == DATA_TYPE::VOID);
Assert::IsTrue(nupp["--void2"].GetDataType() == DATA_TYPE::VOID);
Assert::IsTrue(nupp["--void3"].GetDataType() == DATA_TYPE::VOID);
Assert::IsTrue(nupp["--void4"].GetDataType() == DATA_TYPE::VOID);
Assert::IsTrue(nupp["--void5"].GetDataType() == DATA_TYPE::VOID);
return;
}
// Tests that everything a void can be converted to an empty list
TEST_METHOD(Weird_Load_Conversions_VoidToEmptyList)
{
// Setup
ArgList args({
"/my/fake/path/wahoo.out",
"--dummy",
"--empty-list",
});
Hazelnupp nupp;
nupp.SetCrashOnFail(false);
nupp.RegisterConstraints({
ParamConstraint::TypeSafety("--empty-list", DATA_TYPE::LIST),
});
// Exercise
nupp.Parse(C_Ify(args));
// Verify
Assert::IsTrue(nupp["--empty-list"].GetDataType() == DATA_TYPE::LIST);
Assert::AreEqual(std::size_t(0), nupp["--empty-list"].GetList().size());
return;
}
};
}