Merge pull request #29 from fmeum:fix-in-order
PiperOrigin-RevId: 527166935
diff --git a/lib/private/compare_util.bzl b/lib/private/compare_util.bzl
index b3a634f..f84e2bb 100644
--- a/lib/private/compare_util.bzl
+++ b/lib/private/compare_util.bzl
@@ -138,7 +138,13 @@
expected_entry = expected_queue[pos]
if expected_entry[1].match(actual_entry[1]):
- continue # Happy path: both are equal and order is maintained.
+ # Happy path: both are equal and order is maintained.
+ matches[expected_entry[0]] = MatchResult.new(
+ found_at = actual_entry[0],
+ matched_value = actual_entry[1],
+ matcher = expected_entry[1],
+ )
+ continue
ordered = False
found_at, found_entry = _list_find(
actual_queue,
diff --git a/tests/truth_tests.bzl b/tests/truth_tests.bzl
index 77d57b4..44d2d27 100644
--- a/tests/truth_tests.bzl
+++ b/tests/truth_tests.bzl
@@ -509,6 +509,35 @@
env = env,
msg = "check multiplicity; expected with multiple, expected with unique",
)
+
+ subject = truth.expect(fake_env).that_collection(["one", "four", "three", "two", "five"])
+ order = subject.contains_exactly(["one", "two", "three", "four", "five"])
+ _assert_no_failures(
+ fake_env,
+ env = env,
+ msg = "check same elements with expected in different order",
+ )
+ order.in_order()
+ _assert_failure(
+ fake_env,
+ [
+ "expected values all found, but with incorrect order:",
+ "0: one found at offset 0",
+ "1: two found at offset 3",
+ "2: three found at offset 2",
+ "3: four found at offset 1",
+ "4: five found at offset 4",
+ "actual values:",
+ "0: one",
+ "1: four",
+ "2: three",
+ "3: two",
+ "4: five",
+ ],
+ env = env,
+ msg = "check same elements out of order",
+ )
+
_end(env, fake_env)
_suite.append(collection_contains_exactly_test)