Add CaseInsensitiveEquality.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index fa10220..8794fa7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.12.0
+
+* Add `CaseInsensitiveEquality`.
+
## 1.11.0
* Add `EqualityMap` and `EqualitySet` classes which use `Equality` objects for
diff --git a/lib/src/equality.dart b/lib/src/equality.dart
index 09f10a6..39e4ad5 100644
--- a/lib/src/equality.dart
+++ b/lib/src/equality.dart
@@ -382,3 +382,17 @@
bool isValidKey(Object o) => o is Iterable || o is Map || _base.isValidKey(o);
}
+
+/// String equality that's insensitive to differences in ASCII case.
+///
+/// Non-ASCII characters are compared as-is, with no conversion.
+class CaseInsensitiveEquality implements Equality<String> {
+ const CaseInsensitiveEquality();
+
+ bool equals(String string1, String string2) =>
+ equalsIgnoreAsciiCase(string1, string2);
+
+ int hash(String string) => hashIgnoreAsciiCase(string);
+
+ bool isValidKey(Object object) => object is String;
+}
diff --git a/pubspec.yaml b/pubspec.yaml
index 13b81f2..ad3f111 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
name: collection
-version: 1.11.0
+version: 1.12.0
author: Dart Team <misc@dartlang.org>
description: Collections and utilities functions and classes related to collections.
homepage: https://www.github.com/dart-lang/collection
diff --git a/test/equality_test.dart b/test/equality_test.dart
index e609608..7d9246d 100644
--- a/test/equality_test.dart
+++ b/test/equality_test.dart
@@ -160,6 +160,21 @@
expect(colleq.equals(s1, s2),
isTrue);
});
+
+ test("CaseInsensitiveEquality", () {
+ var equality = const CaseInsensitiveEquality();
+ expect(equality.equals("foo", "foo"), isTrue);
+ expect(equality.equals("fOo", "FoO"), isTrue);
+ expect(equality.equals("FoO", "fOo"), isTrue);
+ expect(equality.equals("foo", "bar"), isFalse);
+ expect(equality.equals("fÕÕ", "fõõ"), isFalse);
+
+ expect(equality.hash("foo"), equals(equality.hash("foo")));
+ expect(equality.hash("fOo"), equals(equality.hash("FoO")));
+ expect(equality.hash("FoO"), equals(equality.hash("fOo")));
+ expect(equality.hash("foo"), isNot(equals(equality.hash("bar"))));
+ expect(equality.hash("fÕÕ"), isNot(equals(equality.hash("fõõ"))));
+ });
}
/// Wrapper objects for an `id` value.