11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/*
21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2005 The Guava Authors
31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License");
51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License.
61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at
71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0
91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software
111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS,
121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and
141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License.
151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */
161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.base;
181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.base.CharMatcher.WHITESPACE;
200888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport static com.google.common.collect.Lists.newArrayList;
211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible;
231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible;
241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.ImmutableSet;
257dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.testing.ClassSanityTester;
261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.EqualsTester;
271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.NullPointerTester;
281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.SerializableTester;
291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
300888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.AssertionFailedError;
310888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.TestCase;
320888a09821a98ac0680fad765217302858e70fa4Paul Duffin
331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.io.Serializable;
341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.ArrayList;
351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Arrays;
361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection;
371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections;
381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Iterator;
391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.List;
401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.regex.Pattern;
411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/**
431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unit test for {@link Predicates}.
441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Kevin Bourrillion
461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */
471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true)
481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class PredicatesTest extends TestCase {
491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private static final Predicate<Integer> TRUE = Predicates.alwaysTrue();
501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private static final Predicate<Integer> FALSE = Predicates.alwaysFalse();
511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private static final Predicate<Integer> NEVER_REACHED =
521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      new Predicate<Integer>() {
531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override
541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    public boolean apply(Integer i) {
550888a09821a98ac0680fad765217302858e70fa4Paul Duffin      throw new AssertionFailedError(
560888a09821a98ac0680fad765217302858e70fa4Paul Duffin          "This predicate should never have been evaluated");
571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  };
591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /** Instantiable predicate with reasonable hashCode() and equals() methods. */
611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  static class IsOdd implements Predicate<Integer>, Serializable {
621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    private static final long serialVersionUID = 0x150ddL;
631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override
641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    public boolean apply(Integer i) {
651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return (i.intValue() & 1) == 1;
661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public int hashCode() {
681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return 0x150dd;
691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public boolean equals(Object obj) {
711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return obj instanceof IsOdd;
721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public String toString() {
741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return "IsOdd";
751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Generates a new Predicate per call.
801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * <p>Creating a new Predicate each time helps catch cases where code is
821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * using {@code x == y} instead of {@code x.equals(y)}.
831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private static IsOdd isOdd() {
851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return new IsOdd();
861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /*
891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Tests for Predicates.alwaysTrue().
901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAlwaysTrue_apply() {
931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsToTrue(Predicates.alwaysTrue());
941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAlwaysTrue_equality() throws Exception {
971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(TRUE, Predicates.alwaysTrue())
991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(isOdd())
1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.alwaysFalse())
1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("SerializableTester")
1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAlwaysTrue_serialization() {
1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    checkSerialization(Predicates.alwaysTrue());
1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /*
1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Tests for Predicates.alwaysFalse().
1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAlwaysFalse_apply() throws Exception {
1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsToFalse(Predicates.alwaysFalse());
1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAlwaysFalse_equality() throws Exception {
1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(FALSE, Predicates.alwaysFalse())
1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(isOdd())
1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.alwaysTrue())
1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("SerializableTester")
1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAlwaysFalse_serialization() {
1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    checkSerialization(Predicates.alwaysFalse());
1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /*
1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Tests for Predicates.not(predicate).
1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testNot_apply() {
1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsToTrue(Predicates.not(FALSE));
1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsToFalse(Predicates.not(TRUE));
1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsLikeOdd(Predicates.not(Predicates.not(isOdd())));
1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testNot_equality() {
1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.not(isOdd()), Predicates.not(isOdd()))
1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.not(TRUE))
1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(isOdd())
1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testNot_equalityForNotOfKnownValues() {
1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(TRUE, Predicates.alwaysTrue())
1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(FALSE)
1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.not(TRUE))
1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(FALSE, Predicates.alwaysFalse())
1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(TRUE)
1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.not(FALSE))
1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.isNull(), Predicates.isNull())
1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.notNull())
1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.not(Predicates.isNull()))
1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.notNull(), Predicates.notNull())
1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.isNull())
1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.not(Predicates.notNull()))
1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("SerializableTester")
1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testNot_serialization() {
1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    checkSerialization(Predicates.not(isOdd()));
1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /*
1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Tests for all the different flavors of Predicates.and().
1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1830888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAnd_applyNoArgs() {
1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsToTrue(Predicates.and());
1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1880888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAnd_equalityNoArgs() {
1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.and(), Predicates.and())
1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.and(FALSE))
1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.or())
1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("SerializableTester")
1980888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAnd_serializationNoArgs() {
2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    checkSerialization(Predicates.and());
2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2030888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAnd_applyOneArg() {
2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsLikeOdd(Predicates.and(isOdd()));
2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2080888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAnd_equalityOneArg() {
2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Object[] notEqualObjects = {Predicates.and(NEVER_REACHED, FALSE)};
2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(
2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.and(NEVER_REACHED), Predicates.and(NEVER_REACHED))
2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(notEqualObjects)
2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.and(isOdd()))
2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.and())
2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.or(NEVER_REACHED))
2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("SerializableTester")
2220888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAnd_serializationOneArg() {
2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    checkSerialization(Predicates.and(isOdd()));
2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAnd_applyBinary() {
2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsLikeOdd(Predicates.and(isOdd(), TRUE));
2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsLikeOdd(Predicates.and(TRUE, isOdd()));
2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsToFalse(Predicates.and(FALSE, NEVER_REACHED));
2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2330888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAnd_equalityBinary() {
2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(
2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.and(TRUE, NEVER_REACHED),
2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.and(TRUE, NEVER_REACHED))
2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.and(NEVER_REACHED, TRUE))
2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.and(TRUE))
2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.or(TRUE, NEVER_REACHED))
2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("SerializableTester")
2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAnd_serializationBinary() {
2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    checkSerialization(Predicates.and(TRUE, isOdd()));
2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2500888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAnd_applyTernary() {
2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsLikeOdd(Predicates.and(isOdd(), TRUE, TRUE));
2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsLikeOdd(Predicates.and(TRUE, isOdd(), TRUE));
2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsLikeOdd(Predicates.and(TRUE, TRUE, isOdd()));
2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsToFalse(Predicates.and(TRUE, FALSE, NEVER_REACHED));
2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2580888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAnd_equalityTernary() {
2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(
2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.and(TRUE, isOdd(), NEVER_REACHED),
2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.and(TRUE, isOdd(), NEVER_REACHED))
2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.and(isOdd(), NEVER_REACHED, TRUE))
2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.and(TRUE))
2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.or(TRUE, isOdd(), NEVER_REACHED))
2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("SerializableTester")
2710888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAnd_serializationTernary() {
2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    checkSerialization(Predicates.and(TRUE, isOdd(), FALSE));
2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2760888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAnd_applyIterable() {
2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Collection<Predicate<Integer>> empty = Arrays.asList();
2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsToTrue(Predicates.and(empty));
2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsLikeOdd(Predicates.and(Arrays.asList(isOdd())));
2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsLikeOdd(Predicates.and(Arrays.asList(TRUE, isOdd())));
2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsToFalse(Predicates.and(Arrays.asList(FALSE, NEVER_REACHED)));
2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2850888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAnd_equalityIterable() {
2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(
2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.and(Arrays.asList(TRUE, NEVER_REACHED)),
2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.and(Arrays.asList(TRUE, NEVER_REACHED)),
2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.and(TRUE, NEVER_REACHED))
2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.and(FALSE, NEVER_REACHED))
2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.or(TRUE, NEVER_REACHED))
2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("SerializableTester")
2980888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAnd_serializationIterable() {
3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    checkSerialization(Predicates.and(Arrays.asList(TRUE, FALSE)));
3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3030888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAnd_arrayDefensivelyCopied() {
3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate[] array = {Predicates.alwaysFalse()};
3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Object> predicate = Predicates.and(array);
3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(predicate.apply(1));
3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    array[0] = Predicates.alwaysTrue();
3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(predicate.apply(1));
3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAnd_listDefensivelyCopied() {
3130888a09821a98ac0680fad765217302858e70fa4Paul Duffin    List<Predicate<Object>> list = newArrayList();
3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Object> predicate = Predicates.and(list);
3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(predicate.apply(1));
3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    list.add(Predicates.alwaysFalse());
3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(predicate.apply(1));
3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAnd_iterableDefensivelyCopied() {
3210888a09821a98ac0680fad765217302858e70fa4Paul Duffin    final List<Predicate<Object>> list = newArrayList();
3220888a09821a98ac0680fad765217302858e70fa4Paul Duffin    Iterable<Predicate<Object>> iterable = new Iterable<Predicate<Object>>() {
3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      @Override
3240888a09821a98ac0680fad765217302858e70fa4Paul Duffin      public Iterator<Predicate<Object>> iterator() {
3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        return list.iterator();
3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    };
3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Object> predicate = Predicates.and(iterable);
3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(predicate.apply(1));
3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    list.add(Predicates.alwaysFalse());
3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(predicate.apply(1));
3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /*
3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Tests for all the different flavors of Predicates.or().
3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3380888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testOr_applyNoArgs() {
3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsToFalse(Predicates.or());
3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3430888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testOr_equalityNoArgs() {
3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.or(), Predicates.or())
3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.or(TRUE))
3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.and())
3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("SerializableTester")
3530888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testOr_serializationNoArgs() {
3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    checkSerialization(Predicates.or());
3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3580888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testOr_applyOneArg() {
3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsToTrue(Predicates.or(TRUE));
3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsToFalse(Predicates.or(FALSE));
3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3640888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testOr_equalityOneArg() {
3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(
3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.or(NEVER_REACHED), Predicates.or(NEVER_REACHED))
3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.or(NEVER_REACHED, TRUE))
3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.or(TRUE))
3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.or())
3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.and(NEVER_REACHED))
3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("SerializableTester")
3770888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testOr_serializationOneArg() {
3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    checkSerialization(Predicates.or(isOdd()));
3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testOr_applyBinary() {
3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Integer> falseOrFalse = Predicates.or(FALSE, FALSE);
3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Integer> falseOrTrue = Predicates.or(FALSE, TRUE);
3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Integer> trueOrAnything = Predicates.or(TRUE, NEVER_REACHED);
3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsToFalse(falseOrFalse);
3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsToTrue(falseOrTrue);
3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsToTrue(trueOrAnything);
3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3920888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testOr_equalityBinary() {
3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(
3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.or(FALSE, NEVER_REACHED),
3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.or(FALSE, NEVER_REACHED))
3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.or(NEVER_REACHED, FALSE))
3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.or(TRUE))
4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.and(FALSE, NEVER_REACHED))
4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("SerializableTester")
4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testOr_serializationBinary() {
4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    checkSerialization(Predicates.or(isOdd(), TRUE));
4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
4090888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testOr_applyTernary() {
4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsLikeOdd(Predicates.or(isOdd(), FALSE, FALSE));
4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsLikeOdd(Predicates.or(FALSE, isOdd(), FALSE));
4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsLikeOdd(Predicates.or(FALSE, FALSE, isOdd()));
4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsToTrue(Predicates.or(FALSE, TRUE, NEVER_REACHED));
4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
4170888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testOr_equalityTernary() {
4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(
4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.or(FALSE, NEVER_REACHED, TRUE),
4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.or(FALSE, NEVER_REACHED, TRUE))
4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.or(TRUE, NEVER_REACHED, FALSE))
4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.or(TRUE))
4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.and(FALSE, NEVER_REACHED, TRUE))
4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("SerializableTester")
4300888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testOr_serializationTernary() {
4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    checkSerialization(Predicates.or(FALSE, isOdd(), TRUE));
4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
4350888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testOr_applyIterable() {
4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Integer> vacuouslyFalse =
4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Predicates.or(Collections.<Predicate<Integer>>emptyList());
4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Integer> troo = Predicates.or(Collections.singletonList(TRUE));
4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /*
4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     * newLinkedList() takes varargs. TRUE and FALSE are both instances of
4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     * Predicate<Integer>, so the call is safe.
4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Integer> trueAndFalse = Predicates.or(Arrays.asList(TRUE, FALSE));
4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsToFalse(vacuouslyFalse);
4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsToTrue(troo);
4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsToTrue(trueAndFalse);
4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
4510888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testOr_equalityIterable() {
4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(
4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.or(Arrays.asList(FALSE, NEVER_REACHED)),
4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.or(Arrays.asList(FALSE, NEVER_REACHED)),
4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.or(FALSE, NEVER_REACHED))
4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.or(TRUE, NEVER_REACHED))
4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.and(FALSE, NEVER_REACHED))
4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
4631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("SerializableTester")
4640888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testOr_serializationIterable() {
4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Integer> pre = Predicates.or(Arrays.asList(TRUE, FALSE));
4671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Integer> post = SerializableTester.reserializeAndAssert(pre);
4681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(pre.apply(0), post.apply(0));
4691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
4701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
4710888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unchecked") // varargs
4721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testOr_arrayDefensivelyCopied() {
4731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate[] array = {Predicates.alwaysFalse()};
4741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Object> predicate = Predicates.or(array);
4751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(predicate.apply(1));
4761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    array[0] = Predicates.alwaysTrue();
4771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(predicate.apply(1));
4781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
4791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
4801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testOr_listDefensivelyCopied() {
4810888a09821a98ac0680fad765217302858e70fa4Paul Duffin    List<Predicate<Object>> list = newArrayList();
4821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Object> predicate = Predicates.or(list);
4831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(predicate.apply(1));
4841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    list.add(Predicates.alwaysTrue());
4851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(predicate.apply(1));
4861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
4871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
4881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testOr_iterableDefensivelyCopied() {
4890888a09821a98ac0680fad765217302858e70fa4Paul Duffin    final List<Predicate<Object>> list = newArrayList();
4900888a09821a98ac0680fad765217302858e70fa4Paul Duffin    Iterable<Predicate<Object>> iterable = new Iterable<Predicate<Object>>() {
4911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      @Override
4920888a09821a98ac0680fad765217302858e70fa4Paul Duffin      public Iterator<Predicate<Object>> iterator() {
4931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        return list.iterator();
4941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
4951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    };
4961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Object> predicate = Predicates.or(iterable);
4971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(predicate.apply(1));
4981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    list.add(Predicates.alwaysTrue());
4991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(predicate.apply(1));
5001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
5011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
5021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /*
5031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Tests for Predicates.equalTo(x).
5041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
5051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
5061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIsEqualTo_apply() {
5071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Integer> isOne = Predicates.equalTo(1);
5081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
5091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(isOne.apply(1));
5101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(isOne.apply(2));
5111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(isOne.apply(null));
5121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
5131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
5141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIsEqualTo_equality() {
5151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
5161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.equalTo(1), Predicates.equalTo(1))
5171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.equalTo(2))
5181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.equalTo(null))
5191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
5201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
5211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
5221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("SerializableTester")
5231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIsEqualTo_serialization() {
5241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    checkSerialization(Predicates.equalTo(1));
5251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
5261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
5271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIsEqualToNull_apply() {
5281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Integer> isNull = Predicates.equalTo(null);
5291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(isNull.apply(null));
5301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(isNull.apply(1));
5311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
5321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
5331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIsEqualToNull_equality() {
5341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
5351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.equalTo(null), Predicates.equalTo(null))
5361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.equalTo(1))
5371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.equalTo("null"))
5381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
5391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
5401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
5411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("SerializableTester")
5421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIsEqualToNull_serialization() {
5431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    checkSerialization(Predicates.equalTo(null));
5441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
5451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
5461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
5471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Tests for Predicates.instanceOf(x).
5481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * TODO: Fix the comment style after fixing annotation stripper to remove
5491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * comments properly.  Currently, all tests before the comments are removed
5501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * as well.
5511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
5521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
5531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("Predicates.instanceOf")
5541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIsInstanceOf_apply() {
5551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Object> isInteger = Predicates.instanceOf(Integer.class);
5561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
5571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(isInteger.apply(1));
5581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(isInteger.apply(2.0f));
5591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(isInteger.apply(""));
5601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(isInteger.apply(null));
5611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
5621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
5631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("Predicates.instanceOf")
5641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIsInstanceOf_subclass() {
5651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Object> isNumber = Predicates.instanceOf(Number.class);
5661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
5671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(isNumber.apply(1));
5681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(isNumber.apply(2.0f));
5691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(isNumber.apply(""));
5701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(isNumber.apply(null));
5711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
5721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
5731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("Predicates.instanceOf")
5741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIsInstanceOf_interface() {
5751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Object> isComparable = Predicates.instanceOf(Comparable.class);
5761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
5771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(isComparable.apply(1));
5781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(isComparable.apply(2.0f));
5791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(isComparable.apply(""));
5801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(isComparable.apply(null));
5811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
5821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
5831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("Predicates.instanceOf")
5841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIsInstanceOf_equality() {
5851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
5861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(
5871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.instanceOf(Integer.class),
5881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.instanceOf(Integer.class))
5891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.instanceOf(Number.class))
5901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.instanceOf(Float.class))
5911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
5921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
5931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
5941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("Predicates.instanceOf, SerializableTester")
5951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIsInstanceOf_serialization() {
5961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    checkSerialization(Predicates.instanceOf(Integer.class));
5971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
5987dd252788645e940eada959bdde927426e2531c9Paul Duffin
5991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("Predicates.assignableFrom")
6001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIsAssignableFrom_apply() {
6011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Class<?>> isInteger = Predicates.assignableFrom(Integer.class);
6021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
6031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(isInteger.apply(Integer.class));
6041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(isInteger.apply(Float.class));
6057dd252788645e940eada959bdde927426e2531c9Paul Duffin
6067dd252788645e940eada959bdde927426e2531c9Paul Duffin    try {
6071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      isInteger.apply(null);
6081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail();
6090888a09821a98ac0680fad765217302858e70fa4Paul Duffin    } catch (NullPointerException expected) {}
6101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
6111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
6121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("Predicates.assignableFrom")
6131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIsAssignableFrom_subclass() {
6141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Class<?>> isNumber = Predicates.assignableFrom(Number.class);
6151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
6161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(isNumber.apply(Integer.class));
6171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(isNumber.apply(Float.class));
6181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
6191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
6201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("Predicates.assignableFrom")
6211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIsAssignableFrom_interface() {
6221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Class<?>> isComparable =
6231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Predicates.assignableFrom(Comparable.class);
6241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
6251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(isComparable.apply(Integer.class));
6261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(isComparable.apply(Float.class));
6271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
6281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
6291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("Predicates.assignableFrom")
6301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIsAssignableFrom_equality() {
6311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
6321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(
6331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.assignableFrom(Integer.class),
6341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.assignableFrom(Integer.class))
6351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.assignableFrom(Number.class))
6361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.assignableFrom(Float.class))
6371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
6381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
6391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
6401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("Predicates.assignableFrom, SerializableTester")
6411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIsAssignableFrom_serialization() {
6427dd252788645e940eada959bdde927426e2531c9Paul Duffin    Predicate<Class<?>> predicate =
6431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Predicates.assignableFrom(Integer.class);
6441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Class<?>> reserialized =
6451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        SerializableTester.reserializeAndAssert(predicate);
6461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
6471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsLike(predicate, reserialized, Integer.class);
6481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsLike(predicate, reserialized, Float.class);
6491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsLike(predicate, reserialized, null);
6501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
6511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
6521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /*
6531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Tests for Predicates.isNull()
6541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
6551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
6561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIsNull_apply() {
6571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Integer> isNull = Predicates.isNull();
6581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(isNull.apply(null));
6591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(isNull.apply(1));
6601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
6611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
6621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIsNull_equality() {
6631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
6641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.isNull(), Predicates.isNull())
6651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.notNull())
6661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
6671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
6681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
6691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("SerializableTester")
6701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIsNull_serialization() {
6711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<String> pre = Predicates.isNull();
6721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<String> post = SerializableTester.reserializeAndAssert(pre);
6731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(pre.apply("foo"), post.apply("foo"));
6741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(pre.apply(null), post.apply(null));
6751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
6761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
6771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testNotNull_apply() {
6781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Integer> notNull = Predicates.notNull();
6791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(notNull.apply(null));
6801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(notNull.apply(1));
6811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
6821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
6831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testNotNull_equality() {
6841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
6851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.notNull(), Predicates.notNull())
6861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.isNull())
6871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
6881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
6891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
6901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("SerializableTester")
6911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testNotNull_serialization() {
6921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    checkSerialization(Predicates.notNull());
6931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
6941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
6951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIn_apply() {
6961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Collection<Integer> nums = Arrays.asList(1, 5);
6971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Integer> isOneOrFive = Predicates.in(nums);
6981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
6991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(isOneOrFive.apply(1));
7001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(isOneOrFive.apply(5));
7011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(isOneOrFive.apply(3));
7021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(isOneOrFive.apply(null));
7031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
7041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
7051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIn_equality() {
7061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Collection<Integer> nums = ImmutableSet.of(1, 5);
7071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Collection<Integer> sameOrder = ImmutableSet.of(1, 5);
7081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Collection<Integer> differentOrder = ImmutableSet.of(5, 1);
7091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Collection<Integer> differentNums = ImmutableSet.of(1, 3, 5);
7101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
7111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
7121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.in(nums), Predicates.in(nums),
7131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.in(sameOrder), Predicates.in(differentOrder))
7141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.in(differentNums))
7151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
7161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
7171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
7181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("SerializableTester")
7191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIn_serialization() {
7201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    checkSerialization(Predicates.in(Arrays.asList(1, 2, 3, null)));
7211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
7221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
7231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIn_handlesNullPointerException() {
7241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    class CollectionThatThrowsNPE<T> extends ArrayList<T> {
7251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      private static final long serialVersionUID = 1L;
7261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
7271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      @Override public boolean contains(Object element) {
7281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Preconditions.checkNotNull(element);
7291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        return super.contains(element);
7301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
7311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
7321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Collection<Integer> nums = new CollectionThatThrowsNPE<Integer>();
7331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Integer> isFalse = Predicates.in(nums);
7341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(isFalse.apply(null));
7351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
7361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
7371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIn_handlesClassCastException() {
7381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    class CollectionThatThrowsCCE<T> extends ArrayList<T> {
7391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      private static final long serialVersionUID = 1L;
7401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
7411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      @Override public boolean contains(Object element) {
7421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        throw new ClassCastException("");
7431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
7441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
7451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Collection<Integer> nums = new CollectionThatThrowsCCE<Integer>();
7461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    nums.add(3);
7471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Integer> isThree = Predicates.in(nums);
7481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(isThree.apply(3));
7491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
7501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
7511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /*
7521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Tests that compilation will work when applying explicit types.
7531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
7540888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @SuppressWarnings("unused") // compilation test
7551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIn_compilesWithExplicitSupertype() {
7561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Collection<Number> nums = ImmutableSet.of();
7571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Number> p1 = Predicates.in(nums);
7581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Object> p2 = Predicates.<Object>in(nums);
7591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    // The next two lines are not expected to compile.
7601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    // Predicate<Integer> p3 = Predicates.in(nums);
7611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    // Predicate<Integer> p4 = Predicates.<Integer>in(nums);
7621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
7631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
7641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("NullPointerTester")
7657dd252788645e940eada959bdde927426e2531c9Paul Duffin  public void testNullPointerExceptions() {
7661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    NullPointerTester tester = new NullPointerTester();
7671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    tester.testAllPublicStaticMethods(Predicates.class);
7681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
7691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
7701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @SuppressWarnings("unchecked") // varargs
7711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("SerializbleTester")
7721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCascadingSerialization() throws Exception {
7731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    // Eclipse says Predicate<Integer>; javac says Predicate<Object>.
7741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<? super Integer> nasty = Predicates.not(Predicates.and(
7751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Predicates.or(
7761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.equalTo((Object) 1), Predicates.equalTo(null),
7771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.alwaysFalse(), Predicates.alwaysTrue(),
7781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.isNull(), Predicates.notNull(),
7791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.in(Arrays.asList(1)))));
7801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsToFalse(nasty);
7811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
7821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<? super Integer> stillNasty =
7831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        SerializableTester.reserializeAndAssert(nasty);
7841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
7851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsToFalse(stillNasty);
7861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
7871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
7881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  // enum singleton pattern
7891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private enum TrimStringFunction implements Function<String, String> {
7901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    INSTANCE;
7911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
7921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override
7931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    public String apply(String string) {
7941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return WHITESPACE.trimFrom(string);
7951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
7961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
7971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
7981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCompose() {
7991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Function<String, String> trim = TrimStringFunction.INSTANCE;
8001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<String> equalsFoo = Predicates.equalTo("Foo");
8011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<String> equalsBar = Predicates.equalTo("Bar");
8021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<String> trimEqualsFoo = Predicates.compose(equalsFoo, trim);
8031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Function<String, String> identity = Functions.identity();
8041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
8051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(trimEqualsFoo.apply("Foo"));
8061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(trimEqualsFoo.apply("   Foo   "));
8071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(trimEqualsFoo.apply("Foo-b-que"));
8081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
8091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
8101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(trimEqualsFoo, Predicates.compose(equalsFoo, trim))
8111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(equalsFoo)
8121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(trim)
8131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.compose(equalsFoo, identity))
8141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(Predicates.compose(equalsBar, trim))
8151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
8161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
8171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
8181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("SerializableTester")
8191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testComposeSerialization() {
8201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Function<String, String> trim = TrimStringFunction.INSTANCE;
8211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<String> equalsFoo = Predicates.equalTo("Foo");
8221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<String> trimEqualsFoo = Predicates.compose(equalsFoo, trim);
8231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    SerializableTester.reserializeAndAssert(trimEqualsFoo);
8241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
8251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
8261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
8271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Tests for Predicates.contains(Pattern) and .containsPattern(String).
8281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * We assume the regex level works, so there are only trivial tests of that
8291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * aspect.
8301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * TODO: Fix comment style once annotation stripper is fixed.
8311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
8321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
8331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("Predicates.containsPattern")
8341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testContainsPattern_apply() {
8351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<CharSequence> isFoobar =
8361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Predicates.containsPattern("^Fo.*o.*bar$");
8371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(isFoobar.apply("Foxyzoabcbar"));
8381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(isFoobar.apply("Foobarx"));
8391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
8401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
8411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("Predicates.containsPattern")
8421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testContains_apply() {
8431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<CharSequence> isFoobar =
8441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Predicates.contains(Pattern.compile("^Fo.*o.*bar$"));
8451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
8461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(isFoobar.apply("Foxyzoabcbar"));
8471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(isFoobar.apply("Foobarx"));
8481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
8491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
8501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("NullPointerTester")
8511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testContainsPattern_nulls() throws Exception {
8521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    NullPointerTester tester = new NullPointerTester();
8531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<CharSequence> isWooString = Predicates.containsPattern("Woo");
8541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
8551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    tester.testAllPublicInstanceMethods(isWooString);
8561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
8571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
8581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("NullPointerTester")
8591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testContains_nulls() throws Exception {
8601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    NullPointerTester tester = new NullPointerTester();
8611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<CharSequence> isWooPattern =
8621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Predicates.contains(Pattern.compile("Woo"));
8631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
8641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    tester.testAllPublicInstanceMethods(isWooPattern);
8651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
8661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
8671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("SerializableTester")
8681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testContainsPattern_serialization() {
8691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<CharSequence> pre = Predicates.containsPattern("foo");
8701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<CharSequence> post = SerializableTester.reserializeAndAssert(pre);
8711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(pre.apply("foo"), post.apply("foo"));
8721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
8731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
8741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("java.util.regex.Pattern")
8751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testContains_equals() {
8761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    new EqualsTester()
8771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(
8781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.contains(Pattern.compile("foo")),
8791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.containsPattern("foo"))
8801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(
8811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.contains(
8821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                Pattern.compile("foo", Pattern.CASE_INSENSITIVE)))
8831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .addEqualityGroup(
8841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            Predicates.containsPattern("bar"))
8851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        .testEquals();
8861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
8871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
8881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void assertEqualHashCode(
8891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Predicate<? super Integer> expected, Predicate<? super Integer> actual) {
8900888a09821a98ac0680fad765217302858e70fa4Paul Duffin    assertEquals(actual + " should hash like " + expected, expected.hashCode(), actual.hashCode());
8911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
8921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
8931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testHashCodeForBooleanOperations() {
8941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Integer> p1 = Predicates.isNull();
8951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<Integer> p2 = isOdd();
8961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
8971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    // Make sure that hash codes are not computed per-instance.
8981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEqualHashCode(
8991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Predicates.not(p1),
9001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Predicates.not(p1));
9011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
9021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEqualHashCode(
9031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Predicates.and(p1, p2),
9041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Predicates.and(p1, p2));
9051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
9061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEqualHashCode(
9071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Predicates.or(p1, p2),
9081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Predicates.or(p1, p2));
9097dd252788645e940eada959bdde927426e2531c9Paul Duffin
9101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    // While not a contractual requirement, we'd like the hash codes for ands
9117dd252788645e940eada959bdde927426e2531c9Paul Duffin    // & ors of the same predicates to not collide.
9121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(Predicates.and(p1, p2).hashCode() != Predicates.or(p1, p2).hashCode());
9131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
9141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
9157dd252788645e940eada959bdde927426e2531c9Paul Duffin  @GwtIncompatible("reflection")
9167dd252788645e940eada959bdde927426e2531c9Paul Duffin  public void testNulls() throws Exception {
9177dd252788645e940eada959bdde927426e2531c9Paul Duffin    new ClassSanityTester().forAllPublicStaticMethods(Predicates.class).testNulls();
9187dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
9197dd252788645e940eada959bdde927426e2531c9Paul Duffin
9207dd252788645e940eada959bdde927426e2531c9Paul Duffin  @GwtIncompatible("reflection")
9217dd252788645e940eada959bdde927426e2531c9Paul Duffin  public void testEqualsAndSerializable() throws Exception {
9227dd252788645e940eada959bdde927426e2531c9Paul Duffin    new ClassSanityTester().forAllPublicStaticMethods(Predicates.class).testEqualsAndSerializable();
9237dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
9247dd252788645e940eada959bdde927426e2531c9Paul Duffin
9251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private static void assertEvalsToTrue(Predicate<? super Integer> predicate) {
9261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(predicate.apply(0));
9271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(predicate.apply(1));
9281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertTrue(predicate.apply(null));
9291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
9301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
9311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private static void assertEvalsToFalse(Predicate<? super Integer> predicate) {
9321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(predicate.apply(0));
9331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(predicate.apply(1));
9341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertFalse(predicate.apply(null));
9351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
9361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
9371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private static void assertEvalsLikeOdd(Predicate<? super Integer> predicate) {
9381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsLike(isOdd(), predicate);
9391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
9401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
9411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private static void assertEvalsLike(
9421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Predicate<? super Integer> expected,
9431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Predicate<? super Integer> actual) {
9441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsLike(expected, actual, 0);
9451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsLike(expected, actual, 1);
9461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsLike(expected, actual, null);
9471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
9481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
9491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private static <T> void assertEvalsLike(
9501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Predicate<? super T> expected,
9511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Predicate<? super T> actual,
9521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      T input) {
9531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Boolean expectedResult = null;
9541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    RuntimeException expectedRuntimeException = null;
9551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
9561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      expectedResult = expected.apply(input);
9571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (RuntimeException e) {
9581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      expectedRuntimeException = e;
9591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
9601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
9611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Boolean actualResult = null;
9621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    RuntimeException actualRuntimeException = null;
9631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
9641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      actualResult = actual.apply(input);
9651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (RuntimeException e) {
9661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      actualRuntimeException = e;
9671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
9681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
9691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(expectedResult, actualResult);
9701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    if (expectedRuntimeException != null) {
9711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertNotNull(actualRuntimeException);
9721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals(
9731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          expectedRuntimeException.getClass(),
9741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          actualRuntimeException.getClass());
9751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
9761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
9771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
9781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("SerializableTester")
9791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private static void checkSerialization(Predicate<? super Integer> predicate) {
9801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Predicate<? super Integer> reserialized =
9811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        SerializableTester.reserializeAndAssert(predicate);
9821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEvalsLike(predicate, reserialized);
9831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
9841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert}
985