[z3-checkins] r33924 - in z3/deliverance/branches/packaged/deliverance: . test-data

cabraham at codespeak.net cabraham at codespeak.net
Mon Oct 30 20:18:37 CET 2006


Author: cabraham
Date: Mon Oct 30 20:18:33 2006
New Revision: 33924

Modified:
   z3/deliverance/branches/packaged/deliverance/interpreter.py
   z3/deliverance/branches/packaged/deliverance/test-data/test_replace.xml
   z3/deliverance/branches/packaged/deliverance/xslt.py
Log:
added error message fired when trying to replace the whole theme.

Modified: z3/deliverance/branches/packaged/deliverance/interpreter.py
==============================================================================
--- z3/deliverance/branches/packaged/deliverance/interpreter.py	(original)
+++ z3/deliverance/branches/packaged/deliverance/interpreter.py	Mon Oct 30 20:18:33 2006
@@ -201,6 +201,12 @@
                     theme, self.format_error("no content matched", rule))            
             return       
 
+        if theme_el.getparent() is None:
+            self.add_to_body_start(
+                theme, self.format_error("cannot replace whole theme", rule))            
+            return
+            
+
         if self.debug:
             self.debug_replace(theme_el, content_els, rule)
             return 
@@ -226,10 +232,13 @@
         # this tail, if there is one, should stick around 
         preserve_tail = non_text_els[0].tail 
 
+        #replaces first element
         self.replace_element(theme_el, non_text_els[0])
         temptail = non_text_els[0].tail 
         non_text_els[0].tail = None
         parent = non_text_els[0].getparent()
+
+        # appends the rest of the elements
         i = parent.index(non_text_els[0])
         parent[i+1:i+1] = non_text_els[1:]
 

Modified: z3/deliverance/branches/packaged/deliverance/test-data/test_replace.xml
==============================================================================
--- z3/deliverance/branches/packaged/deliverance/test-data/test_replace.xml	(original)
+++ z3/deliverance/branches/packaged/deliverance/test-data/test_replace.xml	Mon Oct 30 20:18:33 2006
@@ -211,6 +211,29 @@
   </output> 
 </deliverance-test>
 
+<!-- tests replace command on edge case: html element  --> 
+<deliverance-test>
+  <rules xmlns="http://www.plone.org/deliverance">
+    <replace theme="//html" content="//html" />
+  </rules>
+
+  <theme base="http://example.com"> 
+     <html><head><title>Blah</title></head><body><div id="foo">Dummy Content</div></body></html>
+  </theme>
+
+  <content> 
+     <html><body><div id="bar">Real Content</div></body></html>
+  </content>
+ 
+  <output>
+     <html><head><title>Blah</title></head><body><div class="deliverance-error">Deliverance error: cannot replace whole theme<br /> 
+        rule: &lt;replace theme="//html" content="//html"/&gt;</div><div id="foo">Dummy Content</div> 
+     </body></html>
+  </output> 
+
+</deliverance-test>
+
+
 <!-- a test that replaces text with a mixture of elements and text -->
 <!-- <deliverance-test>
   <rules xmlns="http://www.plone.org/deliverance">

Modified: z3/deliverance/branches/packaged/deliverance/xslt.py
==============================================================================
--- z3/deliverance/branches/packaged/deliverance/xslt.py	(original)
+++ z3/deliverance/branches/packaged/deliverance/xslt.py	Mon Oct 30 20:18:33 2006
@@ -125,6 +125,11 @@
         if theme_el is None:
             return 
 
+        if theme_el.getparent() is None:
+            self.add_to_body_start(
+                theme, self.format_error("cannot replace whole theme", rule))            
+            return
+
         self.add_conditional_missing_content_error(theme,rule)      
 
         copier = etree.Element("{%s}copy-of" % nsmap["xsl"])


More information about the z3-checkins mailing list