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