001 /*
002 * Created on Dec 15, 2010
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
005 * the License. You may obtain a copy of the License at
006 *
007 * http://www.apache.org/licenses/LICENSE-2.0
008 *
009 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
010 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
011 * specific language governing permissions and limitations under the License.
012 *
013 * Copyright @2010-2011 the original author or authors.
014 */
015 package org.fest.assertions.internal;
016
017 import java.util.Comparator;
018
019 import org.fest.assertions.core.*;
020 import org.fest.assertions.data.Index;
021 import org.fest.util.VisibleForTesting;
022
023 /**
024 * Reusable assertions for arrays of {@code boolean}s.
025 *
026 * @author Alex Ruiz
027 * @author Joel Costigliola
028 */
029 public class BooleanArrays {
030
031 private static final BooleanArrays INSTANCE = new BooleanArrays();
032
033 /**
034 * Returns the singleton instance of this class.
035 * @return the singleton instance of this class.
036 */
037 public static BooleanArrays instance() {
038 return INSTANCE;
039 }
040
041 private final Arrays arrays = Arrays.instance();
042
043 @VisibleForTesting
044 Failures failures = Failures.instance();
045
046 @VisibleForTesting
047 BooleanArrays() {}
048
049 /**
050 * Asserts that the given array is {@code null} or empty.
051 * @param info contains information about the assertion.
052 * @param actual the given array.
053 * @throws AssertionError if the given array is not {@code null} *and* contains one or more elements.
054 */
055 public void assertNullOrEmpty(AssertionInfo info, boolean[] actual) {
056 arrays.assertNullOrEmpty(info, failures, actual);
057 }
058
059 /**
060 * Asserts that the given array is empty.
061 * @param info contains information about the assertion.
062 * @param actual the given array.
063 * @throws AssertionError if the given array is {@code null}.
064 * @throws AssertionError if the given array is not empty.
065 */
066 public void assertEmpty(AssertionInfo info, boolean[] actual) {
067 arrays.assertEmpty(info, failures, actual);
068 }
069
070 /**
071 * Asserts that the given array is not empty.
072 * @param info contains information about the assertion.
073 * @param actual the given array.
074 * @throws AssertionError if the given array is {@code null}.
075 * @throws AssertionError if the given array is empty.
076 */
077 public void assertNotEmpty(AssertionInfo info, boolean[] actual) {
078 arrays.assertNotEmpty(info, failures, actual);
079 }
080
081 /**
082 * Asserts that the number of elements in the given array is equal to the expected one.
083 * @param info contains information about the assertion.
084 * @param actual the given array.
085 * @param expectedSize the expected size of {@code actual}.
086 * @throws AssertionError if the given array is {@code null}.
087 * @throws AssertionError if the number of elements in the given array is different than the expected one.
088 */
089 public void assertHasSize(AssertionInfo info, boolean[] actual, int expectedSize) {
090 arrays.assertHasSize(info, failures, actual, expectedSize);
091 }
092
093 /**
094 * Asserts that the given array contains the given values, in any order.
095 * @param info contains information about the assertion.
096 * @param actual the given array.
097 * @param values the values that are expected to be in the given array.
098 * @throws NullPointerException if the array of values is {@code null}.
099 * @throws IllegalArgumentException if the array of values is empty.
100 * @throws AssertionError if the given array is {@code null}.
101 * @throws AssertionError if the given array does not contain the given values.
102 */
103 public void assertContains(AssertionInfo info, boolean[] actual, boolean[] values) {
104 arrays.assertContains(info, failures, actual, values);
105 }
106
107 /**
108 * Verifies that the given array contains the given value at the given index.
109 * @param info contains information about the assertion.
110 * @param actual the given array.
111 * @param value the value to look for.
112 * @param index the index where the value should be stored in the given array.
113 * @throws AssertionError if the given array is {@code null} or empty.
114 * @throws NullPointerException if the given {@code Index} is {@code null}.
115 * @throws IndexOutOfBoundsException if the value of the given {@code Index} is equal to or greater than the size of
116 * the given array.
117 * @throws AssertionError if the given array does not contain the given value at the given index.
118 */
119 public void assertContains(AssertionInfo info, boolean[] actual, boolean value, Index index) {
120 arrays.assertContains(info, failures, actual, value, index);
121 }
122
123 /**
124 * Verifies that the given array does not contain the given value at the given index.
125 * @param info contains information about the assertion.
126 * @param actual the given array.
127 * @param value the value to look for.
128 * @param index the index where the value should be stored in the given array.
129 * @throws AssertionError if the given array is {@code null}.
130 * @throws NullPointerException if the given {@code Index} is {@code null}.
131 * @throws AssertionError if the given array contains the given value at the given index.
132 */
133 public void assertDoesNotContain(AssertionInfo info, boolean[] actual, boolean value, Index index) {
134 arrays.assertDoesNotContain(info, failures, actual, value, index);
135 }
136
137 /**
138 * Asserts that the given array contains only the given values and nothing else, in any order.
139 * @param info contains information about the assertion.
140 * @param actual the given array.
141 * @param values the values that are expected to be in the given array.
142 * @throws NullPointerException if the array of values is {@code null}.
143 * @throws IllegalArgumentException if the array of values is empty.
144 * @throws AssertionError if the given array is {@code null}.
145 * @throws AssertionError if the given array does not contain the given values or if the given array contains values
146 * that are not in the given array.
147 */
148 public void assertContainsOnly(AssertionInfo info, boolean[] actual, boolean[] values) {
149 arrays.assertContainsOnly(info, failures, actual, values);
150 }
151
152 /**
153 * Verifies that the given array contains the given sequence of values, without any other values between them.
154 * @param info contains information about the assertion.
155 * @param actual the given array.
156 * @param sequence the sequence of values to look for.
157 * @throws AssertionError if the given array is {@code null}.
158 * @throws NullPointerException if the given sequence is {@code null}.
159 * @throws IllegalArgumentException if the given sequence is empty.
160 * @throws AssertionError if the given array does not contain the given sequence of values.
161 */
162 public void assertContainsSequence(AssertionInfo info, boolean[] actual, boolean[] sequence) {
163 arrays.assertContainsSequence(info, failures, actual, sequence);
164 }
165
166 /**
167 * Asserts that the given array does not contain the given values.
168 * @param info contains information about the assertion.
169 * @param actual the given array.
170 * @param values the values that are expected not to be in the given array.
171 * @throws NullPointerException if the array of values is {@code null}.
172 * @throws IllegalArgumentException if the array of values is empty.
173 * @throws AssertionError if the given array is {@code null}.
174 * @throws AssertionError if the given array contains any of given values.
175 */
176 public void assertDoesNotContain(AssertionInfo info, boolean[] actual, boolean[] values) {
177 arrays.assertDoesNotContain(info, failures, actual, values);
178 }
179
180 /**
181 * Asserts that the given array does not have duplicate values.
182 * @param info contains information about the assertion.
183 * @param actual the given array.
184 * @throws NullPointerException if the array of values is {@code null}.
185 * @throws IllegalArgumentException if the array of values is empty.
186 * @throws AssertionError if the given array is {@code null}.
187 * @throws AssertionError if the given array contains duplicate values.
188 */
189 public void assertDoesNotHaveDuplicates(AssertionInfo info, boolean[] actual) {
190 arrays.assertDoesNotHaveDuplicates(info, failures, actual);
191 }
192
193 /**
194 * Verifies that the given array starts with the given sequence of values, without any other values between them.
195 * Similar to <code>{@link #assertContainsSequence(AssertionInfo, boolean[], boolean[])}</code>, but it also verifies
196 * that the first element in the sequence is also the first element of the given array.
197 * @param info contains information about the assertion.
198 * @param actual the given array.
199 * @param sequence the sequence of values to look for.
200 * @throws NullPointerException if the given argument is {@code null}.
201 * @throws IllegalArgumentException if the given argument is an empty array.
202 * @throws AssertionError if the given array is {@code null}.
203 * @throws AssertionError if the given array does not start with the given sequence of values.
204 */
205 public void assertStartsWith(AssertionInfo info, boolean[] actual, boolean[] sequence) {
206 arrays.assertStartsWith(info, failures, actual, sequence);
207 }
208
209 /**
210 * Verifies that the given array ends with the given sequence of values, without any other values between them.
211 * Similar to <code>{@link #assertContainsSequence(AssertionInfo, boolean[], boolean[])}</code>, but it also verifies
212 * that the last element in the sequence is also the last element of the given array.
213 * @param info contains information about the assertion.
214 * @param actual the given array.
215 * @param sequence the sequence of values to look for.
216 * @throws NullPointerException if the given argument is {@code null}.
217 * @throws IllegalArgumentException if the given argument is an empty array.
218 * @throws AssertionError if the given array is {@code null}.
219 * @throws AssertionError if the given array does not end with the given sequence of values.
220 */
221 public void assertEndsWith(AssertionInfo info, boolean[] actual, boolean[] sequence) {
222 arrays.assertEndsWith(info, failures, actual, sequence);
223 }
224
225 /**
226 * Concrete implementation of {@link ArraySortedAssert#isSorted()}.
227 *
228 * @param info contains information about the assertion.
229 * @param actual the given array.
230 */
231 public void assertIsSorted(AssertionInfo info, boolean[] actual) {
232 arrays.assertIsSorted(info, failures, actual);
233 }
234
235 /**
236 * Concrete implementation of {@link ArraySortedAssert#isSortedAccordingTo(Comparator)}.
237 *
238 * @param info contains information about the assertion.
239 * @param actual the given array.
240 * @param comparator the {@link Comparator} used to compare array elements
241 */
242 public void assertIsSortedAccordingToComparator(AssertionInfo info, boolean[] actual,
243 Comparator<? extends Boolean> comparator) {
244 Arrays.assertIsSortedAccordingToComparator(info, failures, actual, comparator);
245 }
246
247 }