17dd252788645e940eada959bdde927426e2531c9Paul Duffin/*
27dd252788645e940eada959bdde927426e2531c9Paul Duffin * Copyright (C) 2012 The Guava Authors
37dd252788645e940eada959bdde927426e2531c9Paul Duffin *
47dd252788645e940eada959bdde927426e2531c9Paul Duffin * Licensed under the Apache License, Version 2.0 (the "License");
57dd252788645e940eada959bdde927426e2531c9Paul Duffin * you may not use this file except in compliance with the License.
67dd252788645e940eada959bdde927426e2531c9Paul Duffin * You may obtain a copy of the License at
77dd252788645e940eada959bdde927426e2531c9Paul Duffin *
87dd252788645e940eada959bdde927426e2531c9Paul Duffin * http://www.apache.org/licenses/LICENSE-2.0
97dd252788645e940eada959bdde927426e2531c9Paul Duffin *
107dd252788645e940eada959bdde927426e2531c9Paul Duffin * Unless required by applicable law or agreed to in writing, software
117dd252788645e940eada959bdde927426e2531c9Paul Duffin * distributed under the License is distributed on an "AS IS" BASIS,
127dd252788645e940eada959bdde927426e2531c9Paul Duffin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137dd252788645e940eada959bdde927426e2531c9Paul Duffin * See the License for the specific language governing permissions and
147dd252788645e940eada959bdde927426e2531c9Paul Duffin * limitations under the License.
157dd252788645e940eada959bdde927426e2531c9Paul Duffin */
167dd252788645e940eada959bdde927426e2531c9Paul Duffin
177dd252788645e940eada959bdde927426e2531c9Paul Duffinpackage com.google.common.collect.testing.google;
187dd252788645e940eada959bdde927426e2531c9Paul Duffin
197dd252788645e940eada959bdde927426e2531c9Paul Duffinimport static com.google.common.collect.testing.features.CollectionSize.ZERO;
207dd252788645e940eada959bdde927426e2531c9Paul Duffinimport static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT;
217dd252788645e940eada959bdde927426e2531c9Paul Duffin
227dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.annotations.GwtCompatible;
237dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.Helpers;
247dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.features.CollectionSize;
257dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.features.MapFeature;
267dd252788645e940eada959bdde927426e2531c9Paul Duffin
277dd252788645e940eada959bdde927426e2531c9Paul Duffin/**
287dd252788645e940eada959bdde927426e2531c9Paul Duffin * Tester for {@code BiMap.put} and {@code BiMap.forcePut}.
297dd252788645e940eada959bdde927426e2531c9Paul Duffin */
307dd252788645e940eada959bdde927426e2531c9Paul Duffin@GwtCompatible
317dd252788645e940eada959bdde927426e2531c9Paul Duffinpublic class BiMapPutTester<K, V> extends AbstractBiMapTester<K, V> {
327dd252788645e940eada959bdde927426e2531c9Paul Duffin
337dd252788645e940eada959bdde927426e2531c9Paul Duffin  @SuppressWarnings("unchecked")
347dd252788645e940eada959bdde927426e2531c9Paul Duffin  @MapFeature.Require(SUPPORTS_PUT)
357dd252788645e940eada959bdde927426e2531c9Paul Duffin  @CollectionSize.Require(ZERO)
367dd252788645e940eada959bdde927426e2531c9Paul Duffin  public void testPutWithSameValueFails() {
377dd252788645e940eada959bdde927426e2531c9Paul Duffin    K k0 = samples.e0.getKey();
387dd252788645e940eada959bdde927426e2531c9Paul Duffin    K k1 = samples.e1.getKey();
397dd252788645e940eada959bdde927426e2531c9Paul Duffin    V v0 = samples.e0.getValue();
407dd252788645e940eada959bdde927426e2531c9Paul Duffin    getMap().put(k0, v0);
417dd252788645e940eada959bdde927426e2531c9Paul Duffin    try {
427dd252788645e940eada959bdde927426e2531c9Paul Duffin      getMap().put(k1, v0);
437dd252788645e940eada959bdde927426e2531c9Paul Duffin      fail("Expected IllegalArgumentException");
447dd252788645e940eada959bdde927426e2531c9Paul Duffin    } catch (IllegalArgumentException expected) {
457dd252788645e940eada959bdde927426e2531c9Paul Duffin      // success
467dd252788645e940eada959bdde927426e2531c9Paul Duffin    }
477dd252788645e940eada959bdde927426e2531c9Paul Duffin    // verify that the bimap is unchanged
487dd252788645e940eada959bdde927426e2531c9Paul Duffin    expectAdded(samples.e0);
497dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
507dd252788645e940eada959bdde927426e2531c9Paul Duffin
517dd252788645e940eada959bdde927426e2531c9Paul Duffin  @SuppressWarnings("unchecked")
527dd252788645e940eada959bdde927426e2531c9Paul Duffin  @MapFeature.Require(SUPPORTS_PUT)
537dd252788645e940eada959bdde927426e2531c9Paul Duffin  @CollectionSize.Require(ZERO)
547dd252788645e940eada959bdde927426e2531c9Paul Duffin  public void testPutPresentKeyDifferentValue() {
557dd252788645e940eada959bdde927426e2531c9Paul Duffin    K k0 = samples.e0.getKey();
567dd252788645e940eada959bdde927426e2531c9Paul Duffin    V v0 = samples.e0.getValue();
577dd252788645e940eada959bdde927426e2531c9Paul Duffin    V v1 = samples.e1.getValue();
587dd252788645e940eada959bdde927426e2531c9Paul Duffin    getMap().put(k0, v0);
597dd252788645e940eada959bdde927426e2531c9Paul Duffin    getMap().put(k0, v1);
607dd252788645e940eada959bdde927426e2531c9Paul Duffin    // verify that the bimap is changed, and that the old inverse mapping
617dd252788645e940eada959bdde927426e2531c9Paul Duffin    // from v1 -> v0 is deleted
627dd252788645e940eada959bdde927426e2531c9Paul Duffin    expectContents(Helpers.mapEntry(k0, v1));
637dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
647dd252788645e940eada959bdde927426e2531c9Paul Duffin
657dd252788645e940eada959bdde927426e2531c9Paul Duffin  @SuppressWarnings("unchecked")
667dd252788645e940eada959bdde927426e2531c9Paul Duffin  @MapFeature.Require(SUPPORTS_PUT)
677dd252788645e940eada959bdde927426e2531c9Paul Duffin  @CollectionSize.Require(ZERO)
687dd252788645e940eada959bdde927426e2531c9Paul Duffin  public void putDistinctKeysDistinctValues() {
697dd252788645e940eada959bdde927426e2531c9Paul Duffin    getMap().put(samples.e0.getKey(), samples.e0.getValue());
707dd252788645e940eada959bdde927426e2531c9Paul Duffin    getMap().put(samples.e1.getKey(), samples.e1.getValue());
717dd252788645e940eada959bdde927426e2531c9Paul Duffin    expectAdded(samples.e0, samples.e1);
727dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
737dd252788645e940eada959bdde927426e2531c9Paul Duffin
747dd252788645e940eada959bdde927426e2531c9Paul Duffin  @SuppressWarnings("unchecked")
757dd252788645e940eada959bdde927426e2531c9Paul Duffin  @MapFeature.Require(SUPPORTS_PUT)
767dd252788645e940eada959bdde927426e2531c9Paul Duffin  @CollectionSize.Require(ZERO)
777dd252788645e940eada959bdde927426e2531c9Paul Duffin  public void testForcePutOverwritesOldValueEntry() {
787dd252788645e940eada959bdde927426e2531c9Paul Duffin    K k0 = samples.e0.getKey();
797dd252788645e940eada959bdde927426e2531c9Paul Duffin    K k1 = samples.e1.getKey();
807dd252788645e940eada959bdde927426e2531c9Paul Duffin    V v0 = samples.e0.getValue();
817dd252788645e940eada959bdde927426e2531c9Paul Duffin    getMap().put(k0, v0);
827dd252788645e940eada959bdde927426e2531c9Paul Duffin    getMap().forcePut(k1, v0);
837dd252788645e940eada959bdde927426e2531c9Paul Duffin    // verify that the bimap is unchanged
847dd252788645e940eada959bdde927426e2531c9Paul Duffin    expectAdded(Helpers.mapEntry(k1, v0));
857dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
867dd252788645e940eada959bdde927426e2531c9Paul Duffin
877dd252788645e940eada959bdde927426e2531c9Paul Duffin  @SuppressWarnings("unchecked")
887dd252788645e940eada959bdde927426e2531c9Paul Duffin  @MapFeature.Require(SUPPORTS_PUT)
897dd252788645e940eada959bdde927426e2531c9Paul Duffin  @CollectionSize.Require(ZERO)
907dd252788645e940eada959bdde927426e2531c9Paul Duffin  public void testInversePut() {
917dd252788645e940eada959bdde927426e2531c9Paul Duffin    K k0 = samples.e0.getKey();
927dd252788645e940eada959bdde927426e2531c9Paul Duffin    V v0 = samples.e0.getValue();
937dd252788645e940eada959bdde927426e2531c9Paul Duffin    K k1 = samples.e1.getKey();
947dd252788645e940eada959bdde927426e2531c9Paul Duffin    V v1 = samples.e1.getValue();
957dd252788645e940eada959bdde927426e2531c9Paul Duffin    getMap().put(k0, v0);
967dd252788645e940eada959bdde927426e2531c9Paul Duffin    getMap().inverse().put(v1, k1);
977dd252788645e940eada959bdde927426e2531c9Paul Duffin    expectAdded(samples.e0, samples.e1);
987dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
997dd252788645e940eada959bdde927426e2531c9Paul Duffin}
100