You can subscribe to this list here.
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(12) |
Nov
(2) |
Dec
(15) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2009 |
Jan
(7) |
Feb
(2) |
Mar
|
Apr
(22) |
May
|
Jun
|
Jul
(1) |
Aug
(29) |
Sep
(17) |
Oct
(4) |
Nov
|
Dec
(19) |
2010 |
Jan
|
Feb
(9) |
Mar
(2) |
Apr
(34) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2011 |
Jan
(2) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2012 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
(2) |
Oct
|
Nov
|
Dec
|
2013 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(25) |
Nov
(22) |
Dec
(3) |
2014 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <iro...@us...> - 2009-04-08 03:25:22
|
Revision: 114 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=114&view=rev Author: iroberts Date: 2009-04-08 03:25:21 +0000 (Wed, 08 Apr 2009) Log Message: ----------- fix scm url Modified Paths: -------------- trunk/Pojomatic/pom.xml Modified: trunk/Pojomatic/pom.xml =================================================================== --- trunk/Pojomatic/pom.xml 2009-04-08 03:22:19 UTC (rev 113) +++ trunk/Pojomatic/pom.xml 2009-04-08 03:25:21 UTC (rev 114) @@ -12,9 +12,9 @@ <url>http://www.pojomatic.org</url> <inceptionYear>2008</inceptionYear> <scm> - <connection>scm:svn:https://pojomatic.svn.sourceforge.net/svnroot/pojomatic</connection> - <developerConnection>scm:svn:https://pojomatic.svn.sourceforge.net/svnroot/pojomatic</developerConnection> - <url>https://pojomatic.svn.sourceforge.net/svnroot/pojomatic</url> + <connection>scm:svn:https://pojomatic.svn.sourceforge.net/svnroot/pojomatic/trunk/Pojomatic</connection> + <developerConnection>scm:svn:https://pojomatic.svn.sourceforge.net/svnroot/pojomatic/trunk/Pojomatic</developerConnection> + <url>https://pojomatic.svn.sourceforge.net/svnroot/pojomatic/trunk/Pojomatic</url> </scm> <developers> <developer> @@ -161,4 +161,4 @@ <scope>test</scope> </dependency> </dependencies> -</project> \ No newline at end of file +</project> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <iro...@us...> - 2009-04-08 03:22:33
|
Revision: 113 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=113&view=rev Author: iroberts Date: 2009-04-08 03:22:19 +0000 (Wed, 08 Apr 2009) Log Message: ----------- bad release attempt Removed Paths: ------------- tags/pojomatic-1.0-RC2/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <iro...@us...> - 2009-04-07 22:26:48
|
Revision: 112 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=112&view=rev Author: iroberts Date: 2009-04-07 22:26:42 +0000 (Tue, 07 Apr 2009) Log Message: ----------- [maven-release-plugin] prepare for next development iteration Modified Paths: -------------- trunk/Pojomatic/pom.xml Modified: trunk/Pojomatic/pom.xml =================================================================== --- trunk/Pojomatic/pom.xml 2009-04-07 22:26:35 UTC (rev 111) +++ trunk/Pojomatic/pom.xml 2009-04-07 22:26:42 UTC (rev 112) @@ -3,7 +3,7 @@ <groupId>org.pojomatic</groupId> <artifactId>pojomatic</artifactId> <packaging>jar</packaging> - <version>1.0-RC2</version> + <version>trunk-SNAPSHOT</version> <name>Pojomatic</name> <description> Automatically provides configurable implementations of the @@ -12,9 +12,9 @@ <url>http://www.pojomatic.org</url> <inceptionYear>2008</inceptionYear> <scm> - <connection>scm:svn:https://pojomatic.svn.sourceforge.net/svnroot/pojomatic/tags/pojomatic-1.0-RC2</connection> - <developerConnection>scm:svn:https://pojomatic.svn.sourceforge.net/svnroot/pojomatic/tags/pojomatic-1.0-RC2</developerConnection> - <url>https://pojomatic.svn.sourceforge.net/svnroot/pojomatic/tags/pojomatic-1.0-RC2</url> + <connection>scm:svn:https://pojomatic.svn.sourceforge.net/svnroot/pojomatic</connection> + <developerConnection>scm:svn:https://pojomatic.svn.sourceforge.net/svnroot/pojomatic</developerConnection> + <url>https://pojomatic.svn.sourceforge.net/svnroot/pojomatic</url> </scm> <developers> <developer> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <iro...@us...> - 2009-04-07 22:26:41
|
Revision: 111 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=111&view=rev Author: iroberts Date: 2009-04-07 22:26:35 +0000 (Tue, 07 Apr 2009) Log Message: ----------- [maven-scm] copy for tag pojomatic-1.0-RC2 Added Paths: ----------- tags/pojomatic-1.0-RC2/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <iro...@us...> - 2009-04-07 22:26:28
|
Revision: 110 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=110&view=rev Author: iroberts Date: 2009-04-07 22:26:27 +0000 (Tue, 07 Apr 2009) Log Message: ----------- [maven-release-plugin] prepare release pojomatic-1.0-RC2 Modified Paths: -------------- trunk/Pojomatic/pom.xml Modified: trunk/Pojomatic/pom.xml =================================================================== --- trunk/Pojomatic/pom.xml 2009-04-07 22:23:44 UTC (rev 109) +++ trunk/Pojomatic/pom.xml 2009-04-07 22:26:27 UTC (rev 110) @@ -3,7 +3,7 @@ <groupId>org.pojomatic</groupId> <artifactId>pojomatic</artifactId> <packaging>jar</packaging> - <version>SNAPSHOT</version> + <version>1.0-RC2</version> <name>Pojomatic</name> <description> Automatically provides configurable implementations of the @@ -12,9 +12,9 @@ <url>http://www.pojomatic.org</url> <inceptionYear>2008</inceptionYear> <scm> - <connection>scm:svn:https://pojomatic.svn.sourceforge.net/svnroot/pojomatic</connection> - <developerConnection>scm:svn:https://pojomatic.svn.sourceforge.net/svnroot/pojomatic</developerConnection> - <url>https://pojomatic.svn.sourceforge.net/svnroot/pojomatic</url> + <connection>scm:svn:https://pojomatic.svn.sourceforge.net/svnroot/pojomatic/tags/pojomatic-1.0-RC2</connection> + <developerConnection>scm:svn:https://pojomatic.svn.sourceforge.net/svnroot/pojomatic/tags/pojomatic-1.0-RC2</developerConnection> + <url>https://pojomatic.svn.sourceforge.net/svnroot/pojomatic/tags/pojomatic-1.0-RC2</url> </scm> <developers> <developer> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <iro...@us...> - 2009-04-07 22:23:45
|
Revision: 109 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=109&view=rev Author: iroberts Date: 2009-04-07 22:23:44 +0000 (Tue, 07 Apr 2009) Log Message: ----------- rely on latest release plugin Modified Paths: -------------- trunk/Pojomatic/pom.xml Modified: trunk/Pojomatic/pom.xml =================================================================== --- trunk/Pojomatic/pom.xml 2009-04-07 22:18:48 UTC (rev 108) +++ trunk/Pojomatic/pom.xml 2009-04-07 22:23:44 UTC (rev 109) @@ -99,7 +99,13 @@ </excludes> </configuration> </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-release-plugin</artifactId> + <version>2.0-beta-9</version> + </plugin> </plugins> + </build> <reporting> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <iro...@us...> - 2009-04-07 22:18:49
|
Revision: 108 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=108&view=rev Author: iroberts Date: 2009-04-07 22:18:48 +0000 (Tue, 07 Apr 2009) Log Message: ----------- releasing now Modified Paths: -------------- trunk/Pojomatic/src/site/apt/changes.apt Modified: trunk/Pojomatic/src/site/apt/changes.apt =================================================================== --- trunk/Pojomatic/src/site/apt/changes.apt 2009-04-07 20:02:22 UTC (rev 107) +++ trunk/Pojomatic/src/site/apt/changes.apt 2009-04-07 22:18:48 UTC (rev 108) @@ -1,7 +1,7 @@ Changes in Pojomatic ~~~~ -* Release 1.0-RC2 (2009-04-06) +* Release 1.0-RC2 (2009-04-07) ~~~~ * A new method, <<<Pojomatic.diff>>>, will show top-level differences between two instances of a pojomated class. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <iro...@us...> - 2009-04-07 20:02:31
|
Revision: 107 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=107&view=rev Author: iroberts Date: 2009-04-07 20:02:22 +0000 (Tue, 07 Apr 2009) Log Message: ----------- doDiff now checks both arguments for class type. Test this. Modified Paths: -------------- trunk/Pojomatic/src/main/java/org/pojomatic/internal/PojomatorImpl.java trunk/Pojomatic/src/test/java/org/pojomatic/internal/PojomatorImplTest.java Modified: trunk/Pojomatic/src/main/java/org/pojomatic/internal/PojomatorImpl.java =================================================================== --- trunk/Pojomatic/src/main/java/org/pojomatic/internal/PojomatorImpl.java 2009-04-07 19:58:12 UTC (rev 106) +++ trunk/Pojomatic/src/main/java/org/pojomatic/internal/PojomatorImpl.java 2009-04-07 20:02:22 UTC (rev 107) @@ -266,10 +266,8 @@ if (instance == other) { return new PropertyDifferences(Collections.<Difference>emptyList()); } - if (!clazz.isInstance(other)) { - throw new ClassCastException( - "other has type " + other.getClass() + " which is not a subtype of " + clazz); - } + checkClass(instance, "instance"); + checkClass(other, "other"); List<Difference> differences = new ArrayList<Difference>(); for (PropertyElement prop: classProperties.getEqualsProperties()) { final Object instanceValue = prop.getValue(instance); @@ -281,7 +279,15 @@ return new PropertyDifferences(differences); } + private void checkClass(T instance, String label) { + if (!clazz.isInstance(instance)) { + throw new ClassCastException( + label + " has type " + instance.getClass().getName() + + " which is not a subtype of " + clazz.getName()); + } + } + /** * @param instance * @param other Modified: trunk/Pojomatic/src/test/java/org/pojomatic/internal/PojomatorImplTest.java =================================================================== --- trunk/Pojomatic/src/test/java/org/pojomatic/internal/PojomatorImplTest.java 2009-04-07 19:58:12 UTC (rev 106) +++ trunk/Pojomatic/src/test/java/org/pojomatic/internal/PojomatorImplTest.java 2009-04-07 20:02:22 UTC (rev 107) @@ -260,6 +260,34 @@ assertEquals(DifferenceToNull.class, differences.getClass()); } + @Test public void testDiffAgainstWrongType() { + Pojomator<?> pojomator = OBJECT_PAIR_PROPERTY_POJOMATOR; + @SuppressWarnings("unchecked") Pojomator<Object> misCastPojomator = (Pojomator<Object>) pojomator; + try { + misCastPojomator.doDiff(new ObjectPairProperty(1,2), "wrong"); + fail("exception expcected"); + } + catch (ClassCastException e) { + assertEquals( + "other has type java.lang.String which is not a subtype of org.pojomatic.internal.PojomatorImplTest$ObjectPairProperty", + e.getMessage()); + } + } + + @Test public void testDiffWrongType() { + Pojomator<?> pojomator = OBJECT_PAIR_PROPERTY_POJOMATOR; + @SuppressWarnings("unchecked") Pojomator<Object> misCastPojomator = (Pojomator<Object>) pojomator; + try { + misCastPojomator.doDiff("wrong", new ObjectPairProperty(1,2)); + fail("exception expcected"); + } + catch (ClassCastException e) { + assertEquals( + "instance has type java.lang.String which is not a subtype of org.pojomatic.internal.PojomatorImplTest$ObjectPairProperty", + e.getMessage()); + } + } + @Test(expected=IllegalArgumentException.class) public void testNonPojomatedClass() { makePojomatorImpl(String.class); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <iro...@us...> - 2009-04-07 19:58:13
|
Revision: 106 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=106&view=rev Author: iroberts Date: 2009-04-07 19:58:12 +0000 (Tue, 07 Apr 2009) Log Message: ----------- Keep maven and eclipse out of each other's way. Modified Paths: -------------- trunk/Pojomatic/.classpath Modified: trunk/Pojomatic/.classpath =================================================================== --- trunk/Pojomatic/.classpath 2009-04-07 03:52:17 UTC (rev 105) +++ trunk/Pojomatic/.classpath 2009-04-07 19:58:12 UTC (rev 106) @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry including="**/*.java" kind="src" path="src/main/java"/> - <classpathentry including="**/*.java" kind="src" output="target/test-classes" path="src/test/java"/> - <classpathentry kind="con" path="org.devzuz.q.maven.jdt.core.mavenClasspathContainer"/> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> - <classpathentry kind="output" path="target/classes"/> + <classpathentry including="**/*.java" kind="src" path="src/main/java"/> + <classpathentry including="**/*.java" kind="src" path="src/test/java"/> + <classpathentry kind="con" path="org.devzuz.q.maven.jdt.core.mavenClasspathContainer"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> + <classpathentry kind="output" path="bin"/> </classpath> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <iro...@us...> - 2009-04-07 03:52:19
|
Revision: 105 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=105&view=rev Author: iroberts Date: 2009-04-07 03:52:17 +0000 (Tue, 07 Apr 2009) Log Message: ----------- Don't pull in static fields or methods. Modified Paths: -------------- trunk/Pojomatic/src/main/java/org/pojomatic/internal/ClassProperties.java trunk/Pojomatic/src/site/apt/changes.apt trunk/Pojomatic/src/test/java/org/pojomatic/internal/ClassPropertiesTest.java Modified: trunk/Pojomatic/src/main/java/org/pojomatic/internal/ClassProperties.java =================================================================== --- trunk/Pojomatic/src/main/java/org/pojomatic/internal/ClassProperties.java 2009-04-06 17:12:39 UTC (rev 104) +++ trunk/Pojomatic/src/main/java/org/pojomatic/internal/ClassProperties.java 2009-04-07 03:52:17 UTC (rev 105) @@ -1,7 +1,9 @@ package org.pojomatic.internal; import java.lang.reflect.Field; +import java.lang.reflect.Member; import java.lang.reflect.Method; +import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Collection; import java.util.EnumMap; @@ -53,7 +55,9 @@ /* add all fields that are explicitly annotated or auto-detected */ if (propertyPolicy != null || - (autoProperty != null && AutoDetectPolicy.FIELD == autoProperty.autoDetect())) { + (autoProperty != null + && AutoDetectPolicy.FIELD == autoProperty.autoDetect() + && !isStatic(field))) { PropertyField propertyField = new PropertyField(field, getPropertyName(property)); for (PropertyRole role : PropertyFilter.getRoles(propertyPolicy, classPolicy)) { properties.get(role).add(propertyField); @@ -78,7 +82,9 @@ /* add all methods that are explicitly annotated or auto-detected */ if (propertyPolicy != null || - (autoProperty != null && AutoDetectPolicy.METHOD == autoProperty.autoDetect())) { + (autoProperty != null + && AutoDetectPolicy.METHOD == autoProperty.autoDetect() + && !isStatic(method))) { PropertyAccessor propertyAccessor = new PropertyAccessor(method, getPropertyName(property)); for (PropertyRole role : PropertyFilter.getRoles(propertyPolicy, classPolicy)) { @@ -114,6 +120,10 @@ return ACCESSOR_PATTERN.matcher(name).matches(); } + private static boolean isStatic(Member member) { + return Modifier.isStatic(member.getModifiers()); + } + /** * Gets the properties to use for {@link PojomatorImpl#doEquals(Object, Object)}. * @return the properties to use for {@link PojomatorImpl#doEquals(Object, Object)}. Modified: trunk/Pojomatic/src/site/apt/changes.apt =================================================================== --- trunk/Pojomatic/src/site/apt/changes.apt 2009-04-06 17:12:39 UTC (rev 104) +++ trunk/Pojomatic/src/site/apt/changes.apt 2009-04-07 03:52:17 UTC (rev 105) @@ -11,6 +11,9 @@ * Names of properties in the default <<<toString()>>> representation can be overridden via the <<<name>>> attribute on the <<<Property>>> annotation. + + * Static fields and methods are no longer picked up by <<<@AutoProperty>>> + ({{{https://sourceforge.net/tracker/?func=detail&aid=2739467&group_id=239113&atid=1108645}bug 2739467}}) ~~~~ * Release 1.0-RC1 (2009-01-01) ~~~~ Modified: trunk/Pojomatic/src/test/java/org/pojomatic/internal/ClassPropertiesTest.java =================================================================== --- trunk/Pojomatic/src/test/java/org/pojomatic/internal/ClassPropertiesTest.java 2009-04-06 17:12:39 UTC (rev 104) +++ trunk/Pojomatic/src/test/java/org/pojomatic/internal/ClassPropertiesTest.java 2009-04-07 03:52:17 UTC (rev 105) @@ -199,6 +199,9 @@ /* Methods are not auto-detected */ public float getNotDetected() { return 1f; } + + /* static fields are not detected */ + public static String staticField; } public static class MethodPojo { @@ -238,6 +241,10 @@ // some methods we should not grab public void getHello() {} public int getTripple(int arg) { return arg * 3; } + + + /* static fields are not detected */ + public static String getStatic() { return null; } } public static class MethodReturnsVoidPojo { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <iro...@us...> - 2009-04-06 17:12:52
|
Revision: 104 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=104&view=rev Author: iroberts Date: 2009-04-06 17:12:39 +0000 (Mon, 06 Apr 2009) Log Message: ----------- diffity-do-dah, diffity-ey. Modified Paths: -------------- trunk/Pojomatic/src/site/apt/changes.apt Modified: trunk/Pojomatic/src/site/apt/changes.apt =================================================================== --- trunk/Pojomatic/src/site/apt/changes.apt 2009-04-06 16:29:05 UTC (rev 103) +++ trunk/Pojomatic/src/site/apt/changes.apt 2009-04-06 17:12:39 UTC (rev 104) @@ -3,6 +3,9 @@ ~~~~ * Release 1.0-RC2 (2009-04-06) ~~~~ + * A new method, <<<Pojomatic.diff>>>, will show top-level differences between two instances + of a pojomated class. + * The property name derived from a method such as getFoo() is now "foo" instead of "getFoo" in the default <<<toString()>>> representation. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <iro...@us...> - 2009-04-06 16:29:19
|
Revision: 103 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=103&view=rev Author: iroberts Date: 2009-04-06 16:29:05 +0000 (Mon, 06 Apr 2009) Log Message: ----------- String.isEmpty was introduced in 1.6 Modified Paths: -------------- trunk/Pojomatic/src/main/java/org/pojomatic/internal/PropertyAccessor.java trunk/Pojomatic/src/main/java/org/pojomatic/internal/PropertyField.java Modified: trunk/Pojomatic/src/main/java/org/pojomatic/internal/PropertyAccessor.java =================================================================== --- trunk/Pojomatic/src/main/java/org/pojomatic/internal/PropertyAccessor.java 2009-04-06 05:11:58 UTC (rev 102) +++ trunk/Pojomatic/src/main/java/org/pojomatic/internal/PropertyAccessor.java 2009-04-06 16:29:05 UTC (rev 103) @@ -8,7 +8,7 @@ private final static String GET = "get", IS = "is"; public PropertyAccessor(Method method, String name) { - super(method, name.isEmpty() ? getName(method) : name); + super(method, name.length() == 0 ? getName(method) : name); } private static String getName(Method method) { Modified: trunk/Pojomatic/src/main/java/org/pojomatic/internal/PropertyField.java =================================================================== --- trunk/Pojomatic/src/main/java/org/pojomatic/internal/PropertyField.java 2009-04-06 05:11:58 UTC (rev 102) +++ trunk/Pojomatic/src/main/java/org/pojomatic/internal/PropertyField.java 2009-04-06 16:29:05 UTC (rev 103) @@ -4,7 +4,7 @@ public class PropertyField extends AbstractPropertyElement<Field> { public PropertyField(Field propertyField, String name) { - super(propertyField, name.isEmpty() ? propertyField.getName() : name); + super(propertyField, name.length() == 0 ? propertyField.getName() : name); } @Override This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <iro...@us...> - 2009-04-06 05:12:04
|
Revision: 102 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=102&view=rev Author: iroberts Date: 2009-04-06 05:11:58 +0000 (Mon, 06 Apr 2009) Log Message: ----------- include a changes doc Modified Paths: -------------- trunk/Pojomatic/src/site/site.xml Added Paths: ----------- trunk/Pojomatic/src/site/apt/changes.apt Added: trunk/Pojomatic/src/site/apt/changes.apt =================================================================== --- trunk/Pojomatic/src/site/apt/changes.apt (rev 0) +++ trunk/Pojomatic/src/site/apt/changes.apt 2009-04-06 05:11:58 UTC (rev 102) @@ -0,0 +1,14 @@ + +Changes in Pojomatic +~~~~ +* Release 1.0-RC2 (2009-04-06) +~~~~ + * The property name derived from a method such as getFoo() is now "foo" instead of "getFoo" + in the default <<<toString()>>> representation. + + * Names of properties in the default <<<toString()>>> representation can be overridden via the + <<<name>>> attribute on the <<<Property>>> annotation. +~~~~ +* Release 1.0-RC1 (2009-01-01) +~~~~ + * Initial Release Modified: trunk/Pojomatic/src/site/site.xml =================================================================== --- trunk/Pojomatic/src/site/site.xml 2009-04-06 05:11:35 UTC (rev 101) +++ trunk/Pojomatic/src/site/site.xml 2009-04-06 05:11:58 UTC (rev 102) @@ -2,6 +2,7 @@ <body> <menu name="Overview"> <item name="Introduction" href="index.html"/> + <item name="Changes" href="changes.html"/> </menu> <menu ref="reports"/> </body> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <iro...@us...> - 2009-04-06 05:11:36
|
Revision: 101 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=101&view=rev Author: iroberts Date: 2009-04-06 05:11:35 +0000 (Mon, 06 Apr 2009) Log Message: ----------- javadoc fix Modified Paths: -------------- trunk/Pojomatic/src/main/java/org/pojomatic/Pojomatic.java Modified: trunk/Pojomatic/src/main/java/org/pojomatic/Pojomatic.java =================================================================== --- trunk/Pojomatic/src/main/java/org/pojomatic/Pojomatic.java 2009-04-06 04:51:35 UTC (rev 100) +++ trunk/Pojomatic/src/main/java/org/pojomatic/Pojomatic.java 2009-04-06 05:11:35 UTC (rev 101) @@ -114,10 +114,10 @@ * * @param <T> the static type of the first object to compare * @param <S> the static type of the first object to compare - * @param instance the instance to diff against - must not be {@code null} + * @param pojo the instance to diff against - must not be {@code null} * @param other the instance to diff * @return the list of differences (possibly empty) between {@code instance} and {@code other} - * among the properties examined by {@link #doEquals(Object, Object)} for type {@code T}. + * among the properties examined by {@link #equals(Object, Object)} for type {@code T}. * @throws IllegalArgumentException if {@code pojo}'s class has no properties annotated for use * with Pojomatic */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <iro...@us...> - 2009-04-06 04:51:36
|
Revision: 100 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=100&view=rev Author: iroberts Date: 2009-04-06 04:51:35 +0000 (Mon, 06 Apr 2009) Log Message: ----------- shut up PMD Modified Paths: -------------- trunk/Pojomatic/src/test/java/org/pojomatic/internal/PojomatorImplTest.java Modified: trunk/Pojomatic/src/test/java/org/pojomatic/internal/PojomatorImplTest.java =================================================================== --- trunk/Pojomatic/src/test/java/org/pojomatic/internal/PojomatorImplTest.java 2009-04-06 04:50:51 UTC (rev 99) +++ trunk/Pojomatic/src/test/java/org/pojomatic/internal/PojomatorImplTest.java 2009-04-06 04:51:35 UTC (rev 100) @@ -68,7 +68,7 @@ @Test public void testPropertyEquals() { String s1 = "hello"; - String s2 = new String(s1); // ensure we are using .equals, and not == + String s2 = copyString(s1); // ensure we are using .equals, and not == assertTrue(OBJECT_PROPERTY_POJOMATOR.doEquals(new ObjectProperty(s1), new ObjectProperty(s2))); assertFalse(OBJECT_PROPERTY_POJOMATOR.doEquals( @@ -89,13 +89,17 @@ @Test public void testObjectArrayPropertyEquals() { String s1 = "hello"; - String s2 = new String(s1); + String s2 = copyString(s1); assertTrue(STRING_ARRAY_PROPERTY_POJOMATOR.doEquals( new StringArrayProperty(s1, "goodbye"), new StringArrayProperty(s2, "goodbye"))); assertFalse(STRING_ARRAY_PROPERTY_POJOMATOR.doEquals( new StringArrayProperty(s1, "goodbye"), new StringArrayProperty("goodbye", s1))); } + private String copyString(String s1) { + return new String(s1); //NOPMD - we mean to make a copy + } + @Test public void testPrimitiveArrayEquals() throws Exception { final ObjectProperty nullProperty = new ObjectProperty(null); final ObjectProperty objectArrayProperty = new ObjectProperty(new String[] {"foo"}); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <iro...@us...> - 2009-04-06 04:51:07
|
Revision: 99 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=99&view=rev Author: iroberts Date: 2009-04-06 04:50:51 +0000 (Mon, 06 Apr 2009) Log Message: ----------- Remove this for now (getting ready for a release). Removed Paths: ------------- trunk/Pojomatic/src/main/java/org/pojomatic/test/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <iro...@us...> - 2009-04-06 04:29:11
|
Revision: 98 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=98&view=rev Author: iroberts Date: 2009-04-06 04:29:10 +0000 (Mon, 06 Apr 2009) Log Message: ----------- Property name derived from getFoo() is now "foo" instead of "getFoo". Allow overriding the property name via the Property annotation. Modified Paths: -------------- trunk/Pojomatic/src/main/java/org/pojomatic/annotations/Property.java trunk/Pojomatic/src/main/java/org/pojomatic/internal/AbstractPropertyElement.java trunk/Pojomatic/src/main/java/org/pojomatic/internal/ClassProperties.java trunk/Pojomatic/src/main/java/org/pojomatic/internal/PojomatorImpl.java trunk/Pojomatic/src/main/java/org/pojomatic/internal/PropertyAccessor.java trunk/Pojomatic/src/main/java/org/pojomatic/internal/PropertyField.java trunk/Pojomatic/src/test/java/org/pojomatic/TestUtils.java trunk/Pojomatic/src/test/java/org/pojomatic/internal/PojomatorImplTest.java trunk/Pojomatic/src/test/java/org/pojomatic/internal/PropertyElementTest.java Modified: trunk/Pojomatic/src/main/java/org/pojomatic/annotations/Property.java =================================================================== --- trunk/Pojomatic/src/main/java/org/pojomatic/annotations/Property.java 2009-04-06 04:24:46 UTC (rev 97) +++ trunk/Pojomatic/src/main/java/org/pojomatic/annotations/Property.java 2009-04-06 04:29:10 UTC (rev 98) @@ -20,7 +20,19 @@ public @interface Property { /** - * A {@link Property} is included in everything by default + * Which sets of {@link Pojomatic} operations ({@code equals}, {@code hashCode} and + * {@code toString}) should use a property. */ public PojomaticPolicy policy() default PojomaticPolicy.DEFAULT; + + /** + * The name used to identify the property in the standard {@code toString} representation. If + * empty, the following algorithm is used to determine the name. For a propertiy referenced by + * field, the name of the field is used. For a property referenced by a method whose name is of + * the form {@code getSomeField}, the name {@code someField} will be used. For a boolean property + * referenced by a method whose name is of the form {@code isSomeField}, the name + * {@code someField} will be used. For any other property referenced by a method, the name of + * the method is used. + */ + public String name() default ""; } Modified: trunk/Pojomatic/src/main/java/org/pojomatic/internal/AbstractPropertyElement.java =================================================================== --- trunk/Pojomatic/src/main/java/org/pojomatic/internal/AbstractPropertyElement.java 2009-04-06 04:24:46 UTC (rev 97) +++ trunk/Pojomatic/src/main/java/org/pojomatic/internal/AbstractPropertyElement.java 2009-04-06 04:29:10 UTC (rev 98) @@ -11,10 +11,10 @@ protected final E element; private final String name; - protected AbstractPropertyElement(E element) { + protected AbstractPropertyElement(E element, String name) { element.setAccessible(true); this.element = element; - this.name = element.getName(); + this.name = name; } public String getName() { Modified: trunk/Pojomatic/src/main/java/org/pojomatic/internal/ClassProperties.java =================================================================== --- trunk/Pojomatic/src/main/java/org/pojomatic/internal/ClassProperties.java 2009-04-06 04:24:46 UTC (rev 97) +++ trunk/Pojomatic/src/main/java/org/pojomatic/internal/ClassProperties.java 2009-04-06 04:29:10 UTC (rev 98) @@ -54,8 +54,9 @@ /* add all fields that are explicitly annotated or auto-detected */ if (propertyPolicy != null || (autoProperty != null && AutoDetectPolicy.FIELD == autoProperty.autoDetect())) { + PropertyField propertyField = new PropertyField(field, getPropertyName(property)); for (PropertyRole role : PropertyFilter.getRoles(propertyPolicy, classPolicy)) { - properties.get(role).add(new PropertyField(field)); + properties.get(role).add(propertyField); } } } @@ -78,8 +79,10 @@ /* add all methods that are explicitly annotated or auto-detected */ if (propertyPolicy != null || (autoProperty != null && AutoDetectPolicy.METHOD == autoProperty.autoDetect())) { + PropertyAccessor propertyAccessor = + new PropertyAccessor(method, getPropertyName(property)); for (PropertyRole role : PropertyFilter.getRoles(propertyPolicy, classPolicy)) { - properties.get(role).add(new PropertyAccessor(method)); + properties.get(role).add(propertyAccessor); } } } @@ -93,6 +96,10 @@ throw new IllegalArgumentException("Class " + pojoClass.getName() + " has no Pojomatic properties"); } + private String getPropertyName(Property property) { + return property == null ? "" : property.name(); + } + private static boolean methodIsAccessor(Method method) { return methodSignatureIsAccessor(method) && isAccessorName(method.getName()); Modified: trunk/Pojomatic/src/main/java/org/pojomatic/internal/PojomatorImpl.java =================================================================== --- trunk/Pojomatic/src/main/java/org/pojomatic/internal/PojomatorImpl.java 2009-04-06 04:24:46 UTC (rev 97) +++ trunk/Pojomatic/src/main/java/org/pojomatic/internal/PojomatorImpl.java 2009-04-06 04:29:10 UTC (rev 98) @@ -10,6 +10,7 @@ import org.pojomatic.PropertyElement; import org.pojomatic.annotations.PojoFormat; import org.pojomatic.annotations.PojomaticPolicy; +import org.pojomatic.annotations.Property; import org.pojomatic.annotations.PropertyFormat; import org.pojomatic.diff.Difference; import org.pojomatic.diff.DifferenceToNull; @@ -208,6 +209,7 @@ * </p> * * @throws NullPointerException if {@code instance} is null + * @see Property#name() */ public String doToString(T instance) { if (instance == null) { Modified: trunk/Pojomatic/src/main/java/org/pojomatic/internal/PropertyAccessor.java =================================================================== --- trunk/Pojomatic/src/main/java/org/pojomatic/internal/PropertyAccessor.java 2009-04-06 04:24:46 UTC (rev 97) +++ trunk/Pojomatic/src/main/java/org/pojomatic/internal/PropertyAccessor.java 2009-04-06 04:29:10 UTC (rev 98) @@ -1,13 +1,39 @@ package org.pojomatic.internal; +import java.beans.Introspector; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class PropertyAccessor extends AbstractPropertyElement<Method> { - public PropertyAccessor(Method element) { - super(element); + private final static String GET = "get", IS = "is"; + + public PropertyAccessor(Method method, String name) { + super(method, name.isEmpty() ? getName(method) : name); } + private static String getName(Method method) { + String methodName = method.getName(); + if (isPrefixedWith(methodName, GET)) { + return Introspector.decapitalize(methodName.substring(GET.length())); + } + else if (isBoolean(method.getReturnType()) && isPrefixedWith(methodName, IS)) { + return Introspector.decapitalize(methodName.substring(IS.length())); + } + else { + return methodName; + } + } + + private static boolean isBoolean(Class<?> clazz) { + return Boolean.class.equals(clazz) || Boolean.TYPE.equals(clazz); + } + + private static boolean isPrefixedWith(String name, String prefix) { + return name.length() > prefix.length() + && name.startsWith(prefix) + && Character.isUpperCase(name.charAt(prefix.length())); + } + @Override protected Object accessValue(Object instance) throws IllegalArgumentException, IllegalAccessException { Modified: trunk/Pojomatic/src/main/java/org/pojomatic/internal/PropertyField.java =================================================================== --- trunk/Pojomatic/src/main/java/org/pojomatic/internal/PropertyField.java 2009-04-06 04:24:46 UTC (rev 97) +++ trunk/Pojomatic/src/main/java/org/pojomatic/internal/PropertyField.java 2009-04-06 04:29:10 UTC (rev 98) @@ -3,8 +3,8 @@ import java.lang.reflect.Field; public class PropertyField extends AbstractPropertyElement<Field> { - public PropertyField(Field propertyField) { - super(propertyField); + public PropertyField(Field propertyField, String name) { + super(propertyField, name.isEmpty() ? propertyField.getName() : name); } @Override Modified: trunk/Pojomatic/src/test/java/org/pojomatic/TestUtils.java =================================================================== --- trunk/Pojomatic/src/test/java/org/pojomatic/TestUtils.java 2009-04-06 04:24:46 UTC (rev 97) +++ trunk/Pojomatic/src/test/java/org/pojomatic/TestUtils.java 2009-04-06 04:29:10 UTC (rev 98) @@ -6,11 +6,11 @@ public class TestUtils { public static PropertyElement field(Class<?> clazz, String fieldName) throws Exception { - return new PropertyField(clazz.getDeclaredField(fieldName)); + return new PropertyField(clazz.getDeclaredField(fieldName), ""); } public static PropertyElement method(Class<?> clazz, String methodName) throws Exception { - return new PropertyAccessor(clazz.getDeclaredMethod(methodName)); + return new PropertyAccessor(clazz.getDeclaredMethod(methodName), ""); } } Modified: trunk/Pojomatic/src/test/java/org/pojomatic/internal/PojomatorImplTest.java =================================================================== --- trunk/Pojomatic/src/test/java/org/pojomatic/internal/PojomatorImplTest.java 2009-04-06 04:24:46 UTC (rev 97) +++ trunk/Pojomatic/src/test/java/org/pojomatic/internal/PojomatorImplTest.java 2009-04-06 04:29:10 UTC (rev 98) @@ -33,10 +33,14 @@ private static Pojomator<StringArrayProperty> STRING_ARRAY_PROPERTY_POJOMATOR = makePojomatorImpl(StringArrayProperty.class); + private static final Pojomator<AccessCheckedProperties> ACCESS_CHECKED_PROPERTIES_POJOMATOR = + makePojomatorImpl(AccessCheckedProperties.class); + private static final List<Class<?>> PRIMATIVE_TYPES = Arrays.<Class<?>>asList( Boolean.TYPE, Byte.TYPE, Character.TYPE, Short.TYPE, Integer.TYPE, Long.TYPE, Float.TYPE, Double.TYPE); + @Test(expected=NullPointerException.class) public void testNullHashCode() { OBJECT_PROPERTY_POJOMATOR.doHashCode(null); } @@ -131,24 +135,22 @@ } @Test public void testShortCircuitEquals() { - final Pojomator<AccessCheckedProperties> pojomator = makePojomatorImpl(AccessCheckedProperties.class); - AccessCheckedProperties left = new AccessCheckedProperties(1,1); AccessCheckedProperties right = new AccessCheckedProperties(2,2); - assertFalse(pojomator.doEquals(left, right)); + assertFalse(ACCESS_CHECKED_PROPERTIES_POJOMATOR.doEquals(left, right)); assertFalse(left.getBCalled); assertFalse(right.getBCalled); - assertTrue(pojomator.doEquals(left, left)); + assertTrue(ACCESS_CHECKED_PROPERTIES_POJOMATOR.doEquals(left, left)); assertFalse(left.getBCalled); - assertFalse(pojomator.doEquals(left, null)); + assertFalse(ACCESS_CHECKED_PROPERTIES_POJOMATOR.doEquals(left, null)); assertFalse(left.getBCalled); - assertFalse(pojomator.doEquals(left, "hello")); + assertFalse(ACCESS_CHECKED_PROPERTIES_POJOMATOR.doEquals(left, "hello")); assertFalse(left.getBCalled); - assertTrue(pojomator.doEquals(left, new AccessCheckedProperties(1,1))); + assertTrue(ACCESS_CHECKED_PROPERTIES_POJOMATOR.doEquals(left, new AccessCheckedProperties(1,1))); assertTrue(left.getBCalled); } @@ -202,6 +204,12 @@ assertEquals("ObjectPairProperty{s: {ess}, t: {tee}}", actual); } + @Test public void testToStringNames() { + assertEquals( + "AccessCheckedProperties{a: {1}, b: {2}}", + ACCESS_CHECKED_PROPERTIES_POJOMATOR.doToString(new AccessCheckedProperties(1, 2))); + } + @Test public void testCustomFormatters() { assertEquals("PREFIXFormattedObject{s: {BEFOREx}}", makePojomatorImpl(FormattedObject.class).doToString(new FormattedObject("x"))); Modified: trunk/Pojomatic/src/test/java/org/pojomatic/internal/PropertyElementTest.java =================================================================== --- trunk/Pojomatic/src/test/java/org/pojomatic/internal/PropertyElementTest.java 2009-04-06 04:24:46 UTC (rev 97) +++ trunk/Pojomatic/src/test/java/org/pojomatic/internal/PropertyElementTest.java 2009-04-06 04:29:10 UTC (rev 98) @@ -2,6 +2,8 @@ import static org.junit.Assert.*; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -10,61 +12,103 @@ public class PropertyElementTest { + @Retention(RetentionPolicy.RUNTIME) @interface Expected { + String value(); + } + @Test(expected=NullPointerException.class) public void testGetValueNullField() throws Exception { - PropertyElement propertyElement = new PropertyField(getTestField()); + PropertyElement propertyElement = new PropertyField(getTestField(), ""); propertyElement.getValue(null); } @Test(expected=NullPointerException.class) public void testGetValueNullMethod() throws Exception { - PropertyElement propertyElement = new PropertyAccessor(getTestMethod()); + PropertyElement propertyElement = new PropertyAccessor(getTestMethod(), ""); propertyElement.getValue(null); } @Test public void testGetValueField() throws Exception { - PropertyElement propertyElement = new PropertyField(getTestField()); + PropertyElement propertyElement = new PropertyField(getTestField(), ""); assertEquals(testField, propertyElement.getValue(this)); } @Test public void testGetValueMethod() throws Exception { - PropertyElement propertyElement = - new PropertyAccessor(getTestMethod()); + PropertyElement propertyElement = new PropertyAccessor(getTestMethod(), ""); assertEquals(testAccessor(), propertyElement.getValue(this)); } @Test public void testEquals() throws Exception { - PropertyAccessor testMethodProperty = new PropertyAccessor(getTestMethod()); + PropertyAccessor testMethodProperty = new PropertyAccessor(getTestMethod(), ""); assertEquals(testMethodProperty, testMethodProperty); assertFalse(testMethodProperty.equals(null)); assertFalse(testMethodProperty.equals("someOtherClass")); - assertEquals(testMethodProperty, new PropertyAccessor(getTestMethod())); - final PropertyField testFieldProperty = new PropertyField(getTestField()); + assertEquals(testMethodProperty, new PropertyAccessor(getTestMethod(), "")); + final PropertyField testFieldProperty = new PropertyField(getTestField(), ""); assertFalse(testMethodProperty.equals(testFieldProperty)); assertFalse(testFieldProperty.equals(testMethodProperty)); } @Test public void testToString() throws Exception { - assertEquals(getTestMethod().toString(), new PropertyAccessor(getTestMethod()).toString()); + assertEquals(getTestMethod().toString(), new PropertyAccessor(getTestMethod(), "").toString()); } @Test public void testHashCode() throws Exception { - assertEquals(getTestMethod().hashCode(), new PropertyAccessor(getTestMethod()).hashCode()); + assertEquals(getTestMethod().hashCode(), new PropertyAccessor(getTestMethod(), "").hashCode()); } + @Test + public void testGetNameForField() throws Exception { + assertEquals("testField", new PropertyField(getTestField(), "").getName()); + assertEquals("foo", new PropertyField(getTestField(), "foo").getName()); + } + + @Test + public void testOverrideNameForAccessor() throws Exception { + assertEquals("bar", new PropertyAccessor(getTestMethod(), "bar").getName()); + } + + @Test + public void testGetNameForAccessor() throws Exception { + for (Method method: getClass().getDeclaredMethods()) { + Expected expected = method.getAnnotation(Expected.class); + if (expected != null) { + assertEquals( + "name for method " + method.getName(), + expected.value(), + new PropertyAccessor(method, "").getName()); + } + } + } + + // methods tested in testGetNameForAccessor + @Expected("foo") public Object getFoo() { return null; } + @Expected("URL") public Object getURL() { return null; } + @Expected("get") public Object get() { return null; } + @Expected("getter") public Object getter() { return null; } + @Expected("isString") public Object isString() { return null; } + @Expected("boolean") public Boolean isBoolean() { return null; } + @Expected("bool") public boolean isBool() { return false; } + @Expected("is") public boolean is() { return false; } + private Method getTestMethod() throws Exception { - return this.getClass().getMethod("testAccessor", (Class[])null); + return getMethod("testAccessor"); } + private Method getMethod(String name) throws Exception { + return this.getClass().getMethod(name, (Class[])null); + } + private Field getTestField() throws Exception { - return this.getClass().getDeclaredField("testField"); + return getClass().getDeclaredField("testField"); } + // test properties public Object testAccessor() { return "Test string"; } private final Object testField = new Object(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <iro...@us...> - 2009-04-06 04:24:52
|
Revision: 97 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=97&view=rev Author: iroberts Date: 2009-04-06 04:24:46 +0000 (Mon, 06 Apr 2009) Log Message: ----------- PojomatorImpl is automatically generated, but from the interface point of view, a Pojomator is just a providor, not an automatically generated one. Modified Paths: -------------- trunk/Pojomatic/src/main/java/org/pojomatic/Pojomator.java Modified: trunk/Pojomatic/src/main/java/org/pojomatic/Pojomator.java =================================================================== --- trunk/Pojomatic/src/main/java/org/pojomatic/Pojomator.java 2009-04-05 22:05:46 UTC (rev 96) +++ trunk/Pojomatic/src/main/java/org/pojomatic/Pojomator.java 2009-04-06 04:24:46 UTC (rev 97) @@ -3,7 +3,7 @@ import org.pojomatic.diff.Differences; /** - * An automatically generated provider of the three standard {@code Object} methods, + * A provider of the three standard {@code Object} methods, * {@link Object#equals(Object)}, {@link Object#hashCode()} and {@link Object#toString()}. * * @param <T> the class this {@code Pojomator} is generated for. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <iro...@us...> - 2009-04-05 22:05:47
|
Revision: 96 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=96&view=rev Author: iroberts Date: 2009-04-05 22:05:46 +0000 (Sun, 05 Apr 2009) Log Message: ----------- Javadoc fix Modified Paths: -------------- trunk/Pojomatic/src/main/java/org/pojomatic/annotations/PojomaticPolicy.java Modified: trunk/Pojomatic/src/main/java/org/pojomatic/annotations/PojomaticPolicy.java =================================================================== --- trunk/Pojomatic/src/main/java/org/pojomatic/annotations/PojomaticPolicy.java 2009-02-09 22:56:02 UTC (rev 95) +++ trunk/Pojomatic/src/main/java/org/pojomatic/annotations/PojomaticPolicy.java 2009-04-05 22:05:46 UTC (rev 96) @@ -9,7 +9,7 @@ /** * A policy for defining which sets of {@link Pojomatic} operations - * ({@code equals}, {@code hashCode} and {@code toString}) should a property. + * ({@code equals}, {@code hashCode} and {@code toString}) should use a property. * This is set using {@link Property}. * @see DefaultPojomaticPolicy */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2009-02-09 22:56:05
|
Revision: 95 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=95&view=rev Author: chriswhansen Date: 2009-02-09 22:56:02 +0000 (Mon, 09 Feb 2009) Log Message: ----------- Added a JUnit-style method to assert that two objects are equal, and provide the differences if they are not. Added Paths: ----------- trunk/Pojomatic/src/main/java/org/pojomatic/test/ trunk/Pojomatic/src/main/java/org/pojomatic/test/PojomaticAssert.java Added: trunk/Pojomatic/src/main/java/org/pojomatic/test/PojomaticAssert.java =================================================================== --- trunk/Pojomatic/src/main/java/org/pojomatic/test/PojomaticAssert.java (rev 0) +++ trunk/Pojomatic/src/main/java/org/pojomatic/test/PojomaticAssert.java 2009-02-09 22:56:02 UTC (rev 95) @@ -0,0 +1,51 @@ +package org.pojomatic.test; + +import org.pojomatic.Pojomatic; +import org.pojomatic.diff.Differences; + +public class PojomaticAssert { + private PojomaticAssert() {} + + public static void assertPojomaticEquals(Object expected, Object actual) { + assertPojomaticEquals(null, expected, actual); + } + + public static void assertPojomaticEquals(String message, Object expected, Object actual) { + //TODO test this + //TODO verify the error messages are similar to JUnit + if (expected == null) { + if (actual != null) { + StringBuilder failureMessage = createFailureMessage(message); + failureMessage.append("expected null, but was: ").append(actual); + throw new AssertionError(failureMessage.toString()); + } + } + else { //expected is not null + if (!expected.equals(actual)) { + Differences diff = Pojomatic.diff(expected, actual); + if (!diff.areEqual()) { //TODO rename this method to diff.hasDifferences()? + StringBuilder failureMessage = createFailureMessage(message) + .append("found differences: ") + .append(diff) + .append("; expected: ") + .append(expected) + .append(", but was: ") + .append(actual); + throw new AssertionError(failureMessage.toString()); + } + else { //no differences found, but objects are not equal + //TODO different message for this case + } + } + } + } + + private static StringBuilder createFailureMessage(String message) { + StringBuilder failureMessage = new StringBuilder(); + if (message != null && message.length() > 0) { + failureMessage.append(message).append(' '); + } + return failureMessage; + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2009-02-09 22:51:06
|
Revision: 94 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=94&view=rev Author: chriswhansen Date: 2009-02-09 22:47:35 +0000 (Mon, 09 Feb 2009) Log Message: ----------- Throw IllegalArgumentException if the class does not contain any properties annotated for use with Pojomatic Modified Paths: -------------- trunk/Pojomatic/src/main/java/org/pojomatic/Pojomatic.java trunk/Pojomatic/src/main/java/org/pojomatic/internal/ClassProperties.java trunk/Pojomatic/src/main/java/org/pojomatic/internal/PojomatorImpl.java trunk/Pojomatic/src/test/java/org/pojomatic/internal/PojomatorImplTest.java Modified: trunk/Pojomatic/src/main/java/org/pojomatic/Pojomatic.java =================================================================== --- trunk/Pojomatic/src/main/java/org/pojomatic/Pojomatic.java 2009-01-29 17:58:18 UTC (rev 93) +++ trunk/Pojomatic/src/main/java/org/pojomatic/Pojomatic.java 2009-02-09 22:47:35 UTC (rev 94) @@ -70,9 +70,11 @@ * @param <T> the type of the POJO * @param pojo the POJO - must not be null * @return the {@code toString} representation of {@code pojo}. + * @throws IllegalArgumentException if {@code pojo}'s class has no properties annotated for use + * with Pojomatic * @see Pojomator#doToString(Object) */ - public static <T> String toString(T pojo) { + public static <T> String toString(T pojo) throws IllegalArgumentException { return pojomator(getClass(pojo)).doToString(pojo); } @@ -81,9 +83,11 @@ * @param <T> the type of the POJO * @param pojo the POJO - must not be null * @return the {@code hashCode} for {@code pojo}. + * @throws IllegalArgumentException if {@code pojo}'s class has no properties annotated for use + * with Pojomatic * @see Pojomator#doHashCode(Object) */ - public static <T> int hashCode(T pojo) { + public static <T> int hashCode(T pojo) throws IllegalArgumentException { return pojomator(getClass(pojo)).doHashCode(pojo); } @@ -95,9 +99,11 @@ * @param other the object to compare to for equality * @return whether {@code pojo} and {@code other} are equal to each other in the sense of * {@code Object}'s {@code equals} method. + * @throws IllegalArgumentException if {@code pojo}'s class has no properties annotated for use + * with Pojomatic * @see Pojomator#doEquals(Object, Object) */ - public static <T> boolean equals(T pojo, Object other) { + public static <T> boolean equals(T pojo, Object other) throws IllegalArgumentException { return pojomator(getClass(pojo)).doEquals(pojo, other); } @@ -112,8 +118,10 @@ * @param other the instance to diff * @return the list of differences (possibly empty) between {@code instance} and {@code other} * among the properties examined by {@link #doEquals(Object, Object)} for type {@code T}. + * @throws IllegalArgumentException if {@code pojo}'s class has no properties annotated for use + * with Pojomatic */ - public static <T, S extends T> Differences diff(T pojo, S other) { + public static <T, S extends T> Differences diff(T pojo, S other) throws IllegalArgumentException { return pojomator(getClass(pojo)).doDiff(pojo, other); } @@ -123,9 +131,11 @@ * @param <T> the type represented by {@code pojoClass} * @param pojoClass the class to create a {@code Pojomator} for. * @return a {@code Pojomator<T>} + * @throws IllegalArgumentException if {@code pojoClass} has no properties annotated for use + * with Pojomatic */ @SuppressWarnings("unchecked") // compiler does not know that the type parameter to Pojomator is T - public static <T> Pojomator<T> pojomator(Class<T> pojoClass) { + public static <T> Pojomator<T> pojomator(Class<T> pojoClass) throws IllegalArgumentException { return (Pojomator<T>) POJOMATORS.get(pojoClass); } Modified: trunk/Pojomatic/src/main/java/org/pojomatic/internal/ClassProperties.java =================================================================== --- trunk/Pojomatic/src/main/java/org/pojomatic/internal/ClassProperties.java 2009-01-29 17:58:18 UTC (rev 93) +++ trunk/Pojomatic/src/main/java/org/pojomatic/internal/ClassProperties.java 2009-02-09 22:47:35 UTC (rev 94) @@ -15,13 +15,24 @@ import org.pojomatic.annotations.PojomaticPolicy; import org.pojomatic.annotations.Property; +/** + * The properties of a class used for {@link PojomatorImpl#doHashCode(Object)}, + * {@link PojomatorImpl#doEquals(Object, Object)}, and {@link PojomatorImpl#doToString(Object)}. + */ public class ClassProperties { private static final Pattern ACCESSOR_PATTERN = Pattern.compile("(get|is)\\P{Ll}.*"); private final Map<PropertyRole, Collection<PropertyElement>> properties = new EnumMap<PropertyRole, Collection<PropertyElement>>(PropertyRole.class); - public ClassProperties(Class<?> pojoClass) { + /** + * Creates an instance for the given {@code pojoClass}. + * + * @param pojoClass the class to inspect for properties + * @throws IllegalArgumentException if {@code pojoClass} has no properties annotated for use + * with Pojomatic. + */ + private ClassProperties(Class<?> pojoClass) throws IllegalArgumentException { for (PropertyRole role : PropertyRole.values()) { properties.put(role, new ArrayList<PropertyElement>()); } @@ -73,6 +84,13 @@ } } } + + for (Collection<PropertyElement> propertyElements : properties.values()) { + if (!propertyElements.isEmpty()) { + return; + } + } + throw new IllegalArgumentException("Class " + pojoClass.getName() + " has no Pojomatic properties"); } private static boolean methodIsAccessor(Method method) { @@ -89,19 +107,40 @@ return ACCESSOR_PATTERN.matcher(name).matches(); } + /** + * Gets the properties to use for {@link PojomatorImpl#doEquals(Object, Object)}. + * @return the properties to use for {@link PojomatorImpl#doEquals(Object, Object)}. + */ public Collection<PropertyElement> getEqualsProperties() { return properties.get(PropertyRole.EQUALS); } + /** + * Gets the properties to use for {@link PojomatorImpl#doHashCode(Object)}. + * @return the properties to use for {@link PojomatorImpl#doHashCode(Object)}. + */ public Collection<PropertyElement> getHashCodeProperties() { return properties.get(PropertyRole.HASH_CODE); } + /** + * Gets the properties to use for {@link PojomatorImpl#doToString(Object)}. + * @return the properties to use for {@link PojomatorImpl#doToString(Object)}. + */ public Collection<PropertyElement> getToStringProperties() { return properties.get(PropertyRole.TO_STRING); } - public static <T> ClassProperties createInstance(Class<T> pojoClass) { + /** + * Creates a new instance. + * + * @param <T> the type of {@code pojoClass} + * @param pojoClass the class to inspect + * @return a new instance + * @throws IllegalArgumentException if {@code pojoClass} has no properties annotated for use + * with Pojomatic. + */ + public static <T> ClassProperties createInstance(Class<T> pojoClass) throws IllegalArgumentException { return new ClassProperties(pojoClass); } } Modified: trunk/Pojomatic/src/main/java/org/pojomatic/internal/PojomatorImpl.java =================================================================== --- trunk/Pojomatic/src/main/java/org/pojomatic/internal/PojomatorImpl.java 2009-01-29 17:58:18 UTC (rev 93) +++ trunk/Pojomatic/src/main/java/org/pojomatic/internal/PojomatorImpl.java 2009-02-09 22:47:35 UTC (rev 94) @@ -25,9 +25,16 @@ final static int HASH_CODE_MULTIPLIER = 31; - public PojomatorImpl(Class<T> clazz) { + /** + * Creates an instance for {@code clazz}. + * + * @param clazz the class + * @throws IllegalArgumentException if {@code clazz} has no properties annotated for use + * with Pojomatic + */ + public PojomatorImpl(Class<T> clazz) throws IllegalArgumentException { this.clazz = clazz; - classProperties = new ClassProperties(clazz); + classProperties = ClassProperties.createInstance(clazz); pojoFormatterClass = findPojoFormatterClass(clazz); for (PropertyElement prop: classProperties.getToStringProperties()) { PropertyFormatter propertyFormatter = findPropertyFormatter(prop.getElement()); Modified: trunk/Pojomatic/src/test/java/org/pojomatic/internal/PojomatorImplTest.java =================================================================== --- trunk/Pojomatic/src/test/java/org/pojomatic/internal/PojomatorImplTest.java 2009-01-29 17:58:18 UTC (rev 93) +++ trunk/Pojomatic/src/test/java/org/pojomatic/internal/PojomatorImplTest.java 2009-02-09 22:47:35 UTC (rev 94) @@ -248,6 +248,11 @@ assertEquals(DifferenceToNull.class, differences.getClass()); } + @Test(expected=IllegalArgumentException.class) + public void testNonPojomatedClass() { + makePojomatorImpl(String.class); + } + @PojoFormat(SimplePojoFormatter.class) private static class FormattedObject { public FormattedObject(Object s) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2009-01-29 17:58:23
|
Revision: 93 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=93&view=rev Author: chriswhansen Date: 2009-01-29 17:58:18 +0000 (Thu, 29 Jan 2009) Log Message: ----------- Document that the internal package is intended for internal use only. Added Paths: ----------- trunk/Pojomatic/src/main/java/org/pojomatic/internal/package-info.java Added: trunk/Pojomatic/src/main/java/org/pojomatic/internal/package-info.java =================================================================== --- trunk/Pojomatic/src/main/java/org/pojomatic/internal/package-info.java (rev 0) +++ trunk/Pojomatic/src/main/java/org/pojomatic/internal/package-info.java 2009-01-29 17:58:18 UTC (rev 93) @@ -0,0 +1,6 @@ + +/** + * The classes in this package are intended for internal use only. Additionally, these + * implementations are subject to change in future versions. + */ +package org.pojomatic.internal; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <iro...@us...> - 2009-01-26 22:39:05
|
Revision: 90 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=90&view=rev Author: iroberts Date: 2009-01-26 22:02:07 +0000 (Mon, 26 Jan 2009) Log Message: ----------- modesty: increase coverage Modified Paths: -------------- trunk/Pojomatic/src/test/java/org/pojomatic/internal/SelfPopulatingMapTest.java Modified: trunk/Pojomatic/src/test/java/org/pojomatic/internal/SelfPopulatingMapTest.java =================================================================== --- trunk/Pojomatic/src/test/java/org/pojomatic/internal/SelfPopulatingMapTest.java 2009-01-20 00:34:08 UTC (rev 89) +++ trunk/Pojomatic/src/test/java/org/pojomatic/internal/SelfPopulatingMapTest.java 2009-01-26 22:02:07 UTC (rev 90) @@ -2,6 +2,8 @@ import static org.junit.Assert.*; +import java.util.concurrent.atomic.AtomicBoolean; + import org.junit.Test; public class SelfPopulatingMapTest { @@ -40,4 +42,43 @@ } assertSame(results[0], results[1]); } + + @Test + public void testBadConstructionFirstTime() throws Exception { + final AtomicBoolean firstTime = new AtomicBoolean(false); + final SelfPopulatingMap<String, String> selfPopulatingMap = + new SelfPopulatingMap<String, String>() { + @Override protected String create(String key) { + try { + Thread.sleep(10); // ensure that two threads have time to collide. + } + catch (InterruptedException e) {} + if (firstTime.getAndSet(true)) { + return new String(key); + } + else { + throw new RuntimeException("failing on first attempt"); + } + } + }; + int numThreads = 2; + Thread[] threads = new Thread[numThreads]; + final String[] results = new String[numThreads]; + for (int i = 0; i < threads.length; i++) { + final int threadNumber = i; + threads[i] = new Thread() { + @Override public void run() { + results[threadNumber] = selfPopulatingMap.get("x"); + } + }; + } + for (Thread t: threads) { + t.start(); + } + for (Thread t: threads) { + t.join(); + } + assertNull(results[0]); + assertEquals("x", results[1]); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <iro...@us...> - 2009-01-26 22:38:53
|
Revision: 91 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=91&view=rev Author: iroberts Date: 2009-01-26 22:03:58 +0000 (Mon, 26 Jan 2009) Log Message: ----------- Implement equals and hashCode (eat our own dogfood) Modified Paths: -------------- trunk/Pojomatic/src/main/java/org/pojomatic/diff/PropertyDifferences.java Modified: trunk/Pojomatic/src/main/java/org/pojomatic/diff/PropertyDifferences.java =================================================================== --- trunk/Pojomatic/src/main/java/org/pojomatic/diff/PropertyDifferences.java 2009-01-26 22:02:07 UTC (rev 90) +++ trunk/Pojomatic/src/main/java/org/pojomatic/diff/PropertyDifferences.java 2009-01-26 22:03:58 UTC (rev 91) @@ -3,7 +3,11 @@ import java.util.Collections; import java.util.List; +import org.pojomatic.Pojomatic; +import org.pojomatic.annotations.Property; + public class PropertyDifferences implements Differences { + @Property private final List<Difference> differences; public PropertyDifferences(List<Difference> differences) { @@ -22,6 +26,9 @@ return differences.isEmpty() ? "no differences" : differences.toString(); } + @Override public boolean equals(Object other) { return Pojomatic.equals(this, other); } + @Override public int hashCode() { return Pojomatic.hashCode(this); } + public boolean areEqual() { return differences.isEmpty(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <iro...@us...> - 2009-01-26 22:38:51
|
Revision: 92 http://pojomatic.svn.sourceforge.net/pojomatic/?rev=92&view=rev Author: iroberts Date: 2009-01-26 22:04:21 +0000 (Mon, 26 Jan 2009) Log Message: ----------- Finish testing diff code Modified Paths: -------------- trunk/Pojomatic/src/main/java/org/pojomatic/diff/DifferenceToNull.java trunk/Pojomatic/src/test/java/org/pojomatic/PojomaticTest.java Added Paths: ----------- trunk/Pojomatic/src/test/java/org/pojomatic/diff/ trunk/Pojomatic/src/test/java/org/pojomatic/diff/DifferenceTest.java trunk/Pojomatic/src/test/java/org/pojomatic/diff/DifferenceToNullTest.java trunk/Pojomatic/src/test/java/org/pojomatic/diff/PropertyDifferencesTest.java Modified: trunk/Pojomatic/src/main/java/org/pojomatic/diff/DifferenceToNull.java =================================================================== --- trunk/Pojomatic/src/main/java/org/pojomatic/diff/DifferenceToNull.java 2009-01-26 22:03:58 UTC (rev 91) +++ trunk/Pojomatic/src/main/java/org/pojomatic/diff/DifferenceToNull.java 2009-01-26 22:04:21 UTC (rev 92) @@ -4,6 +4,9 @@ private final Object instance; public DifferenceToNull(Object instance) { + if (instance == null) { + throw new NullPointerException(); + } this.instance = instance; } Modified: trunk/Pojomatic/src/test/java/org/pojomatic/PojomaticTest.java =================================================================== --- trunk/Pojomatic/src/test/java/org/pojomatic/PojomaticTest.java 2009-01-26 22:03:58 UTC (rev 91) +++ trunk/Pojomatic/src/test/java/org/pojomatic/PojomaticTest.java 2009-01-26 22:04:21 UTC (rev 92) @@ -2,8 +2,12 @@ import static org.junit.Assert.*; +import java.util.Collections; + import org.junit.Test; import org.pojomatic.annotations.Property; +import org.pojomatic.diff.Difference; +import org.pojomatic.diff.PropertyDifferences; import org.pojomatic.internal.PojomatorImpl; public class PojomaticTest { @@ -27,6 +31,12 @@ } @Test + public void testDiff() { + assertEquals( + new PropertyDifferences(Collections.<Difference>emptyList()), Pojomatic.diff(BEAN, BEAN)); + } + + @Test public void testHashCode() { assertEquals(BEAN_POJOMATOR.doHashCode(BEAN), Pojomatic.hashCode(BEAN)); } Added: trunk/Pojomatic/src/test/java/org/pojomatic/diff/DifferenceTest.java =================================================================== --- trunk/Pojomatic/src/test/java/org/pojomatic/diff/DifferenceTest.java (rev 0) +++ trunk/Pojomatic/src/test/java/org/pojomatic/diff/DifferenceTest.java 2009-01-26 22:04:21 UTC (rev 92) @@ -0,0 +1,25 @@ +package org.pojomatic.diff; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class DifferenceTest { + private Difference DIFFERENCE = new Difference("foo", "this", "that"); + + @Test + public void testGetPropertyName() { + assertEquals("foo", DIFFERENCE.getPropertyName()); + } + + @Test + public void testGetLhs() { + assertEquals("this", DIFFERENCE.getLhs()); + } + + @Test + public void testGetRhs() { + assertEquals("that", DIFFERENCE.getRhs()); + } + +} Property changes on: trunk/Pojomatic/src/test/java/org/pojomatic/diff/DifferenceTest.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Pojomatic/src/test/java/org/pojomatic/diff/DifferenceToNullTest.java =================================================================== --- trunk/Pojomatic/src/test/java/org/pojomatic/diff/DifferenceToNullTest.java (rev 0) +++ trunk/Pojomatic/src/test/java/org/pojomatic/diff/DifferenceToNullTest.java 2009-01-26 22:04:21 UTC (rev 92) @@ -0,0 +1,23 @@ +package org.pojomatic.diff; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class DifferenceToNullTest { + + @Test(expected=NullPointerException.class) + public void testConstructorNullPointerException() { + new DifferenceToNull(null); + } + + @Test + public void testToString() { + assertEquals("the object {3} is different than null", new DifferenceToNull(3).toString()); + } + + @Test + public void testAreEqual() { + assertFalse(new DifferenceToNull(3).areEqual()); + } +} Property changes on: trunk/Pojomatic/src/test/java/org/pojomatic/diff/DifferenceToNullTest.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Pojomatic/src/test/java/org/pojomatic/diff/PropertyDifferencesTest.java =================================================================== --- trunk/Pojomatic/src/test/java/org/pojomatic/diff/PropertyDifferencesTest.java (rev 0) +++ trunk/Pojomatic/src/test/java/org/pojomatic/diff/PropertyDifferencesTest.java 2009-01-26 22:04:21 UTC (rev 92) @@ -0,0 +1,45 @@ +package org.pojomatic.diff; + +import static org.junit.Assert.*; + +import java.util.Arrays; +import java.util.Collections; + +import org.junit.Test; + +public class PropertyDifferencesTest { + + @Test(expected=NullPointerException.class) + public void testConstructorNullPointerException() { + new PropertyDifferences(null); + } + @Test + public void testEmptyToString() { + assertEquals( + "no differences", new PropertyDifferences(Collections.<Difference>emptyList()).toString()); + } + + @Test + public void testSingleDifferenceToString() { + assertEquals( + "[foo: {3} versus {4}]", + new PropertyDifferences(Arrays.asList(new Difference("foo", 3, 4))).toString()); + assertEquals( + "[foo: {null} versus {4}]", + new PropertyDifferences(Arrays.asList(new Difference("foo", null, 4))).toString()); + } + + @Test + public void testMultipleDifferencesToString() { + assertEquals( + "[foo: {3} versus {4}, bar: {this} versus {that}]", + new PropertyDifferences(Arrays.asList( + new Difference("foo", 3, 4), new Difference("bar", "this", "that"))).toString()); + } + + @Test + public void testAreEqual() { + assertTrue(new PropertyDifferences(Collections.<Difference>emptyList()).areEqual()); + assertFalse(new PropertyDifferences(Arrays.asList(new Difference("foo", 3, 4))).areEqual()); + } +} Property changes on: trunk/Pojomatic/src/test/java/org/pojomatic/diff/PropertyDifferencesTest.java ___________________________________________________________________ Added: svn:mime-type + text/plain This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |