From 86885e5a63c10d264bac822cb054607c27c0f734 Mon Sep 17 00:00:00 2001 From: Andreas Stöckel Date: Thu, 15 Jan 2015 02:31:29 +0100 Subject: Fixed bug in Argument validation when missing values are inserted (string types got "null" as default value and not ""), added corresponding unit test --- src/core/common/Argument.cpp | 3 ++- test/core/common/ArgumentTest.cpp | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/core/common/Argument.cpp b/src/core/common/Argument.cpp index 6bf2917..a4c153d 100644 --- a/src/core/common/Argument.cpp +++ b/src/core/common/Argument.cpp @@ -247,6 +247,7 @@ bool Arguments::validateArray(Variant::arrayType &arr, Logger &logger) const arr[a] = arguments[a].defaultValue; } else { // Call "validate" to inject a standard value + arr[a] = Variant::fromObject(nullptr); arguments[a].validate(arr[a], nullLogger); logger.error(std::string("Missing argument ") + std::to_string(a + 1) + std::string(" \"") + @@ -302,7 +303,7 @@ bool Arguments::validateMap(Variant::mapType &map, Logger &logger, map[arguments[a].name] = arguments[a].defaultValue; } else { // Call "validate" to inject a standard value - map[arguments[a].name] = Variant{}; + map[arguments[a].name] = Variant::fromObject(nullptr); arguments[a].validate(map[arguments[a].name], nullLogger); logger.error(std::string("Missing argument \"") + arguments[a].name + std::string("\"")); diff --git a/test/core/common/ArgumentTest.cpp b/test/core/common/ArgumentTest.cpp index c8ecd2f..85f99a1 100644 --- a/test/core/common/ArgumentTest.cpp +++ b/test/core/common/ArgumentTest.cpp @@ -881,5 +881,23 @@ TEST(Arguments, validateMap) map); } } + +TEST(Arguments, validateMissing) +{ + Arguments args{Argument::String("a")}; + + { + Variant::mapType map{}; + ASSERT_FALSE(args.validateMap(map, logger, false)); + ASSERT_EQ(Variant::mapType({{"a", ""}}), map); + } + + { + Variant::arrayType arr{}; + ASSERT_FALSE(args.validateArray(arr, logger)); + ASSERT_EQ(Variant::arrayType({""}), arr); + } +} + } -- cgit v1.2.3