From 681dbc295b07b9db6c32d1b7074e99d9e2fa651d Mon Sep 17 00:00:00 2001 From: Keisuke Kuroyanagi Date: Sat, 8 Nov 2014 13:49:51 +0900 Subject: Add unit tests for ArgumentsParser.validateSpecs(). Bug: 10059681 Change-Id: I3ba5d856ad679e32dd3360863335c436ad6e7301 --- native/dicttoolkit/src/utils/arguments_parser.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'native/dicttoolkit/src/utils/arguments_parser.cpp') diff --git a/native/dicttoolkit/src/utils/arguments_parser.cpp b/native/dicttoolkit/src/utils/arguments_parser.cpp index 039dae35b..52cc7b21d 100644 --- a/native/dicttoolkit/src/utils/arguments_parser.cpp +++ b/native/dicttoolkit/src/utils/arguments_parser.cpp @@ -16,18 +16,32 @@ #include "utils/arguments_parser.h" +#include + namespace latinime { namespace dicttoolkit { const int ArgumentSpec::UNLIMITED_COUNT = -1; bool ArgumentsParser::validateSpecs() const { + std::unordered_set argumentNameSet; for (size_t i = 0; i < mArgumentSpecs.size() ; ++i) { + if (mArgumentSpecs[i].getMinCount() == 0 && mArgumentSpecs[i].getMaxCount() == 0) { + AKLOGE("minCount = maxCount = 0 for %s.", mArgumentSpecs[i].getName().c_str()); + return false; + } if (mArgumentSpecs[i].getMinCount() != mArgumentSpecs[i].getMaxCount() && i != mArgumentSpecs.size() - 1) { - AKLOGE("Variable length argument must be at the end."); + AKLOGE("Variable length argument must be at the end.", + mArgumentSpecs[i].getName().c_str()v ); + return false; + } + if (argumentNameSet.count(mArgumentSpecs[i].getName()) > 0) { + AKLOGE("Multiple arguments have the same name \"%s\".", + mArgumentSpecs[i].getName().c_str()); return false; } + argumentNameSet.insert(mArgumentSpecs[i].getName()); } return true; } -- cgit v1.2.3-83-g751a