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 "subcommand_test.h"
17
18 #include <gtest/gtest.h>
19 #include <hilog/log.h>
20
21 using namespace testing::ext;
22 namespace OHOS {
23 namespace Developtools {
24 namespace HiPerf {
25 class HiPerfSubcommandTest : public testing::Test {
26 public:
27 static void SetUpTestCase(void);
28 static void TearDownTestCase(void);
29 void SetUp();
30 void TearDown();
31 };
32
33 class SubcommandObj : public SubCommand {
34 public:
SubcommandObj()35 SubcommandObj() : SubCommand("subcomm", "test subcomm", "ut test subcomm") {}
OnSubCommand(std::vector<std::string> & args)36 HiperfError OnSubCommand(std::vector<std::string>& args) override
37 {
38 return HiperfError::NO_ERR;
39 }
40 };
41
SetUpTestCase()42 void HiPerfSubcommandTest::SetUpTestCase() {}
43
TearDownTestCase()44 void HiPerfSubcommandTest::TearDownTestCase() {}
45
SetUp()46 void HiPerfSubcommandTest::SetUp()
47 {
48 ASSERT_EQ(SubCommand::GetSubCommands().size(), 0u);
49 SubCommand::RegisterSubCommand(TEST_CMD_1, std::make_unique<SubCommandTest>(TEST_CMD_1));
50 SubCommand::RegisterSubCommand(TEST_CMD_2, std::make_unique<SubCommandTest>(TEST_CMD_2));
51 SubCommand::RegisterSubCommand(TEST_CMD_3, std::make_unique<SubCommandTest>(TEST_CMD_3));
52 }
53
TearDown()54 void HiPerfSubcommandTest::TearDown()
55 {
56 SubCommand::ClearSubCommands();
57 ASSERT_EQ(SubCommand::GetSubCommands().size(), 0u);
58 }
59
60 /**
61 * @tc.name: TestRegisterSubCommand
62 * @tc.desc:
63 * @tc.type: FUNC
64 */
65 HWTEST_F(HiPerfSubcommandTest, TestRegisterSubCommand, TestSize.Level0)
66 {
67 EXPECT_EQ(SubCommand::RegisterSubCommand("", std::make_unique<SubCommandTest>(TEST_CMD_1)),
68 false);
69 EXPECT_EQ(SubCommand::RegisterSubCommand("t", std::make_unique<SubCommandTest>(TEST_CMD_1)),
70 true);
71 EXPECT_EQ(SubCommand::RegisterSubCommand("-t", std::make_unique<SubCommandTest>(TEST_CMD_1)),
72 false);
73 EXPECT_EQ(SubCommand::RegisterSubCommand("--t", std::make_unique<SubCommandTest>(TEST_CMD_1)),
74 false);
75 EXPECT_EQ(SubCommand::RegisterSubCommand("test", std::make_unique<SubCommandTest>(TEST_CMD_1)),
76 true);
77 EXPECT_EQ(SubCommand::RegisterSubCommand("test", std::make_unique<SubCommandTest>(TEST_CMD_1)),
78 false);
79 }
80
81 /**
82 * @tc.name: TestGetSubCommands
83 * @tc.desc: also test SubCommand::ClearSubCommands()
84 * @tc.type: FUNC
85 */
86 HWTEST_F(HiPerfSubcommandTest, TestGetSubCommands, TestSize.Level1)
87 {
88 EXPECT_EQ(SubCommand::GetSubCommands().size(), 3u);
89 SubCommand::ClearSubCommands();
90 EXPECT_EQ(SubCommand::GetSubCommands().size(), 0u);
91 }
92
93 /**
94 * @tc.name: TestFindSubCommand
95 * @tc.desc:
96 * @tc.type: FUNC
97 */
98 HWTEST_F(HiPerfSubcommandTest, TestFindSubCommand, TestSize.Level1)
99 {
100 ASSERT_NE(SubCommand::FindSubCommand(TEST_CMD_1), nullptr);
101 EXPECT_EQ(SubCommand::FindSubCommand(TEST_CMD_1)->Name(), TEST_CMD_1);
102 EXPECT_EQ(SubCommand::FindSubCommand(TEST_CMD_1)->Brief(), TEST_BRIEF);
103 EXPECT_EQ(SubCommand::FindSubCommand(TEST_CMD_1)->Help(), TEST_HELP);
104
105 ASSERT_NE(SubCommand::FindSubCommand(TEST_CMD_2), nullptr);
106 EXPECT_EQ(SubCommand::FindSubCommand(TEST_CMD_2)->Name(), TEST_CMD_2);
107 EXPECT_EQ(SubCommand::FindSubCommand(TEST_CMD_2)->Brief(), TEST_BRIEF);
108 EXPECT_EQ(SubCommand::FindSubCommand(TEST_CMD_2)->Help(), TEST_HELP);
109
110 ASSERT_NE(SubCommand::FindSubCommand(TEST_CMD_3), nullptr);
111 EXPECT_EQ(SubCommand::FindSubCommand(TEST_CMD_3)->Name(), TEST_CMD_3);
112 EXPECT_EQ(SubCommand::FindSubCommand(TEST_CMD_3)->Brief(), TEST_BRIEF);
113 EXPECT_EQ(SubCommand::FindSubCommand(TEST_CMD_3)->Help(), TEST_HELP);
114
115 EXPECT_EQ(SubCommand::FindSubCommand(TEST_NOREG_CMD), nullptr);
116 }
117
118 /**
119 * @tc.name: TestFindSubCommand
120 * @tc.desc:
121 * @tc.type: FUNC
122 */
123 HWTEST_F(HiPerfSubcommandTest, TestOnSubCommandOptionsDump, TestSize.Level1)
124 {
125 std::vector<std::string> args;
126 SubcommandObj subcomm;
127 args = {"test"};
128 EXPECT_EQ(subcomm.OnSubCommandOptions(args), true);
129 args = {"--dumpoption"};
130 EXPECT_EQ(subcomm.OnSubCommandOptions(args), true);
131 args = {"--dumpoption", "opt"};
132 EXPECT_EQ(subcomm.OnSubCommandOptions(args), true);
133 args = {"--dumpoption", " "};
134 EXPECT_EQ(subcomm.OnSubCommandOptions(args), true);
135 args = {"-dumpoption", "opt"};
136 EXPECT_EQ(subcomm.OnSubCommandOptions(args), true);
137 args = {"--test"};
138 EXPECT_EQ(subcomm.OnSubCommandOptions(args), true);
139 args = {"--help"};
140 EXPECT_EQ(subcomm.OnSubCommandOptions(args), false);
141 args = {"--help", "opt"};
142 EXPECT_EQ(subcomm.OnSubCommandOptions(args), false);
143 args = {"--help", " "};
144 EXPECT_EQ(subcomm.OnSubCommandOptions(args), false);
145 args = {"-help"};
146 EXPECT_EQ(subcomm.OnSubCommandOptions(args), false);
147 args = {"-help"};
148 EXPECT_EQ(subcomm.OnSubCommandOptions(args), false);
149 args = {"-help", "opt"};
150 EXPECT_EQ(subcomm.OnSubCommandOptions(args), false);
151 }
152
153 /**
154 * @tc.name: TestFindSubCommand
155 * @tc.desc:
156 * @tc.type: FUNC
157 */
158 HWTEST_F(HiPerfSubcommandTest, TestOnPreSubCommand, TestSize.Level3)
159 {
160 std::vector<std::string> args;
161 SubcommandObj subcomm;
162 EXPECT_EQ(subcomm.OnPreSubCommand(), false);
163 args = {"--help"};
164 subcomm.OnSubCommandOptions(args);
165 EXPECT_EQ(subcomm.OnPreSubCommand(), true);
166 }
167
168 /**
169 * @tc.name: TestFindSubCommand
170 * @tc.desc:
171 * @tc.type: FUNC
172 */
173 HWTEST_F(HiPerfSubcommandTest, TestClearSubCommands, TestSize.Level2)
174 {
175 SubCommand::ClearSubCommands();
176 EXPECT_EQ(SubCommand::GetSubCommands().size(), 0u);
177 }
178
179 /**
180 * @tc.name: TestRegisterSubCommand
181 * @tc.desc:
182 * @tc.type: FUNC
183 */
184 HWTEST_F(HiPerfSubcommandTest, TestRegisterSubCommand2, TestSize.Level1)
185 {
186 SubcommandObj obj;
__anon1341cccc0102() 187 auto func = [&obj]() -> SubCommand& {
188 return obj;
189 };
190 SubCommand::ClearSubCommands();
191 EXPECT_EQ(SubCommand::RegisterSubCommand("", func), false);
192 EXPECT_EQ(SubCommand::RegisterSubCommand("-abc", func), false);
193 EXPECT_EQ(SubCommand::RegisterSubCommand("null", func), true);
194 EXPECT_EQ(SubCommand::RegisterSubCommand("null", func), false);
195 }
196 } // namespace HiPerf
197 } // namespace Developtools
198 } // namespace OHOS
199