Author: ard
Date: Wed Sep 12 15:31:03 2012
New Revision: 1383999

URL: http://svn.apache.org/viewvc?rev=1383999&view=rev
Log:
RAVE-697 Added unit tests for deep merging of child nodes

Added:
    
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/extensionMergingPageDefinitions.xml
      - copied, changed from r1383906, 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/mergingPageExtensionPageDefinitions.xml
    
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/extensionNonExistingPageDefinitions.xml
      - copied unchanged from r1383906, 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/nonExistingExtensionPageDefinitions.xml
    
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/extensionSimplePageDefinitions.xml
      - copied unchanged from r1383906, 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/simplePageExtensionPageDefinitions.xml
Removed:
    
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/mergingPageExtensionPageDefinitions.xml
    
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/nonExistingExtensionPageDefinitions.xml
    
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/simplePageExtensionPageDefinitions.xml
Modified:
    
rave/sandbox/content-services/rave-web-hmvc/src/test/java/org/apache/rave/portal/web/mvc/config/EnhancedPagesConfigManagerTest.java
    
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/enhanced-pages-config-manager-test.xml

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/test/java/org/apache/rave/portal/web/mvc/config/EnhancedPagesConfigManagerTest.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/test/java/org/apache/rave/portal/web/mvc/config/EnhancedPagesConfigManagerTest.java?rev=1383999&r1=1383998&r2=1383999&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/test/java/org/apache/rave/portal/web/mvc/config/EnhancedPagesConfigManagerTest.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/test/java/org/apache/rave/portal/web/mvc/config/EnhancedPagesConfigManagerTest.java
 Wed Sep 12 15:31:03 2012
@@ -19,6 +19,8 @@
 
 package org.apache.rave.portal.web.mvc.config;
 
+import java.util.Collection;
+import java.util.LinkedList;
 import java.util.Map;
 
 import org.junit.Test;
@@ -43,8 +45,8 @@ public class EnhancedPagesConfigManagerT
     private ApplicationContext applicationContext;
 
     @Test
