diff -Naur -x .svn trac-branchA/trac/admin/tests/console-tests.txt trac-branchB/trac/admin/tests/console-tests.txt
--- trac-branchA/trac/admin/tests/console-tests.txt	2009-07-25 16:35:27.000000000 +0200
+++ trac-branchB/trac/admin/tests/console-tests.txt	2009-07-25 20:07:23.000000000 +0200
@@ -105,7 +105,7 @@
  SEARCH_VIEW, TICKET_ADMIN, TICKET_APPEND, TICKET_CHGPROP, TICKET_CREATE,
  TICKET_EDIT_CC, TICKET_EDIT_DESCRIPTION, TICKET_MODIFY, TICKET_VIEW,
  TIMELINE_VIEW, TRAC_ADMIN, WIKI_ADMIN, WIKI_CREATE, WIKI_DELETE,
- WIKI_MODIFY, WIKI_VIEW
+ WIKI_MODIFY, WIKI_RENAME, WIKI_VIEW
 
 ===== test_permission_add_one_action_ok =====
 
@@ -139,7 +139,7 @@
  SEARCH_VIEW, TICKET_ADMIN, TICKET_APPEND, TICKET_CHGPROP, TICKET_CREATE,
  TICKET_EDIT_CC, TICKET_EDIT_DESCRIPTION, TICKET_MODIFY, TICKET_VIEW,
  TIMELINE_VIEW, TRAC_ADMIN, WIKI_ADMIN, WIKI_CREATE, WIKI_DELETE,
- WIKI_MODIFY, WIKI_VIEW
+ WIKI_MODIFY, WIKI_RENAME, WIKI_VIEW
 
 ===== test_permission_add_multiple_actions_ok =====
 
@@ -174,7 +174,7 @@
  SEARCH_VIEW, TICKET_ADMIN, TICKET_APPEND, TICKET_CHGPROP, TICKET_CREATE,
  TICKET_EDIT_CC, TICKET_EDIT_DESCRIPTION, TICKET_MODIFY, TICKET_VIEW,
  TIMELINE_VIEW, TRAC_ADMIN, WIKI_ADMIN, WIKI_CREATE, WIKI_DELETE,
- WIKI_MODIFY, WIKI_VIEW
+ WIKI_MODIFY, WIKI_RENAME, WIKI_VIEW
 
 ===== test_permission_remove_one_action_ok =====
 
@@ -207,7 +207,7 @@
  SEARCH_VIEW, TICKET_ADMIN, TICKET_APPEND, TICKET_CHGPROP, TICKET_CREATE,
  TICKET_EDIT_CC, TICKET_EDIT_DESCRIPTION, TICKET_MODIFY, TICKET_VIEW,
  TIMELINE_VIEW, TRAC_ADMIN, WIKI_ADMIN, WIKI_CREATE, WIKI_DELETE,
- WIKI_MODIFY, WIKI_VIEW
+ WIKI_MODIFY, WIKI_RENAME, WIKI_VIEW
 
 ===== test_permission_remove_multiple_actions_ok =====
 
@@ -240,7 +240,7 @@
  SEARCH_VIEW, TICKET_ADMIN, TICKET_APPEND, TICKET_CHGPROP, TICKET_CREATE,
  TICKET_EDIT_CC, TICKET_EDIT_DESCRIPTION, TICKET_MODIFY, TICKET_VIEW,
  TIMELINE_VIEW, TRAC_ADMIN, WIKI_ADMIN, WIKI_CREATE, WIKI_DELETE,
- WIKI_MODIFY, WIKI_VIEW
+ WIKI_MODIFY, WIKI_RENAME, WIKI_VIEW
 
 ===== test_component_list_ok =====
 
diff -Naur -x .svn trac-branchA/trac/tests/functional/tester.py trac-branchB/trac/tests/functional/tester.py
--- trac-branchA/trac/tests/functional/tester.py	2009-07-25 16:35:28.000000000 +0200
+++ trac-branchB/trac/tests/functional/tester.py	2009-07-25 20:07:23.000000000 +0200
@@ -183,6 +183,7 @@
             tc.formvalue('attachment', 'replace', True)
         tc.submit()
         tc.url(self.url + '/attachment/ticket/%s/$' % ticketid)
+        return tempfilename
 
     def clone_ticket(self, ticketid):
         """Create a clone of the given ticket id using the clone button."""
@@ -239,6 +240,7 @@
         tc.formvalue('attachment', 'description', random_sentence())
         tc.submit()
         tc.url(self.url + '/attachment/wiki/%s/$' % name)
