/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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 "nsString.h" #include "VideoUtils.h" using namespace mozilla; TEST(StringListRange, MakeStringListRange) { static const struct { const char* mList; const char* mExpectedSkipEmpties; const char* mExpectedProcessAll; const char* mExpectedProcessEmpties; } tests[] = { // string skip all empties { "", "", "|", "" }, { " ", "", "|", "|" }, { ",", "", "||", "||" }, { " , ", "", "||", "||" }, { "a", "a|", "a|", "a|" }, { " a ", "a|", "a|", "a|" }, { "a,", "a|", "a||", "a||" }, { "a, ", "a|", "a||", "a||" }, { ",a", "a|", "|a|", "|a|" }, { " ,a", "a|", "|a|", "|a|" }, { "aa,bb", "aa|bb|", "aa|bb|", "aa|bb|" }, { " a a , b b ", "a a|b b|", "a a|b b|", "a a|b b|" }, { " , ,a 1,, ,b 2,", "a 1|b 2|", "||a 1|||b 2||", "||a 1|||b 2||" } }; for (const auto& test : tests) { nsCString list(test.mList); nsCString out; for (const auto& item : MakeStringListRange(list)) { out += item; out += "|"; } EXPECT_STREQ(test.mExpectedSkipEmpties, out.Data()); out.SetLength(0); for (const auto& item : MakeStringListRange(list)) { out += item; out += "|"; } EXPECT_STREQ(test.mExpectedProcessAll, out.Data()); out.SetLength(0); for (const auto& item : MakeStringListRange(list)) { out += item; out += "|"; } EXPECT_STREQ(test.mExpectedProcessEmpties, out.Data()); } } TEST(StringListRange, StringListContains) { static const struct { const char* mList; const char* mItemToSearch; bool mExpectedSkipEmpties; bool mExpectedProcessAll; bool mExpectedProcessEmpties; } tests[] = { // haystack needle skip all empties { "", "", false, true, false }, { " ", "", false, true, true }, { "", "a", false, false, false }, { " ", "a", false, false, false }, { ",", "a", false, false, false }, { " , ", "", false, true, true }, { " , ", "a", false, false, false }, { "a", "a", true, true, true }, { "a", "b", false, false, false }, { " a ", "a", true, true, true }, { "aa,bb", "aa", true, true, true }, { "aa,bb", "bb", true, true, true }, { "aa,bb", "cc", false, false, false }, { "aa,bb", " aa ", false, false, false }, { " a a , b b ", "a a", true, true, true }, { " , ,a 1,, ,b 2,", "a 1", true, true, true }, { " , ,a 1,, ,b 2,", "b 2", true, true, true }, { " , ,a 1,, ,b 2,", "", false, true, true }, { " , ,a 1,, ,b 2,", " ", false, false, false }, { " , ,a 1,, ,b 2,", "A 1", false, false, false }, { " , ,A 1,, ,b 2,", "a 1", false, false, false } }; for (const auto& test : tests) { nsCString list(test.mList); nsCString itemToSearch(test.mItemToSearch); EXPECT_EQ(test.mExpectedSkipEmpties, StringListContains(list, itemToSearch)) << "trying to find \"" << itemToSearch.Data() << "\" in \"" << list.Data() << "\" (skipping empties)"; EXPECT_EQ(test.mExpectedProcessAll, StringListContains (list, itemToSearch)) << "trying to find \"" << itemToSearch.Data() << "\" in \"" << list.Data() << "\" (processing everything)"; EXPECT_EQ(test.mExpectedProcessEmpties, StringListContains (list, itemToSearch)) << "trying to find \"" << itemToSearch.Data() << "\" in \"" << list.Data() << "\" (processing empties)"; } }