• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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