+        return tempfilename
 
     def create_milestone(self, name=None, due=None):
         """Creates the specified milestone, with a random name if none is
diff -Naur -x .svn trac-branchA/trac/wiki/templates/wiki_view.html trac-branchB/trac/wiki/templates/wiki_view.html
--- trac-branchA/trac/wiki/templates/wiki_view.html	2009-07-25 16:36:03.000000000 +0200
+++ trac-branchB/trac/wiki/templates/wiki_view.html	2009-07-25 20:07:23.000000000 +0200
@@ -94,8 +94,8 @@
               </py:if>
             </py:if>
             <py:if test="page.exists and rename_perm"> 
-	             <form method="get" action="${href.wiki(page.name)}"> 
-	                <div id="rename"> 
+	             <form  id="rename" method="get" action="${href.wiki(page.name)}"> 
+	                <div> 
 	                  <input type="hidden" name="action" value="rename" /> 
 	                  <input type="submit" value="${_('Rename page')}" /> 
 	                </div> 
diff -Naur -x .svn trac-branchA/trac/wiki/tests/functional.py trac-branchB/trac/wiki/tests/functional.py
--- trac-branchA/trac/wiki/tests/functional.py	2009-07-25 16:35:28.000000000 +0200
+++ trac-branchB/trac/wiki/tests/functional.py	2009-07-25 20:07:23.000000000 +0200
@@ -11,6 +11,66 @@
         self._tester.attach_file_to_wiki(pagename)
 
 
+class TestWikiRename(FunctionalTwillTestCaseSetup):
+    def runTest(self):
+        """Test for simple wiki rename"""
+        # create a new page (with one attachment)
+        pagename = random_unique_camel()
+        self._tester.create_wiki_page(pagename)
+        attachment = self._tester.attach_file_to_wiki(pagename)
+        base_url = self._tester.url
+        page_url = base_url + "/wiki/" + pagename
+        
+        def click_rename():
+            tc.formvalue('rename', 'action', 'rename')
+            tc.submit()
+            tc.url(page_url+r'\?action=rename')
+            tc.find("New name:")
+        
+        tc.go(page_url)
+        tc.find("Rename")
+        click_rename()
+        # attempt to rename the page to the current page name ...
+        tc.formvalue('rename', 'new_name', pagename)
+        tc.submit('rename')
+        tc.url(page_url)
+        #tc.save_html("rename_warning.html")
+        tc.find("New name must be different from old name.")
+        # attempt to rename the page to an existing page name ...
+        tc.formvalue('rename', 'new_name', 'WikiStart')
+        tc.submit('rename')
+        tc.url(page_url)
+        tc.find("Trac Error")
+        tc.find("Can't rename to existing WikiStart page")
+        # correct rename to new page name (old page replaced by a redirection)
+        tc.go(page_url)
+        click_rename()
+        newpagename = pagename+'Renamed'
+        tc.formvalue('rename', 'new_name', newpagename)
+        tc.formvalue('rename', 'leave_redirection', True) # the default
+        tc.submit('rename')
+        # check redirection page
+        tc.url(page_url)
+        tc.find("See.*/wiki/"+newpagename)
+        # check whether attachment exists on the new page but not on old page
+        tc.go(base_url+'/attachment/wiki/'+newpagename+'/'+attachment)
+        tc.notfind("Error: Invalid Attachment")
+        tc.go(base_url+'/attachment/wiki/'+pagename+'/'+attachment)
+        tc.find("Error: Invalid Attachment")
+        # rename again to another new page name (this time, no redirection)
+        tc.go(page_url)
+        click_rename()
+        newpagename = pagename+'RenamedAgain'
+        tc.formvalue('rename', 'new_name', newpagename)
+        tc.formvalue('rename', 'leave_redirection', False)
+        tc.submit('rename')
+        tc.url(base_url + "/wiki/" + newpagename)
+        # this time, the original page is gone
+        tc.go(page_url)
+        tc.url(page_url)
+        tc.find("Describe %s here" % pagename)
+        
+
 class RegressionTestTicket4812(FunctionalTwillTestCaseSetup):
     def runTest(self):
         """Test for regression of http://trac.edgewall.org/ticket/4812"""
@@ -62,6 +122,7 @@
         import trac.tests.functional.testcases
         suite = trac.tests.functional.testcases.functionalSuite()
     suite.addTest(TestWiki())
+    suite.addTest(TestWikiRename())
     suite.addTest(RegressionTestTicket4812())
     if has_docutils:
         suite.addTest(ReStructuredTextWikiTest())

