From 4bfa3b273ea9d23fa642b5b87b1113429f5f539b Mon Sep 17 00:00:00 2001 From: Keisuke Kuroyanagi Date: Fri, 7 Nov 2014 06:49:34 +0900 Subject: [PATCH] Introduce CommandUtils for dicttoolkit Bug: 10059681 Change-Id: Ic6947e76d77dc87bf88dc3a2b749e41fae7553b7 --- native/dicttoolkit/NativeFileList.mk | 6 +- native/dicttoolkit/UnitTests.mk | 1 + native/dicttoolkit/dict_toolkit_main.cpp | 19 +++++- native/dicttoolkit/src/dict_toolkit_defines.h | 2 + .../dicttoolkit/src/utils/command_utils.cpp | 45 ++++++++++++++ native/dicttoolkit/src/utils/command_utils.h | 58 +++++++++++++++++++ .../tests/utils/command_utils_test.cpp | 37 ++++++++++++ 7 files changed, 165 insertions(+), 3 deletions(-) create mode 100644 native/dicttoolkit/src/utils/command_utils.cpp create mode 100644 native/dicttoolkit/src/utils/command_utils.h create mode 100644 native/dicttoolkit/tests/utils/command_utils_test.cpp diff --git a/native/dicttoolkit/NativeFileList.mk b/native/dicttoolkit/NativeFileList.mk index b6be9c541..2ba9859a1 100644 --- a/native/dicttoolkit/NativeFileList.mk +++ b/native/dicttoolkit/NativeFileList.mk @@ -15,7 +15,9 @@ LATIN_IME_DICT_TOOLKIT_MAIN_SRC_FILES := \ dict_toolkit_main.cpp -LATIN_IME_DICT_TOOLKIT_SRC_FILES := +LATIN_IME_DICT_TOOLKIT_SRC_FILES := \ + utils/command_utils.cpp LATIN_IME_DICT_TOOLKIT_TEST_FILES := \ - dict_toolkit_defines_test.cpp + dict_toolkit_defines_test.cpp \ + utils/command_utils_test.cpp diff --git a/native/dicttoolkit/UnitTests.mk b/native/dicttoolkit/UnitTests.mk index d568db44a..96e28730e 100644 --- a/native/dicttoolkit/UnitTests.mk +++ b/native/dicttoolkit/UnitTests.mk @@ -46,6 +46,7 @@ include $(BUILD_HOST_STATIC_LIBRARY) include $(CLEAR_VARS) # TODO: Remove -std=c++11 once it is set by default on host build. +LOCAL_ADDRESS_SANITIZER := true LOCAL_CFLAGS += -std=c++11 -Wno-unused-parameter -Wno-unused-function LOCAL_CLANG := true LOCAL_CXX_STL := libc++ diff --git a/native/dicttoolkit/dict_toolkit_main.cpp b/native/dicttoolkit/dict_toolkit_main.cpp index d71b50eb4..22db3d4d1 100644 --- a/native/dicttoolkit/dict_toolkit_main.cpp +++ b/native/dicttoolkit/dict_toolkit_main.cpp @@ -16,8 +16,25 @@ #include +#include "dict_toolkit_defines.h" +#include "utils/command_utils.h" + +void usage(int argc, char **argv) { + fprintf(stderr, "Usage: %s [arguments]\n", argc > 0 ? argv[0] : "dicttoolkit"); +} + int main(int argc, char **argv) { + if (argc < MIN_ARG_COUNT) { + usage(argc, argv); + return 0; + } + using namespace latinime::dicttoolkit; + const CommandType commandType = CommandUtils::getCommandType(argv[1]); + if (commandType == CommandType::Unknown) { + CommandUtils::printCommandUnknownMessage(argv[0], argv[1]); + return 0; + } // TODO: Implement. - printf("%s\n", argv[0]); + fprintf(stderr, "Command '%s' has not been implemented yet.\n", argv[1]); return 0; } diff --git a/native/dicttoolkit/src/dict_toolkit_defines.h b/native/dicttoolkit/src/dict_toolkit_defines.h index 2a2104e26..dbaae0ca0 100644 --- a/native/dicttoolkit/src/dict_toolkit_defines.h +++ b/native/dicttoolkit/src/dict_toolkit_defines.h @@ -19,4 +19,6 @@ #include "defines.h" +#define MIN_ARG_COUNT 2 + #endif // LATINIME_DICT_TOOLKIT_DEFINES_H diff --git a/native/dicttoolkit/src/utils/command_utils.cpp b/native/dicttoolkit/src/utils/command_utils.cpp new file mode 100644 index 000000000..14fd47781 --- /dev/null +++ b/native/dicttoolkit/src/utils/command_utils.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "utils/command_utils.h" + +namespace latinime { +namespace dicttoolkit { + +const char *const CommandUtils::COMMAND_NAME_INFO = "info"; +const char *const CommandUtils::COMMAND_NAME_DIFF = "diff"; +const char *const CommandUtils::COMMAND_NAME_MAKEDICT = "makedict"; +const char *const CommandUtils::COMMAND_NAME_HEADER = "header"; +const char *const CommandUtils::COMMAND_NAME_HELP = "help"; + +/* static */ CommandType CommandUtils::getCommandType(const std::string &commandName) { + if (commandName == COMMAND_NAME_INFO) { + return CommandType::Info; + } else if (commandName == COMMAND_NAME_DIFF) { + return CommandType::Diff; + } else if (commandName == COMMAND_NAME_MAKEDICT) { + return CommandType::Makedict; + } else if (commandName == COMMAND_NAME_HEADER) { + return CommandType::Header; + } else if (commandName == COMMAND_NAME_HELP) { + return CommandType::Help; + } else { + return CommandType::Unknown; + } +} + +} // namespace dicttoolkit +} // namespace latinime diff --git a/native/dicttoolkit/src/utils/command_utils.h b/native/dicttoolkit/src/utils/command_utils.h new file mode 100644 index 000000000..7df0dd970 --- /dev/null +++ b/native/dicttoolkit/src/utils/command_utils.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef LATINIME_DICT_TOOLKIT_COMMAND_UTILS_H +#define LATINIME_DICT_TOOLKIT_COMMAND_UTILS_H + +#include +#include + +#include "dict_toolkit_defines.h" + +namespace latinime { +namespace dicttoolkit { + +enum class CommandType : int { + Info, + Diff, + Makedict, + Header, + Help, + Unknown +}; + +class CommandUtils { +public: + static CommandType getCommandType(const std::string &commandName); + + static void printCommandUnknownMessage(const std::string &programName, + const std::string &commandName) { + fprintf(stderr, "Command '%s' is unknown. Try '%s %s' for more information.\n", + commandName.c_str(), programName.c_str(), COMMAND_NAME_HELP); + } + +private: + DISALLOW_IMPLICIT_CONSTRUCTORS(CommandUtils); + + static const char *const COMMAND_NAME_INFO; + static const char *const COMMAND_NAME_DIFF; + static const char *const COMMAND_NAME_MAKEDICT; + static const char *const COMMAND_NAME_HEADER; + static const char *const COMMAND_NAME_HELP; +}; +} // namespace dicttoolkit +} // namespace latinime +#endif // LATINIME_DICT_TOOLKIT_COMMAND_UTILS_H diff --git a/native/dicttoolkit/tests/utils/command_utils_test.cpp b/native/dicttoolkit/tests/utils/command_utils_test.cpp new file mode 100644 index 000000000..9d79c9dd9 --- /dev/null +++ b/native/dicttoolkit/tests/utils/command_utils_test.cpp @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "utils/command_utils.h" + +#include + +namespace latinime { +namespace dicttoolkit { +namespace { + +TEST(CommandUtilsTests, TestGetCommandType) { + EXPECT_EQ(CommandUtils::getCommandType(""), CommandType::Unknown); + EXPECT_EQ(CommandUtils::getCommandType("abc"), CommandType::Unknown); + EXPECT_EQ(CommandUtils::getCommandType("info"), CommandType::Info); + EXPECT_EQ(CommandUtils::getCommandType("diff"), CommandType::Diff); + EXPECT_EQ(CommandUtils::getCommandType("makedict"), CommandType::Makedict); + EXPECT_EQ(CommandUtils::getCommandType("header"), CommandType::Header); + EXPECT_EQ(CommandUtils::getCommandType("help"), CommandType::Help); +} + +} // namespace +} // namespace dicttoolkit +} // namespace latinime