You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2016/04/24 23:13:36 UTC

[1/2] wicket git commit: Disallow null arguments to IModel methods

Repository: wicket
Updated Branches:
  refs/heads/master e0d962bd5 -> 445965f1f


Disallow null arguments to IModel methods


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/406daf1f
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/406daf1f
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/406daf1f

Branch: refs/heads/master
Commit: 406daf1f15ae743f8ff0931ac906b61ac08b9a6d
Parents: e0d962b
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Sun Apr 24 23:12:42 2016 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Sun Apr 24 23:12:42 2016 +0200

----------------------------------------------------------------------
 .../java/org/apache/wicket/model/IModel.java    | 22 +++++++-----
 .../org/apache/wicket/model/LambdaModel.java    |  2 +-
 .../org/apache/wicket/model/IModelTest.java     | 37 +++++++++++++++++---
 3 files changed, 47 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/406daf1f/wicket-core/src/main/java/org/apache/wicket/model/IModel.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/model/IModel.java b/wicket-core/src/main/java/org/apache/wicket/model/IModel.java
index 3f20870..d50b843 100644
--- a/wicket-core/src/main/java/org/apache/wicket/model/IModel.java
+++ b/wicket-core/src/main/java/org/apache/wicket/model/IModel.java
@@ -20,6 +20,7 @@ package org.apache.wicket.model;
 import org.apache.wicket.lambda.WicketBiFunction;
 import org.apache.wicket.lambda.WicketFunction;
 import org.apache.wicket.lambda.WicketSupplier;
