1*d28d5f8bSaustinfcui #include <cli.hpp>
2*d28d5f8bSaustinfcui 
3*d28d5f8bSaustinfcui #include "gtest/gtest.h"
4*d28d5f8bSaustinfcui 
5*d28d5f8bSaustinfcui using namespace attn;
6*d28d5f8bSaustinfcui 
TEST(TestCli,TestCliOptAll)7*d28d5f8bSaustinfcui TEST(TestCli, TestCliOptAll)
8*d28d5f8bSaustinfcui {
9*d28d5f8bSaustinfcui     // Test --all on options
10*d28d5f8bSaustinfcui     Config* config = new Config();
11*d28d5f8bSaustinfcui     char* argv[2];
12*d28d5f8bSaustinfcui     int i = 0;
13*d28d5f8bSaustinfcui     argv[i++] = (char*)"--all";
14*d28d5f8bSaustinfcui     argv[i++] = (char*)"on";
15*d28d5f8bSaustinfcui     parseConfig(argv, argv + i, config);
16*d28d5f8bSaustinfcui     EXPECT_EQ(true, config->getFlag(AttentionFlag::enVital));
17*d28d5f8bSaustinfcui     EXPECT_EQ(true, config->getFlag(AttentionFlag::enCheckstop));
18*d28d5f8bSaustinfcui     EXPECT_EQ(true, config->getFlag(AttentionFlag::enTerminate));
19*d28d5f8bSaustinfcui     EXPECT_EQ(true, config->getFlag(AttentionFlag::enBreakpoints));
20*d28d5f8bSaustinfcui     // The dfltTi flag is cleared by default and is not updated in the function.
21*d28d5f8bSaustinfcui     EXPECT_EQ(false, config->getFlag(AttentionFlag::dfltTi));
22*d28d5f8bSaustinfcui     EXPECT_EQ(true, config->getFlag(AttentionFlag::enClrAttnIntr));
23*d28d5f8bSaustinfcui 
24*d28d5f8bSaustinfcui     // Test --all off options
25*d28d5f8bSaustinfcui     // Set the dfltTi flag to default value.
26*d28d5f8bSaustinfcui     config->clearFlag(dfltTi);
27*d28d5f8bSaustinfcui     i = 0;
28*d28d5f8bSaustinfcui     argv[i++] = (char*)"--all";
29*d28d5f8bSaustinfcui     argv[i++] = (char*)"off";
30*d28d5f8bSaustinfcui     parseConfig(argv, argv + i, config);
31*d28d5f8bSaustinfcui     EXPECT_EQ(false, config->getFlag(AttentionFlag::enVital));
32*d28d5f8bSaustinfcui     EXPECT_EQ(false, config->getFlag(AttentionFlag::enCheckstop));
33*d28d5f8bSaustinfcui     EXPECT_EQ(false, config->getFlag(AttentionFlag::enTerminate));
34*d28d5f8bSaustinfcui     EXPECT_EQ(false, config->getFlag(AttentionFlag::enBreakpoints));
35*d28d5f8bSaustinfcui     // The same, the dfltTi flag is not updated in the function.
36*d28d5f8bSaustinfcui     EXPECT_EQ(false, config->getFlag(AttentionFlag::dfltTi));
37*d28d5f8bSaustinfcui     EXPECT_EQ(false, config->getFlag(AttentionFlag::enClrAttnIntr));
38*d28d5f8bSaustinfcui     delete config;
39*d28d5f8bSaustinfcui }
40*d28d5f8bSaustinfcui 
TEST(TestCli,TestCliNonAll)41*d28d5f8bSaustinfcui TEST(TestCli, TestCliNonAll)
42*d28d5f8bSaustinfcui {
43*d28d5f8bSaustinfcui     // Test options with on switch.
44*d28d5f8bSaustinfcui     Config* config = new Config();
45*d28d5f8bSaustinfcui     char* argv[11];
46*d28d5f8bSaustinfcui     int i = 0;
47*d28d5f8bSaustinfcui     argv[i++] = (char*)"--vital";
48*d28d5f8bSaustinfcui     argv[i++] = (char*)"on";
49*d28d5f8bSaustinfcui     argv[i++] = (char*)"--checkstop";
50*d28d5f8bSaustinfcui     argv[i++] = (char*)"on";
51*d28d5f8bSaustinfcui     argv[i++] = (char*)"--terminate";
52*d28d5f8bSaustinfcui     argv[i++] = (char*)"on";
53*d28d5f8bSaustinfcui     argv[i++] = (char*)"--breakpoints";
54*d28d5f8bSaustinfcui     argv[i++] = (char*)"on";
55*d28d5f8bSaustinfcui     argv[i++] = (char*)"--clrattnintr";
56*d28d5f8bSaustinfcui     argv[i++] = (char*)"on";
57*d28d5f8bSaustinfcui     // The --defaultti option does not have on/off switch.
58*d28d5f8bSaustinfcui     // If this option is specified, it is enabled.
59*d28d5f8bSaustinfcui     argv[i++] = (char*)"--defaultti";
60*d28d5f8bSaustinfcui 
61*d28d5f8bSaustinfcui     parseConfig(argv, argv + i, config);
62*d28d5f8bSaustinfcui     EXPECT_EQ(true, config->getFlag(AttentionFlag::enVital));
63*d28d5f8bSaustinfcui     EXPECT_EQ(true, config->getFlag(AttentionFlag::enCheckstop));
64*d28d5f8bSaustinfcui     EXPECT_EQ(true, config->getFlag(AttentionFlag::enTerminate));
65*d28d5f8bSaustinfcui     EXPECT_EQ(true, config->getFlag(AttentionFlag::enBreakpoints));
66*d28d5f8bSaustinfcui     EXPECT_EQ(true, config->getFlag(AttentionFlag::enClrAttnIntr));
67*d28d5f8bSaustinfcui     EXPECT_EQ(true, config->getFlag(AttentionFlag::dfltTi));
68*d28d5f8bSaustinfcui 
69*d28d5f8bSaustinfcui     // Test options with off switch.
70*d28d5f8bSaustinfcui     // Set the dfltTi flag to default value.
71*d28d5f8bSaustinfcui     config->clearFlag(dfltTi);
72*d28d5f8bSaustinfcui     i = 0;
73*d28d5f8bSaustinfcui     argv[i++] = (char*)"--vital";
74*d28d5f8bSaustinfcui     argv[i++] = (char*)"off";
75*d28d5f8bSaustinfcui     argv[i++] = (char*)"--checkstop";
76*d28d5f8bSaustinfcui     argv[i++] = (char*)"off";
77*d28d5f8bSaustinfcui     argv[i++] = (char*)"--terminate";
78*d28d5f8bSaustinfcui     argv[i++] = (char*)"off";
79*d28d5f8bSaustinfcui     argv[i++] = (char*)"--breakpoints";
80*d28d5f8bSaustinfcui     argv[i++] = (char*)"off";
81*d28d5f8bSaustinfcui     argv[i++] = (char*)"--clrattnintr";
82*d28d5f8bSaustinfcui     argv[i++] = (char*)"off";
83*d28d5f8bSaustinfcui 
84*d28d5f8bSaustinfcui     parseConfig(argv, argv + i, config);
85*d28d5f8bSaustinfcui     EXPECT_EQ(false, config->getFlag(AttentionFlag::enVital));
86*d28d5f8bSaustinfcui     EXPECT_EQ(false, config->getFlag(AttentionFlag::enCheckstop));
87*d28d5f8bSaustinfcui     EXPECT_EQ(false, config->getFlag(AttentionFlag::enTerminate));
88*d28d5f8bSaustinfcui     EXPECT_EQ(false, config->getFlag(AttentionFlag::enBreakpoints));
89*d28d5f8bSaustinfcui     EXPECT_EQ(false, config->getFlag(AttentionFlag::enClrAttnIntr));
90*d28d5f8bSaustinfcui     // If the --defaultti option is not specified, it is disabled by default.
91*d28d5f8bSaustinfcui     EXPECT_EQ(false, config->getFlag(AttentionFlag::dfltTi));
92*d28d5f8bSaustinfcui     delete config;
93*d28d5f8bSaustinfcui }
94