• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 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  * distributed under the License is distributed 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.collect;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 
21 import com.google.common.annotations.GwtCompatible;
22 import com.google.common.annotations.GwtIncompatible;
23 import com.google.common.base.Objects;
24 import com.google.common.testing.EqualsTester;
25 import com.google.common.testing.NullPointerTester;
26 
27 import junit.framework.TestCase;
28 
29 /**
30  * Test cases for {@link Table} read operations.
31  *
32  * @author Jared Levy
33  */
34 @GwtCompatible(emulated = true)
35 public abstract class AbstractTableReadTest extends TestCase {
36   protected Table<String, Integer, Character> table;
37 
38   /**
39    * Creates a table with the specified data.
40    *
41    * @param data the table data, repeating the sequence row key, column key,
42    *     value once per mapping
43    * @throws IllegalArgumentException if the size of {@code data} isn't a
44    *     multiple of 3
45    * @throws ClassCastException if a data element has the wrong type
46    */
47   protected abstract Table<String, Integer, Character>
create(Object... data)48       create(Object... data);
49 
assertSize(int expectedSize)50   protected void assertSize(int expectedSize) {
51     assertEquals(expectedSize, table.size());
52   }
53 
setUp()54   @Override public void setUp() throws Exception {
55     super.setUp();
56     table = create();
57   }
58 
testContains()59   public void testContains() {
60     table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
61     assertTrue(table.contains("foo", 1));
62     assertTrue(table.contains("bar", 1));
63     assertTrue(table.contains("foo", 3));
64     assertFalse(table.contains("foo", 2));
65     assertFalse(table.contains("bar", 3));
66     assertFalse(table.contains("cat", 1));
67     assertFalse(table.contains("foo", null));
68     assertFalse(table.contains(null, 1));
69     assertFalse(table.contains(null, null));
70   }
71 
testContainsRow()72   public void testContainsRow() {
73     table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
74     assertTrue(table.containsRow("foo"));
75     assertTrue(table.containsRow("bar"));
76     assertFalse(table.containsRow("cat"));
77     assertFalse(table.containsRow(null));
78   }
79 
testContainsColumn()80   public void testContainsColumn() {
81     table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
82     assertTrue(table.containsColumn(1));
83     assertTrue(table.containsColumn(3));
84     assertFalse(table.containsColumn(2));
85     assertFalse(table.containsColumn(null));
86   }
87 
testContainsValue()88   public void testContainsValue() {
89     table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
90     assertTrue(table.containsValue('a'));
91     assertTrue(table.containsValue('b'));
92     assertTrue(table.containsValue('c'));
93     assertFalse(table.containsValue('x'));
94     assertFalse(table.containsValue(null));
95   }
96 
testGet()97   public void testGet() {
98     table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
99     assertEquals((Character) 'a', table.get("foo", 1));
100     assertEquals((Character) 'b', table.get("bar", 1));
101     assertEquals((Character) 'c', table.get("foo", 3));
102     assertNull(table.get("foo", 2));
103     assertNull(table.get("bar", 3));
104     assertNull(table.get("cat", 1));
105     assertNull(table.get("foo", null));
106     assertNull(table.get(null, 1));
107     assertNull(table.get(null, null));
108   }
109 
testIsEmpty()110   public void testIsEmpty() {
111     assertTrue(table.isEmpty());
112     table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
113     assertFalse(table.isEmpty());
114   }
115 
testSize()116   public void testSize() {
117     assertSize(0);
118     table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
119     assertSize(3);
120   }
121 
testEquals()122   public void testEquals() {
123     table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
124     Table<String, Integer, Character> hashCopy = HashBasedTable.create(table);
125     Table<String, Integer, Character> reordered
126         = create("foo", 3, 'c', "foo", 1, 'a', "bar", 1, 'b');
127     Table<String, Integer, Character> smaller
128         = create("foo", 1, 'a', "bar", 1, 'b');
129     Table<String, Integer, Character> swapOuter
130         = create("bar", 1, 'a', "foo", 1, 'b', "bar", 3, 'c');
131     Table<String, Integer, Character> swapValues
132         = create("foo", 1, 'c', "bar", 1, 'b', "foo", 3, 'a');
133 
134     new EqualsTester()
135         .addEqualityGroup(table, hashCopy, reordered)
136         .addEqualityGroup(smaller)
137         .addEqualityGroup(swapOuter)
138         .addEqualityGroup(swapValues)
139         .testEquals();
140   }
141 
testHashCode()142   public void testHashCode() {
143     table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
144     int expected = Objects.hashCode("foo", 1, 'a')
145         + Objects.hashCode("bar", 1, 'b')
146         + Objects.hashCode("foo", 3, 'c');
147     assertEquals(expected, table.hashCode());
148   }
149 
testToStringSize1()150   public void testToStringSize1() {
151     table = create("foo", 1, 'a');
152     assertEquals("{foo={1=a}}", table.toString());
153   }
154 
testRow()155   public void testRow() {
156     table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
157     assertEquals(ImmutableMap.of(1, 'a', 3, 'c'), table.row("foo"));
158   }
159 
160   // This test assumes that the implementation does not support null keys.
testRowNull()161   public void testRowNull() {
162     table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
163     try {
164       table.row(null);
165       fail();
166     } catch (NullPointerException expected) {}
167   }
168 
testColumn()169   public void testColumn() {
170     table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
171     assertEquals(ImmutableMap.of("foo", 'a', "bar", 'b'), table.column(1));
172   }
173 
174   // This test assumes that the implementation does not support null keys.
testColumnNull()175   public void testColumnNull() {
176     table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
177     try {
178       table.column(null);
179       fail();
180     } catch (NullPointerException expected) {}
181   }
182 
testColumnSetPartialOverlap()183   public void testColumnSetPartialOverlap() {
184     table = create(
185         "foo", 1, 'a', "bar", 1, 'b', "foo", 2, 'c', "bar", 3, 'd');
186     assertThat(table.columnKeySet()).has().exactly(1, 2, 3);
187   }
188 
189   @GwtIncompatible("NullPointerTester")
testNullPointerInstance()190   public void testNullPointerInstance() {
191     table = create(
192         "foo", 1, 'a', "bar", 1, 'b', "foo", 2, 'c', "bar", 3, 'd');
193     new NullPointerTester().testAllPublicInstanceMethods(table);
194   }
195 }
196