BiMapPutTester.java revision 3c77433663281544363151bf284b0240dfd22a42
1/*
2 * Copyright (C) 2012 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
17package com.google.common.collect.testing.google;
18
19import static com.google.common.collect.testing.features.CollectionSize.ZERO;
20import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT;
21
22import com.google.common.annotations.GwtCompatible;
23import com.google.common.collect.testing.Helpers;
24import com.google.common.collect.testing.features.CollectionSize;
25import com.google.common.collect.testing.features.MapFeature;
26
27/**
28 * Tester for {@code BiMap.put} and {@code BiMap.forcePut}.
29 */
30@GwtCompatible
31public class BiMapPutTester<K, V> extends AbstractBiMapTester<K, V> {
32
33  @SuppressWarnings("unchecked")
34  @MapFeature.Require(SUPPORTS_PUT)
35  @CollectionSize.Require(ZERO)
36  public void testPutWithSameValueFails() {
37    K k0 = samples.e0.getKey();
38    K k1 = samples.e1.getKey();
39    V v0 = samples.e0.getValue();
40    getMap().put(k0, v0);
41    try {
42      getMap().put(k1, v0);
43      fail("Expected IllegalArgumentException");
44    } catch (IllegalArgumentException expected) {
45      // success
46    }
47    // verify that the bimap is unchanged
48    expectAdded(samples.e0);
49  }
50
51  @SuppressWarnings("unchecked")
52  @MapFeature.Require(SUPPORTS_PUT)
53  @CollectionSize.Require(ZERO)
54  public void testPutPresentKeyDifferentValue() {
55    K k0 = samples.e0.getKey();
56    V v0 = samples.e0.getValue();
57    V v1 = samples.e1.getValue();
58    getMap().put(k0, v0);
59    getMap().put(k0, v1);
60    // verify that the bimap is changed, and that the old inverse mapping
61    // from v1 -> v0 is deleted
62    expectContents(Helpers.mapEntry(k0, v1));
63  }
64
65  @SuppressWarnings("unchecked")
66  @MapFeature.Require(SUPPORTS_PUT)
67  @CollectionSize.Require(ZERO)
68  public void putDistinctKeysDistinctValues() {
69    getMap().put(samples.e0.getKey(), samples.e0.getValue());
70    getMap().put(samples.e1.getKey(), samples.e1.getValue());
71    expectAdded(samples.e0, samples.e1);
72  }
73
74  @SuppressWarnings("unchecked")
75  @MapFeature.Require(SUPPORTS_PUT)
76  @CollectionSize.Require(ZERO)
77  public void testForcePutOverwritesOldValueEntry() {
78    K k0 = samples.e0.getKey();
79    K k1 = samples.e1.getKey();
80    V v0 = samples.e0.getValue();
81    getMap().put(k0, v0);
82    getMap().forcePut(k1, v0);
83    // verify that the bimap is unchanged
84    expectAdded(Helpers.mapEntry(k1, v0));
85  }
86
87  @SuppressWarnings("unchecked")
88  @MapFeature.Require(SUPPORTS_PUT)
89  @CollectionSize.Require(ZERO)
90  public void testInversePut() {
91    K k0 = samples.e0.getKey();
92    V v0 = samples.e0.getValue();
93    K k1 = samples.e1.getKey();
94    V v1 = samples.e1.getValue();
95    getMap().put(k0, v0);
96    getMap().inverse().put(v1, k1);
97    expectAdded(samples.e0, samples.e1);
98  }
99}
100