package testapp.endpoint;
import act.app.App;
import act.controller.Controller;
import org.osgl.$;
import org.osgl.exception.UnexpectedException;
import org.osgl.exception.UnexpectedNoSuchMethodException;
import org.osgl.inject.InjectException;
import org.osgl.inject.Injector;
import org.osgl.mvc.annotation.GetAction;
import testapp.sbean.*;
@Controller("/sbean")
public class SimpleBeanTestBed extends Controller.Util {
@GetAction("def_const/sbean_no_def_const")
public void itShallCreateDefaultConstructorForSimpleBeanWithoutDefaultConstructor(App app) {
app.getInstance(SimpleBeanWithoutDefaultConstructor.class);
}
@GetAction("def_const/nsbean_no_def_const")
public void itShallNotCreateDefaultConstructorForNonSimpleBeanWithoutDefaultConstructor(App app) {
try {
app.getInstance(NotSimpleBeanWithoutDefaultConstructor.class);
throw new UnexpectedException();
} catch (InjectException e) {
// this is correct behavior ignore it
}
}
@GetAction("def_const/sbean_def_const")
public void itShallNotCreateDefaultConstructorForSimpleBeanWithDefaultConstructor(App app) {
app.getInstance(SimpleBeanWithDefaultConstructor.class);
}
@GetAction("def_const/nsbean_def_const")
public void itShallNotCreateDefaultConstructorForNonSimpleBeanWithDefaultConstructor(App app) {
app.getInstance(NotSimpleBeanWithDefaultConstructor.class);
}
@GetAction("def_const/dsbean_no_def_const")
public void itShallCreateDefaultConstructorForDerivedSimpleBeanWithoutDefaultConstructor(App app) {
app.getInstance(DerivedSimpleBean.class);
}
@GetAction("getter/create")
public void itShallCreateGetterForProperty(App app) {
SimpleBeanWithoutDefaultConstructor bean = new SimpleBeanWithoutDefaultConstructor("foo");
if (!"foo".equals($.invokeVirtual(bean, "getPropertyWithoutGetter"))){
throw new UnexpectedException();
};
}
@GetAction("getter/create_nsbean")
public void itShallNotCreateGetterForNonSbean() {
NotSimpleBeanWithoutDefaultConstructor bean = new NotSimpleBeanWithoutDefaultConstructor("foo");
try {
$.invokeVirtual(bean, "getPropertyWithoutGetter");
throw new UnexpectedException();
} catch (UnexpectedNoSuchMethodException e) {
if (!"foo".equals(bean.propertyWithoutGetter)) {
throw new UnexpectedException();
};
}
}
@GetAction("getter/field_read")
public void itShallTurnFieldReadIntoGetterForSBean() {
SimpleBeanWithoutDefaultConstructor bean = new SimpleBeanWithoutDefaultConstructor("foo");
bean.setMagicNumber(2);
if (4 != bean.magicNumber) {
throw new UnexpectedException();
}
}
@GetAction("getter/boolean_getter")
public void checkBooleanPropertyGetter() {
SimpleBeanWithoutDefaultConstructor bean = new SimpleBeanWithoutDefaultConstructor("foo");
if (bean.active) {
throw new UnexpectedException();
}
}
@GetAction("getter/boolean_getter_exists")
public void itShallNotGenerateGetterForBooleanPropertyIfAlreadyExists() {
SimpleBeanWithoutDefaultConstructor bean = new SimpleBeanWithoutDefaultConstructor("foo");
if (!bean.magicFlag) {
throw new UnexpectedException();
}
}
@GetAction("setter/boolean_setter_exists")
public void itShallNotGenerateSetterForBooleanPropertyIfAlreadyExists() {
DerivedSimpleBean bean = new DerivedSimpleBean("foo");
bean.weirdFlag = false;
if (!bean.weirdFlag) {
throw new UnexpectedException();
}
}
@GetAction("intf_extends_sbean")
public void itShallTreatClassAsSimpleBeanIfItImplementsInterfaceExtendsSimpleBean(App app) {
app.getInstance(SimpleModel.SomeModel.class);
}
}