Skip to content

Commit

Permalink
Fix containsAnyOf that only worked with comparable elements
Browse files Browse the repository at this point in the history
Fixes #1154
  • Loading branch information
joel-costigliola committed Jan 14, 2018
1 parent 43c3c6b commit 277bae8
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/main/java/org/assertj/core/internal/Iterables.java
Expand Up @@ -1125,7 +1125,7 @@ public void assertContainsAnyOf(AssertionInfo info, Iterable<?> actual, Object[]
if (commonCheckThatIterableAssertionSucceeds(info, actual, values))
return;

Set<Object> valuesToSearchFor = newTreeSet(values);
Iterable<Object> valuesToSearchFor = newArrayList(values);
for (Object element : actual) {
if (iterableContains(valuesToSearchFor, element)) return;
}
Expand Down
Expand Up @@ -12,8 +12,10 @@
*/
package org.assertj.core.internal.iterables;

import static java.util.Arrays.asList;
import static org.assertj.core.error.ShouldContainAnyOf.shouldContainAnyOf;
import static org.assertj.core.internal.ErrorMessages.valuesToLookForIsNull;
import static org.assertj.core.test.Name.name;
import static org.assertj.core.test.ObjectArrays.emptyArray;
import static org.assertj.core.test.TestData.someInfo;
import static org.assertj.core.test.TestFailures.failBecauseExpectedAssertionErrorWasNotThrown;
Expand All @@ -25,6 +27,7 @@
import org.assertj.core.api.AssertionInfo;
import org.assertj.core.internal.Iterables;
import org.assertj.core.internal.IterablesBaseTest;
import org.assertj.core.test.Name;
import org.junit.Test;

/**
Expand All @@ -39,6 +42,14 @@ public void should_pass_if_actual_contains_given_values() {
iterables.assertContainsAnyOf(someInfo(), actual, array("Luke"));
}

@Test
public void should_pass_with_non_comparable_values() {
// GIVEN
Iterable<Name> names = asList(name("John", "Doe"));
// THEN
iterables.assertContainsAnyOf(someInfo(), names, array(name("John", "Doe"), name("Jane", "Doe")));
}

@Test
public void should_pass_if_actual_contains_given_values_in_different_order() {
iterables.assertContainsAnyOf(someInfo(), actual, array("Leia", "Yoda"));
Expand Down
4 changes: 4 additions & 0 deletions src/test/java/org/assertj/core/test/Name.java
Expand Up @@ -36,6 +36,10 @@ public Name(String first, String last) {
setLast(last);
}

public static Name name(String first, String last) {
return new Name(first, last);
}

public String getFirst() {
return first;
}
Expand Down

0 comments on commit 277bae8

Please sign in to comment.