From f6071909b6ddf5095381e2f93332cb0a1632106d Mon Sep 17 00:00:00 2001 From: Jesse Brault Date: Mon, 27 Jan 2025 14:37:24 -0600 Subject: [PATCH] Fix broken OutletTests, found and fixed bug with ancestor searching. --- .../context/DefaultComponentContext.java | 7 ++++-- .../view/component/web/lib/OutletTests.groovy | 22 +++++++++++++++++-- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/view-components/src/main/java/groowt/view/component/context/DefaultComponentContext.java b/view-components/src/main/java/groowt/view/component/context/DefaultComponentContext.java index 8e7ed8d..dbe7ea7 100644 --- a/view-components/src/main/java/groowt/view/component/context/DefaultComponentContext.java +++ b/view-components/src/main/java/groowt/view/component/context/DefaultComponentContext.java @@ -70,7 +70,10 @@ public class DefaultComponentContext implements ComponentContext { public @Nullable ViewComponent findNearestAncestor(Predicate matching) { final List componentStack = this.getRenderContext().getComponentStack(); if (componentStack.size() > 1) { - for (final var ancestor : componentStack.subList(1, componentStack.size() - 1)) { + // 1/27/25: earlier this was originally componentStack.size() - 1 as the second argument to sublist(). + // On examination today, it didn't make sense, because it would be chopping off the farthest ancestor from + // search. So I removed it, in accordance with the implementation in hasAncestor(). + for (final var ancestor : componentStack.subList(1, componentStack.size())) { if (matching.test(ancestor)) { return ancestor; } @@ -83,7 +86,7 @@ public class DefaultComponentContext implements ComponentContext { public boolean hasAncestor(Predicate matching) { final List componentStack = this.getRenderContext().getComponentStack(); if (componentStack.size() > 1) { - for (final var ancestor : componentStack.subList(1, componentStack.size() - 1)) { + for (final var ancestor : componentStack.subList(1, componentStack.size())) { if (matching.test(ancestor)) { return true; } diff --git a/web-view-components/src/test/groovy/groowt/view/component/web/lib/OutletTests.groovy b/web-view-components/src/test/groovy/groowt/view/component/web/lib/OutletTests.groovy index 6503d91..df7915b 100644 --- a/web-view-components/src/test/groovy/groowt/view/component/web/lib/OutletTests.groovy +++ b/web-view-components/src/test/groovy/groowt/view/component/web/lib/OutletTests.groovy @@ -1,17 +1,35 @@ package groowt.view.component.web.lib + +import groowt.view.component.web.WebViewComponentContext +import groowt.view.component.web.WebViewComponentScope import org.junit.jupiter.api.Test class OutletTests extends AbstractWebViewComponentTests { + static final class DummyOutletContainer extends Echo implements OutletContainer { + + DummyOutletContainer() { + super([:]) + } + + } + + @Override + void configureContext(WebViewComponentContext context) { + context.configureRootScope(WebViewComponentScope) { + addWithNoArgConstructor(DummyOutletContainer) + } + } + @Test void smokeScreen() { - doTest('', '') + doTest('', '') } @Test void withChildren() { - doTest('', '012') + doTest('', '012') } }