/*
* Copyright 2010-2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.gemfire.util;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.Arrays;
import org.junit.Test;
/**
* Unit tests for {@link ArrayUtils}.
*
* @author John Blum
* @see org.junit.Test
* @see org.springframework.data.gemfire.util.ArrayUtils
* @since 1.7.0
*/
public class ArrayUtilsUnitTests {
@Test
public void asArrayReturnsEmptyArray() {
Object[] array = ArrayUtils.asArray();
assertThat(array).isNotNull();
assertThat(array.length).isEqualTo(0);
}
@Test
public void asArrayReturnsMultiElementArray() {
Object[] array = ArrayUtils.asArray(1, 2, 3);
assertThat(array).isNotNull();
assertThat(array.length).isEqualTo(3);
assertThat(array).isEqualTo(new Object[] { 1, 2, 3 });
}
@Test
public void asArrayReturnsSingleElementArray() {
Object[] array = ArrayUtils.asArray(1);
assertThat(array).isNotNull();
assertThat(array.length).isEqualTo(1);
assertThat(array).isEqualTo(new Object[] { 1 });
}
@Test
public void defaultIfEmptyWithNonNullNonEmptyArrayReturnsArray() {
Object[] array = { "test" };
Object[] defaultArray = { "tested" };
assertThat(ArrayUtils.defaultIfEmpty(array, defaultArray)).isSameAs(array);
}
@Test
public void defaultIfEmptyWithEmptyArrayReturnsDefaultArray() {
Object[] array = {};
Object[] defaultArray = { "tested" };
assertThat(ArrayUtils.defaultIfEmpty(array, defaultArray)).isSameAs(defaultArray);
}
@Test
public void defaultIfEmptyWithNullArrayReturnsDefaultArray() {
Object[] defaultArray = { "tested" };
assertThat(ArrayUtils.defaultIfEmpty(null, defaultArray)).isSameAs(defaultArray);
}
@Test
public void defaultIfEmptyWithNullArrayAndNullDefaultArrayReturnsNull() {
assertThat(ArrayUtils.defaultIfEmpty(null, null)).isNull();
}
@Test
public void getFirstWithNonNullArray() {
assertThat(ArrayUtils.getFirst(ArrayUtils.asArray(1, 2, 3))).isEqualTo(1);
}
@Test
public void getFirstWithNullOrEmptyArrayAndNoDefaultReturnsNull() {
assertThat((Object) ArrayUtils.getFirst(null)).isNull();
assertThat((Object) ArrayUtils.getFirst(new Object[0])).isNull();
}
@Test
public void getFirstWithNullOrEmptyArrayAndDefaultReturnsDefault() {
assertThat(ArrayUtils.getFirst((Object[]) null, "test")).isEqualTo("test");
assertThat(ArrayUtils.getFirst(new Object[0], "test")).isEqualTo("test");
}
@Test
public void insertAtBeginning() {
Object[] originalArray = { "testing", "tested" };
Object[] newArray = ArrayUtils.insert(originalArray, 0, "test");
assertThat(newArray).isNotSameAs(originalArray);
assertThat(Arrays.equals(originalArray, newArray)).isFalse();
assertThat(newArray).isEqualTo(new Object[] { "test", "testing", "tested" });
}
@Test
public void insertInMiddle() {
Object[] originalArray = { "test", "tested" };
Object[] newArray = ArrayUtils.insert(originalArray, 1, "testing");
assertThat(newArray).isNotSameAs(originalArray);
assertThat(Arrays.equals(originalArray, newArray)).isFalse();
assertThat(newArray).isEqualTo(new Object[] { "test", "testing", "tested" });
}
@Test
public void insertAtEnd() {
Object[] originalArray = { "test", "testing" };
Object[] newArray = ArrayUtils.insert(originalArray, 2, "tested");
assertThat(newArray).isNotSameAs(originalArray);
assertThat(Arrays.equals(originalArray, newArray)).isFalse();
assertThat(newArray).isEqualTo(new Object[] { "test", "testing", "tested" });
}
@Test
public void isEmptyIsFalse() {
assertThat(ArrayUtils.isEmpty(ArrayUtils.asArray("test", "testing", "tested"))).isFalse();
assertThat(ArrayUtils.isEmpty(ArrayUtils.asArray("test"))).isFalse();
assertThat(ArrayUtils.isEmpty(ArrayUtils.asArray(""))).isFalse();
assertThat(ArrayUtils.isEmpty(ArrayUtils.asArray(null, null, null))).isFalse();
}
@Test
public void isEmptyIsTrue() {
assertThat(ArrayUtils.isEmpty(new Object[0])).isTrue();
assertThat(ArrayUtils.isEmpty(null)).isTrue();
}
@Test
public void length() {
assertThat(ArrayUtils.length(ArrayUtils.asArray("test", "testing", "tested"))).isEqualTo(3);
assertThat(ArrayUtils.length(ArrayUtils.asArray("test"))).isEqualTo(1);
assertThat(ArrayUtils.length(ArrayUtils.asArray(""))).isEqualTo(1);
assertThat(ArrayUtils.length(ArrayUtils.asArray(null, null, null))).isEqualTo(3);
assertThat(ArrayUtils.length(new Object[0])).isEqualTo(0);
assertThat(ArrayUtils.length(null)).isEqualTo(0);
}
@Test
public void nullSafeArrayWithNonNullArray() {
String[] stringArray = { "test", "testing", "tested" };
assertThat(ArrayUtils.nullSafeArray(stringArray, String.class)).isSameAs(stringArray);
Integer[] numberArray = { 1, 2, 3 };
assertThat(ArrayUtils.nullSafeArray(numberArray, Integer.class)).isSameAs(numberArray);
Double[] emptyDoubleArray = {};
assertThat(ArrayUtils.nullSafeArray(emptyDoubleArray, Double.class)).isSameAs(emptyDoubleArray);
Character[] characterArray = { 'A', 'B', 'C' };
assertThat(ArrayUtils.nullSafeArray(characterArray, Character.class)).isSameAs(characterArray);
}
@Test
public void nullSafeArrayWithNullArray() {
Object array = ArrayUtils.nullSafeArray(null, String.class);
assertThat(array).isInstanceOf(String[].class);
assertThat(((String[]) array).length).isEqualTo(0);
}
@Test
public void removeFromBeginning() {
Object[] originalArray = { "test", "testing", "tested" };
Object[] newArray = ArrayUtils.remove(originalArray, 0);
assertThat(newArray).isNotSameAs(originalArray);
assertThat(Arrays.equals(newArray, originalArray)).isFalse();
assertThat(newArray).isEqualTo(new Object[] { "testing", "tested" });
}
@Test
public void removeFromMiddle() {
Object[] originalArray = { "test", "testing", "tested" };
Object[] newArray = ArrayUtils.remove(originalArray, 1);
assertThat(newArray).isNotSameAs(originalArray);
assertThat(Arrays.equals(newArray, originalArray)).isFalse();
assertThat(newArray).isEqualTo(new Object[] { "test", "tested" });
}
@Test
public void removeFromEnd() {
Object[] originalArray = { "test", "testing", "tested" };
Object[] newArray = ArrayUtils.remove(originalArray, 2);
assertThat(newArray).isNotSameAs(originalArray);
assertThat(Arrays.equals(newArray, originalArray)).isFalse();
assertThat(newArray).isEqualTo(new Object[] { "test", "testing" });
}
@Test
@SuppressWarnings("unchecked")
public void sortIsSuccessful() {
Comparable[] array = new Comparable[] { 2, 3, 1 };
Comparable[] sortedArray = ArrayUtils.sort(array);
assertThat(sortedArray).isSameAs(array);
assertThat(sortedArray).isEqualTo(new Comparable[] { 1, 2, 3 });
}
}