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.
|