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); } }