From 91ab87ca4d5ef2b0fe577902202f87ef609c9ea9 Mon Sep 17 00:00:00 2001 From: Leonetienne Date: Thu, 3 Jun 2021 00:00:53 +0200 Subject: [PATCH] Added static constructors to ParamConstraint --- Hazelnupp.vpp | Bin 754688 -> 754688 bytes Hazelnupp/ParamConstraint.h | 42 +-- Hazelnupp/main.cpp | 2 +- Test_Hazelnupp/Constraints.cpp | 249 +++++++++++++++++- Test_Hazelnupp/Constraints.h | 248 ----------------- Test_Hazelnupp/Test_Hazelnupp.vcxproj | 1 - Test_Hazelnupp/Test_Hazelnupp.vcxproj.filters | 3 - 7 files changed, 271 insertions(+), 274 deletions(-) delete mode 100644 Test_Hazelnupp/Constraints.h diff --git a/Hazelnupp.vpp b/Hazelnupp.vpp index f9466945db97fa38c09ba9947f74146d9d505235..895f174902eb1792d647dec62e7355287f6c0b83 100644 GIT binary patch delta 14135 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 delta 11508 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 diff --git a/Hazelnupp/ParamConstraint.h b/Hazelnupp/ParamConstraint.h index deeacf9..dc1bd5b 100644 --- a/Hazelnupp/ParamConstraint.h +++ b/Hazelnupp/ParamConstraint.h @@ -9,6 +9,28 @@ public: //! Empty constructor ParamConstraint() = default; + //! Constructs a require constraint + static ParamConstraint Require(const std::string& key, const std::vector& defaultValue = {}, bool required = true) + { + ParamConstraint pc; + pc.key = key; + pc.defaultValue = defaultValue; + pc.required = required; + + return pc; + } + + //! Constructs a type-safety constraint + static ParamConstraint TypeSafety(const std::string& key, DATA_TYPE wantedType, bool constrainType = true) + { + ParamConstraint pc; + pc.key = key; + pc.constrainType = constrainType; + pc.wantedType = wantedType; + + return pc; + } + //! Whole constructor ParamConstraint(const std::string& key, bool constrainType, DATA_TYPE wantedType, const std::vector& defaultValue, bool required) : @@ -21,26 +43,6 @@ public: return; } - //! Type-Constraint constructor - ParamConstraint(const std::string& key, bool constrainType, DATA_TYPE wantedType) - : - key{ key }, - constrainType{ constrainType }, - wantedType{ wantedType } - { - return; - } - - //! Require-Constraint constructor - ParamConstraint(const std::string& key, const std::vector& defaultValue, bool required = false) - : - key{ key }, - defaultValue{ defaultValue }, - required{ required } - { - return; - } - //! The key of the parameter to constrain std::string key; diff --git a/Hazelnupp/main.cpp b/Hazelnupp/main.cpp index 0b2535f..6a4eb80 100644 --- a/Hazelnupp/main.cpp +++ b/Hazelnupp/main.cpp @@ -48,7 +48,7 @@ int main(int argc, char** argv) // Use if (args.HasParam("--alfredo")) { - std::cout << args["--alfredo"] << std::endl; + std::cout << args["--alfredo"].GetInt32() << std::endl; } else { diff --git a/Test_Hazelnupp/Constraints.cpp b/Test_Hazelnupp/Constraints.cpp index 6711703..5334266 100644 --- a/Test_Hazelnupp/Constraints.cpp +++ b/Test_Hazelnupp/Constraints.cpp @@ -1 +1,248 @@ -#include "Constraints.h" +#include "CppUnitTest.h" +#include "helper.h" +#include "../Hazelnupp/Hazelnupp.h" +#include "../Hazelnupp/HazelnuppException.h" + +using namespace Microsoft::VisualStudio::CppUnitTestFramework; + +namespace TestHazelnupp +{ + TEST_CLASS(_Constraints) + { + public: + + // Tests that default values get added + TEST_METHOD(DefaultValues_GetAdded) + { + // Setup + ArgList args({ + "/my/fake/path/wahoo.out", + "--dummy", + "123" + }); + + // Exercise + Hazelnupp nupp; + nupp.SetCrashOnFail(false); + + nupp.RegisterConstraints({ + ParamConstraint::Require("--elenor-int", {"5994"}), + ParamConstraint::Require("--federich-float", {"420.69"}), + ParamConstraint::Require("--siegbert-string", {"banana"}), + ParamConstraint::Require("--lieber-liste", {"banana", "apple", "59"}) + }); + + nupp.Parse(C_Ify(args)); + + // Verify + Assert::IsTrue(nupp.HasParam("--elenor-int")); + Assert::IsTrue(nupp["--elenor-int"].GetDataType() == DATA_TYPE::INT); + Assert::AreEqual(nupp["--elenor-int"].GetInt32(), 5994); + + Assert::IsTrue(nupp.HasParam("--federich-float")); + Assert::IsTrue(nupp["--federich-float"].GetDataType() == DATA_TYPE::FLOAT); + Assert::AreEqual(nupp["--federich-float"].GetFloat32(), 420.69); + + Assert::IsTrue(nupp.HasParam("--siegbert-string")); + Assert::IsTrue(nupp["--siegbert-string"].GetDataType() == DATA_TYPE::STRING); + Assert::AreEqual(nupp["--siegbert-string"].GetString(), std::string("banana")); + + Assert::IsTrue(nupp.HasParam("--lieber-liste")); + Assert::IsTrue(nupp["--lieber-liste"].GetDataType() == DATA_TYPE::LIST); + Assert::AreEqual(nupp["--lieber-liste"].GetList()[0]->GetString(), std::string("banana")); + Assert::AreEqual(nupp["--lieber-liste"].GetList()[1]->GetString(), std::string("apple")); + Assert::AreEqual(nupp["--lieber-liste"].GetList()[2]->GetInt32(), 59); + + return; + } + + // Tests that the default values do not override actually set values + TEST_METHOD(DefaultValues_DefaultDoesntOverride) + { + // Setup + ArgList args({ + "/my/fake/path/wahoo.out", + "--dummy", + "--elenor-int", + "5994", + "--federich-float", + "420.69", + "--siegbert-string", + "banana", + "--lieber-liste", + "banana", + "apple", + "59" + }); + + // Exercise + Hazelnupp nupp; + nupp.SetCrashOnFail(false); + + nupp.RegisterConstraints({ + ParamConstraint::Require("--elenor-int", {"6871"}), + ParamConstraint::Require("--federich-float", {"-199.44"}), + ParamConstraint::Require("--siegbert-string", {"bornana"}), + ParamConstraint::Require("--lieber-liste", {"bornana", "ollpe", "5"}) + }); + + nupp.Parse(C_Ify(args)); + + // Verify + Assert::IsTrue(nupp.HasParam("--elenor-int")); + Assert::IsTrue(nupp["--elenor-int"].GetDataType() == DATA_TYPE::INT); + Assert::AreEqual(nupp["--elenor-int"].GetInt32(), 5994); + + Assert::IsTrue(nupp.HasParam("--federich-float")); + Assert::IsTrue(nupp["--federich-float"].GetDataType() == DATA_TYPE::FLOAT); + Assert::AreEqual(nupp["--federich-float"].GetFloat32(), 420.69); + + Assert::IsTrue(nupp.HasParam("--siegbert-string")); + Assert::IsTrue(nupp["--siegbert-string"].GetDataType() == DATA_TYPE::STRING); + Assert::AreEqual(nupp["--siegbert-string"].GetString(), std::string("banana")); + + Assert::IsTrue(nupp.HasParam("--lieber-liste")); + Assert::IsTrue(nupp["--lieber-liste"].GetDataType() == DATA_TYPE::LIST); + Assert::AreEqual(nupp["--lieber-liste"].GetList()[0]->GetString(), std::string("banana")); + Assert::AreEqual(nupp["--lieber-liste"].GetList()[1]->GetString(), std::string("apple")); + Assert::AreEqual(nupp["--lieber-liste"].GetList()[2]->GetInt32(), 59); + + return; + } + + // Tests that data types get forced according to the constraints + TEST_METHOD(ForceTypes) + { + // Setup + ArgList args({ + "/my/fake/path/wahoo.out", + "--dummy", + "--num-apples", + "39.75", + "--table-height", + "400", + "--license-plate", + "193273", + "--fav-fruits", + "apple", + "--indices", + "9", + "--force", + "plsdontuseme" + }); + + // Exercise + Hazelnupp nupp; + nupp.SetCrashOnFail(false); + + nupp.RegisterConstraints({ + ParamConstraint::TypeSafety("--num-apples", DATA_TYPE::INT), + ParamConstraint::TypeSafety("--table-height", DATA_TYPE::FLOAT), + ParamConstraint::TypeSafety("--license-plate", DATA_TYPE::STRING), + ParamConstraint::TypeSafety("--fav-fruits", DATA_TYPE::LIST), + ParamConstraint::TypeSafety("--indices", DATA_TYPE::LIST), + ParamConstraint::TypeSafety("--force", DATA_TYPE::VOID), + }); + + nupp.Parse(C_Ify(args)); + + // Verify + Assert::IsTrue(nupp.HasParam("--num-apples")); + Assert::IsTrue(nupp["--num-apples"].GetDataType() == DATA_TYPE::INT); + Assert::AreEqual(nupp["--num-apples"].GetInt32(), 39); + + Assert::IsTrue(nupp.HasParam("--table-height")); + Assert::IsTrue(nupp["--table-height"].GetDataType() == DATA_TYPE::FLOAT); + Assert::AreEqual(nupp["--table-height"].GetFloat32(), 400.0); + + Assert::IsTrue(nupp.HasParam("--license-plate")); + Assert::IsTrue(nupp["--license-plate"].GetDataType() == DATA_TYPE::STRING); + Assert::AreEqual(nupp["--license-plate"].GetString(), std::string("193273")); + + Assert::IsTrue(nupp.HasParam("--fav-fruits")); + Assert::IsTrue(nupp["--fav-fruits"].GetDataType() == DATA_TYPE::LIST); + Assert::AreEqual(nupp["--fav-fruits"].GetList()[0]->GetString(), std::string("apple")); + + Assert::IsTrue(nupp.HasParam("--indices")); + Assert::IsTrue(nupp["--indices"].GetDataType() == DATA_TYPE::LIST); + Assert::AreEqual(nupp["--indices"].GetList()[0]->GetInt32(), 9); + + Assert::IsTrue(nupp.HasParam("--force")); + Assert::IsTrue(nupp["--force"].GetDataType() == DATA_TYPE::VOID); + + return; + } + + // Tests that an HazelnuppConstraintMissingValue gets raised if a required parameter + // is missing and does not have a default parameter + TEST_METHOD(Exception_MissingImportant_Parameter_WithoutDefault) + { + // Setup + ArgList args({ + "/my/fake/path/wahoo.out", + "--dummy", + "--federich-float", + "420.69", + "--siegbert-string", + "banana", + "--lieber-liste", + "banana", + "apple", + "59" + }); + + Assert::ExpectException( + [args] + { + Hazelnupp nupp; + nupp.SetCrashOnFail(false); + + nupp.RegisterConstraints({ + ParamConstraint::Require("--elenor-int"), + }); + + nupp.Parse(C_Ify(args)); + } + ); + + return; + } + + // Tests that an HazelnuppConstraintTypeMissmatch gets raised if a required parameter + // is missing of the wrong type and cannot be converted + TEST_METHOD(Exception_TypeMismatch_Parameter_NotConvertable) + { + // Setup + ArgList args({ + "/my/fake/path/wahoo.out", + "--dummy", + "--elenor-int", + "hello" + "--federich-float", + "420.69", + "--siegbert-string", + "banana", + "--lieber-liste", + "banana", + "apple", + "59" + }); + + Assert::ExpectException( + [args] + { + Hazelnupp nupp; + nupp.SetCrashOnFail(false); + + nupp.RegisterConstraints({ + ParamConstraint::TypeSafety("--elenor-int", DATA_TYPE::INT), + }); + + nupp.Parse(C_Ify(args)); + } + ); + + return; + } + }; +} diff --git a/Test_Hazelnupp/Constraints.h b/Test_Hazelnupp/Constraints.h deleted file mode 100644 index f47678a..0000000 --- a/Test_Hazelnupp/Constraints.h +++ /dev/null @@ -1,248 +0,0 @@ -#include "CppUnitTest.h" -#include "helper.h" -#include "../Hazelnupp/Hazelnupp.h" -#include "../Hazelnupp/HazelnuppException.h" - -using namespace Microsoft::VisualStudio::CppUnitTestFramework; - -namespace TestHazelnupp -{ - TEST_CLASS(_Constraints) - { - public: - - // Tests that default values get added - TEST_METHOD(DefaultValues_GetAdded) - { - // Setup - ArgList args({ - "/my/fake/path/wahoo.out", - "--dummy", - "123" - }); - - // Exercise - Hazelnupp nupp; - nupp.SetCrashOnFail(false); - - nupp.RegisterConstraints({ - ParamConstraint("--elenor-int", {"5994"}), - ParamConstraint("--federich-float", {"420.69"}), - ParamConstraint("--siegbert-string", {"banana"}), - ParamConstraint("--lieber-liste", {"banana", "apple", "59"}) - }); - - nupp.Parse(C_Ify(args)); - - // Verify - Assert::IsTrue(nupp.HasParam("--elenor-int")); - Assert::IsTrue(nupp["--elenor-int"].GetDataType() == DATA_TYPE::INT); - Assert::AreEqual(nupp["--elenor-int"].GetInt32(), 5994); - - Assert::IsTrue(nupp.HasParam("--federich-float")); - Assert::IsTrue(nupp["--federich-float"].GetDataType() == DATA_TYPE::FLOAT); - Assert::AreEqual(nupp["--federich-float"].GetFloat32(), 420.69); - - Assert::IsTrue(nupp.HasParam("--siegbert-string")); - Assert::IsTrue(nupp["--siegbert-string"].GetDataType() == DATA_TYPE::STRING); - Assert::AreEqual(nupp["--siegbert-string"].GetString(), std::string("banana")); - - Assert::IsTrue(nupp.HasParam("--lieber-liste")); - Assert::IsTrue(nupp["--lieber-liste"].GetDataType() == DATA_TYPE::LIST); - Assert::AreEqual(nupp["--lieber-liste"].GetList()[0]->GetString(), std::string("banana")); - Assert::AreEqual(nupp["--lieber-liste"].GetList()[1]->GetString(), std::string("apple")); - Assert::AreEqual(nupp["--lieber-liste"].GetList()[2]->GetInt32(), 59); - - return; - } - - // Tests that the default values do not override actually set values - TEST_METHOD(DefaultValues_DefaultDoesntOverride) - { - // Setup - ArgList args({ - "/my/fake/path/wahoo.out", - "--dummy", - "--elenor-int", - "5994", - "--federich-float", - "420.69", - "--siegbert-string", - "banana", - "--lieber-liste", - "banana", - "apple", - "59" - }); - - // Exercise - Hazelnupp nupp; - nupp.SetCrashOnFail(false); - - nupp.RegisterConstraints({ - ParamConstraint("--elenor-int", {"6871"}), - ParamConstraint("--federich-float", {"-199.44"}), - ParamConstraint("--siegbert-string", {"bornana"}), - ParamConstraint("--lieber-liste", {"bornana", "ollpe", "5"}) - }); - - nupp.Parse(C_Ify(args)); - - // Verify - Assert::IsTrue(nupp.HasParam("--elenor-int")); - Assert::IsTrue(nupp["--elenor-int"].GetDataType() == DATA_TYPE::INT); - Assert::AreEqual(nupp["--elenor-int"].GetInt32(), 5994); - - Assert::IsTrue(nupp.HasParam("--federich-float")); - Assert::IsTrue(nupp["--federich-float"].GetDataType() == DATA_TYPE::FLOAT); - Assert::AreEqual(nupp["--federich-float"].GetFloat32(), 420.69); - - Assert::IsTrue(nupp.HasParam("--siegbert-string")); - Assert::IsTrue(nupp["--siegbert-string"].GetDataType() == DATA_TYPE::STRING); - Assert::AreEqual(nupp["--siegbert-string"].GetString(), std::string("banana")); - - Assert::IsTrue(nupp.HasParam("--lieber-liste")); - Assert::IsTrue(nupp["--lieber-liste"].GetDataType() == DATA_TYPE::LIST); - Assert::AreEqual(nupp["--lieber-liste"].GetList()[0]->GetString(), std::string("banana")); - Assert::AreEqual(nupp["--lieber-liste"].GetList()[1]->GetString(), std::string("apple")); - Assert::AreEqual(nupp["--lieber-liste"].GetList()[2]->GetInt32(), 59); - - return; - } - - // Tests that data types get forced according to the constraints - TEST_METHOD(ForceTypes) - { - // Setup - ArgList args({ - "/my/fake/path/wahoo.out", - "--dummy", - "--num-apples", - "39.75", - "--table-height", - "400", - "--license-plate", - "193273", - "--fav-fruits", - "apple", - "--indices", - "9", - "--force", - "plsdontuseme" - }); - - // Exercise - Hazelnupp nupp; - nupp.SetCrashOnFail(false); - - nupp.RegisterConstraints({ - ParamConstraint("--num-apples", true, DATA_TYPE::INT), - ParamConstraint("--table-height", true, DATA_TYPE::FLOAT), - ParamConstraint("--license-plate", true, DATA_TYPE::STRING), - ParamConstraint("--fav-fruits", true, DATA_TYPE::LIST), - ParamConstraint("--indices", true, DATA_TYPE::LIST), - ParamConstraint("--force", true, DATA_TYPE::VOID), - }); - - nupp.Parse(C_Ify(args)); - - // Verify - Assert::IsTrue(nupp.HasParam("--num-apples")); - Assert::IsTrue(nupp["--num-apples"].GetDataType() == DATA_TYPE::INT); - Assert::AreEqual(nupp["--num-apples"].GetInt32(), 39); - - Assert::IsTrue(nupp.HasParam("--table-height")); - Assert::IsTrue(nupp["--table-height"].GetDataType() == DATA_TYPE::FLOAT); - Assert::AreEqual(nupp["--table-height"].GetFloat32(), 400.0); - - Assert::IsTrue(nupp.HasParam("--license-plate")); - Assert::IsTrue(nupp["--license-plate"].GetDataType() == DATA_TYPE::STRING); - Assert::AreEqual(nupp["--license-plate"].GetString(), std::string("193273")); - - Assert::IsTrue(nupp.HasParam("--fav-fruits")); - Assert::IsTrue(nupp["--fav-fruits"].GetDataType() == DATA_TYPE::LIST); - Assert::AreEqual(nupp["--fav-fruits"].GetList()[0]->GetString(), std::string("apple")); - - Assert::IsTrue(nupp.HasParam("--indices")); - Assert::IsTrue(nupp["--indices"].GetDataType() == DATA_TYPE::LIST); - Assert::AreEqual(nupp["--indices"].GetList()[0]->GetInt32(), 9); - - Assert::IsTrue(nupp.HasParam("--force")); - Assert::IsTrue(nupp["--force"].GetDataType() == DATA_TYPE::VOID); - - return; - } - - // Tests that an HazelnuppConstraintMissingValue gets raised if a required parameter - // is missing and does not have a default parameter - TEST_METHOD(Exception_MissingImportant_Parameter_WithoutDefault) - { - // Setup - ArgList args({ - "/my/fake/path/wahoo.out", - "--dummy", - "--federich-float", - "420.69", - "--siegbert-string", - "banana", - "--lieber-liste", - "banana", - "apple", - "59" - }); - - Assert::ExpectException( - [args] - { - Hazelnupp nupp; - nupp.SetCrashOnFail(false); - - nupp.RegisterConstraints({ - ParamConstraint("--elenor-int", std::vector(), true), - }); - - nupp.Parse(C_Ify(args)); - } - ); - - return; - } - - // Tests that an HazelnuppConstraintTypeMissmatch gets raised if a required parameter - // is missing of the wrong type and cannot be converted - TEST_METHOD(Exception_TypeMismatch_Parameter_NotConvertable) - { - // Setup - ArgList args({ - "/my/fake/path/wahoo.out", - "--dummy", - "--elenor-int", - "hello" - "--federich-float", - "420.69", - "--siegbert-string", - "banana", - "--lieber-liste", - "banana", - "apple", - "59" - }); - - Assert::ExpectException( - [args] - { - Hazelnupp nupp; - nupp.SetCrashOnFail(false); - - nupp.RegisterConstraints({ - ParamConstraint("--elenor-int", true, DATA_TYPE::INT), - }); - - nupp.Parse(C_Ify(args)); - } - ); - - return; - } - }; -} diff --git a/Test_Hazelnupp/Test_Hazelnupp.vcxproj b/Test_Hazelnupp/Test_Hazelnupp.vcxproj index 70c5078..a59b932 100644 --- a/Test_Hazelnupp/Test_Hazelnupp.vcxproj +++ b/Test_Hazelnupp/Test_Hazelnupp.vcxproj @@ -167,7 +167,6 @@ - diff --git a/Test_Hazelnupp/Test_Hazelnupp.vcxproj.filters b/Test_Hazelnupp/Test_Hazelnupp.vcxproj.filters index 6e58c90..87cbe39 100644 --- a/Test_Hazelnupp/Test_Hazelnupp.vcxproj.filters +++ b/Test_Hazelnupp/Test_Hazelnupp.vcxproj.filters @@ -18,9 +18,6 @@ Headerdateien - - Headerdateien -