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.base.Equivalence.Wrapper;
     22 import com.google.common.collect.ImmutableList;
     23 import com.google.common.testing.EqualsTester;
     24 import com.google.common.testing.EquivalenceTester;
     25 import com.google.common.testing.NullPointerTester;
     26 import com.google.common.testing.SerializableTester;
     27 
     28 import junit.framework.TestCase;
     29 
     30 /**
     31  * Unit test for {@link Equivalence}.
     32  *
     33  * @author Jige Yu
     34  */
     35 @GwtCompatible(emulated = true)
     36 public class EquivalenceTest extends TestCase {
     37   @SuppressWarnings("unchecked") // varargs
     38   public void testPairwiseEquivalent() {
     39     EquivalenceTester.of(Equivalence.equals().<String>pairwise())
     40         .addEquivalenceGroup(ImmutableList.<String>of())
     41         .addEquivalenceGroup(ImmutableList.of("a"))
     42         .addEquivalenceGroup(ImmutableList.of("b"))
     43         .addEquivalenceGroup(ImmutableList.of("a", "b"), ImmutableList.of("a", "b"))
     44         .test();
     45   }
     46 
     47   public void testPairwiseEquivalent_equals() {
     48     new EqualsTester()
     49         .addEqualityGroup(Equivalence.equals().pairwise(), Equivalence.equals().pairwise())
     50         .addEqualityGroup(Equivalence.identity().pairwise())
     51         .testEquals();
     52   }
     53 
     54   private enum LengthFunction implements Function<String, Integer> {
     55     INSTANCE;
     56 
     57     @Override public Integer apply(String input) {
     58       return input.length();
     59     }
     60   }
     61 
     62   private static final Equivalence<String> LENGTH_EQUIVALENCE = Equivalence.equals()
     63       .onResultOf(LengthFunction.INSTANCE);
     64 
     65   public void testWrap() {
     66     new EqualsTester()
     67         .addEqualityGroup(
     68             LENGTH_EQUIVALENCE.wrap("hello"),
     69             LENGTH_EQUIVALENCE.wrap("hello"),
     70             LENGTH_EQUIVALENCE.wrap("world"))
     71         .addEqualityGroup(
     72             LENGTH_EQUIVALENCE.wrap("hi"),
     73             LENGTH_EQUIVALENCE.wrap("yo"))
     74         .addEqualityGroup(
     75             LENGTH_EQUIVALENCE.wrap(null),
     76             LENGTH_EQUIVALENCE.wrap(null))
     77         .addEqualityGroup(Equivalence.equals().wrap("hello"))
     78         .addEqualityGroup(Equivalence.equals().wrap(null))
     79         .testEquals();
     80   }
     81 
     82   public void testWrap_get() {
     83     String test = "test";
     84     Wrapper<String> wrapper = LENGTH_EQUIVALENCE.wrap(test);
     85     assertSame(test, wrapper.get());
     86   }
     87 
     88   @GwtIncompatible("SerializableTester")
     89   public void testSerialization() {
     90     SerializableTester.reserializeAndAssert(LENGTH_EQUIVALENCE.wrap("hello"));
     91     SerializableTester.reserializeAndAssert(Equivalence.equals());
     92     SerializableTester.reserializeAndAssert(Equivalence.identity());
     93   }
     94 
     95   private static class IntValue {
     96     private final int value;
     97 
     98     IntValue(int value) {
     99       this.value = value;
    100     }
    101 
    102     @Override public String toString() {
    103       return "value = " + value;
    104     }
    105   }
    106 
    107   public void testOnResultOf() {
    108     EquivalenceTester.of(Equivalence.equals().onResultOf(Functions.toStringFunction()))
    109         .addEquivalenceGroup(new IntValue(1), new IntValue(1))
    110         .addEquivalenceGroup(new IntValue(2))
    111         .test();
    112   }
    113 
    114   public void testOnResultOf_equals() {
    115     new EqualsTester()
    116         .addEqualityGroup(
    117             Equivalence.identity().onResultOf(Functions.toStringFunction()),
    118             Equivalence.identity().onResultOf(Functions.toStringFunction()))
    119         .addEqualityGroup(Equivalence.equals().onResultOf(Functions.toStringFunction()))
    120         .addEqualityGroup(Equivalence.identity().onResultOf(Functions.identity()))
    121         .testEquals();
    122   }
    123 
    124   public void testEquivalentTo() {
    125     Predicate<Object> equalTo1 = Equivalence.equals().equivalentTo("1");
    126     assertTrue(equalTo1.apply("1"));
    127     assertFalse(equalTo1.apply("2"));
    128     assertFalse(equalTo1.apply(null));
    129     Predicate<Object> isNull = Equivalence.equals().equivalentTo(null);
    130     assertFalse(isNull.apply("1"));
    131     assertFalse(isNull.apply("2"));
    132     assertTrue(isNull.apply(null));
    133 
    134     new EqualsTester()
    135         .addEqualityGroup(equalTo1, Equivalence.equals().equivalentTo("1"))
    136         .addEqualityGroup(isNull)
    137         .addEqualityGroup(Equivalence.identity().equivalentTo("1"))
    138         .testEquals();
    139   }
    140   public void testEqualsEquivalent() {
    141     EquivalenceTester.of(Equivalence.equals())
    142         .addEquivalenceGroup(new Integer(42), 42)
    143         .addEquivalenceGroup("a")
    144         .test();
    145   }
    146 
    147   public void testIdentityEquivalent() {
    148     EquivalenceTester.of(Equivalence.identity())
    149         .addEquivalenceGroup(new Integer(42))
    150         .addEquivalenceGroup(new Integer(42))
    151         .addEquivalenceGroup("a")
    152         .test();
    153   }
    154 
    155   public void testEquals() {
    156     new EqualsTester()
    157         .addEqualityGroup(Equivalence.equals(), Equivalence.equals())
    158         .addEqualityGroup(Equivalence.identity(), Equivalence.identity())
    159         .testEquals();
    160   }
    161 
    162   @GwtIncompatible("NullPointerTester")
    163   public void testNulls() {
    164     new NullPointerTester().testAllPublicStaticMethods(Equivalence.class);
    165     new NullPointerTester().testAllPublicInstanceMethods(Equivalence.equals());
    166     new NullPointerTester().testAllPublicInstanceMethods(Equivalence.identity());
    167   }
    168 }
    169