package org.rapidbeans.core.basic; import java.io.File; import java.math.BigDecimal; import java.net.MalformedURLException; import java.net.URL; import java.text.DateFormat; import java.text.ParseException; import java.util.Arrays; import java.util.List; import java.util.Locale; import org.junit.Assert; import org.junit.Test; import org.rapidbeans.core.common.ReadonlyListCollection; import org.rapidbeans.core.exception.ValidationException; import org.rapidbeans.core.type.TypeRapidEnum; import org.rapidbeans.core.util.Version; import org.rapidbeans.domain.math.Length; import org.rapidbeans.domain.math.UnitLength; import org.rapidbeans.domain.org.Sex; import org.rapidbeans.test.Lang; import org.rapidbeans.test.TestBean; /** * Unit Test for domain class TestBean (strict implementation). * * @author Martin Bluemel */ public class TestBeanStrictTest { /** * Date formatter. */ static final DateFormat DFDATE = DateFormat.getDateInstance( DateFormat.MEDIUM, Locale.GERMAN); /** * Date formatter. */ static final DateFormat DFTIME = DateFormat.getDateTimeInstance( DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.GERMAN); /** * Date formatter. */ static final DateFormat DFTIMELONG = DateFormat.getDateTimeInstance( DateFormat.MEDIUM, DateFormat.LONG, Locale.GERMAN); @Test public void testStringProperty() throws SecurityException, NoSuchFieldException, ParseException { TestBean bean = new TestBean(); Assert.assertEquals("Ismaning", bean.getCity()); bean.setCity("Mannheim"); Assert.assertEquals("Mannheim", bean.getCity()); } @Test(expected = ValidationException.class) public void testStringPropertyInvalid() { TestBean bean = new TestBean(); bean.setEmail("xyz"); } @Test public void testDateProperty() throws SecurityException, NoSuchFieldException, ParseException { TestBean bean = new TestBean(); Assert.assertEquals(DFDATE.parse("14.10.1964"), bean.getDateofbirth()); bean.setDateofbirth(DFDATE.parse("15.10.1964")); Assert.assertEquals(DFDATE.parse("15.10.1964"), bean.getDateofbirth()); } @Test(expected = ValidationException.class) public void testDatePropertyInvalid() throws ParseException { TestBean bean = new TestBean(); bean.setDateofbirth(DFDATE.parse("14.10.1700")); } @Test public void testBooleanProperty() throws SecurityException, NoSuchFieldException, ParseException { TestBean bean = new TestBean(); Assert.assertEquals(true, bean.getMarried()); bean.setMarried(false); Assert.assertEquals(false, bean.getMarried()); } @Test(expected = ValidationException.class) public void testBooleanPropertyInvalid() throws ParseException { TestBean bean = new TestBean(); bean.setPropValue("married", null); } @Test public void testIntegerProperty() throws SecurityException, NoSuchFieldException, ParseException { TestBean bean = new TestBean(); Assert.assertEquals(43, bean.getShoesize()); bean.setShoesize(40); Assert.assertEquals(40, bean.getShoesize()); } @Test(expected = ValidationException.class) public void testIntegerPropertyInvalid() throws SecurityException, NoSuchFieldException, ParseException { TestBean bean = new TestBean(); Assert.assertEquals(43, bean.getShoesize()); bean.setShoesize(5); } @Test public void testChoicePropertySingle() { TestBean bean = new TestBean(); Assert.assertEquals(Sex.male, bean.getSex()); bean.setSex(Sex.female); Assert.assertEquals(Sex.female, bean.getSex()); } @Test public void testChoicePropertyMultiple() { TypeRapidEnum tlang = TypeRapidEnum.forName("org.rapidbeans.test.Lang"); TestBean bean = new TestBean(); assertListsEqual(Arrays.asList(new RapidEnum[] { tlang.elementOf("german"), tlang.elementOf("english"), tlang.elementOf("french"), }), bean.getLanguages()); assertListsEqual(Arrays.asList(new RapidEnum[] { Lang.german, Lang.english, Lang.french }), bean.getLanguages()); bean.setLanguages(Arrays.asList(new Lang[] { Lang.chinese, Lang.spanish })); assertListsEqual(Arrays.asList(new RapidEnum[] { Lang.chinese, Lang.spanish }), bean.getLanguages()); } @Test public void testFileProperty() { TestBean bean = new TestBean(); Assert.assertEquals(new File("."), bean.getHomedir()); bean.setHomedir(new File(System.getProperty("user.dir"))); Assert.assertEquals(new File(System.getProperty("user.dir")), bean.getHomedir()); } @Test(expected = ValidationException.class) public void testFilePropertyInvalid() { TestBean bean = new TestBean(); Assert.assertEquals(new File("."), bean.getHomedir()); bean.setHomedir(new File("pom.xml")); } @Test public void testQuantityProperty() { TestBean bean = new TestBean(); Assert.assertEquals(new Length(new BigDecimal("1.73"), UnitLength.m), bean.getHeight()); bean.setHeight(new Length(new BigDecimal("73"), UnitLength.cm)); Assert.assertEquals(new Length(new BigDecimal("73"), UnitLength.cm), bean.getHeight()); } @Test(expected = ValidationException.class) public void testQuantityInvalid() { TestBean bean = new TestBean(); bean.setHeight(new Length(new BigDecimal("3.05"), UnitLength.m)); } @Test public void testVersionProperty() { TestBean bean = new TestBean(); Assert.assertEquals(new Version("2.0"), bean.getVersion()); bean.setVersion(new Version("3.0.0")); Assert.assertEquals(new Version("3.0.0"), bean.getVersion()); } @Test(expected = ValidationException.class) public void testVersionInvalid() { TestBean bean = new TestBean(); bean.setVersion(null); } @Test public void testUrlProperty() throws MalformedURLException { TestBean bean = new TestBean(); Assert.assertEquals(new URL("http://www.rapidbeans.org"), bean.getWebaddress()); bean.setWebaddress(new URL("http://www.martin-bluemel.de")); Assert.assertEquals(new URL("http://www.martin-bluemel.de"), bean.getWebaddress()); } @Test(expected = ValidationException.class) public void testUrlInvalid() { TestBean bean = new TestBean(); bean.setWebaddress(null); } @Test public void testAssociationPropertySingle() { TestBean father = new TestBean(); TestBean son = new TestBean(); Assert.assertNull(son.getFather()); Assert.assertNull(father.getChildren()); son.setFather(father); Assert.assertSame(father, son.getFather()); Assert.assertEquals(1, father.getChildren().size()); Assert.assertSame(son, father.getChildren().get(0)); } @Test @SuppressWarnings("unchecked") public void testAssociationPropertySingleGenericAccess() { TestBean father = new TestBean(); TestBean son = new TestBean(); Assert.assertNull(son.getPropValue("father")); Assert.assertNull(father.getPropValue("children")); son.setPropValue("father", father); Assert.assertSame(father, son.getFather()); Assert.assertEquals(1, ((List<TestBean>) father.getPropValue("children")).size()); Assert.assertSame(son, ((List<TestBean>) father.getPropValue("children")).get(0)); } @Test public void testAssociationPropertyMultiple() { TestBean father = new TestBean(); Assert.assertNull(father.getChildren()); TestBean son1 = new TestBean(); Assert.assertNull(son1.getFather()); TestBean son2 = new TestBean(); Assert.assertNull(son2.getFather()); TestBean son3 = new TestBean(); Assert.assertNull(son3.getFather()); TestBean son4 = new TestBean(); Assert.assertNull(son4.getFather()); father.setChildren(Arrays.asList(new TestBean[] { son1, son2, son3, son4 })); Assert.assertEquals(4, father.getChildren().size()); Assert.assertSame(son1, father.getChildren().get(0)); Assert.assertSame(son2, father.getChildren().get(1)); Assert.assertSame(son3, father.getChildren().get(2)); Assert.assertSame(son4, father.getChildren().get(3)); } @SuppressWarnings("unchecked") @Test public void testAssociationPropertyMultipleGenericAcces() { TestBean father = new TestBean(); Assert.assertEquals(null, father.getPropValue("children")); TestBean son1 = new TestBean(); Assert.assertNull(son1.getPropValue("father")); TestBean son2 = new TestBean(); Assert.assertNull(son2.getPropValue("father")); TestBean son3 = new TestBean(); Assert.assertNull(son3.getPropValue("father")); TestBean son4 = new TestBean(); Assert.assertNull(son4.getPropValue("father")); father.setPropValue("children", Arrays.asList(new TestBean[] { son1, son2, son3, son4 })); Assert.assertEquals(4, ((ReadonlyListCollection<TestBean>) father.getPropValue("children")).size()); Assert.assertSame(son1, ((ReadonlyListCollection<TestBean>) father.getPropValue("children")).get(0)); Assert.assertSame(son2, ((ReadonlyListCollection<TestBean>) father.getPropValue("children")).get(1)); Assert.assertSame(son3, ((ReadonlyListCollection<TestBean>) father.getPropValue("children")).get(2)); Assert.assertSame(son4, ((ReadonlyListCollection<TestBean>) father.getPropValue("children")).get(3)); } @Test(expected = ValidationException.class) public void testAssociationPropertyMultipleInvalid() { TestBean bean = new TestBean(); bean.setChildren(Arrays.asList(new TestBean[] { new TestBean(), new TestBean(), new TestBean(), new TestBean(), new TestBean() })); } @Test(expected = ValidationException.class) public void testAssociationPropertyMultipleInvalidGenericAcces() { TestBean bean = new TestBean(); bean.setPropValue("children", Arrays.asList(new TestBean[] { new TestBean(), new TestBean(), new TestBean(), new TestBean(), new TestBean() })); } private void assertListsEqual(List<?> list1, List<?> list2) { int len = list1.size(); if (len != list2.size()) { Assert.fail("Lists have diferent sizes"); } for (int i = 0; i < len; i++) { if (!list1.get(i).equals(list2.get(i))) { Assert.fail("List elements [" + Integer.toString(i) + "] \"" + list1.get(i).toString() + "\" and \"" + list2.get(i).toString() + "\" differ"); } } } }