Home | History | Annotate | Download | only in utils
      1 /**
      2  * Copyright (C) 2014 Google Inc.
      3  * Licensed to The Android Open Source Project.
      4  *
      5  * Licensed under the Apache License, Version 2.0 (the "License");
      6  * you may not use this file except in compliance with the License.
      7  * You may obtain a copy of the License at
      8  *
      9  *      http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  * Unless required by applicable law or agreed to in writing, software
     12  * distributed under the License is distributed on an "AS IS" BASIS,
     13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  * See the License for the specific language governing permissions and
     15  * limitations under the License.
     16  */
     17 
     18 package com.android.mail.utils;
     19 
     20 import android.test.AndroidTestCase;
     21 import android.test.suitebuilder.annotation.SmallTest;
     22 
     23 import com.google.android.mail.common.base.Function;
     24 
     25 @SmallTest
     26 public class RankedComparatorTest extends AndroidTestCase {
     27 
     28     private static final String RANK1 = "rank1";
     29     private static final String RANK2 = "rank2";
     30     private static final String[] RANKS = new String[]{RANK1, RANK2};
     31     private static final String UNKNOWN_RANK1 = "unknown_rank_1";
     32     private static final String UNKNOWN_RANK2 = "unknown_rank_2";
     33     private static final String NULL_RANK = null;
     34 
     35     private RankedComparator<DummyObject, String> comparator;
     36 
     37     @Override
     38     protected void setUp() throws Exception {
     39         super.setUp();
     40         comparator =
     41                 new RankedComparator<DummyObject, String>(RANKS, DUMMY_OBJECT_TO_RANK_FUNCTION);
     42     }
     43 
     44     public void testSimple() {
     45         DummyObject rank1_1 = new DummyObject(RANK1);
     46         DummyObject rank1_2 = new DummyObject(RANK1);
     47         DummyObject rank2 = new DummyObject(RANK2);
     48 
     49         assertTrue("Same object should be equal to itself.",
     50                 comparator.compare(rank1_1, rank1_1) == 0);
     51         assertTrue("Different objects with same rank should be equal.",
     52                 comparator.compare(rank1_1, rank1_2) == 0);
     53 
     54         // Testing different ranks and with different order of the parameters
     55         assertTrue(comparator.compare(rank1_1, rank2) < 0);
     56         assertTrue(comparator.compare(rank2, rank1_1) > 0);
     57     }
     58 
     59     public void testUnknownRank() {
     60         DummyObject knownRank = new DummyObject(RANK1);
     61         DummyObject unknownRank1 = new DummyObject(UNKNOWN_RANK1);
     62         DummyObject unknownRank2 = new DummyObject(UNKNOWN_RANK2);
     63 
     64         assertTrue("Known rank should be smaller than unknown rank.",
     65                 comparator.compare(knownRank, unknownRank1) < 0);
     66         assertTrue("Unknown rank should be larger than known rank.",
     67                 comparator.compare(unknownRank1, knownRank) > 0);
     68         assertTrue("Two different unknown ranks should be equal.",
     69                 comparator.compare(unknownRank1, unknownRank2) == 0);
     70     }
     71 
     72     public void testNullRank() {
     73         DummyObject knownRank = new DummyObject(RANK1);
     74         DummyObject unknownRank = new DummyObject(UNKNOWN_RANK1);
     75         DummyObject nullRank = new DummyObject(NULL_RANK);
     76 
     77         assertTrue("Known rank should be smaller than null rank.",
     78                 comparator.compare(knownRank, nullRank) < 0);
     79         assertTrue("null rank should be larger than known rank.",
     80                 comparator.compare(nullRank, knownRank) > 0);
     81         assertTrue("Unknown and null rank should be equal.",
     82                 comparator.compare(unknownRank, nullRank) == 0);
     83     }
     84 
     85     private static final Function<DummyObject, String> DUMMY_OBJECT_TO_RANK_FUNCTION =
     86             new Function<DummyObject, String>() {
     87                 @Override
     88                 public String apply(DummyObject dummyObject) {
     89                     return dummyObject.rank;
     90                 }
     91             };
     92 
     93     private class DummyObject {
     94         private final String rank;
     95 
     96         private DummyObject(String rank) {
     97             this.rank = rank;
     98         }
     99     }
    100 }
    101