/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2011, Open Source Geospatial Foundation (OSGeo)
*
* This file is hereby placed into the Public Domain. This means anyone is
* free to do whatever they wish with this file. Use it well and enjoy!
*/
package org.geotools.feature;
import org.geotools.ExceptionChecker;
import org.junit.Assert;
import org.junit.Before;
import org.junit.After;
import org.junit.Test;
import org.opengis.feature.Attribute;
public class AttributeBuilderTest {
private AttributeBuilder builder;
@Before
public void setUp() {
this.builder = new AttributeBuilder(new LenientFeatureFactoryImpl());
}
@After
public void tearDown() {
this.builder = null;
}
@Test
public void setType_validType_descriptorIsSetToNull() {
// Act
builder.setType(FakeTypes.ANYSIMPLETYPE_TYPE);
// Assert
Assert.assertNull(builder.getDescriptor());
}
@Test
public void setDescriptor_validDescriptor_typeIsSetToDescriptorsType() {
// Act
builder.setDescriptor(FakeTypes.Mine.mineNAME_DESCRIPTOR);
// Assert
Assert.assertSame(FakeTypes.Mine.mineNAME_DESCRIPTOR.getType(),
builder.getType());
}
@Test
public void add_validArguments_returnsAttributeImpl() {
// Arrange
builder.setType(FakeTypes.Mine.MINENAMETYPE_TYPE);
// Act
Attribute mineName = builder.add("test_id", "Sharlston Colliery",
FakeTypes.Mine.NAME_mineName);
// Assert
Assert.assertEquals(
"AttributeImpl:mineName<string id=test_id>=Sharlston Colliery",
mineName.toString());
}
@Test
public void add_validArguments_attributeIsAddedToProperties() {
// Arrange
builder.setType(FakeTypes.Mine.MINENAMETYPE_TYPE);
// Act
Attribute mineName = builder.add("test_id", "Sharlston Colliery",
FakeTypes.Mine.NAME_mineName);
// Assert
Assert.assertTrue(builder.getProperties().contains(mineName));
}
@Test(expected = IllegalArgumentException.class)
public void add_invalidName_throwsIllegalArgumentException()
throws Exception {
// Arrange
builder.setType(FakeTypes.Mine.MINENAMETYPE_TYPE);
// Act
try {
builder.add("test_id", "Sharlston Colliery", new NameImpl(
FakeTypes.Mine.MINE_NAMESPACE, "INVALID_NAME")); // Intentionally
// invalid
// name.
} catch (IllegalArgumentException iae) {
ExceptionChecker
.assertExceptionMessage(
iae,
"Could not locate attribute: urn:org:example:INVALID_NAME in type: urn:org:example:MineNameType");
}
}
@Test
public void build_typeIsMineNameTypeAndAddedDataIsValid_buildsAComplexAttributeImpl() {
// Arrange
builder.setType(FakeTypes.Mine.MINENAMETYPE_TYPE);
builder.add("test_id 1", true, FakeTypes.Mine.NAME_isPreferred);
builder.add("test_id", "Sharlston Colliery",
FakeTypes.Mine.NAME_mineName);
// Act
Attribute MineName = builder.build();
// Assert
Assert.assertEquals(
"ComplexAttributeImpl:MineNameType=[AttributeImpl:isPreferred<boolean id=test_id 1>=true, AttributeImpl:mineName<string id=test_id>=Sharlston Colliery]",
MineName.toString());
}
}