-    public void noExtensionsPageRoutesManager() throws Exception {
-        EnhancedPagesConfigManager enhancedPagesConfigManager = 
(EnhancedPagesConfigManager)applicationContext.getBean("noExtensionsEnhancedPagesConfigManager");
+    public void noExtensionPages() throws Exception {
+        EnhancedPagesConfigManager enhancedPagesConfigManager = 
(EnhancedPagesConfigManager)applicationContext.getBean("noExtensionPages");
         final Map<String,PageFragment> pages = 
enhancedPagesConfigManager.getConfig().getPages();
 
         assertEquals(1, pages.size());
@@ -58,9 +60,9 @@ public class EnhancedPagesConfigManagerT
     }
 
     @Test
-    public void snsEnhancedPageRoutesManager() throws Exception {
+    public void snsPages() throws Exception {
 
-        EnhancedPagesConfigManager snsRemovedEnhancedPagesConfigManager = 
(EnhancedPagesConfigManager)applicationContext.getBean("snsRemovingEnhancedPagesConfigManager");
+        EnhancedPagesConfigManager snsRemovedEnhancedPagesConfigManager = 
(EnhancedPagesConfigManager)applicationContext.getBean("snsPages");
 
         final Map<String,PageFragment> pages = 
snsRemovedEnhancedPagesConfigManager.getConfig().getPages();
         // although two root pageFragments with name 'top' we only expect one 
of them (the second!)
@@ -79,9 +81,9 @@ public class EnhancedPagesConfigManagerT
 
 
     @Test
-    public void abstractRemovingEnhancedPageRoutesManager() throws Exception {
+    public void abstractPages() throws Exception {
 
-        EnhancedPagesConfigManager abstractRemovingEnhancedPagesConfigManager 
= 
(EnhancedPagesConfigManager)applicationContext.getBean("abstractPagesConfigManager");
+        EnhancedPagesConfigManager abstractRemovingEnhancedPagesConfigManager 
= (EnhancedPagesConfigManager)applicationContext.getBean("abstractPages");
 
         final Map<String,PageFragment> pages = 
abstractRemovingEnhancedPagesConfigManager.getConfig().getPages();
         /* although four root page fragments are present in 
abstractPageDefinitions.xml, only 2 of them should be
@@ -101,8 +103,8 @@ public class EnhancedPagesConfigManagerT
 
 
     @Test
-    public void simplePageExtensionPageRoutesManager() throws Exception {
-        EnhancedPagesConfigManager enhancedPagesConfigManager = 
(EnhancedPagesConfigManager)applicationContext.getBean("simplePageExtensionEnhancedPagesConfigManager");
+    public void extensionSimplePages() throws Exception {
+        EnhancedPagesConfigManager enhancedPagesConfigManager = 
(EnhancedPagesConfigManager)applicationContext.getBean("extensionSimplePages");
 
         final Map<String,PageFragment> pages = 
enhancedPagesConfigManager.getConfig().getPages();
         assertEquals(2, pages.size());
@@ -136,18 +138,186 @@ public class EnhancedPagesConfigManagerT
         assertFalse(home.getChildren().get(0) == 
standard.getChildren().get(0));
         assertFalse(home.getChildren().get(1) == 
standard.getChildren().get(1));
         assertFalse(home.getChildren().get(2) == 
standard.getChildren().get(2));
+        {
+            PageFragment sub2 = home.getChildren().get(1);
+            // sub2 has empty string controller
+            assertEquals("", sub2.getController());
+            assertEquals(1, sub2.getChildren().size());
+            assertEquals("sub2sub1", sub2.getChildren().get(0).getName());
+            PageFragment sub2sub1 = sub2.getChildren().get(0);
+            assertEquals("org.apache.rave.unittest.NonExistingController", 
sub2sub1.getController());
+        }
+        {
+            PageFragment sub3 = home.getChildren().get(2);
+            // sub2 has empty string controller
+            assertEquals("org.apache.rave.unittest.NonExistingController", 
sub3.getController());
+            assertEquals(1, sub3.getChildren().size());
+            assertEquals("sub3sub1", sub3.getChildren().get(0).getName());
+            PageFragment sub3sub1 = sub3.getChildren().get(0);
+            assertEquals("org.apache.rave.unittest.NonExistingController", 
sub3sub1.getController());
+        }
+        // the resolved model should have set all 'extends' to null
+        assertTrue(allExtendsAreNull(pages));
+    }
+
+    @Test
+    public void extensionMergingPages() {
+        /*
+         * For this unit test, we expect 'home', 'agenda' and 'news', which 
all extend from 'standard' to have the standard page fragment
+         * children to be correctly merged or added : 'standard' page itself 
is marked as ABSTRACT, so should not be part
+         * of the end result
+         */
 
-        PageFragment sub2 = home.getChildren().get(1);
-        // sub2 has empty string controller
-        assertEquals("", sub2.getController());
-        assertEquals(1, sub2.getChildren().size());
-        assertEquals("sub2sub1", sub2.getChildren().get(0).getName());
-        PageFragment sub2sub1 = sub2.getChildren().get(0);
-        assertEquals("org.apache.rave.unittest.NonExistingController", 
sub2sub1.getController());
+        EnhancedPagesConfigManager enhancedPagesConfigManager = 
(EnhancedPagesConfigManager)applicationContext.getBean("extensionMergingPages");
+        final Map<String,PageFragment> pages = 
enhancedPagesConfigManager.getConfig().getPages();
+        assertEquals(3, pages.size());
 
+        // standard was ABSTRACT and thus should be removed
+        assertNull(pages.get("standard"));
+
+        // EXPECTATIONS FOR HOME
+        {
+            final PageFragment home = pages.get("home");
+            assertNotNull(home);
+            assertEquals(3, home.getChildren().size());
+            assertEquals("sub1",home.getChildren().get(0).getName());
+            assertEquals("sub2",home.getChildren().get(1).getName());
+            assertEquals("sub3",home.getChildren().get(2).getName());
+
+            {
+                PageFragment home_sub1 = home.getChildren().get(0);
+                assertEquals(0,home_sub1.getChildren().size());
+            }
+            {
+                PageFragment home_sub2 = home.getChildren().get(1);
+                // sub2 has empty string controller
+                assertEquals("", home_sub2.getController());
+                assertEquals(1, home_sub2.getChildren().size());
+                assertEquals("sub2sub1", 
home_sub2.getChildren().get(0).getName());
+                PageFragment sub2sub1 = home_sub2.getChildren().get(0);
+                assertEquals("org.apache.rave.unittest.NonExistingController", 
sub2sub1.getController());
+            }
+            {
+                PageFragment home_sub3 = home.getChildren().get(2);
+                // sub2 has empty string controller
+                assertEquals("org.apache.rave.unittest.NonExistingController", 
home_sub3.getController());
+                assertEquals(1, home_sub3.getChildren().size());
+                assertEquals("sub3sub1", 
home_sub3.getChildren().get(0).getName());
+                PageFragment sub3sub1 = home_sub3.getChildren().get(0);
+                assertEquals("org.apache.rave.unittest.NonExistingController", 
sub3sub1.getController());
+            }
+        }
+
+        // EXPECTATIONS FOR AGENDA
+        // Agenda has a child <pageFragment name="sub4"/> of its own. We 
expect this fragment to be the first
+        // child, before the inherited sub1, sub2 and sub3
+        {
+            final PageFragment agenda = pages.get("agenda");
+            assertNotNull(agenda);
+            assertEquals(4, agenda.getChildren().size());
+            assertEquals("sub4",agenda.getChildren().get(0).getName());
+            assertEquals("sub1",agenda.getChildren().get(1).getName());
+            assertEquals("sub2",agenda.getChildren().get(2).getName());
+            assertEquals("sub3",agenda.getChildren().get(3).getName());
+
+            {
+                PageFragment agenda_sub4 = agenda.getChildren().get(0);
+                assertEquals(0, agenda_sub4.getChildren().size());
+            }
+            {
+                PageFragment agenda_sub1 = agenda.getChildren().get(1);
+                assertEquals(0,agenda_sub1.getChildren().size());
+            }
+            {
+                PageFragment agenda_sub2 = agenda.getChildren().get(2);
+                // sub2 has empty string controller
+                assertEquals("", agenda_sub2.getController());
+                assertEquals(1, agenda_sub2.getChildren().size());
+                assertEquals("sub2sub1", 
agenda_sub2.getChildren().get(0).getName());
+                PageFragment sub2sub1 = agenda_sub2.getChildren().get(0);
+                assertEquals("org.apache.rave.unittest.NonExistingController", 
sub2sub1.getController());
+            }
+            {
+                PageFragment agenda_sub3 = agenda.getChildren().get(3);
+                // sub2 has empty string controller
+                assertEquals("org.apache.rave.unittest.NonExistingController", 
agenda_sub3.getController());
+                assertEquals(1, agenda_sub3.getChildren().size());
+                assertEquals("sub3sub1", 
agenda_sub3.getChildren().get(0).getName());
+                PageFragment sub3sub1 = agenda_sub3.getChildren().get(0);
+                assertEquals("org.apache.rave.unittest.NonExistingController", 
sub3sub1.getController());
+            }
+        }
+
+        // EXPECTATIONS FOR NEWS
+        // News has a child of its own that is also configured in STANDARD :
+        // <pageFragment name="sub2" 
controller="org.apache.rave.unittest.NonExistingNewsController">
+        //     <pageFragment name="news" />
+        // </pageFragment>
+        // Since sub2 is of NEWS itself, For NEWS we thus first expect sub2, 
then sub1 and sub3 from STANDARD.
+        // sub2 should have the controller equal to 
'org.apache.rave.unittest.NonExistingNewsController' and not
+        // 'org.apache.rave.unittest.NonExistingController' from standard
+        // sub2 from NEWS has a child 'sub2subnews', but also gets the 
'sub2sub1' child from STANDARD
+        {
+            final PageFragment news = pages.get("news");
+            assertNotNull(news);
+            assertEquals(3, news.getChildren().size());
+            // first own child sub2
+            assertEquals("sub2",news.getChildren().get(0).getName());
+            // then the inherited childs
+            assertEquals("sub1",news.getChildren().get(1).getName());
+            assertEquals("sub3",news.getChildren().get(2).getName());
+
+            {
+                PageFragment news_sub2 = news.getChildren().get(0);
+                assertEquals(2, news_sub2.getChildren().size());
+                
assertEquals("org.apache.rave.unittest.NonExistingNewsController", 
news_sub2.getController());
+                PageFragment sub2subnews = news_sub2.getChildren().get(0);
+                assertEquals("sub2subnews",sub2subnews.getName());
+                PageFragment sub2sub1 = news_sub2.getChildren().get(1);
+                assertEquals("sub2sub1",sub2sub1.getName());
+                
assertEquals("org.apache.rave.unittest.NonExistingController",sub2sub1.getController());
+            }
+            {
+                PageFragment news_sub1 = news.getChildren().get(1);
+                assertEquals(0,news_sub1.getChildren().size());
+            }
+            {
+                PageFragment news_sub3 = news.getChildren().get(2);
+                // sub2 has empty string controller
+                assertEquals("org.apache.rave.unittest.NonExistingController", 
news_sub3.getController());
+                assertEquals(1, news_sub3.getChildren().size());
+                assertEquals("sub3sub1", 
news_sub3.getChildren().get(0).getName());
+                PageFragment sub3sub1 = news_sub3.getChildren().get(0);
+                assertEquals("org.apache.rave.unittest.NonExistingController", 
sub3sub1.getController());
+            }
+        }
+
+        // the resolved model should have set all 'extends' to null
+        assertTrue(allExtendsAreNull(pages));
     }
 
-    
+    private boolean allExtendsAreNull(final Map<String, PageFragment> pages) {
+        for (PageFragment page : pages.values()) {
+            boolean allAreNull = 
allExtendsAreNull((ExtendablePageFragment)page);    
+            if (!allAreNull) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    private boolean allExtendsAreNull(final ExtendablePageFragment fragment) {
+        if (fragment.getExtends() != null) {
+            return false;
+        }
+        for (PageFragment child : fragment.getChildren()) {
+            boolean allExtendsAreNull = 
allExtendsAreNull((ExtendablePageFragment)child);
+            if (!allExtendsAreNull) {
+                return false;
+            }
+        }
+        return true;
+    }
 
 }
 

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/enhanced-pages-config-manager-test.xml
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/enhanced-pages-config-manager-test.xml?rev=1383999&r1=1383998&r2=1383999&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/enhanced-pages-config-manager-test.xml
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/enhanced-pages-config-manager-test.xml
 Wed Sep 12 15:31:03 2012
@@ -30,7 +30,7 @@
     </property>
   </bean>
 
-  <bean id="noExtensionsEnhancedPagesConfigManager" 
class="org.apache.rave.portal.web.mvc.config.EnhancedPagesConfigManager">
+  <bean id="noExtensionPages" 
class="org.apache.rave.portal.web.mvc.config.EnhancedPagesConfigManager">
     <constructor-arg>
       <bean 
class="org.apache.rave.portal.web.mvc.config.xml.XmlPagesConfigManager">
         <property name="routesPath" value="classpath:routes.xml"/>
@@ -40,7 +40,7 @@
     <property name="enhancers" ref="pageEnhancers"/>
   </bean>
 
-  <bean id="snsRemovingEnhancedPagesConfigManager" 
class="org.apache.rave.portal.web.mvc.config.EnhancedPagesConfigManager">
+  <bean id="snsPages" 
class="org.apache.rave.portal.web.mvc.config.EnhancedPagesConfigManager">
     <constructor-arg>
       <bean 
class="org.apache.rave.portal.web.mvc.config.xml.XmlPagesConfigManager">
         <property name="routesPath" value="classpath:routes.xml"/>
@@ -50,7 +50,7 @@
     <property name="enhancers" ref="pageEnhancers"/>
   </bean>
 
-  <bean id="abstractPagesConfigManager" 
class="org.apache.rave.portal.web.mvc.config.EnhancedPagesConfigManager">
+  <bean id="abstractPages" 
class="org.apache.rave.portal.web.mvc.config.EnhancedPagesConfigManager">
     <constructor-arg>
       <bean 
class="org.apache.rave.portal.web.mvc.config.xml.XmlPagesConfigManager">
         <property name="routesPath" value="classpath:routes.xml"/>
@@ -61,15 +61,27 @@
   </bean>
 
 
-  <bean id="simplePageExtensionEnhancedPagesConfigManager" 
class="org.apache.rave.portal.web.mvc.config.EnhancedPagesConfigManager">
+  <bean id="extensionSimplePages" 
class="org.apache.rave.portal.web.mvc.config.EnhancedPagesConfigManager">
     <constructor-arg>
       <bean 
class="org.apache.rave.portal.web.mvc.config.xml.XmlPagesConfigManager">
         <property name="routesPath" value="classpath:routes.xml"/>
-        <property name="pageDefinitionsPath" 
value="classpath:config/testenhancingmappings/simplePageExtensionPageDefinitions.xml"/>
+        <property name="pageDefinitionsPath" 
value="classpath:config/testenhancingmappings/extensionSimplePageDefinitions.xml"/>
       </bean>
     </constructor-arg>
     <property name="enhancers" ref="pageEnhancers"/>
   </bean>
 
+  <bean id="extensionMergingPages" 
class="org.apache.rave.portal.web.mvc.config.EnhancedPagesConfigManager">
+    <constructor-arg>
+      <bean 
class="org.apache.rave.portal.web.mvc.config.xml.XmlPagesConfigManager">
+        <property name="routesPath" value="classpath:routes.xml"/>
+        <property name="pageDefinitionsPath" 
value="classpath:config/testenhancingmappings/extensionMergingPageDefinitions.xml"/>
+      </bean>
+    </constructor-arg>
+    <property name="enhancers" ref="pageEnhancers"/>
+  </bean>
+
+
+
 </beans>
 

Copied: 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/extensionMergingPageDefinitions.xml
 (from r1383906, 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/mergingPageExtensionPageDefinitions.xml)
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/extensionMergingPageDefinitions.xml?p2=rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/extensionMergingPageDefinitions.xml&p1=rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/mergingPageExtensionPageDefinitions.xml&r1=1383906&r2=1383999&rev=1383999&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/mergingPageExtensionPageDefinitions.xml
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/extensionMergingPageDefinitions.xml
 Wed Sep 12 15:31:03 2012
@@ -18,32 +18,32 @@
   under the License.
   -->
 <pageDefinitions name="default">
-  <pageFragment name="standard" description="Page that is being extended by 
other pages"
+  <pageFragment name="standard" viewName="standard" description="standard" 
abstract="true"
                   controller="org.apache.rave.unittest.NonExistingController">
     <pageFragment name="sub1"/>
     <pageFragment name="sub2" controller="">
       <pageFragment name="sub2sub1" 
controller="org.apache.rave.unittest.NonExistingController"/>
     </pageFragment>
     <pageFragment name="sub3" viewName="pages/test" 
controller="org.apache.rave.unittest.NonExistingController">
-      <pageFragment name="sub3sub1" extends="/some/fragment" 
controller="org.apache.rave.unittest.NonExistingController"/>
+      <pageFragment name="sub3sub1" 
controller="org.apache.rave.unittest.NonExistingController"/>
     </pageFragment>
   </pageFragment>
 
 
-  <pageFragment name="home" extends="/standard" description="Page that is 
being extended by other pages"
+  <pageFragment name="home" extends="/standard" description="home"
                   controller="org.apache.rave.unittest.NonExistingController">
   </pageFragment>
 
-  <pageFragment name="agenda" extends="/standard" >
+  <pageFragment name="agenda" extends="/standard" viewName="agenda">
     <pageFragment name="sub4"/>
   </pageFragment>
 
 
-  <pageFragment name="news" extends="/standard" description="newsdescription">
+  <pageFragment name="news" extends="/standard" description="news">
     <!-- override the controller from 'standard' -->
     <pageFragment name="sub2" 
controller="org.apache.rave.unittest.NonExistingNewsController">
       <!-- a pageFragment that 'standard' does not have. It should also 
inherit 'sub2sub1' -->
-      <pageFragment name="news" />
+      <pageFragment name="sub2subnews" />
     </pageFragment>
   </pageFragment>
 


Reply via email to