Skip to content

Commit

Permalink
Stop using ImmutableList for storing elements in the implementation o…
Browse files Browse the repository at this point in the history
…f Fuzzy Truth, because we want to support nulls. (Unfortunately, the previous test case only went through the most trivial code path and didn't trigger the bug.)

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135676702
  • Loading branch information
peteg authored and cpovirk committed Oct 10, 2016
1 parent 80f6b87 commit 63c9f92
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 17 deletions.
18 changes: 9 additions & 9 deletions core/src/main/java/com/google/common/truth/IterableSubject.java
Expand Up @@ -619,8 +619,8 @@ public Ordered containsExactlyElementsIn(Iterable<? extends E> expected) {
// We know they don't correspond in order, so we're going to have to do an any-order test. // We know they don't correspond in order, so we're going to have to do an any-order test.
// Find a many:many mapping between the indexes of the elements which correspond, and check // Find a many:many mapping between the indexes of the elements which correspond, and check
// it for completeness. // it for completeness.
ImmutableList<A> actualList = ImmutableList.copyOf(getCastSubject()); List<A> actualList = Lists.newArrayList(getCastSubject());
ImmutableList<? extends E> expectedList = ImmutableList.copyOf(expected); List<? extends E> expectedList = Lists.newArrayList(expected);
ImmutableSetMultimap<Integer, Integer> candidateMapping = ImmutableSetMultimap<Integer, Integer> candidateMapping =
findCandidateMapping(actualList, expectedList); findCandidateMapping(actualList, expectedList);
failIfCandidateMappingHasMissingOrExtra(actualList, expectedList, candidateMapping); failIfCandidateMappingHasMissingOrExtra(actualList, expectedList, candidateMapping);
Expand Down Expand Up @@ -681,8 +681,8 @@ void failIfCandidateMappingHasMissingOrExtra(
List<? extends A> actual, List<? extends A> actual,
List<? extends E> expected, List<? extends E> expected,
ImmutableMultimap<Integer, Integer> mapping) { ImmutableMultimap<Integer, Integer> mapping) {
ImmutableList<? extends A> extra = findNotIndexed(actual, mapping.keySet()); List<? extends A> extra = findNotIndexed(actual, mapping.keySet());
ImmutableList<? extends E> missing = findNotIndexed(expected, mapping.inverse().keySet()); List<? extends E> missing = findNotIndexed(expected, mapping.inverse().keySet());
Optional<String> missingOrExtraMessage = describeMissingOrExtra(extra, missing); Optional<String> missingOrExtraMessage = describeMissingOrExtra(extra, missing);
if (missingOrExtraMessage.isPresent()) { if (missingOrExtraMessage.isPresent()) {
failWithRawMessage( failWithRawMessage(
Expand Down Expand Up @@ -721,19 +721,19 @@ private Optional<String> describeMissingOrExtra(
* Returns all the elements of the given list other than those with the given indexes. Assumes * Returns all the elements of the given list other than those with the given indexes. Assumes
* that all the given indexes really are valid indexes into the list. * that all the given indexes really are valid indexes into the list.
*/ */
private <T> ImmutableList<T> findNotIndexed(List<T> list, Set<Integer> indexes) { private <T> List<T> findNotIndexed(List<T> list, Set<Integer> indexes) {
if (indexes.size() == list.size()) { if (indexes.size() == list.size()) {
// If there are as many distinct valid indexes are there are elements in the list then every // If there are as many distinct valid indexes are there are elements in the list then every
// index must be in there once. // index must be in there once.
return ImmutableList.of(); return ImmutableList.of();
} }
ImmutableList.Builder<T> notIndexed = ImmutableList.builder(); List<T> notIndexed = Lists.newArrayList();
for (int index = 0; index < list.size(); index++) { for (int index = 0; index < list.size(); index++) {
if (!indexes.contains(index)) { if (!indexes.contains(index)) {
notIndexed.add(list.get(index)); notIndexed.add(list.get(index));
} }
} }
return notIndexed.build(); return notIndexed;
} }


/** /**
Expand Down Expand Up @@ -786,8 +786,8 @@ void failIfOneToOneMappingHasMissingOrExtra(
List<? extends A> actual, List<? extends A> actual,
List<? extends E> expected, List<? extends E> expected,
BiMap<Integer, Integer> mapping) { BiMap<Integer, Integer> mapping) {
ImmutableList<? extends A> extra = findNotIndexed(actual, mapping.keySet()); List<? extends A> extra = findNotIndexed(actual, mapping.keySet());
ImmutableList<? extends E> missing = findNotIndexed(expected, mapping.inverse().keySet()); List<? extends E> missing = findNotIndexed(expected, mapping.inverse().keySet());
Optional<String> missingOrExtraMessage = describeMissingOrExtra(extra, missing); Optional<String> missingOrExtraMessage = describeMissingOrExtra(extra, missing);
if (missingOrExtraMessage.isPresent()) { if (missingOrExtraMessage.isPresent()) {
failWithRawMessage( failWithRawMessage(
Expand Down
Expand Up @@ -24,7 +24,6 @@


import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.primitives.Ints;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import java.util.Iterator; import java.util.Iterator;
Expand Down Expand Up @@ -1258,12 +1257,11 @@ public void comparingElementsUsing_containsExactlyElementsIn_inOrder_failsOutOfO


@Test @Test
public void comparingElementsUsing_containsExactlyElementsIn_null() { public void comparingElementsUsing_containsExactlyElementsIn_null() {
List<Integer> expected = Arrays.asList((Integer) null); List<Integer> expected = Arrays.asList(128, null);
List<String> actual = Arrays.asList((String) null); List<String> actual = Arrays.asList(null, "0x80");
assertThat(actual) assertThat(actual)
.comparingElementsUsing(STRING_PARSES_TO_INTEGER_CORRESPONDENCE) .comparingElementsUsing(STRING_PARSES_TO_INTEGER_CORRESPONDENCE)
.containsExactlyElementsIn(expected) .containsExactlyElementsIn(expected);
.inOrder();
} }


@Test @Test
Expand Down Expand Up @@ -1309,11 +1307,10 @@ public void comparingElementsUsing_containsExactly_failsMissingAndExtraInOneToOn


@Test @Test
public void comparingElementsUsing_containsExactly_nullValueInArray() { public void comparingElementsUsing_containsExactly_nullValueInArray() {
List<String> actual = Arrays.asList((String) null); List<String> actual = Arrays.asList(null, "0x80");
assertThat(actual) assertThat(actual)
.comparingElementsUsing(STRING_PARSES_TO_INTEGER_CORRESPONDENCE) .comparingElementsUsing(STRING_PARSES_TO_INTEGER_CORRESPONDENCE)
.containsExactly((Integer) null) .containsExactly(128, null);
.inOrder();
} }


@Test @Test
Expand Down

0 comments on commit 63c9f92

Please sign in to comment.