Add tests for KernelConfigParser.

Test: libvintf_test
Bug: 38324908
Change-Id: I7b345b59cf252e71ca8962683585084cede0ce0b
diff --git a/test/main.cpp b/test/main.cpp
index 25694b9..cf537c4 100644
--- a/test/main.cpp
+++ b/test/main.cpp
@@ -16,12 +16,14 @@
 
 #define LOG_TAG "LibHidlTest"
 
+#include <algorithm>
 #include <functional>
 
+#include <vintf/CompatibilityMatrix.h>
+#include <vintf/KernelConfigParser.h>
+#include <vintf/VintfObject.h>
 #include <vintf/parse_string.h>
 #include <vintf/parse_xml.h>
-#include <vintf/CompatibilityMatrix.h>
-#include <vintf/VintfObject.h>
 
 #include <android-base/logging.h>
 #include <android-base/parseint.h>
@@ -1308,6 +1310,53 @@
     EXPECT_EQ(matrix.getXmlSchemaPath("media_profile", {2, 0}), "");
 }
 
+static KernelConfigParser processData(const std::string& data, bool processComments) {
+    KernelConfigParser parser(processComments);
+    const char* p = data.c_str();
+    size_t n = 0;
+    size_t chunkSize;
+    for (; n < data.size(); p += chunkSize, n += chunkSize) {
+        chunkSize = std::min<size_t>(5, data.size() - n);
+        parser.process(p, chunkSize);
+    }
+    return parser;
+}
+
+TEST_F(LibVintfTest, KernelConfigParser) {
+    // usage in /proc/config.gz
+    const std::string data =
+        "# CONFIG_NOT_SET is not set\n"
+        "CONFIG_ONE=1\n"
+        "CONFIG_Y=y\n"
+        "CONFIG_STR=\"string\"\n";
+    KernelConfigParser parser = processData(data, false /* processComments */);
+    const auto& configs = parser.configs();
+
+    EXPECT_EQ(configs.find("CONFIG_ONE")->second, "1");
+    EXPECT_EQ(configs.find("CONFIG_Y")->second, "y");
+    EXPECT_EQ(configs.find("CONFIG_STR")->second, "\"string\"");
+    EXPECT_EQ(configs.find("CONFIG_NOT_SET"), configs.end());
+}
+
+TEST_F(LibVintfTest, KernelConfigParser2) {
+    // usage in android-base.cfg
+    const std::string data =
+        "# CONFIG_NOT_SET is not set\n"
+        "CONFIG_ONE=1\n"
+        "CONFIG_Y=y\n"
+        "CONFIG_STR=string\n"
+        "# ignore_thiscomment\n"
+        "# CONFIG_NOT_SET2 is not set\n";
+    KernelConfigParser parser = processData(data, true /* processComments */);
+    const auto& configs = parser.configs();
+
+    EXPECT_EQ(configs.find("CONFIG_ONE")->second, "1");
+    EXPECT_EQ(configs.find("CONFIG_Y")->second, "y");
+    EXPECT_EQ(configs.find("CONFIG_STR")->second, "string");
+    EXPECT_EQ(configs.find("CONFIG_NOT_SET")->second, "n");
+    EXPECT_EQ(configs.find("CONFIG_NOT_SET2")->second, "n");
+}
+
 } // namespace vintf
 } // namespace android