package be.selckin.swu.pmodel; import be.selckin.swu.pmodel.PModel.PModeler; import be.selckin.swu.pmodel.test.Bar; import be.selckin.swu.pmodel.test.Foo; import be.selckin.swu.pmodel.test.SomeClass; import be.selckin.swu.pmodel.test.SomeClass.Inner; import be.selckin.swu.pmodel.test.SomeClass.InnerStatic; import org.apache.wicket.WicketRuntimeException; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.util.tester.WicketTester; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @Test public class PModelTest { private WicketTester wicketTester; @BeforeClass public void setUp() { wicketTester = new WicketTester(); } @AfterClass public void tearDown() { wicketTester.destroy(); } public void test1() { SomeClass someClass = new SomeClass(); IModel<SomeClass> root = Model.of(someClass); IModel<String> model = PModel.model(PModel.bean(SomeClass.class, root).getString()); someClass.setString("foo"); Assert.assertEquals(model.getObject(), "foo"); model.setObject("bar"); Assert.assertEquals(model.getObject(), "bar"); Assert.assertEquals(someClass.getString(), "bar"); } public void test2() { SomeClass someClass = new SomeClass(); IModel<SomeClass> root = Model.of(someClass); IModel<Float> model = PModel.model(PModel.bean(SomeClass.class, root).getNumber()); someClass.setNumber(5f); Assert.assertEquals(model.getObject(), 5f); model.setObject(10f); Assert.assertEquals(model.getObject(), 10f); Assert.assertEquals(someClass.getNumber(), 10f); } public void test3() { SomeClass someClass = new SomeClass(); IModel<SomeClass> root = Model.of(someClass); IModel<Foo> model = PModel.model(PModel.bean(SomeClass.class, root).getFoo()); Assert.assertEquals(model.getObject(), null); Foo foo = new Foo(8); model.setObject(foo); Assert.assertEquals(model.getObject(), foo); Assert.assertEquals(someClass.getFoo(), foo); } public void testInnerStatic() { SomeClass someClass = new SomeClass(); IModel<SomeClass> root = Model.of(someClass); IModel<InnerStatic> model = PModel.model(PModel.bean(SomeClass.class, root).getInnerStatic()); Assert.assertEquals(model.getObject(), null); InnerStatic innerStatic = new InnerStatic(); model.setObject(innerStatic); Assert.assertEquals(model.getObject(), innerStatic); Assert.assertEquals(someClass.getInnerStatic(), innerStatic); } public void testInner() { SomeClass someClass = new SomeClass(); IModel<SomeClass> root = Model.of(someClass); IModel<Inner> model = PModel.model(PModel.bean(SomeClass.class, root).getInner1()); Assert.assertEquals(model.getObject(), null); Inner inner = someClass.new Inner(); model.setObject(inner); Assert.assertEquals(model.getObject(), inner); Assert.assertEquals(someClass.getInner1(), inner); } @Test(expectedExceptions = WicketRuntimeException.class) public void test4() { SomeClass someClass = new SomeClass(); IModel<SomeClass> root = Model.of(someClass); IModel<Bar> model = PModel.model(PModel.bean(SomeClass.class, root).getFoo().getBar()); Assert.assertEquals(model.getObject(), null); model.setObject(new Bar()); } public void test5() { SomeClass someClass = new SomeClass(); Foo foo = new Foo(7); someClass.setFoo(foo); IModel<SomeClass> root = Model.of(someClass); IModel<Bar> model = PModel.model(PModel.bean(SomeClass.class, root).getFoo().getBar()); Assert.assertEquals(model.getObject(), null); Bar bar = new Bar(); model.setObject(bar); Assert.assertEquals(model.getObject(), bar); Assert.assertEquals(foo.getBar(), bar); } public void test6() { SomeClass someClass = new SomeClass(); Foo foo = new Foo(7); someClass.setFoo(foo); Bar bar = new Bar(); foo.setBar(bar); IModel<SomeClass> root = Model.of(someClass); IModel<Integer> model = PModel.model(PModel.bean(SomeClass.class, root).getFoo().getBar().getMoo()); assertTest6(bar, model); } public void test6er() { SomeClass someClass = new SomeClass(); Foo foo = new Foo(7); someClass.setFoo(foo); Bar bar = new Bar(); foo.setBar(bar); IModel<SomeClass> root = Model.of(someClass); IModel<Integer> model = PModel.model(PModel.modeler(SomeClass.class, root).bean().getFoo().getBar().getMoo()); assertTest6(bar, model); } private void assertTest6(Bar bar, IModel<Integer> model) { Assert.assertEquals(model.getObject(), null); model.setObject(5); Assert.assertEquals(model.getObject(), new Integer(5)); Assert.assertEquals(bar.getMoo(), new Integer(5)); } public void test7() { SomeClass someClass = new SomeClass(); IModel<SomeClass> root = Model.of(someClass); IModel<Boolean> model = PModel.model(PModel.bean(SomeClass.class, root).isEmpty()); asserttest7(someClass, model); } public void test7er() { SomeClass someClass = new SomeClass(); IModel<SomeClass> root = Model.of(someClass); PModeler<SomeClass> modeler = PModel.modeler(SomeClass.class, root); IModel<Boolean> model = PModel.model(modeler.bean().isEmpty()); asserttest7(someClass, model); } private void asserttest7(SomeClass someClass, IModel<Boolean> model) { someClass.setEmpty(true); Assert.assertTrue(model.getObject()); model.setObject(false); Assert.assertFalse(model.getObject()); Assert.assertFalse(someClass.isEmpty()); model.setObject(true); Assert.assertTrue(model.getObject()); Assert.assertTrue(someClass.isEmpty()); } public void testModelr() { SomeClass someClass = new SomeClass(); Foo foo = new Foo(7); someClass.setFoo(foo); Bar bar = new Bar(); foo.setBar(bar); PModeler<SomeClass> modeler = PModel.modeler(SomeClass.class, Model.of(someClass)); IModel<Boolean> model = PModel.model(modeler.bean().isEmpty()); Assert.assertEquals(foo, PModel.model(modeler.bean().getFoo()).getObject()); Assert.assertEquals(new Integer(7), PModel.model(modeler.bean().getFoo().getI()).getObject()); Assert.assertEquals(bar, PModel.model(modeler.bean().getFoo().getBar()).getObject()); } }