/*
* JBoss, Home of Professional Open Source.
*
* Copyright 2012 Red Hat, Inc. and/or its affiliates, and individual
* contributors as indicated by the @author tags.
*
* 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.xnio;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.junit.Test;
/**
* Test for {@link Sequence}.
*
* @author <a href="mailto:flavia.rainone@jboss.com">Flavia Rainone</a>
*
*/
public class SequenceTestCase {
@Test
public void emptySequence() {
final Sequence<String> sequence = Sequence.of();
assertNotNull(sequence);
assertSame(sequence, Sequence.of(new ArrayList<String>()));
assertSame(sequence, Sequence.empty());
Sequence<Object> untypedSequence = sequence.cast(Object.class);
assertSame(sequence, untypedSequence);
assertSame(sequence, untypedSequence.cast(String.class));
assertEquals(sequence, untypedSequence);
assertSame(sequence, Sequence.of(sequence));
assertEquals(0, sequence.size());
assertTrue(sequence.isEmpty());
Iterator<String> iterator = sequence.iterator();
assertNotNull(iterator);
assertFalse(iterator.hasNext());
assertEquals(0, sequence.toArray().length);
assertEquals(sequence.hashCode(), sequence.hashCode());
assertEquals(sequence.hashCode(), Sequence.empty().hashCode());
}
@Test
public void unitarySequence() {
final Sequence<String> sequence = Sequence.of("single");
assertNotNull(sequence);
Sequence<Object> untypedSequence = sequence.cast(Object.class);
assertSame(sequence, untypedSequence);
assertSame(sequence, untypedSequence.cast(String.class));
assertEquals(sequence, untypedSequence);
assertEquals(sequence, Sequence.of("single"));
assertEquals(Sequence.of("single"), sequence);
assertSame(sequence, Sequence.of(sequence));
List<String> list = new ArrayList<String>();
list.add("single");
assertEquals(sequence, Sequence.of(list));
assertEquals(Sequence.of(list), sequence);
assertEquals(1, sequence.size());
assertFalse(sequence.isEmpty());
Iterator<String> iterator = sequence.iterator();
assertNotNull(iterator);
assertTrue(iterator.hasNext());
assertEquals("single", iterator.next());
assertFalse(iterator.hasNext());
Exception expected = null;
try {
iterator.remove();
} catch (UnsupportedOperationException e) {
expected = e;
}
assertNotNull(expected);
assertEquals(1, sequence.size());
assertArrayEquals(new String[] {"single"}, sequence.toArray());
assertEquals(sequence.hashCode(), sequence.hashCode());
assertEquals(sequence.hashCode(), Sequence.of("single").hashCode());
}
@Test
public void simpleSequence() {
final Sequence<String> sequence = Sequence.of("a", "b", "c", "d");
assertNotNull(sequence);
Sequence<Object> untypedSequence = sequence.cast(Object.class);
assertSame(sequence, untypedSequence);
assertSame(sequence, untypedSequence.cast(String.class));
assertEquals(sequence, untypedSequence);
assertEquals(sequence, Sequence.of("a", "b", "c", "d"));
assertEquals(Sequence.of("a", "b", "c", "d"), sequence);
assertSame(sequence, Sequence.of(sequence));
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
assertEquals(sequence, Sequence.of(list));
assertEquals(Sequence.of(list), sequence);
assertTrue(sequence.equals((Object) Sequence.of(list)));
assertFalse(sequence.equals(new Object()));
assertFalse(sequence.equals(null));
assertFalse(sequence.equals((Object) Sequence.empty()));
assertFalse(sequence.equals((Object) Sequence.of("a", "b", "c", "d", "e")));
assertEquals(4, sequence.size());
assertFalse(sequence.isEmpty());
Iterator<String> iterator = sequence.iterator();
assertNotNull(iterator);
assertTrue(iterator.hasNext());
assertEquals("a", iterator.next());
assertTrue(iterator.hasNext());
assertEquals("b", iterator.next());
assertTrue(iterator.hasNext());
assertEquals("c", iterator.next());
assertTrue(iterator.hasNext());
assertEquals("d", iterator.next());
assertFalse(iterator.hasNext());
Exception expected = null;
try {
iterator.remove();
} catch (UnsupportedOperationException e) {
expected = e;
}
assertNotNull(expected);
assertEquals(4, sequence.size());
assertArrayEquals(new String[] {"a", "b", "c", "d"}, sequence.toArray());
assertEquals("c", sequence.get(2));
assertEquals("b", sequence.get(1));
assertEquals("d", sequence.get(3));
assertEquals("a", sequence.get(0));
assertEquals(sequence.hashCode(), sequence.hashCode());
assertEquals(sequence.hashCode(), Sequence.of("a", "b", "c", "d").hashCode());
}
@Test
public void invalidSequence() {
IllegalArgumentException expected = null;
try {
Sequence.of((Object) null);
} catch (IllegalArgumentException e) {
expected = e;
}
assertNotNull(expected);
expected = null;
try {
Sequence.of(new Object(), new Object(), null, new Object());
} catch (IllegalArgumentException e) {
expected = e;
}
assertNotNull(expected);
expected = null;
List<String> list = new ArrayList<String>();
list.add("a");
list.add(null);
list.add("c");
try {
Sequence.of(list);
} catch (IllegalArgumentException e) {
expected = e;
}
assertNotNull(expected);
}
}