/*
* Copyright 2008-2017 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.codehaus.griffon.compile.core.processor.type;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.kordamp.jipsy.processor.testutils.NoOutputTestBase;
import org.kordamp.jipsy.processor.testutils.TestInitializer;
import org.kordamp.jipsy.processor.testutils.TestLogger;
import java.util.Collection;
import java.util.HashMap;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class TypeCollectorTest extends NoOutputTestBase {
private TestInitializer initializer;
private TestLogger logger;
private TypeCollector collector;
@Before
public void loadFrameWork() {
HashMap<String, String> map = new HashMap<String, String>();
map.put("type1", "provider1\n");
map.put("type2", "provider1\nprovider2\n");
map.put("type3", "provider1\nprovider3\n");
initializer = new TestInitializer(map);
logger = new TestLogger();
collector = new TypeCollector(initializer, logger);
}
@Test(expected = NullPointerException.class)
public void testGetTypeNull() {
collector.getType(null);
}
@Test
public void testGetTypeExisting() {
assertEquals(0, collector.types().size());
collector.getType("type");
assertEquals(1, collector.types().size());
logger.reset();
Type type = collector.getType("type");
assertTrue(logger.records().isEmpty());
assertEquals("type", type.getName());
assertEquals(1, collector.types().size());
}
@Test
public void testGetTypeNew() {
assertEquals(0, collector.types().size());
logger.reset();
assertEquals("type", collector.getType("type").getName());
assertEquals(1, logger.records().size());
assertEquals(1, collector.types().size());
}
@Test
public void testGetTypeNewWithInitializer() {
assertEquals(0, collector.types().size());
Type type = collector.getType("type1");
assertEquals("type1", type.getName());
assertTrue(type.contains("provider1"));
assertEquals(1, collector.types().size());
}
@Test
public void testGetTypeNewWithBiggerInitializer() {
assertEquals(0, collector.types().size());
Type type = collector.getType("type2");
assertEquals("type2", type.getName());
assertTrue(type.contains("provider1"));
assertTrue(type.contains("provider2"));
assertEquals(1, collector.types().size());
}
@Test
public void testGetTypeNewWithInitializerContainingRemovedElement() {
assertEquals(0, collector.types().size());
collector.removeProvider("provider1");
Type type = collector.getType("type1");
Assert.assertFalse(type.contains("provider1"));
assertEquals(1, collector.types().size());
}
@Test
public void testTypesEmpty() {
Collection<Type> types = collector.types();
assertEquals(0, types.size());
}
@Test
public void testTypesOne() {
Type type = collector.getType("type");
Collection<Type> types = collector.types();
assertEquals(1, types.size());
assertTrue(types.contains(type));
}
@Test
public void testTypesMore() {
Type type1 = collector.getType("type1");
Type type2 = collector.getType("type2");
Collection<Type> types = collector.types();
assertEquals(2, types.size());
assertTrue(types.contains(type1));
assertTrue(types.contains(type2));
}
@Test
public void testTypesDuplicate() {
Type type1 = collector.getType("type1");
Type type2 = collector.getType("type1");
assertTrue(type1 == type2);
Collection<Type> types = collector.types();
assertEquals(1, types.size());
assertTrue(types.contains(type1));
}
@Test(expected = NullPointerException.class)
public void testRemoveProviderNull() {
collector.removeProvider(null);
}
@Test
public void testRemoveProviderWhenEmpty() {
collector.removeProvider("provider1");
assertEquals(1, logger.records().size());
assertEquals("Removing provider1\n", logger.getFileContent());
}
@Test
public void testRemoveProviderWhenInNotOneType() {
collector.getType("type1");
logger.reset();
collector.removeProvider("provider2");
assertEquals(1, logger.records().size());
}
@Test
public void testRemoveProviderWhenInOneType() {
collector.getType("type1");
logger.reset();
collector.removeProvider("provider1");
assertEquals(2, logger.records().size());
}
@Test
public void testRemoveProviderWhenInTwoTypes() {
collector.getType("type1");
collector.getType("type2");
logger.reset();
collector.removeProvider("provider1");
assertEquals(3, logger.records().size());
}
@Test
public void testRemoveProviderWhenInSomeTypes() {
collector.getType("type1");
collector.getType("type2");
collector.getType("type3");
logger.reset();
collector.removeProvider("provider2");
assertEquals(2, logger.records().size());
}
@Test
public void testToStringEmpty() {
collector.toString();
}
@Test
public void testToStringNonExistingType() {
collector.getType("nonExistingType");
collector.toString();
}
@Test
public void testToStringExistingType() {
collector.getType("type1");
collector.toString();
}
@Test
public void testToStringMoreExistingTypes() {
collector.getType("type1");
collector.getType("type2");
collector.toString();
}
}