"""
from . import test_expression, test_html_sanitize, test_ir_sequence, test_orm,\
- test_view_validation, test_uninstall
+ test_view_validation, test_uninstall, test_misc
fast_suite = [
test_ir_sequence,
test_html_sanitize,
test_orm,
test_view_validation,
+ test_misc,
]
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
--- /dev/null
+# This test can be run stand-alone with something like:
+# > PYTHONPATH=. python2 openerp/tests/test_misc.py
+
+import unittest2
+
+class test_misc(unittest2.TestCase):
+ """ Test some of our generic utility functions """
+
+ def test_append_to_html(self):
+ from openerp.tools import append_content_to_html
+ test_samples = [
+ ('<!DOCTYPE...><HTML encoding="blah">some <b>content</b></HtMl>', '--\nYours truly', True,
+ '<!DOCTYPE...><html encoding="blah">some <b>content</b>\n<pre>--\nYours truly</pre>\n</html>'),
+ ('<html><body>some <b>content</b></body></html>', '<!DOCTYPE...>\n<html><body>\n<p>--</p>\n<p>Yours truly</p>\n</body>\n</html>', False,
+ '<html><body>some <b>content</b>\n\n\n<p>--</p>\n<p>Yours truly</p>\n\n\n</body></html>'),
+ ]
+ for html, content, flag, expected in test_samples:
+ self.assertEqual(append_content_to_html(html,content,flag), expected, 'append_content_to_html is broken')
+
+if __name__ == '__main__':
+ unittest2.main()
\ No newline at end of file
if not text: return []
return re.findall(r'([^ ,<@]+@[^> ,]+)', text)
+def append_content_to_html(html, content, plaintext=True):
+ """Append extra content at the end of an HTML snippet, trying
+ to locate the end of the HTML document (</body>, </html>, or
+ EOF), and wrapping the provided content in a <pre/> block
+ unless ``plaintext`` is False. A side-effect of this
+ method is to coerce all HTML tags to lowercase in ``html``,
+ and strips enclosing <html> or <body> tags in content if
+ ``plaintext`` is False.
+
+ :param str html: html tagsoup (doesn't have to be XHTML)
+ :param str content: extra content to append
+ :param bool plaintext: whether content is plaintext and should
+ be wrapped in a <pre/> tag.
+ """
+ html = ustr(html)
+ if plaintext:
+ content = u'\n<pre>%s</pre>\n' % ustr(content)
+ else:
+ content = re.sub(r'(?i)(</?html.*>|</?body.*>|<!\W*DOCTYPE.*>)', '', content)
+ content = u'\n%s\n'% ustr(content)
+ # Force all tags to lowercase
+ html = re.sub(r'(</?)\W*(\w+)([ >])',
+ lambda m: '%s%s%s' % (m.group(1),m.group(2).lower(),m.group(3)), html)
+ insert_location = html.find('</body>')
+ if insert_location == -1:
+ insert_location = html.find('</html>')
+ if insert_location == -1:
+ return '%s%s' % (html, content)
+ return '%s%s%s' % (html[:insert_location], content, html[insert_location:])
+
+
#----------------------------------------------------------
# SMS
#----------------------------------------------------------