/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.runtime.module.deployment.internal.util;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.mule.tck.junit4.AbstractMuleTestCase;
import java.util.Collections;
import java.util.ListIterator;
public class ObservableListTestCase extends AbstractMuleTestCase {
@Rule
public ExpectedException thrown = ExpectedException.none();
// Must be equal to java.util.Collections.REVERSE_THRESHOLD
// Collections#reverse() uses two different algorithms.
private static final int COLLECTIONS_REVERSE_THRESHOLD = 18;
@Test
public void testListIteratorRemove() {
ObservableList<String> list = new ObservableList<String>();
list.add("a");
list.add("b");
ListIterator<String> it = list.listIterator();
it.next();
it.remove();
assertThat(it.hasNext(), is(true));
assertThat(it.nextIndex(), equalTo(0));
}
@Test
public void testListIteratorRemoveWithoutNext() {
thrown.expect(IllegalStateException.class);
ObservableList<String> list = new ObservableList<String>();
list.add("a");
ListIterator<String> it = list.listIterator();
it.remove();
}
@Test
public void testListIteratorSet() {
ObservableList<String> list = new ObservableList<String>();
list.add("a");
ListIterator<String> it = list.listIterator();
String s = it.next();
it.set("A");
assertThat(s, equalTo("a"));
assertThat(list.get(0), equalTo("A"));
}
@Test
public void testListIteratorSetWithoutNext() {
thrown.expect(IllegalStateException.class);
ObservableList<String> list = new ObservableList<String>();
list.add("a");
ListIterator<String> it = list.listIterator();
it.set("A");
}
@Test
public void testReverseObservableListWith18Elements() {
ObservableList<Integer> list = createObservableList(COLLECTIONS_REVERSE_THRESHOLD);
Collections.reverse(list);
assertThat(list.get(0), equalTo(COLLECTIONS_REVERSE_THRESHOLD - 1));
assertThat(list.get(COLLECTIONS_REVERSE_THRESHOLD - 1), equalTo(0));
}
@Test
public void testReverseObservableListWith17Elements() {
ObservableList<Integer> list = createObservableList(COLLECTIONS_REVERSE_THRESHOLD - 1);
Collections.reverse(list);
assertThat(list.get(0), equalTo(COLLECTIONS_REVERSE_THRESHOLD - 2));
assertThat(list.get(COLLECTIONS_REVERSE_THRESHOLD - 2), equalTo(0));
}
private ObservableList<Integer> createObservableList(int n) {
ObservableList<Integer> list = new ObservableList<Integer>();
for (int i = 0; i < n; i++) {
list.add(i);
}
return list;
}
}