diff options
author | 2014-11-17 23:02:51 +0000 | |
---|---|---|
committer | 2014-11-17 23:02:52 +0000 | |
commit | fdf92789c12ff0cba6130d3ca6848463417e3965 (patch) | |
tree | 7d776aa3db5ec7fe9b78a39afb4ba1211ef01581 /native/dicttoolkit/src | |
parent | 9ef17c4b5a706de802c35bbce7d568ef203a6ac9 (diff) | |
parent | 681dbc295b07b9db6c32d1b7074e99d9e2fa651d (diff) | |
download | latinime-fdf92789c12ff0cba6130d3ca6848463417e3965.tar.gz latinime-fdf92789c12ff0cba6130d3ca6848463417e3965.tar.xz latinime-fdf92789c12ff0cba6130d3ca6848463417e3965.zip |
Merge "Add unit tests for ArgumentsParser.validateSpecs()."
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; |