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 // Void-type
if (values.size() == 0) 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; return new VoidValue;
} }

View File

@ -19,7 +19,7 @@ namespace TestHazelnupp
"/my/fake/path/wahoo.out", "/my/fake/path/wahoo.out",
"--dummy", "--dummy",
"123" "123"
}); });
// Exercise // Exercise
Hazelnupp nupp; Hazelnupp nupp;
@ -30,7 +30,7 @@ namespace TestHazelnupp
ParamConstraint::Require("--federich-float", {"420.69"}), ParamConstraint::Require("--federich-float", {"420.69"}),
ParamConstraint::Require("--siegbert-string", {"banana"}), ParamConstraint::Require("--siegbert-string", {"banana"}),
ParamConstraint::Require("--lieber-liste", {"banana", "apple", "59"}) ParamConstraint::Require("--lieber-liste", {"banana", "apple", "59"})
}); });
nupp.Parse(C_Ify(args)); nupp.Parse(C_Ify(args));
@ -73,7 +73,7 @@ namespace TestHazelnupp
"banana", "banana",
"apple", "apple",
"59" "59"
}); });
// Exercise // Exercise
Hazelnupp nupp; Hazelnupp nupp;
@ -84,7 +84,7 @@ namespace TestHazelnupp
ParamConstraint::Require("--federich-float", {"-199.44"}), ParamConstraint::Require("--federich-float", {"-199.44"}),
ParamConstraint::Require("--siegbert-string", {"bornana"}), ParamConstraint::Require("--siegbert-string", {"bornana"}),
ParamConstraint::Require("--lieber-liste", {"bornana", "ollpe", "5"}) ParamConstraint::Require("--lieber-liste", {"bornana", "ollpe", "5"})
}); });
nupp.Parse(C_Ify(args)); nupp.Parse(C_Ify(args));
@ -129,7 +129,7 @@ namespace TestHazelnupp
"9", "9",
"--force", "--force",
"plsdontuseme" "plsdontuseme"
}); });
// Exercise // Exercise
Hazelnupp nupp; Hazelnupp nupp;
@ -142,7 +142,7 @@ namespace TestHazelnupp
ParamConstraint::TypeSafety("--fav-fruits", DATA_TYPE::LIST), ParamConstraint::TypeSafety("--fav-fruits", DATA_TYPE::LIST),
ParamConstraint::TypeSafety("--indices", DATA_TYPE::LIST), ParamConstraint::TypeSafety("--indices", DATA_TYPE::LIST),
ParamConstraint::TypeSafety("--force", DATA_TYPE::VOID), ParamConstraint::TypeSafety("--force", DATA_TYPE::VOID),
}); });
nupp.Parse(C_Ify(args)); nupp.Parse(C_Ify(args));
@ -189,7 +189,7 @@ namespace TestHazelnupp
"banana", "banana",
"apple", "apple",
"59" "59"
}); });
Assert::ExpectException<HazelnuppConstraintMissingValue>( Assert::ExpectException<HazelnuppConstraintMissingValue>(
[args] [args]
@ -203,7 +203,7 @@ namespace TestHazelnupp
nupp.Parse(C_Ify(args)); nupp.Parse(C_Ify(args));
} }
); );
return; return;
} }
@ -226,7 +226,7 @@ namespace TestHazelnupp
"banana", "banana",
"apple", "apple",
"59" "59"
}); });
Assert::ExpectException<HazelnuppConstraintTypeMissmatch>( Assert::ExpectException<HazelnuppConstraintTypeMissmatch>(
[args] [args]
@ -236,11 +236,83 @@ namespace TestHazelnupp
nupp.RegisterConstraints({ nupp.RegisterConstraints({
ParamConstraint::TypeSafety("--elenor-int", DATA_TYPE::INT), ParamConstraint::TypeSafety("--elenor-int", DATA_TYPE::INT),
}); });
nupp.Parse(C_Ify(args)); nupp.Parse(C_Ify(args));
} }
); );
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; return;
} }