diff options
author | 2014-11-08 13:49:51 +0900 | |
---|---|---|
committer | 2014-11-18 07:52:01 +0900 | |
commit | 681dbc295b07b9db6c32d1b7074e99d9e2fa651d (patch) | |
tree | a8d44c82782ab0cae1f0182000f1cc81a09cc9d8 /native/dicttoolkit/src | |
parent | 1a8ae0549dda4b0e3bb80623f4f87027a0fbfabf (diff) | |
download | latinime-681dbc295b07b9db6c32d1b7074e99d9e2fa651d.tar.gz latinime-681dbc295b07b9db6c32d1b7074e99d9e2fa651d.tar.xz latinime-681dbc295b07b9db6c32d1b7074e99d9e2fa651d.zip |
Add unit tests for ArgumentsParser.validateSpecs().
Bug: 10059681
Change-Id: I3ba5d856ad679e32dd3360863335c436ad6e7301
Diffstat (limited to 'native/dicttoolkit/src')
-rw-r--r-- | native/dicttoolkit/src/utils/arguments_parser.cpp | 16 | ||||
-rw-r--r-- | native/dicttoolkit/src/utils/arguments_parser.h | 4 |
2 files changed, 17 insertions, 3 deletions
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 <unordered_set> + namespace latinime { namespace dicttoolkit { const int ArgumentSpec::UNLIMITED_COUNT = -1; bool ArgumentsParser::validateSpecs() const { + std::unordered_set<std::string> 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; } diff --git a/native/dicttoolkit/src/utils/arguments_parser.h b/native/dicttoolkit/src/utils/arguments_parser.h index be2dd8749..510a8722b 100644 --- a/native/dicttoolkit/src/utils/arguments_parser.h +++ b/native/dicttoolkit/src/utils/arguments_parser.h @@ -97,8 +97,8 @@ class ArgumentSpec { class ArgumentsParser { public: - ArgumentsParser(std::unordered_map<std::string, OptionSpec> &&optionSpecs, - std::vector<ArgumentSpec> &&argumentSpecs) + ArgumentsParser(const std::unordered_map<std::string, OptionSpec> &&optionSpecs, + const std::vector<ArgumentSpec> &&argumentSpecs) : mOptionSpecs(std::move(optionSpecs)), mArgumentSpecs(std::move(argumentSpecs)) {} const ArgumentsAndOptions parseArguments(const int argc, char **argv) const; |