All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opencms.jsp.util.TestCmsJspResourceWrapper Maven / Gradle / Ivy

Go to download

OpenCms is an enterprise-ready, easy to use website content management system based on Java and XML technology. Offering a complete set of features, OpenCms helps content managers worldwide to create and maintain beautiful websites fast and efficiently.

The newest version!
/*
 * This library is part of OpenCms -
 * the Open Source Content Management System
 *
 * Copyright (c) Alkacon Software GmbH & Co. KG (http://www.alkacon.com)
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * For further information about Alkacon Software GmbH & Co. KG, please see the
 * company website: http://www.alkacon.com
 *
 * For further information about OpenCms, please see the
 * project website: http://www.opencms.org
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package org.opencms.jsp.util;

import static org.junit.Assert.assertNotEquals;

import org.opencms.file.CmsObject;
import org.opencms.file.CmsProperty;
import org.opencms.file.CmsPropertyDefinition;
import org.opencms.file.CmsResource;
import org.opencms.file.types.CmsResourceTypePlain;
import org.opencms.jsp.CmsJspNavBuilder;
import org.opencms.jsp.CmsJspNavElement;
import org.opencms.jsp.CmsJspResourceWrapper;
import org.opencms.relations.CmsRelationType;
import org.opencms.test.OpenCmsTestCase;
import org.opencms.test.OpenCmsTestProperties;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import junit.framework.Test;

/**
 * Unit tests for the {@link CmsJspResourceWrapper}.

*/ public class TestCmsJspResourceWrapper extends OpenCmsTestCase { /** * Default JUnit constructor.

* * @param arg0 JUnit parameters */ public TestCmsJspResourceWrapper(String arg0) { super(arg0); } /** * Test suite for this test class.

* * @return the test suite */ public static Test suite() { OpenCmsTestProperties.initialize(org.opencms.test.AllTests.TEST_PROPERTIES_PATH); return generateSetupTestWrapper(TestCmsJspResourceWrapper.class, "simpletest", "/"); } /** * Tests for basic wrapper methods.

* * @throws Exception if the test fails */ public void testBasics() throws Exception { CmsObject cms = getCmsObject(); CmsJspResourceWrapper topFolderRes = CmsJspResourceWrapper.wrap(cms, cms.readResource("/")); CmsJspResourceWrapper topFileRes = CmsJspResourceWrapper.wrap(cms, cms.readResource("/index.html")); CmsJspResourceWrapper folderRes = CmsJspResourceWrapper.wrap(cms, cms.readResource("/folder1/")); CmsJspResourceWrapper fileRes = CmsJspResourceWrapper.wrap(cms, cms.readResource("/folder1/index.html")); CmsJspResourceWrapper subFolderRes = CmsJspResourceWrapper.wrap(cms, cms.readResource("/folder1/subfolder12/")); CmsJspResourceWrapper subFileRes = CmsJspResourceWrapper.wrap( cms, cms.readResource("/folder1/subfolder12/index.html")); // Path levels assertEquals(0, topFolderRes.getSitePathLevel()); assertEquals(0, topFileRes.getSitePathLevel()); assertEquals(1, folderRes.getSitePathLevel()); assertEquals(1, fileRes.getSitePathLevel()); assertEquals(2, subFolderRes.getSitePathLevel()); assertEquals(2, subFileRes.getSitePathLevel()); assertEquals(2, topFolderRes.getRootPathLevel()); assertEquals(2, topFileRes.getRootPathLevel()); assertEquals(3, folderRes.getRootPathLevel()); assertEquals(3, fileRes.getRootPathLevel()); assertEquals(4, subFolderRes.getRootPathLevel()); assertEquals(4, subFileRes.getRootPathLevel()); // Parent folder resource operations assertEquals(topFolderRes, topFileRes.getFolder()); assertEquals(topFolderRes, folderRes.getParentFolder()); assertEquals(topFolderRes, fileRes.getParentFolder().getParentFolder()); assertEquals(topFolderRes, subFolderRes.getParentFolder().getParentFolder()); assertEquals(folderRes, fileRes.getFolder()); assertEquals(subFolderRes, subFileRes.getFolder()); // Site path access assertEquals("/", folderRes.getParentFolder().getSitePath()); assertEquals("/folder1/", fileRes.getParentFolder().getSitePath()); assertEquals("/folder1/", fileRes.getSitePathParentFolder()); assertEquals("/folder1/subfolder12/", subFolderRes.getSitePath()); assertEquals("/folder1/subfolder12/", subFileRes.getSitePathParentFolder()); // Root path access assertEquals("/sites/default/", folderRes.getParentFolder().getRootPath()); assertEquals("/sites/default/folder1/", fileRes.getParentFolder().getRootPath()); assertEquals("/sites/default/folder1/", fileRes.getRootPathParentFolder()); assertEquals("/sites/default/folder1/subfolder12/", subFolderRes.getRootPath()); assertEquals("/sites/default/folder1/subfolder12/", subFileRes.getRootPathParentFolder()); // Extensions assertEquals("html", topFileRes.getExtension()); assertEquals(topFileRes.getExtension(), topFileRes.getResourceExtension()); // File names assertEquals("index.html", subFileRes.getName()); assertEquals(subFileRes.getName(), subFileRes.getResourceName()); } /** * Tests for nav elements with wrapper.

* * @throws Exception if the test fails */ public void testNavElements() throws Exception { CmsObject cms = getCmsObject(); CmsJspResourceWrapper topFolderRes = CmsJspResourceWrapper.wrap(cms, cms.readResource("/")); CmsJspResourceWrapper subFolderRes = CmsJspResourceWrapper.wrap(cms, cms.readResource("/folder1/")); CmsJspNavBuilder navBuilder = new CmsJspNavBuilder(cms); CmsJspNavElement navElemTop = topFolderRes.getNavigation(); assertEquals(-1, navElemTop.getNavTreeLevel()); CmsJspNavElement navElemSub = subFolderRes.getNavigation(); assertEquals(0, navElemSub.getNavTreeLevel()); CmsJspNavElement navElemBuildTop = navBuilder.getNavigationForResource("/"); assertEquals(navElemBuildTop, navElemTop); assertEquals(-1, navElemBuildTop.getNavTreeLevel()); assertEquals(navElemBuildTop.getNavTreeLevel(), navElemTop.getNavTreeLevel()); assertEquals(navElemSub, subFolderRes.getNavBuilder().getNavigationForResource()); assertEquals(navElemTop, topFolderRes.getNavBuilder().getNavigationForResource()); CmsJspNavElement navElemBuildSub = navBuilder.getNavigationForResource("/folder1/"); assertEquals(navElemBuildSub, navElemSub); assertEquals(0, navElemBuildSub.getNavTreeLevel()); assertEquals(navElemBuildSub.getNavTreeLevel(), navElemSub.getNavTreeLevel()); // default file access CmsJspResourceWrapper indexRes = CmsJspResourceWrapper.wrap(cms, cms.readResource("/folder1/index.html")); assertNotNull(indexRes); assertEquals(indexRes, subFolderRes.getNavigationDefaultFile()); // navigation in folder access List subFolderNav = subFolderRes.getNavigationForFolder(); assertEquals(7, subFolderNav.size()); } /** * Tests for parent folder access.

* * @throws Exception if the test fails */ public void testParentFolders() throws Exception { CmsObject cms = getCmsObject(); CmsJspResourceWrapper topFolderRes = CmsJspResourceWrapper.wrap(cms, cms.readResource("/")); CmsJspResourceWrapper folder1Res = CmsJspResourceWrapper.wrap(cms, cms.readResource("/folder1/")); CmsJspResourceWrapper folderRes = CmsJspResourceWrapper.wrap(cms, cms.readResource("/folder1/subfolder12/")); CmsJspResourceWrapper fileRes = CmsJspResourceWrapper.wrap( cms, cms.readResource("/folder1/subfolder12/index.html")); assertNull(topFolderRes.getParentFolder()); assertEquals(2, folderRes.getParentFolders().size()); assertEquals(3, fileRes.getParentFolders().size()); assertEquals(folderRes, fileRes.getParentFolders().get(0)); assertEquals(topFolderRes, fileRes.getParentFolders().get(2)); assertTrue(topFolderRes.isParentFolderOf(fileRes.getSitePath())); assertTrue(topFolderRes.isParentFolderOf(folderRes.getSitePath())); assertTrue(folderRes.isParentFolderOf(fileRes.getSitePath())); assertTrue(folderRes.isParentFolderOf("/folder1/subfolder12/iDontExist.butWhoCares")); assertTrue(topFolderRes.isParentFolderOf(fileRes)); assertTrue(topFolderRes.isParentFolderOf(folderRes)); assertTrue(folderRes.isParentFolderOf(fileRes)); assertFalse(folderRes.isParentFolderOf(topFolderRes)); assertFalse(fileRes.isParentFolderOf(folderRes)); assertFalse(folderRes.isParentFolderOf("/folder1/subfolder12/")); assertFalse(folderRes.isParentFolderOf((String)null)); assertFalse(folderRes.isParentFolderOf((CmsResource)null)); assertTrue(fileRes.isChildResourceOf(topFolderRes.getSitePath())); assertTrue(folderRes.isChildResourceOf(topFolderRes.getSitePath())); assertTrue(fileRes.isChildResourceOf(folderRes.getSitePath())); assertTrue(fileRes.isChildResourceOf("/folder1/subfolder12")); assertFalse(fileRes.isChildResourceOf((String)null)); assertFalse(fileRes.isChildResourceOf((CmsResource)null)); assertTrue(fileRes.isChildResourceOf(topFolderRes)); assertTrue(folderRes.isChildResourceOf(topFolderRes)); assertTrue(fileRes.isChildResourceOf(folderRes)); assertEquals(folderRes, fileRes.getParentFolder()); assertEquals(folder1Res, folderRes.getParentFolder()); assertEquals(topFolderRes, folder1Res.getParentFolder()); assertEquals("/folder1/subfolder12/", fileRes.getSitePathFolder()); assertEquals("/folder1/subfolder12/", fileRes.getSitePathParentFolder()); assertEquals("/folder1/", folderRes.getParentFolder().getSitePathFolder()); assertEquals("/folder1/", folderRes.getSitePathParentFolder()); assertEquals("/", folder1Res.getSitePathParentFolder()); } /** * Tests for wrapper access to properties.

* * @throws Exception if the test fails */ public void testProperties() throws Exception { CmsObject cms = getCmsObject(); CmsJspResourceWrapper res1 = CmsJspResourceWrapper.wrap(cms, cms.readResource("/index.html")); // Property access Map props = res1.getProperty(); assertNotNull(props); String title = props.get(CmsPropertyDefinition.PROPERTY_TITLE); assertEquals("Index page", title); // Localized properties String[] testLocales = TestCmsJspVfsAccessBean.setupPropertyLocaleTest(cms); CmsJspResourceWrapper wrap1 = CmsJspResourceWrapper.wrap( cms, cms.readResource("/test_read_property_locale/test.txt")); String[] expectedPostfix = new String[] {"", "_de", "_de_DE", "_en", "_en", ""}; String directPropertyName = "direct"; String searchedPropertyName = "searched"; for (int i = 0; i < testLocales.length; i++) { // without search assertEquals( directPropertyName + expectedPostfix[i], wrap1.getPropertyLocale().get(testLocales[i]).get(directPropertyName)); assertEquals( directPropertyName + expectedPostfix[i], wrap1.getPropertyLocale().get(testLocales[i]).get(directPropertyName)); assertEquals( CmsProperty.getNullProperty().getValue(), wrap1.getPropertyLocale().get(testLocales[i]).get(searchedPropertyName)); assertEquals( CmsProperty.getNullProperty().getValue(), wrap1.getPropertyLocale().get(testLocales[i]).get(searchedPropertyName)); // with search assertEquals( directPropertyName + expectedPostfix[i], wrap1.getPropertyLocaleSearch().get(testLocales[i]).get(directPropertyName)); assertEquals( directPropertyName + expectedPostfix[i], wrap1.getPropertyLocaleSearch().get(testLocales[i]).get(directPropertyName)); assertEquals( searchedPropertyName + expectedPostfix[i], wrap1.getPropertyLocaleSearch().get(testLocales[i]).get(searchedPropertyName)); assertEquals( searchedPropertyName + expectedPostfix[i], wrap1.getPropertyLocaleSearch().get(testLocales[i]).get(searchedPropertyName)); } } /** * Test related resource accessors. * * @throws Exception - */ public void testRelations() throws Exception { CmsObject cms = getCmsObject(); String src = "/testRelations1.txt"; String tgt = "/testRelations2.txt"; CmsResource srcRes = cms.createResource(src, CmsResourceTypePlain.getStaticTypeId()); CmsResource tgtRes = cms.createResource(tgt, CmsResourceTypePlain.getStaticTypeId()); cms.addRelationToResource(src, tgt, CmsRelationType.CATEGORY.getName()); CmsJspResourceWrapper srcWrapper = CmsJspResourceWrapper.wrap(cms, cms.readResource(src)); assertEquals( Arrays.asList(tgtRes.getStructureId()), srcWrapper.getOutgoingRelations().stream().map(res -> res.getStructureId()).collect(Collectors.toList())); assertEquals(0, srcWrapper.getIncomingRelations().size()); CmsJspResourceWrapper tgtWrapper = CmsJspResourceWrapper.wrap(cms, cms.readResource(tgt)); assertEquals( Arrays.asList(srcRes.getStructureId()), tgtWrapper.getIncomingRelations().stream().map(res -> res.getStructureId()).collect(Collectors.toList())); assertEquals(0, tgtWrapper.getOutgoingRelations().size()); } /** * Tests for resource wrapper identities.

* * @throws Exception if the test fails */ public void testResourceIdentities() throws Exception { CmsObject cms = getCmsObject(); CmsResource res1 = cms.readResource("/folder1/index.html"); CmsJspResourceWrapper wrap1 = CmsJspResourceWrapper.wrap(cms, res1); // wrapping a wrapper returns the wrapper assertSame(wrap1, CmsJspResourceWrapper.wrap(cms, wrap1)); // wrapping a resource returns a new wrapper assertNotSame(wrap1, CmsJspResourceWrapper.wrap(cms, res1)); // new wrapper and exiting wrapper of same resource must be equal assertEquals(wrap1, CmsJspResourceWrapper.wrap(cms, res1)); // also same hash code assertEquals(wrap1.hashCode(), CmsJspResourceWrapper.wrap(cms, res1).hashCode()); // new context with same URI CmsObject cms2 = getCmsObject(); CmsResource res2 = cms2.readResource("/folder1/index.html"); CmsJspResourceWrapper wrap2 = CmsJspResourceWrapper.wrap(cms2, res2); // wrapper created from different contexts with same URI are not the same, but must be equal assertNotSame(wrap1, wrap2); assertEquals(wrap1, wrap2); assertEquals(wrap1.hashCode(), wrap2.hashCode()); // new context with different URI CmsObject cms3 = getCmsObject(); assertNotSame(cms, cms3); cms3.getRequestContext().setSiteRoot("/sites/default/folder1/"); assertNotEquals(cms3.getRequestContext().getSiteRoot(), cms.getRequestContext().getSiteRoot()); CmsResource res3 = cms3.readResource("/index.html"); CmsJspResourceWrapper wrap3 = CmsJspResourceWrapper.wrap(cms3, res3); // wrapper created from different contexts with different URI are not the same, but must be equal assertNotSame(wrap1, wrap3); assertEquals(wrap1, wrap3); assertEquals(wrap1.hashCode(), wrap3.hashCode()); // wrapping a wrapper with a different context URI must create a different wrapper CmsJspResourceWrapper wrap4 = CmsJspResourceWrapper.wrap(cms3, wrap1); assertNotSame(wrap1, wrap4); } /** * Tests for the {@link CmsJspVfsAccessBean#getReadXml()} method.

* * @throws Exception if the test fails */ public void testXml() throws Exception { CmsObject cms = getCmsObject(); // access XML content CmsJspResourceWrapper res1 = CmsJspResourceWrapper.wrap(cms, cms.readResource("/xmlcontent/article_0001.html")); CmsJspContentAccessBean content = res1.getXml(); assertTrue(res1.getIsXml()); assertEquals("Alkacon Software", content.getValue().get("Author").toString()); // access XML page CmsJspResourceWrapper res2 = CmsJspResourceWrapper.wrap(cms, cms.readResource("/index.html")); content = res2.getXml(); assertTrue(res2.getIsXml()); assertEquals(Boolean.TRUE, content.getHasValue().get("body")); assertEquals(Boolean.FALSE, content.getHasValue().get("element")); System.out.println(content.getValue().get("body")); // access folder as XML CmsJspResourceWrapper folderRes = CmsJspResourceWrapper.wrap(cms, cms.readResource("/folder1/")); assertFalse(folderRes.getIsXml()); assertNull(folderRes.getXml()); // access file as XML CmsJspResourceWrapper fileRes = CmsJspResourceWrapper.wrap(cms, cms.readResource("/folder1/image1.gif")); assertFalse(fileRes.getIsXml()); assertNull(fileRes.getXml()); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy