feat(xkeyboard): Icon matching using variant (#2521)

* feat(string_util): add contains_nocase

* feat(xkeyboard): Enable icon by variant

* Cleanup

* string_util: add some cases to string test

* string_util: rename contains_nocase -> contains_ignore_case

* layouticonset: use contains_ignore_case

* layouticonset: apply renamings and remove dead code

* remove VARIANT_NONE and use empty string instead

* use emplace_back and add assert

* layouticonset: precompute condition

* xkeyboard: restore missing continue

* Cleanup parse_icons

* Always choose the first case-insensitive match

* Cleanup layouticonset.get

* update the changelog

Co-authored-by: patrick96 <p.ziegler96@gmail.com>
This commit is contained in:
dvermd
2021-10-05 12:12:47 +02:00
committed by GitHub
parent a2968127d1
commit 98dffc292a
11 changed files with 302 additions and 16 deletions

View File

@ -1,4 +1,5 @@
#include "utils/string.hpp"
#include "common/test.hpp"
using namespace polybar;
@ -20,6 +21,27 @@ TEST(String, compare) {
EXPECT_FALSE(string_util::compare("foo", "bar"));
}
TEST(String, contains) {
EXPECT_TRUE(string_util::contains("fooooobar", "foo"));
EXPECT_TRUE(string_util::contains("barrrrrrfoo", "foo"));
EXPECT_TRUE(string_util::contains("barrfoobazzz", "foo"));
EXPECT_FALSE(string_util::contains("foo", "Foo"));
EXPECT_FALSE(string_util::contains("foo", "bar"));
}
TEST(String, contains_ignore_case) {
EXPECT_TRUE(string_util::contains_ignore_case("fooooobar", "foo"));
EXPECT_TRUE(string_util::contains_ignore_case("barrrrrrfoo", "foo"));
EXPECT_TRUE(string_util::contains_ignore_case("barrfoobazzz", "foo"));
EXPECT_TRUE(string_util::contains_ignore_case("fooooobar", "fOO"));
EXPECT_TRUE(string_util::contains_ignore_case("barrrrrrfoo", "FOo"));
EXPECT_TRUE(string_util::contains_ignore_case("barrfoobazzz", "FoO"));
EXPECT_TRUE(string_util::contains_ignore_case("foo", "Foo"));
EXPECT_FALSE(string_util::contains_ignore_case("foo", "bar"));
EXPECT_TRUE(string_util::contains_ignore_case("foo", ""));
EXPECT_FALSE(string_util::contains_ignore_case("", "bar"));
}
TEST(String, replace) {
EXPECT_EQ("a.c", string_util::replace("abc", "b", "."));
EXPECT_EQ("a.a", string_util::replace("aaa", "a", ".", 1, 2));