Home | History | Annotate | Download | only in base
      1 /*
      2  * Copyright (C) 2010 The Guava Authors
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  * http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * diOBJECTibuted under the License is diOBJECTibuted on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.google.common.base;
     18 
     19 import com.google.common.annotations.GwtCompatible;
     20 import com.google.common.annotations.GwtIncompatible;
     21 import com.google.common.collect.ImmutableList;
     22 import com.google.common.testing.EqualsTester;
     23 import com.google.common.testing.EquivalenceTester;
     24 import com.google.common.testing.SerializableTester;
     25 
     26 import junit.framework.TestCase;
     27 
     28 /**
     29  * Unit test for {@link Equivalence}.
     30  *
     31  * @author Jige Yu
     32  */
     33 @GwtCompatible(emulated = true)
     34 public class EquivalenceTest extends TestCase {
     35 
     36   @SuppressWarnings("unchecked") // Iterable<String>...
     37   public void testPairwiseEquivalent() {
     38     EquivalenceTester.of(Equivalences.equals().<String>pairwise())
     39         .addEquivalenceGroup(ImmutableList.<String>of())
     40         .addEquivalenceGroup(ImmutableList.of("a"))
     41         .addEquivalenceGroup(ImmutableList.of("b"))
     42         .addEquivalenceGroup(ImmutableList.of("a", "b"), ImmutableList.of("a", "b"))
     43         .test();
     44   }
     45 
     46   public void testPairwiseEquivalent_equals() {
     47     new EqualsTester()
     48         .addEqualityGroup(Equivalences.equals().pairwise(), Equivalences.equals().pairwise())
     49         .addEqualityGroup(Equivalences.identity().pairwise())
     50         .testEquals();
     51   }
     52 
     53   private enum LengthFunction implements Function<String, Integer> {
     54     INSTANCE;
     55 
     56     @Override public Integer apply(String input) {
     57       return input.length();
     58     }
     59   }
     60 
     61   private static final Equivalence<String> LENGTH_EQUIVALENCE = Equivalences.equals()
     62       .onResultOf(LengthFunction.INSTANCE);
     63 
     64   public void testWrap() {
     65     new EqualsTester()
     66         .addEqualityGroup(
     67             LENGTH_EQUIVALENCE.wrap("hello"),
     68             LENGTH_EQUIVALENCE.wrap("hello"),
     69             LENGTH_EQUIVALENCE.wrap("world"))
     70         .addEqualityGroup(
     71             LENGTH_EQUIVALENCE.wrap("hi"),
     72             LENGTH_EQUIVALENCE.wrap("yo"))
     73         .addEqualityGroup(
     74             LENGTH_EQUIVALENCE.wrap(null),
     75             LENGTH_EQUIVALENCE.wrap(null))
     76         .addEqualityGroup(Equivalences.equals().wrap("hello"))
     77         .addEqualityGroup(Equivalences.equals().wrap(null))
     78         .testEquals();
     79   }
     80 
     81   @GwtIncompatible("SerializableTester")
     82   public void testWrapSerialization() {
     83     SerializableTester.reserializeAndAssert(LENGTH_EQUIVALENCE.wrap("hello"));
     84   }
     85 
     86   private static class IntValue {
     87     private final int value;
     88 
     89     IntValue(int value) {
     90       this.value = value;
     91     }
     92 
     93     @Override public String toString() {
     94       return "value = " + value;
     95     }
     96   }
     97 
     98   public void testOnResultOf() {
     99     EquivalenceTester.of(Equivalences.equals().onResultOf(Functions.toStringFunction()))
    100         .addEquivalenceGroup(new IntValue(1), new IntValue(1))
    101         .addEquivalenceGroup(new IntValue(2))
    102         .test();
    103   }
    104 
    105   public void testOnResultOf_equals() {
    106     new EqualsTester()
    107         .addEqualityGroup(
    108             Equivalences.identity().onResultOf(Functions.toStringFunction()),
    109             Equivalences.identity().onResultOf(Functions.toStringFunction()))
    110         .addEqualityGroup(Equivalences.equals().onResultOf(Functions.toStringFunction()))
    111         .addEqualityGroup(Equivalences.identity().onResultOf(Functions.identity()))
    112         .testEquals();
    113   }
    114 
    115   public void testEquivalentTo() {
    116     Predicate<Object> equalTo1 = Equivalences.equals().equivalentTo("1");
    117     assertTrue(equalTo1.apply("1"));
    118     assertFalse(equalTo1.apply("2"));
    119     assertFalse(equalTo1.apply(null));
    120     Predicate<Object> isNull = Equivalences.equals().equivalentTo(null);
    121     assertFalse(isNull.apply("1"));
    122     assertFalse(isNull.apply("2"));
    123     assertTrue(isNull.apply(null));
    124 
    125     new EqualsTester()
    126         .addEqualityGroup(equalTo1, Equivalences.equals().equivalentTo("1"))
    127         .addEqualityGroup(isNull)
    128         .addEqualityGroup(Equivalences.identity().equivalentTo("1"))
    129         .testEquals();
    130   }
    131 }
    132