1/* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include "command_test.h" 17 18using namespace testing::ext; 19using namespace std; 20using namespace OHOS::HiviewDFX; 21namespace OHOS { 22namespace Developtools { 23namespace HiPerf { 24const std::string TEST_CMD_TRUE = "TEST_CMD_TRUE"; 25const std::string TEST_CMD_FALSE = "TEST_CMD_FALSE"; 26const std::string TEST_OPTION_TRUE = "-TEST_OPTION_TRUE"; 27const std::string TEST_OPTION_FALSE = "-TEST_OPTION_FALSE"; 28 29class CommandTest : public testing::Test { 30public: 31 static void SetUpTestCase(void); 32 static void TearDownTestCase(void); 33 void SetUp(); 34 void TearDown(); 35 36private: 37 std::unique_ptr<MockSubCommand> subCommandAlwaysTure = 38 std::make_unique<MockSubCommand>(TEST_CMD_TRUE); 39 std::unique_ptr<MockSubCommand> subCommandAlwaysFalse = 40 std::make_unique<MockSubCommand>(TEST_CMD_FALSE); 41}; 42 43void CommandTest::SetUpTestCase() {} 44 45void CommandTest::TearDownTestCase() {} 46 47void CommandTest::SetUp() 48{ 49 ASSERT_EQ(Option::RegisterMainOption(TEST_OPTION_TRUE, TEST_OPTION_HELP, OptionAlwaysTrue), 50 true); 51 ASSERT_EQ(Option::RegisterMainOption(TEST_OPTION_FALSE, TEST_OPTION_HELP, OptionAlwaysFalse), 52 true); 53 54 EXPECT_CALL(*subCommandAlwaysTure, OnSubCommand(_)).WillRepeatedly(Return(true)); 55 EXPECT_CALL(*subCommandAlwaysFalse, OnSubCommand(_)).WillRepeatedly(Return(false)); 56 57 ASSERT_TRUE(SubCommand::RegisterSubCommand(subCommandAlwaysTure.get()->Name(), 58 std::move(subCommandAlwaysTure))); 59 ASSERT_TRUE(SubCommand::RegisterSubCommand(subCommandAlwaysFalse.get()->Name(), 60 std::move(subCommandAlwaysFalse))); 61} 62 63void CommandTest::TearDown() 64{ 65 SubCommand::ClearSubCommands(); 66 Option::ClearMainOptions(); 67} 68 69/** 70 * @tc.name: TestCommandDistribution 71 * @tc.desc: 72 * @tc.type: FUNC 73 */ 74HWTEST_F(CommandTest, TestCommandDistribution, TestSize.Level1) 75{ 76 std::string args; 77 78 args = TEST_OPTION_TRUE + " " + TEST_OPTION_TRUE + " " + TEST_OPTION_TRUE; 79 EXPECT_EQ(Command::DispatchCommand(args), false); 80 81 args = TEST_OPTION_TRUE + " " + TEST_OPTION_TRUE + " " + TEST_CMD_TRUE; 82 EXPECT_EQ(Command::DispatchCommand(args), true); 83 84 args = TEST_OPTION_TRUE + " " + TEST_CMD_TRUE + " " + TEST_OPTION_TRUE; 85 EXPECT_EQ(Command::DispatchCommand(args), true); 86 87 args = TEST_CMD_TRUE + " " + TEST_OPTION_TRUE + " " + TEST_OPTION_TRUE; 88 EXPECT_EQ(Command::DispatchCommand(args), true); 89 90 args = TEST_CMD_TRUE + " " + TEST_CMD_TRUE + " " + TEST_CMD_TRUE; 91 EXPECT_EQ(Command::DispatchCommand(args), true); 92 93 args = TEST_NOREG_CMD + " " + TEST_CMD_TRUE + " " + TEST_CMD_TRUE; 94 EXPECT_EQ(Command::DispatchCommand(args), false); 95 96 args = TEST_NO_OPTION_CMD + " " + TEST_CMD_TRUE + " " + TEST_CMD_TRUE; 97 EXPECT_EQ(Command::DispatchCommand(args), false); 98 99 args = TEST_CMD_TRUE + " " + TEST_NOREG_CMD + " " + TEST_CMD_TRUE; 100 EXPECT_EQ(Command::DispatchCommand(args), true); 101 102 args = TEST_OPTION_FALSE + " " + TEST_CMD_TRUE + " " + TEST_CMD_TRUE; 103 EXPECT_EQ(Command::DispatchCommand(args), false); 104 105 args = TEST_OPTION_TRUE + " " + TEST_CMD_FALSE + " " + TEST_CMD_TRUE; 106 EXPECT_EQ(Command::DispatchCommand(args), false); 107} 108} // namespace HiPerf 109} // namespace Developtools 110} // namespace OHOS 111