This is an automated email from the ASF dual-hosted git repository.
thiagohp pushed a commit to branch better-page-invalidation
in repository https://gitbox.apache.org/repos/asf/tapestry-5.git
The following commit(s) were added to refs/heads/better-page-invalidation by
this push:
new 1ed147386 TAP5-2742: more tests and code improvements
1ed147386 is described below
commit 1ed1473864f552958e345ca62666abb6a9849992
Author: Thiago H. de Paula Figueiredo <[email protected]>
AuthorDate: Wed Nov 23 08:26:10 2022 -0300
TAP5-2742: more tests and code improvements
---
.../internal/event/InvalidationEventHubImpl.java | 22 +++++---
.../services/ComponentDependencyRegistryImpl.java | 12 ++--
.../event/InvalidationEventHubImplTest.java | 6 +-
.../ComponentDependencyRegistryImplTest.java | 66 +++++++++++++++++++---
4 files changed, 86 insertions(+), 20 deletions(-)
diff --git
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/event/InvalidationEventHubImpl.java
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/event/InvalidationEventHubImpl.java
index b635730b3..46186ee00 100644
---
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/event/InvalidationEventHubImpl.java
+++
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/event/InvalidationEventHubImpl.java
@@ -14,11 +14,6 @@
package org.apache.tapestry5.internal.event;
-import org.apache.tapestry5.commons.internal.util.TapestryException;
-import org.apache.tapestry5.commons.services.InvalidationEventHub;
-import org.apache.tapestry5.commons.services.InvalidationListener;
-import org.apache.tapestry5.commons.util.CollectionFactory;
-
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
@@ -26,6 +21,12 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import org.apache.tapestry5.commons.internal.util.TapestryException;
+import org.apache.tapestry5.commons.services.InvalidationEventHub;
+import org.apache.tapestry5.commons.services.InvalidationListener;
+import org.apache.tapestry5.commons.util.CollectionFactory;
/**
* Base implementation class for classes (especially services) that need to
manage a list of
@@ -64,16 +65,23 @@ public class InvalidationEventHubImpl implements
InvalidationEventHub
return;
}
+ final Set<String> alreadyProcessed = new HashSet<>();
+
do
{
- Set<String> extraResources = new HashSet<>();
+ final Set<String> extraResources = new HashSet<>();
+ Set<String> actuallyNewResources;
for (Function<List<String>, List<String>> callback : callbacks)
{
final List<String> newResources = callback.apply(resources);
if (newResources == null) {
throw new TapestryException("InvalidationEventHub callback
functions cannot return null", null);
}
- extraResources.addAll(newResources);
+ actuallyNewResources = newResources.stream()
+ .filter(r -> !alreadyProcessed.contains(r))
+ .collect(Collectors.toSet());
+ extraResources.addAll(actuallyNewResources);
+ alreadyProcessed.addAll(newResources);
}
resources = new ArrayList<>(extraResources);
}
diff --git
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImpl.java
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImpl.java
index 8c4c7d0da..a7d7dcae8 100644
---
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImpl.java
+++
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImpl.java
@@ -15,6 +15,7 @@ package org.apache.tapestry5.internal.services;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -133,7 +134,8 @@ public class ComponentDependencyRegistryImpl implements
ComponentDependencyRegis
@Override
public Set<String> getDependents(String className)
{
- return map.get(className);
+ final Set<String> dependents = map.get(className);
+ return dependents != null ? dependents : Collections.emptySet();
}
@Override
@@ -150,7 +152,8 @@ public class ComponentDependencyRegistryImpl implements
ComponentDependencyRegis
add(getClassName(component), getClassName(dependency));
}
- private void add(String component, String dependency)
+ // Protected just for testing
+ void add(String component, String dependency)
{
synchronized (map)
{
@@ -170,12 +173,13 @@ public class ComponentDependencyRegistryImpl implements
ComponentDependencyRegis
invalidationEventHub.addInvalidationCallback(this::listen);
}
- private List<String> listen(List<String> resources)
+ // Protected just for testing
+ List<String> listen(List<String> resources)
{
List<String> furtherDependents = new ArrayList<>();
for (String resource : resources)
{
- final Set<String> dependents = map.get(resource);
+ final Set<String> dependents = getDependents(resource);
for (String furtherDependent : dependents)
{
if (!resources.contains(furtherDependent) &&
!furtherDependents.contains(furtherDependent))
diff --git
a/tapestry-core/src/test/java/org/apache/tapestry5/internal/event/InvalidationEventHubImplTest.java
b/tapestry-core/src/test/java/org/apache/tapestry5/internal/event/InvalidationEventHubImplTest.java
index 6cf69d58a..7112126d9 100644
---
a/tapestry-core/src/test/java/org/apache/tapestry5/internal/event/InvalidationEventHubImplTest.java
+++
b/tapestry-core/src/test/java/org/apache/tapestry5/internal/event/InvalidationEventHubImplTest.java
@@ -44,9 +44,11 @@ public class InvalidationEventHubImplTest
Function<List<String>, List<String>> callback = (r) -> {
callCount.incrementAndGet();
if (r.size() == 2 && r.get(0).equals(firstInitialElement) &&
r.get(1).equals(secondInitialElement)) {
- return Arrays.asList(firstInitialElement.toUpperCase(),
secondInitialElement.toUpperCase());
+ return Arrays.asList(firstInitialElement.toUpperCase(),
secondInitialElement.toUpperCase(), firstInitialElement);
}
- else if (r.size() == 2 &&
r.get(0).equals(firstInitialElement.toUpperCase()) &&
r.get(1).equals(secondInitialElement.toUpperCase())) {
+ else if (r.size() == 3 &&
r.contains(firstInitialElement.toUpperCase()) &&
+ r.contains(secondInitialElement.toUpperCase()) &&
+ r.contains(firstInitialElement)) {
return Arrays.asList("something", "else");
}
else {
diff --git
a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImplTest.java
b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImplTest.java
index 794ffd7dc..e6fc2bd86 100644
---
a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImplTest.java
+++
b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImplTest.java
@@ -14,17 +14,23 @@
package org.apache.tapestry5.internal.services;
-import org.apache.tapestry5.internal.test.InternalBaseTestCase;
+import static org.testng.Assert.assertEquals;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
/**
- * Tests for the bean editor model source itself, as well as the model classes.
+ * Tests {@link ComponentDependencyRegistryImpl}.
*/
-public abstract class ComponentDependencyRegistryImplTest extends
InternalBaseTestCase
+public class ComponentDependencyRegistryImplTest
{
- private ComponentDependencyRegistry componentDependencyRegistry;
+ private ComponentDependencyRegistryImpl componentDependencyRegistry;
@BeforeClass
public void setup()
@@ -32,10 +38,56 @@ public abstract class ComponentDependencyRegistryImplTest
extends InternalBaseTe
componentDependencyRegistry = new ComponentDependencyRegistryImpl();
}
- @Test
- public void register()
+ @Test(timeOut = 5000)
+ public void listen()
{
- componentDependencyRegistry.register(null);
+
+ componentDependencyRegistry.add("foo", "bar");
+ componentDependencyRegistry.add("d", "a");
+ componentDependencyRegistry.add("dd", "aa");
+ componentDependencyRegistry.add("dd", "a");
+ componentDependencyRegistry.add("dd", "a");
+
+ final List<String> resources = Arrays.asList("a", "aa", "none");
+ final List<String> result =
componentDependencyRegistry.listen(resources);
+ Collections.sort(result);
+ assertEquals(result, Arrays.asList("d", "dd"));
+
}
+ @Test
+ public void dependency_methods()
+ {
+
+ final String foo = "foo";
+ final String bar = "bar";
+ final String something = "d";
+ final String other = "dd";
+ final String fulano = "a";
+ final String beltrano = "aa";
+
+ assertEquals(componentDependencyRegistry.getDependencies(foo),
Collections.emptySet(),
+ "getDependents() should never return null");
+
+ assertEquals(componentDependencyRegistry.getDependents(foo),
Collections.emptySet(),
+ "getDependents() should never return null");
+
+ componentDependencyRegistry.add(foo, bar);
+ componentDependencyRegistry.add(something, fulano);
+ componentDependencyRegistry.add(other, beltrano);
+ componentDependencyRegistry.add(other, fulano);
+ componentDependencyRegistry.add(other, fulano);
+
+ assertEquals(componentDependencyRegistry.getDependencies(other), new
HashSet<>(Arrays.asList(fulano, beltrano)));
+ assertEquals(componentDependencyRegistry.getDependencies(something),
new HashSet<>(Arrays.asList(fulano)));
+ assertEquals(componentDependencyRegistry.getDependencies(fulano), new
HashSet<>(Arrays.asList()));
+ assertEquals(componentDependencyRegistry.getDependencies(foo), new
HashSet<>(Arrays.asList(bar)));
+ assertEquals(componentDependencyRegistry.getDependencies(bar), new
HashSet<>(Arrays.asList()));
+
+ assertEquals(componentDependencyRegistry.getDependents(bar), new
HashSet<>(Arrays.asList(foo)));
+ assertEquals(componentDependencyRegistry.getDependents(fulano), new
HashSet<>(Arrays.asList(other, something)));
+ assertEquals(componentDependencyRegistry.getDependents(foo), new
HashSet<>(Arrays.asList()));
+
+ }
+
}