+import org.apache.wicket.util.lang.Args;
 
 /**
  * A IModel wraps the actual model Object used by a Component. IModel implementations are used as a
@@ -97,6 +98,7 @@ public interface IModel<T> extends IDetachable
 	 */
 	default IModel<T> filter(WicketFunction<? super T, Boolean> predicate)
 	{
+		Args.notNull(predicate, "predicate");
 		return (IModel<T>)() -> {
 			T object = IModel.this.getObject();
 			if (object != null && predicate.apply(object))
@@ -121,6 +123,7 @@ public interface IModel<T> extends IDetachable
 	 */
 	default <R> IModel<R> map(WicketFunction<? super T, R> mapper)
 	{
+		Args.notNull(mapper, "mapper");
 		return (IModel<R>)() -> {
 			T object = IModel.this.getObject();
 			if (object == null)
@@ -142,25 +145,23 @@ public interface IModel<T> extends IDetachable
 	 *            the resulting type
 	 * @param <U>
 	 *            the other models type
-	 * @param combine
+	 * @param combiner
 	 *            a function combining this and the others object to a result.
 	 * @param other
 	 *            another model to be combined with this one
 	 * @return a new IModel
 	 */
-	default <R, U> IModel<R> mapWith(WicketBiFunction<? super T, ? super U, R> combine,
+	default <R, U> IModel<R> mapWith(WicketBiFunction<? super T, ? super U, R> combiner,
 		IModel<U> other)
 	{
+		Args.notNull(combiner, "combiner");
+		Args.notNull(other, "other");
 		return (IModel<R>)() -> {
 			T t = IModel.this.getObject();
-			U u = null;
-			if (other != null)
-			{
-				u = other.getObject();
-			}
+			U u = other.getObject();
 			if (t != null && u != null)
 			{
-				return combine.apply(t, u);
+				return combiner.apply(t, u);
 			}
 			else
 			{
@@ -180,6 +181,7 @@ public interface IModel<T> extends IDetachable
 	 */
 	default <R> IModel<R> flatMap(WicketFunction<? super T, IModel<R>> mapper)
 	{
+		Args.notNull(mapper, "mapper");
 		return new IModel<R>()
 		{
 			@Override
@@ -247,9 +249,10 @@ public interface IModel<T> extends IDetachable
 	 */
 	default <R> IModel<R> apply(WicketFunction<? super T, R> mapper)
 	{
+		Args.notNull(mapper, "mapper");
 		return (IModel<R>)() -> {
 			T object = IModel.this.getObject();
-			if (object == null || mapper == null)
+			if (object == null)
 			{
 				return null;
 			}
@@ -293,6 +296,7 @@ public interface IModel<T> extends IDetachable
 	 */
 	default IModel<T> orElseGet(WicketSupplier<? extends T> other)
 	{
+		Args.notNull(other, "other");
 		return (IModel<T>)() -> {
 			T object = IModel.this.getObject();
 			if (object == null)

http://git-wip-us.apache.org/repos/asf/wicket/blob/406daf1f/wicket-core/src/main/java/org/apache/wicket/model/LambdaModel.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/model/LambdaModel.java b/wicket-core/src/main/java/org/apache/wicket/model/LambdaModel.java
index 90a3dfb..f28fdc9 100644
--- a/wicket-core/src/main/java/org/apache/wicket/model/LambdaModel.java
+++ b/wicket-core/src/main/java/org/apache/wicket/model/LambdaModel.java
@@ -207,4 +207,4 @@ public class LambdaModel<T> implements IModel<T>
 			}
 		};
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/406daf1f/wicket-core/src/test/java/org/apache/wicket/model/IModelTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/model/IModelTest.java b/wicket-core/src/test/java/org/apache/wicket/model/IModelTest.java
index 996a758..d2b9c85 100644
--- a/wicket-core/src/test/java/org/apache/wicket/model/IModelTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/model/IModelTest.java
@@ -68,6 +68,12 @@ public class IModelTest extends Assert
 		assertThat(johnModel.getObject(), is(nullValue()));
 	}
 
+	@Test(expected = IllegalArgumentException.class)
+	public void nullFilter()
+	{
+		IModel.of(person).filter(null);
+	}
+
 	@Test
 	public void map()
 	{
@@ -82,6 +88,12 @@ public class IModelTest extends Assert
 		assertThat(streetModel.getObject(), is(equalTo(street)));
 	}
 
+	@Test(expected = IllegalArgumentException.class)
+	public void nullMapper()
+	{
+		IModel.of(person).map(null);
+	}
+
 	@Test
 	public void withMap()
 	{
@@ -104,15 +116,20 @@ public class IModelTest extends Assert
 		assertThat(relationShipModel.getObject(), is(nullValue()));
 	}
 
-	@Test
+	@Test(expected = IllegalArgumentException.class)
 	public void withMapWithNullModel()
 	{
 		IModel<String> janeModel = null;
 		WicketBiFunction<Person, String, String> function =
 				(WicketBiFunction<Person, String, String>) (person1, other) ->
 						person1.getName() + " is in relationship with " + other;
-		IModel<String> relationShipModel = IModel.of(person).mapWith(function, janeModel);
-		assertThat(relationShipModel.getObject(), is(nullValue()));
+		IModel.of(person).mapWith(function, janeModel);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void withMapWithNullCombiner()
+	{
+		IModel.of(person).mapWith(null, Model.of("Jane"));
 	}
 
 	@Ignore
@@ -130,7 +147,13 @@ public class IModelTest extends Assert
 
 		String newValue = "New Value";
 		heirModel.setObject(newValue);
-		assertThat(heirModel.getObject(), is(equalTo(newValue)));
+		assertThat(heirModel.getObject(), is(equalTo("Matthias is my parent")));
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void nullFlatMapper()
+	{
+		IModel.of(person).flatMap(null);
 	}
 
 	@Test
@@ -164,4 +187,10 @@ public class IModelTest extends Assert
 
 		assertThat(defaultNameModel.getObject(), is(equalTo(defaultName)));
 	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void orElseGetNullOther()
+	{
+		IModel.of(person).map(Person::getName).orElseGet(null);
+	}
 }


[2/2] wicket git commit: Add a test for IModel#flatMap

Posted by mg...@apache.org.
Add a test for IModel#flatMap


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/445965f1
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/445965f1
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/445965f1

Branch: refs/heads/master
Commit: 445965f1f9e1f0c62ed9ecdaa060ba3d1c8f61a2
Parents: 406daf1
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Sun Apr 24 23:13:08 2016 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Sun Apr 24 23:13:08 2016 +0200

----------------------------------------------------------------------
 .../java/org/apache/wicket/model/LambdaModel.java |  2 +-
 .../java/org/apache/wicket/model/IModelTest.java  | 18 ++++++++----------
 2 files changed, 9 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/445965f1/wicket-core/src/main/java/org/apache/wicket/model/LambdaModel.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/model/LambdaModel.java b/wicket-core/src/main/java/org/apache/wicket/model/LambdaModel.java
index f28fdc9..3266992 100644
--- a/wicket-core/src/main/java/org/apache/wicket/model/LambdaModel.java
+++ b/wicket-core/src/main/java/org/apache/wicket/model/LambdaModel.java
@@ -109,7 +109,7 @@ public class LambdaModel<T> implements IModel<T>
 	 * @param <T> model object type
 	 */
 	public static <T> IModel<T> of(WicketSupplier<T> getter, WicketConsumer<T> setter) {
-		return new LambdaModel<T>(getter, setter);
+		return new LambdaModel<>(getter, setter);
 	}
 
 	/**

http://git-wip-us.apache.org/repos/asf/wicket/blob/445965f1/wicket-core/src/test/java/org/apache/wicket/model/IModelTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/model/IModelTest.java b/wicket-core/src/test/java/org/apache/wicket/model/IModelTest.java
index d2b9c85..7b27158 100644
--- a/wicket-core/src/test/java/org/apache/wicket/model/IModelTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/model/IModelTest.java
@@ -26,7 +26,6 @@ import org.apache.wicket.model.lambda.Address;
 import org.apache.wicket.model.lambda.Person;
 import org.junit.Assert;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 
 /**
@@ -132,20 +131,19 @@ public class IModelTest extends Assert
 		IModel.of(person).mapWith(null, Model.of("Jane"));
 	}
 
-	@Ignore
 	@Test
 	public void flatMap()
 	{
-		IModel<String> heirModel = IModel.of(person).flatMap(person1 -> new Model<String>() {
-			@Override
-			public String getObject()
-			{
-				return person1.getName() + " is my parent";
-			}
-		});
+		IModel<String> heirModel = IModel.of(person)
+			.flatMap(john ->
+					LambdaModel.of(
+						() -> john.getName() + " is my parent",
+						john::setName
+					)
+			);
 		assertThat(heirModel.getObject(), is(equalTo("John is my parent")));
 
-		String newValue = "New Value";
+		String newValue = "Matthias";
 		heirModel.setObject(newValue);
 		assertThat(heirModel.getObject(), is(equalTo("Matthias is my parent")));
 	}