/*
* Copyright 2014 Goldman Sachs.
*
* 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 com.gs.collections.impl;
import java.util.Collections;
import com.gs.collections.api.RichIterable;
import com.gs.collections.api.partition.PartitionIterable;
import com.gs.collections.impl.block.factory.Functions;
import com.gs.collections.impl.factory.Lists;
import com.gs.collections.impl.multimap.list.FastListMultimap;
import com.gs.collections.impl.test.Verify;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
/**
* JUnit test for {@link UnmodifiableRichIterable}.
*/
public class UnmodifiableRichIterableTest extends AbstractRichIterableTestCase
{
private static final String METALLICA = "Metallica";
private static final String BON_JOVI = "Bon Jovi";
private static final String EUROPE = "Europe";
private static final String SCORPIONS = "Scorpions";
private static final String[] EMPTY_STRING_ARRAY = new String[0];
private RichIterable<String> mutableCollection;
private RichIterable<String> unmodifiableCollection;
@Override
protected <T> RichIterable<T> newWith(T... elements)
{
return UnmodifiableRichIterable.of(Lists.mutable.of(elements));
}
@Before
public void setUp()
{
this.mutableCollection = Lists.mutable.of(METALLICA, BON_JOVI, EUROPE, SCORPIONS);
this.unmodifiableCollection = UnmodifiableRichIterable.of(this.mutableCollection);
}
@Test
public void testDelegatingMethods()
{
Assert.assertTrue(this.mutableCollection.notEmpty());
Assert.assertTrue(this.unmodifiableCollection.notEmpty());
Assert.assertFalse(this.mutableCollection.isEmpty());
Assert.assertFalse(this.unmodifiableCollection.isEmpty());
Verify.assertIterableSize(this.mutableCollection.size(), this.unmodifiableCollection);
Assert.assertEquals(this.mutableCollection.getFirst(), this.unmodifiableCollection.getFirst());
Assert.assertEquals(this.mutableCollection.getLast(), this.unmodifiableCollection.getLast());
}
@Test
public void converters()
{
Assert.assertEquals(
this.mutableCollection.toBag(),
this.unmodifiableCollection.toBag());
Assert.assertEquals(
this.mutableCollection.asLazy().toBag(),
this.unmodifiableCollection.asLazy().toBag());
Assert.assertArrayEquals(
this.mutableCollection.toArray(),
this.unmodifiableCollection.toArray());
Assert.assertArrayEquals(
this.mutableCollection.toArray(EMPTY_STRING_ARRAY),
this.unmodifiableCollection.toArray(EMPTY_STRING_ARRAY));
Assert.assertEquals(this.mutableCollection.toList(), this.unmodifiableCollection.toList());
Verify.assertListsEqual(Lists.mutable.of(BON_JOVI, EUROPE, METALLICA, SCORPIONS),
this.unmodifiableCollection
.toSortedList());
Verify.assertListsEqual(Lists.mutable.of(SCORPIONS, METALLICA, EUROPE, BON_JOVI),
this.unmodifiableCollection
.toSortedList(Collections.reverseOrder()));
Verify.assertListsEqual(Lists.mutable.of(BON_JOVI, EUROPE, METALLICA, SCORPIONS),
this.unmodifiableCollection
.toSortedListBy(Functions.getStringPassThru()));
Verify.assertSize(4, this.unmodifiableCollection.toSet());
Verify.assertSize(4, this.unmodifiableCollection.toMap(Functions.getStringPassThru(), Functions.getStringPassThru()));
}
@Test(expected = IllegalArgumentException.class)
public void nullCheck()
{
UnmodifiableRichIterable.of(null);
}
@Test
@Override
public void equalsAndHashCode()
{
Assert.assertNotEquals(this.newWith(1, 2, 3).hashCode(), this.newWith(1, 2, 3).hashCode());
Assert.assertNotEquals(this.newWith(1, 2, 3), this.newWith(1, 2, 3));
}
@Test
@Override
public void partition()
{
PartitionIterable<String> partition = this.mutableCollection.partition(ignored -> true);
PartitionIterable<String> unmodifiablePartition = this.unmodifiableCollection.partition(ignored -> true);
Assert.assertEquals(partition.getSelected(), unmodifiablePartition.getSelected());
Assert.assertEquals(partition.getRejected(), unmodifiablePartition.getRejected());
}
@Test
@Override
public void partitionWith()
{
PartitionIterable<String> partition = this.mutableCollection.partitionWith((ignored1, ignored2) -> true, null);
PartitionIterable<String> unmodifiablePartition = this.unmodifiableCollection.partitionWith((ignored1, ignored2) -> true, null);
Assert.assertEquals(partition.getSelected(), unmodifiablePartition.getSelected());
Assert.assertEquals(partition.getRejected(), unmodifiablePartition.getRejected());
}
@Test
@Override
public void groupBy()
{
Assert.assertEquals(this.mutableCollection.groupBy(Functions.getStringPassThru()), this.unmodifiableCollection.groupBy(Functions.getStringPassThru()));
Assert.assertEquals(this.mutableCollection.groupBy(Functions.getStringPassThru(), FastListMultimap.<String, String>newMultimap()), this.unmodifiableCollection.groupBy(Functions.getStringPassThru(), FastListMultimap.<String, String>newMultimap()));
}
}