package org.constretto.internal;
import org.constretto.ConstrettoBuilder;
import org.constretto.ConstrettoConfiguration;
import org.constretto.annotation.Configure;
import org.constretto.model.Resource;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
/**
* @author <a href="mailto:torarnek@pvv.org">Tor Arne Kvaløy</a>
*/
public class MethodAnnotationSubClassTest {
ConstrettoConfiguration config;
@Before
public void before() {
config = new ConstrettoBuilder()
.createPropertiesStore()
.addResource(Resource.create("classpath:subClassData.properties"))
.done()
.getConfiguration();
}
@Test
public void testSubClass() {
SubClazz subClazz = new SubClazz();
config.on(subClazz);
Assert.assertEquals("value", subClazz.value);
Assert.assertEquals("sub value", subClazz.subValue);
}
@Test
public void testSubSubClass() {
SubSubClazz subSubClazz = new SubSubClazz();
config.on(subSubClazz);
Assert.assertEquals("value", subSubClazz.value);
Assert.assertEquals("sub value", subSubClazz.subValue);
Assert.assertEquals("sub sub value", subSubClazz.subSubValue);
}
@Test
public void checkThatDefaultMethodIsNotSet() {
SubSubClazz subSubClazz = new SubSubClazz();
config.on(subSubClazz);
Assert.assertNull(subSubClazz.defaultMethodValue);
}
@Test
public void checkThatPrivateMethodIsNotSet() throws Exception {
SubSubClazz subSubClazz = new SubSubClazz();
config.on(subSubClazz);
Assert.assertNull(subSubClazz.privateMethodValue);
}
class Clazz {
public String value;
public String defaultMethodValue;
public String privateMethodValue;
@Configure
public void setValue(String value) {
this.value = value;
}
@Configure
void setDefaultMethodValue(String defaultMethodValue) {
this.defaultMethodValue = defaultMethodValue;
}
@Configure
private void setPrivateMethodValue(String privateMethodValue) {
this.privateMethodValue = privateMethodValue;
}
}
class SubClazz extends Clazz {
public String subValue;
@Configure
public void setSubValue(String subValue) {
this.subValue = subValue;
}
}
class SubSubClazz extends SubClazz {
public String subSubValue;
@Configure
public void setSubSubValue(String subSubValue) {
this.subSubValue = subSubValue;
}
}
}