Java

Форк
0
/
CollectionRemoveTester.java 
153 строки · 5.6 Кб
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.testing.testers;
18

19
import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_QUERIES;
20
import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
21
import static com.google.common.collect.testing.features.CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION;
22
import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
23
import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
24
import static com.google.common.collect.testing.features.CollectionSize.ZERO;
25

26
import com.google.common.annotations.GwtCompatible;
27
import com.google.common.collect.testing.AbstractCollectionTester;
28
import com.google.common.collect.testing.WrongType;
29
import com.google.common.collect.testing.features.CollectionFeature;
30
import com.google.common.collect.testing.features.CollectionSize;
31
import java.util.ConcurrentModificationException;
32
import java.util.Iterator;
33
import org.junit.Ignore;
34

35
/**
36
 * A generic JUnit test which tests {@code remove} operations on a collection. Can't be invoked
37
 * directly; please see {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
38
 *
39
 * @author George van den Driessche
40
 */
41
@GwtCompatible
42
@Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests.
43
@SuppressWarnings("JUnit4ClassUsedInJUnit3")
44
public class CollectionRemoveTester<E> extends AbstractCollectionTester<E> {
45
  @CollectionFeature.Require(SUPPORTS_REMOVE)
46
  @CollectionSize.Require(absent = ZERO)
47
  public void testRemove_present() {
48
    int initialSize = collection.size();
49
    assertTrue("remove(present) should return true", collection.remove(e0()));
50
    assertEquals(
51
        "remove(present) should decrease a collection's size by one.",
52
        initialSize - 1,
53
        collection.size());
54
    expectMissing(e0());
55
  }
56

57
  @CollectionFeature.Require({SUPPORTS_REMOVE, FAILS_FAST_ON_CONCURRENT_MODIFICATION})
58
  @CollectionSize.Require(SEVERAL)
59
  public void testRemovePresentConcurrentWithIteration() {
60
    try {
61
      Iterator<E> iterator = collection.iterator();
62
      assertTrue(collection.remove(e0()));
63
      iterator.next();
64
      fail("Expected ConcurrentModificationException");
65
    } catch (ConcurrentModificationException expected) {
66
      // success
67
    }
68
  }
69

70
  @CollectionFeature.Require(SUPPORTS_REMOVE)
71
  public void testRemove_notPresent() {
72
    assertFalse("remove(notPresent) should return false", collection.remove(e3()));
73
    expectUnchanged();
74
  }
75

76
  @CollectionFeature.Require({SUPPORTS_REMOVE, ALLOWS_NULL_VALUES})
77
  @CollectionSize.Require(absent = ZERO)
78
  public void testRemove_nullPresent() {
79
    collection = getSubjectGenerator().create(createArrayWithNullElement());
80

81
    int initialSize = collection.size();
82
    assertTrue("remove(null) should return true", collection.remove(null));
83
    assertEquals(
84
        "remove(present) should decrease a collection's size by one.",
85
        initialSize - 1,
86
        collection.size());
87
    expectMissing((E) null);
88
  }
89

90
  @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
91
  @CollectionSize.Require(absent = ZERO)
92
  public void testRemove_unsupported() {
93
    try {
94
      collection.remove(e0());
95
      fail("remove(present) should throw UnsupportedOperationException");
96
    } catch (UnsupportedOperationException expected) {
97
    }
98
    expectUnchanged();
99
    assertTrue("remove(present) should not remove the element", collection.contains(e0()));
100
  }
101

102
  @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
103
  public void testRemove_unsupportedNotPresent() {
104
    try {
105
      assertFalse(
106
          "remove(notPresent) should return false or throw UnsupportedOperationException",
107
          collection.remove(e3()));
108
    } catch (UnsupportedOperationException tolerated) {
109
    }
110
    expectUnchanged();
111
    expectMissing(e3());
112
  }
113

114
  @CollectionFeature.Require(value = SUPPORTS_REMOVE, absent = ALLOWS_NULL_QUERIES)
115
  public void testRemove_nullNotSupported() {
116
    try {
117
      assertFalse(
118
          "remove(null) should return false or throw NullPointerException",
119
          collection.remove(null));
120
    } catch (NullPointerException tolerated) {
121
    }
122
    expectUnchanged();
123
  }
124

125
  @CollectionFeature.Require({SUPPORTS_REMOVE, ALLOWS_NULL_QUERIES})
126
  public void testRemove_nullAllowed() {
127
    assertFalse("remove(null) should return false", collection.remove(null));
128
    expectUnchanged();
129
  }
130

131
  @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
132
  @CollectionSize.Require(absent = ZERO)
133
  public void testIteratorRemove_unsupported() {
134
    Iterator<E> iterator = collection.iterator();
135
    iterator.next();
136
    try {
137
      iterator.remove();
138
      fail("iterator.remove() should throw UnsupportedOperationException");
139
    } catch (UnsupportedOperationException expected) {
140
    }
141
    expectUnchanged();
142
    assertTrue(collection.contains(e0()));
143
  }
144

145
  @CollectionFeature.Require(SUPPORTS_REMOVE)
146
  public void testRemove_wrongType() {
147
    try {
148
      assertFalse(collection.remove(WrongType.VALUE));
149
    } catch (ClassCastException tolerated) {
150
    }
151
    expectUnchanged();
152
  }
153
}
154

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.