/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "gtest/gtest.h" #include "mozilla/gtest/MozAssertions.h" #include "nsINIParser.h" TEST(INIParser, DeleteString) { bool containedErrors = true; nsINIParser* parser = new nsINIParser(); nsresult rv = parser->InitFromString( "[sec]\r\ key1=val1\r\ key2=val2\r\ key3=val3\r\ key4=val4"_ns, &containedErrors); EXPECT_NS_SUCCEEDED(rv); EXPECT_FALSE(containedErrors); rv = parser->DeleteString("sec", "key3"); EXPECT_NS_SUCCEEDED(rv); rv = parser->DeleteString("sec", "key4"); EXPECT_NS_SUCCEEDED(rv); rv = parser->DeleteString("sec", "key1"); EXPECT_NS_SUCCEEDED(rv); rv = parser->DeleteString("sec", "key2"); EXPECT_NS_SUCCEEDED(rv); delete parser; } TEST(INIParser, DeleteSection) { bool containedErrors = true; nsINIParser* parser = new nsINIParser(); nsresult rv = parser->InitFromString( "[sec1]\r\ key=val\r\ \r\ [sec2]\r\ key=val\r\ [sec3]\r\ key=val\r\ [sec4]\r\ key=val"_ns, &containedErrors); EXPECT_NS_SUCCEEDED(rv); EXPECT_FALSE(containedErrors); rv = parser->DeleteSection("sec3"); EXPECT_NS_SUCCEEDED(rv); rv = parser->DeleteSection("sec4"); EXPECT_NS_SUCCEEDED(rv); rv = parser->DeleteSection("sec1"); EXPECT_NS_SUCCEEDED(rv); rv = parser->DeleteSection("sec2"); EXPECT_NS_SUCCEEDED(rv); delete parser; } TEST(INIParser, InvalidData) { bool containedErrors = false; nsINIParser* parser = new nsINIParser(); nsresult rv = parser->InitFromString("bogus"_ns, &containedErrors); EXPECT_NS_SUCCEEDED(rv); EXPECT_TRUE(containedErrors); delete parser; } TEST(INIParser, PartialSection) { bool containedErrors = false; nsINIParser* parser = new nsINIParser(); nsresult rv = parser->InitFromString("[]"_ns, &containedErrors); EXPECT_NS_SUCCEEDED(rv); EXPECT_TRUE(containedErrors); delete parser; } TEST(INIParser, InvalidSection) { bool containedErrors = false; nsINIParser* parser = new nsINIParser(); nsresult rv = parser->InitFromString( "[sec1[[\r\ key=val\r\ \r\ [sec2]\r\ key=val"_ns, &containedErrors); EXPECT_NS_SUCCEEDED(rv); EXPECT_TRUE(containedErrors); nsCString result; rv = parser->GetString("sec1", "key", result); EXPECT_NS_FAILED(rv); rv = parser->GetString("sec2", "key", result); EXPECT_NS_SUCCEEDED(rv); EXPECT_EQ(result, "val"_ns); delete parser; } TEST(INIParser, InvalidSection2) { bool containedErrors = false; nsINIParser* parser = new nsINIParser(); nsresult rv = parser->InitFromString( "[section]\r\ okey=ovalue\r\ [sect[ion]\r\ key=val\r\ [newsection]\r\ nkey=nvalue"_ns, &containedErrors); EXPECT_NS_SUCCEEDED(rv); EXPECT_TRUE(containedErrors); nsCString result; rv = parser->GetString("section", "okey", result); EXPECT_NS_SUCCEEDED(rv); EXPECT_EQ(result, "ovalue"_ns); rv = parser->GetString("section", "key", result); EXPECT_NS_FAILED(rv); rv = parser->GetString("sect[ion", "key", result); EXPECT_NS_FAILED(rv); rv = parser->GetString("newsection", "nkey", result); EXPECT_NS_SUCCEEDED(rv); EXPECT_EQ(result, "nvalue"_ns); delete parser; } TEST(INIParser, SectionBrackets) { bool containedErrors = false; nsINIParser* parser = new nsINIParser(); nsresult rv = parser->InitFromString( "[]]]section]\r\ key=val"_ns, &containedErrors); EXPECT_NS_SUCCEEDED(rv); EXPECT_TRUE(containedErrors); nsCString result; rv = parser->GetString("]]]section", "key", result); EXPECT_NS_FAILED(rv); rv = parser->GetString("section", "key", result); EXPECT_NS_FAILED(rv); delete parser; } TEST(INIParser, PartialKey) { bool containedErrors = false; nsINIParser* parser = new nsINIParser(); nsresult rv = parser->InitFromString( "[sec1]\r\ key"_ns, &containedErrors); EXPECT_NS_SUCCEEDED(rv); EXPECT_TRUE(containedErrors); delete parser; } // This whitespace handling seems incorrect but changing it might break // something so this test will let us know if that happens. TEST(INIParser, KeyValueWhitespace) { bool containedErrors = false; nsINIParser* parser = new nsINIParser(); nsresult rv = parser->InitFromString( "[section]\r\ key = value \r\ "_ns, &containedErrors); EXPECT_NS_SUCCEEDED(rv); EXPECT_FALSE(containedErrors); nsCString result; rv = parser->GetString("section", "key ", result); EXPECT_NS_SUCCEEDED(rv); EXPECT_EQ(result, " value "_ns); delete parser; }