17dd252788645e940eada959bdde927426e2531c9Paul Duffin/* 27dd252788645e940eada959bdde927426e2531c9Paul Duffin * Copyright (C) 2008 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.testers; 187dd252788645e940eada959bdde927426e2531c9Paul Duffin 197dd252788645e940eada959bdde927426e2531c9Paul Duffinimport static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES; 207dd252788645e940eada959bdde927426e2531c9Paul Duffinimport static com.google.common.collect.testing.features.CollectionSize.ZERO; 217dd252788645e940eada959bdde927426e2531c9Paul Duffinimport static com.google.common.collect.testing.features.ListFeature.SUPPORTS_SET; 227dd252788645e940eada959bdde927426e2531c9Paul Duffin 237dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.annotations.GwtCompatible; 247dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.features.CollectionFeature; 257dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.features.CollectionSize; 267dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.features.ListFeature; 277dd252788645e940eada959bdde927426e2531c9Paul Duffin 287dd252788645e940eada959bdde927426e2531c9Paul Duffin/** 297dd252788645e940eada959bdde927426e2531c9Paul Duffin * A generic JUnit test which tests {@code set()} operations on a list. Can't be 307dd252788645e940eada959bdde927426e2531c9Paul Duffin * invoked directly; please see 317dd252788645e940eada959bdde927426e2531c9Paul Duffin * {@link com.google.common.collect.testing.ListTestSuiteBuilder}. 327dd252788645e940eada959bdde927426e2531c9Paul Duffin * 337dd252788645e940eada959bdde927426e2531c9Paul Duffin * @author George van den Driessche 347dd252788645e940eada959bdde927426e2531c9Paul Duffin */ 357dd252788645e940eada959bdde927426e2531c9Paul Duffin@GwtCompatible(emulated = true) 367dd252788645e940eada959bdde927426e2531c9Paul Duffinpublic class ListSetTester<E> extends AbstractListTester<E> { 377dd252788645e940eada959bdde927426e2531c9Paul Duffin @ListFeature.Require(SUPPORTS_SET) 387dd252788645e940eada959bdde927426e2531c9Paul Duffin @CollectionSize.Require(absent = ZERO) 397dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testSet() { 407dd252788645e940eada959bdde927426e2531c9Paul Duffin doTestSet(samples.e3); 417dd252788645e940eada959bdde927426e2531c9Paul Duffin } 427dd252788645e940eada959bdde927426e2531c9Paul Duffin 437dd252788645e940eada959bdde927426e2531c9Paul Duffin @CollectionSize.Require(absent = ZERO) 447dd252788645e940eada959bdde927426e2531c9Paul Duffin @CollectionFeature.Require(ALLOWS_NULL_VALUES) 457dd252788645e940eada959bdde927426e2531c9Paul Duffin @ListFeature.Require(SUPPORTS_SET) 467dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testSet_null() { 477dd252788645e940eada959bdde927426e2531c9Paul Duffin doTestSet(null); 487dd252788645e940eada959bdde927426e2531c9Paul Duffin } 497dd252788645e940eada959bdde927426e2531c9Paul Duffin 507dd252788645e940eada959bdde927426e2531c9Paul Duffin @CollectionSize.Require(absent = ZERO) 517dd252788645e940eada959bdde927426e2531c9Paul Duffin @CollectionFeature.Require(ALLOWS_NULL_VALUES) 527dd252788645e940eada959bdde927426e2531c9Paul Duffin @ListFeature.Require(SUPPORTS_SET) 537dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testSet_replacingNull() { 547dd252788645e940eada959bdde927426e2531c9Paul Duffin E[] elements = createSamplesArray(); 557dd252788645e940eada959bdde927426e2531c9Paul Duffin int i = aValidIndex(); 567dd252788645e940eada959bdde927426e2531c9Paul Duffin elements[i] = null; 577dd252788645e940eada959bdde927426e2531c9Paul Duffin collection = getSubjectGenerator().create(elements); 587dd252788645e940eada959bdde927426e2531c9Paul Duffin 597dd252788645e940eada959bdde927426e2531c9Paul Duffin doTestSet(samples.e3); 607dd252788645e940eada959bdde927426e2531c9Paul Duffin } 617dd252788645e940eada959bdde927426e2531c9Paul Duffin 627dd252788645e940eada959bdde927426e2531c9Paul Duffin private void doTestSet(E newValue) { 637dd252788645e940eada959bdde927426e2531c9Paul Duffin int index = aValidIndex(); 647dd252788645e940eada959bdde927426e2531c9Paul Duffin E initialValue = getList().get(index); 657dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals("set(i, x) should return the old element at position i.", 667dd252788645e940eada959bdde927426e2531c9Paul Duffin initialValue, getList().set(index, newValue)); 677dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals("After set(i, x), get(i) should return x", 687dd252788645e940eada959bdde927426e2531c9Paul Duffin newValue, getList().get(index)); 697dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals("set() should not change the size of a list.", 707dd252788645e940eada959bdde927426e2531c9Paul Duffin getNumElements(), getList().size()); 717dd252788645e940eada959bdde927426e2531c9Paul Duffin } 727dd252788645e940eada959bdde927426e2531c9Paul Duffin 737dd252788645e940eada959bdde927426e2531c9Paul Duffin @ListFeature.Require(SUPPORTS_SET) 747dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testSet_indexTooLow() { 757dd252788645e940eada959bdde927426e2531c9Paul Duffin try { 767dd252788645e940eada959bdde927426e2531c9Paul Duffin getList().set(-1, samples.e3); 777dd252788645e940eada959bdde927426e2531c9Paul Duffin fail("set(-1) should throw IndexOutOfBoundsException"); 787dd252788645e940eada959bdde927426e2531c9Paul Duffin } catch (IndexOutOfBoundsException expected) { 797dd252788645e940eada959bdde927426e2531c9Paul Duffin } 807dd252788645e940eada959bdde927426e2531c9Paul Duffin expectUnchanged(); 817dd252788645e940eada959bdde927426e2531c9Paul Duffin } 827dd252788645e940eada959bdde927426e2531c9Paul Duffin 837dd252788645e940eada959bdde927426e2531c9Paul Duffin @ListFeature.Require(SUPPORTS_SET) 847dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testSet_indexTooHigh() { 857dd252788645e940eada959bdde927426e2531c9Paul Duffin int index = getNumElements(); 867dd252788645e940eada959bdde927426e2531c9Paul Duffin try { 877dd252788645e940eada959bdde927426e2531c9Paul Duffin getList().set(index, samples.e3); 887dd252788645e940eada959bdde927426e2531c9Paul Duffin fail("set(size) should throw IndexOutOfBoundsException"); 897dd252788645e940eada959bdde927426e2531c9Paul Duffin } catch (IndexOutOfBoundsException expected) { 907dd252788645e940eada959bdde927426e2531c9Paul Duffin } 917dd252788645e940eada959bdde927426e2531c9Paul Duffin expectUnchanged(); 927dd252788645e940eada959bdde927426e2531c9Paul Duffin } 937dd252788645e940eada959bdde927426e2531c9Paul Duffin 947dd252788645e940eada959bdde927426e2531c9Paul Duffin @CollectionSize.Require(absent = ZERO) 957dd252788645e940eada959bdde927426e2531c9Paul Duffin @ListFeature.Require(absent = SUPPORTS_SET) 967dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testSet_unsupported() { 977dd252788645e940eada959bdde927426e2531c9Paul Duffin try { 987dd252788645e940eada959bdde927426e2531c9Paul Duffin getList().set(aValidIndex(), samples.e3); 997dd252788645e940eada959bdde927426e2531c9Paul Duffin fail("set() should throw UnsupportedOperationException"); 1007dd252788645e940eada959bdde927426e2531c9Paul Duffin } catch (UnsupportedOperationException expected) { 1017dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1027dd252788645e940eada959bdde927426e2531c9Paul Duffin expectUnchanged(); 1037dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1047dd252788645e940eada959bdde927426e2531c9Paul Duffin 1057dd252788645e940eada959bdde927426e2531c9Paul Duffin @CollectionSize.Require(ZERO) 1067dd252788645e940eada959bdde927426e2531c9Paul Duffin @ListFeature.Require(absent = SUPPORTS_SET) 1077dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testSet_unsupportedByEmptyList() { 1087dd252788645e940eada959bdde927426e2531c9Paul Duffin try { 1097dd252788645e940eada959bdde927426e2531c9Paul Duffin getList().set(0, samples.e3); 1107dd252788645e940eada959bdde927426e2531c9Paul Duffin fail("set() should throw UnsupportedOperationException " 1117dd252788645e940eada959bdde927426e2531c9Paul Duffin + "or IndexOutOfBoundsException"); 1127dd252788645e940eada959bdde927426e2531c9Paul Duffin } catch (UnsupportedOperationException tolerated) { 1137dd252788645e940eada959bdde927426e2531c9Paul Duffin } catch (IndexOutOfBoundsException tolerated) { 1147dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1157dd252788645e940eada959bdde927426e2531c9Paul Duffin expectUnchanged(); 1167dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1177dd252788645e940eada959bdde927426e2531c9Paul Duffin 1187dd252788645e940eada959bdde927426e2531c9Paul Duffin @CollectionSize.Require(absent = ZERO) 1197dd252788645e940eada959bdde927426e2531c9Paul Duffin @ListFeature.Require(SUPPORTS_SET) 1207dd252788645e940eada959bdde927426e2531c9Paul Duffin @CollectionFeature.Require(absent = ALLOWS_NULL_VALUES) 1217dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testSet_nullUnsupported() { 1227dd252788645e940eada959bdde927426e2531c9Paul Duffin try { 1237dd252788645e940eada959bdde927426e2531c9Paul Duffin getList().set(aValidIndex(), null); 1247dd252788645e940eada959bdde927426e2531c9Paul Duffin fail("set(null) should throw NullPointerException"); 1257dd252788645e940eada959bdde927426e2531c9Paul Duffin } catch (NullPointerException expected) { 1267dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1277dd252788645e940eada959bdde927426e2531c9Paul Duffin expectUnchanged(); 1287dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1297dd252788645e940eada959bdde927426e2531c9Paul Duffin 1307dd252788645e940eada959bdde927426e2531c9Paul Duffin private int aValidIndex() { 1317dd252788645e940eada959bdde927426e2531c9Paul Duffin return getList().size() / 2; 1327dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1337dd252788645e940eada959bdde927426e2531c9Paul Duffin} 1347dd252788645e940eada959bdde927426e2531c9Paul Duffin 135