| /* |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| */ |
| package org.apache.wiki.content; |
| |
| import net.sf.ehcache.CacheManager; |
| import org.apache.wiki.TestEngine; |
| import org.apache.wiki.WikiContext; |
| import org.apache.wiki.WikiEngine; |
| import org.apache.wiki.api.core.Attachment; |
| import org.apache.wiki.api.core.Page; |
| import org.apache.wiki.api.exceptions.WikiException; |
| import org.apache.wiki.api.providers.WikiProvider; |
| import org.apache.wiki.attachment.AttachmentManager; |
| import org.apache.wiki.pages.PageManager; |
| import org.apache.wiki.references.ReferenceManager; |
| import org.junit.jupiter.api.AfterEach; |
| import org.junit.jupiter.api.Assertions; |
| import org.junit.jupiter.api.BeforeEach; |
| import org.junit.jupiter.api.Test; |
| |
| import java.util.Collection; |
| import java.util.Properties; |
| |
| public class PageRenamerTest |
| { |
| TestEngine m_engine; |
| |
| @BeforeEach |
| public void setUp() throws Exception { |
| final Properties props = TestEngine.getTestProperties(); |
| props.setProperty( WikiEngine.PROP_MATCHPLURALS, "true" ); |
| CacheManager.getInstance().removeAllCaches(); |
| TestEngine.emptyWorkDir(); |
| m_engine = new TestEngine(props); |
| } |
| |
| @AfterEach |
| public void tearDown() { |
| m_engine.deleteTestPage("TestPage"); |
| m_engine.deleteTestPage("TestPage2"); |
| m_engine.deleteTestPage("FooTest"); |
| m_engine.deleteTestPage("Test"); |
| m_engine.deleteTestPage("CdauthNew"); |
| m_engine.deleteTestPage("Cdauth"); |
| m_engine.deleteTestPage("TestPageReferring"); |
| m_engine.deleteTestPage("TestPageReferredNew"); |
| m_engine.deleteTestPage("Main"); |
| m_engine.deleteTestPage("Main8887"); |
| m_engine.deleteTestPage("TestPage1234"); |
| m_engine.deleteTestPage("TestPageReferred"); |
| m_engine.deleteTestPage("RenameTest"); |
| m_engine.deleteTestPage("Link one"); |
| m_engine.deleteTestPage("Link uno"); |
| m_engine.deleteTestPage("Link two"); |
| |
| TestEngine.emptyWorkDir(); |
| } |
| |
| @Test |
| public void testSimpleRename() throws Exception { |
| // Count the number of existing references |
| final int refCount = m_engine.getManager( ReferenceManager.class ).findCreated().size(); |
| |
| m_engine.saveText("TestPage", "the big lazy dog thing" ); |
| |
| final Page p = m_engine.getManager( PageManager.class ).getPage("TestPage"); |
| |
| final WikiContext context = new WikiContext(m_engine, p); |
| |
| m_engine.getManager( PageRenamer.class ).renamePage(context, "TestPage", "FooTest", false); |
| |
| final Page newpage = m_engine.getManager( PageManager.class ).getPage("FooTest"); |
| |
| Assertions.assertNotNull( newpage, "no new page" ); |
| Assertions.assertNull( m_engine.getManager( PageManager.class ).getPage("TestPage"), "old page not gone" ); |
| |
| // Refmgr |
| final Collection< String > refs = m_engine.getManager( ReferenceManager.class ).findCreated(); |
| |
| Assertions.assertTrue( refs.contains("FooTest"), "FooTest does not exist" ); |
| Assertions.assertFalse( refs.contains("TestPage"), "TestPage exists" ); |
| Assertions.assertEquals( refCount+1, refs.size(), "wrong list size" ); |
| } |
| |
| @Test |
| public void testReferrerChange() |
| throws Exception |
| { |
| m_engine.saveText("TestPage", "foofoo" ); |
| m_engine.saveText("TestPage2", "[TestPage]"); |
| |
| final Page p = m_engine.getManager( PageManager.class ).getPage("TestPage"); |
| |
| final WikiContext context = new WikiContext(m_engine, p); |
| |
| m_engine.getManager( PageRenamer.class ).renamePage(context, "TestPage", "FooTest", true); |
| |
| final String data = m_engine.getManager( PageManager.class ).getPureText("TestPage2", WikiProvider.LATEST_VERSION); |
| |
| Assertions.assertEquals( "[FooTest]", data.trim(), "no rename" ); |
| |
| Collection< String > refs = m_engine.getManager( ReferenceManager.class ).findReferrers("TestPage"); |
| |
| Assertions.assertNull( refs, "oldpage" ); |
| |
| refs = m_engine.getManager( ReferenceManager.class ).findReferrers( "FooTest" ); |
| Assertions.assertEquals( 1, refs.size(), "new size" ); |
| Assertions.assertEquals( "TestPage2", refs.iterator().next(), "wrong ref" ); |
| } |
| |
| @Test |
| public void testReferrerChangeCC() |
| throws Exception |
| { |
| m_engine.saveText("TestPage", "foofoo" ); |
| m_engine.saveText("TestPage2", "TestPage"); |
| |
| final Page p = m_engine.getManager( PageManager.class ).getPage("TestPage"); |
| |
| final WikiContext context = new WikiContext(m_engine, p); |
| |
| m_engine.getManager( PageRenamer.class ).renamePage(context, "TestPage", "FooTest", true); |
| |
| final String data = m_engine.getManager( PageManager.class ).getPureText("TestPage2", WikiProvider.LATEST_VERSION); |
| |
| Assertions.assertEquals( "FooTest", data.trim(), "no rename" ); |
| Collection< String > refs = m_engine.getManager( ReferenceManager.class ).findReferrers("TestPage"); |
| |
| Assertions.assertNull( refs, "oldpage" ); |
| |
| refs = m_engine.getManager( ReferenceManager.class ).findReferrers( "FooTest" ); |
| Assertions.assertEquals( 1, refs.size(), "new size" ); |
| Assertions.assertEquals( "TestPage2", refs.iterator().next(), "wrong ref" ); |
| } |
| |
| @Test |
| public void testReferrerChangeAnchor() |
| throws Exception |
| { |
| m_engine.saveText("TestPage", "foofoo" ); |
| m_engine.saveText("TestPage2", "[TestPage#heading1]"); |
| |
| final Page p = m_engine.getManager( PageManager.class ).getPage("TestPage"); |
| |
| final WikiContext context = new WikiContext(m_engine, p); |
| |
| m_engine.getManager( PageRenamer.class ).renamePage(context, "TestPage", "FooTest", true); |
| |
| final String data = m_engine.getManager( PageManager.class ).getPureText("TestPage2", WikiProvider.LATEST_VERSION); |
| |
| Assertions.assertEquals( "[FooTest#heading1]", data.trim(), "no rename" ); |
| Collection< String > refs = m_engine.getManager( ReferenceManager.class ).findReferrers("TestPage"); |
| |
| Assertions.assertNull( refs, "oldpage" ); |
| |
| refs = m_engine.getManager( ReferenceManager.class ).findReferrers( "FooTest" ); |
| Assertions.assertEquals( 1, refs.size(), "new size" ); |
| Assertions.assertEquals( "TestPage2", refs.iterator().next(), "wrong ref" ); |
| } |
| |
| @Test |
| public void testReferrerChangeMultilink() |
| throws Exception |
| { |
| m_engine.saveText("TestPage", "foofoo" ); |
| m_engine.saveText("TestPage2", "[TestPage] [TestPage] [linktext|TestPage] TestPage [linktext|TestPage] [TestPage#Anchor] [TestPage] TestPage [TestPage]"); |
| |
| final Page p = m_engine.getManager( PageManager.class ).getPage("TestPage"); |
| |
| final WikiContext context = new WikiContext(m_engine, p); |
| |
| m_engine.getManager( PageRenamer.class ).renamePage(context, "TestPage", "FooTest", true); |
| |
| final String data = m_engine.getManager( PageManager.class ).getPureText("TestPage2", WikiProvider.LATEST_VERSION); |
| |
| Assertions.assertEquals( "[FooTest] [FooTest] [linktext|FooTest] FooTest [linktext|FooTest] [FooTest#Anchor] [FooTest] FooTest [FooTest]", |
| data.trim(), |
| "no rename" ); |
| |
| Collection< String > refs = m_engine.getManager( ReferenceManager.class ).findReferrers("TestPage"); |
| |
| Assertions.assertNull( refs, "oldpage" ); |
| |
| refs = m_engine.getManager( ReferenceManager.class ).findReferrers( "FooTest" ); |
| Assertions.assertEquals( 1, refs.size(), "new size" ); |
| Assertions.assertEquals( "TestPage2", refs.iterator().next(), "wrong ref" ); |
| } |
| |
| @Test |
| public void testReferrerNoWikiName() |
| throws Exception |
| { |
| m_engine.saveText("Test","foo"); |
| m_engine.saveText("TestPage2", "[Test] [Test#anchor] test Test [test] [link|test] [link|test]"); |
| |
| final Page p = m_engine.getManager( PageManager.class ).getPage("TestPage"); |
| |
| final WikiContext context = new WikiContext(m_engine, p); |
| |
| m_engine.getManager( PageRenamer.class ).renamePage(context, "Test", "TestPage", true); |
| |
| final String data = m_engine.getManager( PageManager.class ).getPureText("TestPage2", WikiProvider.LATEST_VERSION ); |
| |
| Assertions.assertEquals( "[TestPage] [TestPage#anchor] test Test [TestPage] [link|TestPage] [link|TestPage]", data.trim(), "wrong data" ); |
| } |
| |
| @Test |
| public void testAttachmentChange() |
| throws Exception |
| { |
| m_engine.saveText("TestPage", "foofoo" ); |
| m_engine.saveText("TestPage2", "[TestPage/foo.txt] [linktext|TestPage/bar.jpg]"); |
| |
| m_engine.addAttachment("TestPage", "foo.txt", "testing".getBytes() ); |
| m_engine.addAttachment("TestPage", "bar.jpg", "pr0n".getBytes() ); |
| final Page p = m_engine.getManager( PageManager.class ).getPage("TestPage"); |
| |
| final WikiContext context = new WikiContext(m_engine, p); |
| |
| m_engine.getManager( PageRenamer.class ).renamePage(context, "TestPage", "FooTest", true); |
| |
| final String data = m_engine.getManager( PageManager.class ).getPureText("TestPage2", WikiProvider.LATEST_VERSION); |
| |
| Assertions.assertEquals( "[FooTest/foo.txt] [linktext|FooTest/bar.jpg]", data.trim(), "no rename" ); |
| |
| Attachment att = m_engine.getManager( AttachmentManager.class ).getAttachmentInfo("FooTest/foo.txt"); |
| Assertions.assertNotNull( att, "footext" ); |
| |
| att = m_engine.getManager( AttachmentManager.class ).getAttachmentInfo("FooTest/bar.jpg"); |
| Assertions.assertNotNull( att, "barjpg" ); |
| |
| att = m_engine.getManager( AttachmentManager.class ).getAttachmentInfo("TestPage/bar.jpg"); |
| Assertions.assertNull( att, "testpage/bar.jpg exists" ); |
| |
| att = m_engine.getManager( AttachmentManager.class ).getAttachmentInfo("TestPage/foo.txt"); |
| Assertions.assertNull( att, "testpage/foo.txt exists" ); |
| |
| Collection< String > refs = m_engine.getManager( ReferenceManager.class ).findReferrers("TestPage/bar.jpg"); |
| |
| Assertions.assertNull( refs, "oldpage" ); |
| |
| refs = m_engine.getManager( ReferenceManager.class ).findReferrers( "FooTest/bar.jpg" ); |
| Assertions.assertEquals( 1, refs.size(), "new size" ); |
| Assertions.assertEquals( "TestPage2", refs.iterator().next(), "wrong ref" ); |
| } |
| |
| @Test |
| public void testSamePage() throws Exception |
| { |
| m_engine.saveText( "TestPage", "[TestPage]"); |
| |
| rename( "TestPage", "FooTest" ); |
| |
| final Page p = m_engine.getManager( PageManager.class ).getPage( "FooTest" ); |
| |
| Assertions.assertNotNull( p, "no page" ); |
| |
| Assertions.assertEquals("[FooTest]", m_engine.getManager( PageManager.class ).getText("FooTest").trim() ); |
| } |
| |
| @Test |
| public void testBrokenLink1() throws Exception |
| { |
| m_engine.saveText( "TestPage", "hubbub"); |
| m_engine.saveText( "TestPage2", "[TestPage|]" ); |
| |
| rename( "TestPage", "FooTest" ); |
| |
| final Page p = m_engine.getManager( PageManager.class ).getPage( "FooTest" ); |
| |
| Assertions.assertNotNull( p, "no page" ); |
| |
| // Should be no change |
| Assertions.assertEquals("[TestPage|]", m_engine.getManager( PageManager.class ).getText("TestPage2").trim() ); |
| } |
| |
| @Test |
| public void testBrokenLink2() throws Exception |
| { |
| m_engine.saveText( "TestPage", "hubbub"); |
| m_engine.saveText( "TestPage2", "[|TestPage]" ); |
| |
| final Page p; |
| rename( "TestPage", "FooTest" ); |
| |
| p = m_engine.getManager( PageManager.class ).getPage( "FooTest" ); |
| |
| Assertions.assertNotNull( p, "no page" ); |
| |
| Assertions.assertEquals("[|FooTest]", m_engine.getManager( PageManager.class ).getText("TestPage2").trim() ); |
| } |
| |
| private void rename( final String src, final String dst ) throws WikiException |
| { |
| final Page p = m_engine.getManager( PageManager.class ).getPage(src); |
| |
| final WikiContext context = new WikiContext(m_engine, p); |
| |
| m_engine.getManager( PageRenamer.class ).renamePage(context, src, dst, true); |
| } |
| |
| @Test |
| public void testBug25() throws Exception |
| { |
| final String src = "[Cdauth/attach.txt] [link|Cdauth/attach.txt] [cdauth|Cdauth/attach.txt]"+ |
| "[CDauth/attach.txt] [link|CDauth/attach.txt] [cdauth|CDauth/attach.txt]"+ |
| "[cdauth/attach.txt] [link|cdauth/attach.txt] [cdauth|cdauth/attach.txt]"; |
| |
| final String dst = "[CdauthNew/attach.txt] [link|CdauthNew/attach.txt] [cdauth|CdauthNew/attach.txt]"+ |
| "[CDauth/attach.txt] [link|CDauth/attach.txt] [cdauth|CDauth/attach.txt]"+ |
| "[CdauthNew/attach.txt] [link|CdauthNew/attach.txt] [cdauth|CdauthNew/attach.txt]"; |
| |
| m_engine.saveText( "Cdauth", "xxx" ); |
| m_engine.saveText( "TestPage", src ); |
| |
| m_engine.addAttachment( "Cdauth", "attach.txt", "Puppua".getBytes() ); |
| |
| rename( "Cdauth", "CdauthNew" ); |
| |
| Assertions.assertEquals( dst, m_engine.getManager( PageManager.class ).getText("TestPage").trim() ); |
| } |
| |
| @Test |
| public void testBug21() throws Exception |
| { |
| final String src = "[Link to TestPage2|TestPage2]"; |
| |
| m_engine.saveText( "TestPage", src ); |
| m_engine.saveText( "TestPage2", "foo" ); |
| |
| rename ("TestPage2", "Test"); |
| |
| Assertions.assertEquals( "[Link to Test|Test]", m_engine.getManager( PageManager.class ).getText( "TestPage" ).trim() ); |
| } |
| |
| @Test |
| public void testExtendedLinks() throws Exception |
| { |
| final String src = "[Link to TestPage2|TestPage2|target='_new']"; |
| |
| m_engine.saveText( "TestPage", src ); |
| m_engine.saveText( "TestPage2", "foo" ); |
| |
| rename ("TestPage2", "Test"); |
| |
| Assertions.assertEquals( "[Link to Test|Test|target='_new']", m_engine.getManager( PageManager.class ).getText( "TestPage" ).trim() ); |
| } |
| |
| @Test |
| public void testBug85_case1() throws Exception |
| { |
| // renaming a non-existing page |
| // This Assertions.fails under 2.5.116, cfr. with http://bugs.jspwiki.org/show_bug.cgi?id=85 |
| // m_engine.saveText( "TestPage", "blablahblahbla" ); |
| try |
| { |
| rename("TestPage123", "Main8887"); |
| rename("Main8887", "TestPage123"); |
| } |
| catch ( final NullPointerException npe) |
| { |
| npe.printStackTrace(); |
| System.out.println("NPE: Bug 85 caught?"); |
| Assertions.fail( npe ); |
| } |
| catch( final WikiException e ) |
| { |
| // Expected |
| } |
| } |
| |
| @Test |
| public void testBug85_case2() throws Exception |
| { |
| try |
| { |
| // renaming a non-existing page, but we call m_engine.saveText() before renaming |
| // this does not Assertions.fail under 2.5.116 |
| m_engine.saveText( "TestPage1234", "blablahblahbla" ); |
| rename("TestPage1234", "Main8887"); |
| rename("Main8887", "TestPage1234"); |
| } |
| catch ( final NullPointerException npe) |
| { |
| npe.printStackTrace(); |
| System.out.println("NPE: Bug 85 caught?"); |
| Assertions.fail( npe ); |
| } |
| } |
| |
| @Test |
| public void testBug85_case3() throws Exception |
| { |
| try |
| { |
| // renaming an existing page |
| // this does not Assertions.fail under 2.5.116 |
| // m_engine.saveText( "Main", "blablahblahbla" ); |
| rename("Main", "Main8887"); |
| rename("Main8887", "Main"); |
| } |
| catch ( final NullPointerException npe) |
| { |
| npe.printStackTrace(); |
| System.out.println("NPE: Bug 85 caught?"); |
| Assertions.fail( npe ); |
| } |
| catch( final WikiException e ) |
| { |
| // Expected |
| } |
| } |
| |
| @Test |
| public void testBug85_case4() throws Exception |
| { |
| try |
| { |
| // renaming an existing page, and we call m_engine.saveText() before renaming |
| // this does not Assertions.fail under 2.5.116 |
| m_engine.saveText( "Main", "blablahblahbla" ); |
| rename("Main", "Main8887"); |
| rename("Main8887", "Main"); |
| } |
| catch ( final NullPointerException npe) |
| { |
| npe.printStackTrace(); |
| System.out.println("NPE: Bug 85 caught?"); |
| Assertions.fail( npe ); |
| } |
| } |
| |
| @Test |
| public void testRenameOfEscapedLinks() throws Exception |
| { |
| final String src = "[[Link to TestPage2|TestPage2|target='_new']"; |
| |
| m_engine.saveText( "TestPage", src ); |
| m_engine.saveText( "TestPage2", "foo" ); |
| |
| rename ("TestPage2", "Test"); |
| |
| Assertions.assertEquals( "[[Link to TestPage2|TestPage2|target='_new']", m_engine.getManager( PageManager.class ).getText( "TestPage" ).trim() ); |
| } |
| |
| @Test |
| public void testRenameOfEscapedLinks2() throws Exception |
| { |
| final String src = "~[Link to TestPage2|TestPage2|target='_new']"; |
| |
| m_engine.saveText( "TestPage", src ); |
| m_engine.saveText( "TestPage2", "foo" ); |
| |
| rename ("TestPage2", "Test"); |
| |
| Assertions.assertEquals( "~[Link to TestPage2|TestPage2|target='_new']", m_engine.getManager( PageManager.class ).getText( "TestPage" ).trim() ); |
| } |
| |
| /** |
| * Test for a referrer containing blanks |
| * |
| * @throws Exception |
| */ |
| @Test |
| public void testReferrerChangeWithBlanks() throws Exception |
| { |
| m_engine.saveText( "TestPageReferred", "bla bla bla som content" ); |
| m_engine.saveText( "TestPageReferring", "[Test Page Referred]" ); |
| |
| rename( "TestPageReferred", "TestPageReferredNew" ); |
| |
| final String data = m_engine.getManager( PageManager.class ).getPureText( "TestPageReferring", WikiProvider.LATEST_VERSION ); |
| Assertions.assertEquals( "[Test Page Referred|TestPageReferredNew]", data.trim(), "page not renamed" ); |
| |
| Collection< String > refs = m_engine.getManager( ReferenceManager.class ).findReferrers( "TestPageReferred" ); |
| Assertions.assertNull( refs, "oldpage" ); |
| |
| refs = m_engine.getManager( ReferenceManager.class ).findReferrers( "TestPageReferredNew" ); |
| Assertions.assertEquals( 1, refs.size(), "new size" ); |
| Assertions.assertEquals( "TestPageReferring", refs.iterator().next(), "wrong ref" ); |
| } |
| |
| /** https://issues.apache.org/jira/browse/JSPWIKI-398 */ |
| @Test |
| public void testReferrerChangeWithBlanks2() throws Exception |
| { |
| m_engine.saveText( "RenameTest", "[link one] [link two]" ); |
| m_engine.saveText( "Link one", "Leonard" ); |
| m_engine.saveText( "Link two", "Cohen" ); |
| |
| rename( "Link one", "Link uno" ); |
| |
| final String data = m_engine.getManager( PageManager.class ).getPureText( "RenameTest", WikiProvider.LATEST_VERSION ); |
| Assertions.assertEquals( "[link one|Link uno] [link two]", data.trim(), "page not renamed" ); |
| |
| Collection< String > refs = m_engine.getManager( ReferenceManager.class ).findReferrers( "Link one" ); |
| Assertions.assertNull( refs, "oldpage" ); |
| |
| refs = m_engine.getManager( ReferenceManager.class ).findReferrers( "Link uno" ); |
| Assertions.assertEquals( 1, refs.size(), "new size" ); |
| Assertions.assertEquals( "RenameTest", refs.iterator().next() , "wrong ref"); |
| } |
| |
| } |