diff --git a/test/meson.build b/test/meson.build
index e9b6e6e..0517032 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -65,6 +65,7 @@
   'test-pll-unlock',
   'test-resolution',
   'test-tod-step-check-fault',
+  'test-cli',
 ]
 
 foreach tc : testcases
diff --git a/test/test-attention.cpp b/test/test-attention.cpp
index f894535..2b33a6d 100644
--- a/test/test-attention.cpp
+++ b/test/test-attention.cpp
@@ -118,9 +118,7 @@
 
         EXPECT_NE(nullptr, target);
 
-        attr = std::numeric_limits<uint32_t>::max();
         attr = getTrgtType(target);
-
         EXPECT_EQ(TYPE_PROC, attr);
 
         attr = std::numeric_limits<uint32_t>::max();
@@ -142,7 +140,7 @@
     std::unique_ptr<Attention> pAttn;
     Config* config      = nullptr;
     pdbg_target* target = nullptr;
-    uint32_t attr;
+    uint32_t attr       = std::numeric_limits<uint32_t>::max();
 };
 
 TEST_F(AttentionTestProc, TestAttentionProc)
@@ -168,4 +166,37 @@
     EXPECT_EQ(false, config_tmp->getFlag(gAttnFlag));
     config_tmp->setFlag(gAttnFlag);
     EXPECT_EQ(true, config_tmp->getFlag(gAttnFlag));
+}
+
+TEST(AttnConfig, TestAttnConfig)
+{
+    Config* config = new Config();
+
+    // Test clearFlagAll() function.
+    config->clearFlagAll();
+    EXPECT_EQ(false, config->getFlag(AttentionFlag::enVital));
+    EXPECT_EQ(false, config->getFlag(AttentionFlag::enCheckstop));
+    EXPECT_EQ(false, config->getFlag(AttentionFlag::enTerminate));
+    EXPECT_EQ(false, config->getFlag(AttentionFlag::enBreakpoints));
+    // The dfltTi flag is not impacted.
+    EXPECT_EQ(false, config->getFlag(AttentionFlag::dfltTi));
+    EXPECT_EQ(false, config->getFlag(AttentionFlag::enClrAttnIntr));
+
+    // Test setFlagAll() function.
+    config->setFlagAll();
+    EXPECT_EQ(true, config->getFlag(AttentionFlag::enVital));
+    EXPECT_EQ(true, config->getFlag(AttentionFlag::enCheckstop));
+    EXPECT_EQ(true, config->getFlag(AttentionFlag::enTerminate));
+    EXPECT_EQ(true, config->getFlag(AttentionFlag::enBreakpoints));
+    // The dfltTi flag is not impacted.
+    EXPECT_EQ(false, config->getFlag(AttentionFlag::dfltTi));
+    EXPECT_EQ(true, config->getFlag(AttentionFlag::enClrAttnIntr));
+
+    // Test setFlag() and getFlag() functions.
+    // Only test one flag.
+    config->clearFlagAll();
+    config->setFlag(enVital);
+    EXPECT_EQ(true, config->getFlag(enVital));
+
+    delete config;
 }
\ No newline at end of file
diff --git a/test/test-cli.cpp b/test/test-cli.cpp
new file mode 100644
index 0000000..08595e4
--- /dev/null
+++ b/test/test-cli.cpp
@@ -0,0 +1,94 @@
+#include <cli.hpp>
+
+#include "gtest/gtest.h"
+
+using namespace attn;
+
+TEST(TestCli, TestCliOptAll)
+{
+
+    // Test --all on options
+    Config* config = new Config();
+    char* argv[2];
+    int i     = 0;
+    argv[i++] = (char*)"--all";
+    argv[i++] = (char*)"on";
+    parseConfig(argv, argv + i, config);
+    EXPECT_EQ(true, config->getFlag(AttentionFlag::enVital));
+    EXPECT_EQ(true, config->getFlag(AttentionFlag::enCheckstop));
+    EXPECT_EQ(true, config->getFlag(AttentionFlag::enTerminate));
+    EXPECT_EQ(true, config->getFlag(AttentionFlag::enBreakpoints));
+    // The dfltTi flag is cleared by default and is not updated in the function.
+    EXPECT_EQ(false, config->getFlag(AttentionFlag::dfltTi));
+    EXPECT_EQ(true, config->getFlag(AttentionFlag::enClrAttnIntr));
+
+    // Test --all off options
+    // Set the dfltTi flag to default value.
+    config->clearFlag(dfltTi);
+    i         = 0;
+    argv[i++] = (char*)"--all";
+    argv[i++] = (char*)"off";
+    parseConfig(argv, argv + i, config);
+    EXPECT_EQ(false, config->getFlag(AttentionFlag::enVital));
+    EXPECT_EQ(false, config->getFlag(AttentionFlag::enCheckstop));
+    EXPECT_EQ(false, config->getFlag(AttentionFlag::enTerminate));
+    EXPECT_EQ(false, config->getFlag(AttentionFlag::enBreakpoints));
+    // The same, the dfltTi flag is not updated in the function.
+    EXPECT_EQ(false, config->getFlag(AttentionFlag::dfltTi));
+    EXPECT_EQ(false, config->getFlag(AttentionFlag::enClrAttnIntr));
+    delete config;
+}
+
+TEST(TestCli, TestCliNonAll)
+{
+    // Test options with on switch.
+    Config* config = new Config();
+    char* argv[11];
+    int i     = 0;
+    argv[i++] = (char*)"--vital";
+    argv[i++] = (char*)"on";
+    argv[i++] = (char*)"--checkstop";
+    argv[i++] = (char*)"on";
+    argv[i++] = (char*)"--terminate";
+    argv[i++] = (char*)"on";
+    argv[i++] = (char*)"--breakpoints";
+    argv[i++] = (char*)"on";
+    argv[i++] = (char*)"--clrattnintr";
+    argv[i++] = (char*)"on";
+    // The --defaultti option does not have on/off switch.
+    // If this option is specified, it is enabled.
+    argv[i++] = (char*)"--defaultti";
+
+    parseConfig(argv, argv + i, config);
+    EXPECT_EQ(true, config->getFlag(AttentionFlag::enVital));
+    EXPECT_EQ(true, config->getFlag(AttentionFlag::enCheckstop));
+    EXPECT_EQ(true, config->getFlag(AttentionFlag::enTerminate));
+    EXPECT_EQ(true, config->getFlag(AttentionFlag::enBreakpoints));
+    EXPECT_EQ(true, config->getFlag(AttentionFlag::enClrAttnIntr));
+    EXPECT_EQ(true, config->getFlag(AttentionFlag::dfltTi));
+
+    // Test options with off switch.
+    // Set the dfltTi flag to default value.
+    config->clearFlag(dfltTi);
+    i         = 0;
+    argv[i++] = (char*)"--vital";
+    argv[i++] = (char*)"off";
+    argv[i++] = (char*)"--checkstop";
+    argv[i++] = (char*)"off";
+    argv[i++] = (char*)"--terminate";
+    argv[i++] = (char*)"off";
+    argv[i++] = (char*)"--breakpoints";
+    argv[i++] = (char*)"off";
+    argv[i++] = (char*)"--clrattnintr";
+    argv[i++] = (char*)"off";
+
+    parseConfig(argv, argv + i, config);
+    EXPECT_EQ(false, config->getFlag(AttentionFlag::enVital));
+    EXPECT_EQ(false, config->getFlag(AttentionFlag::enCheckstop));
+    EXPECT_EQ(false, config->getFlag(AttentionFlag::enTerminate));
+    EXPECT_EQ(false, config->getFlag(AttentionFlag::enBreakpoints));
+    EXPECT_EQ(false, config->getFlag(AttentionFlag::enClrAttnIntr));
+    // If the --defaultti option is not specified, it is disabled by default.
+    EXPECT_EQ(false, config->getFlag(AttentionFlag::dfltTi));
+    delete config;
+}
