Add more tests. Test both the Python and C implem ... (quixote/test/test_html.py)
Neil Schemenauer <nascheme-fVcApmY9cLvQ3/1i3zOLAti2O/[email protected]> Wed, 08 Jan 2003 14:46:09 -0500
| Newsgroups | gmane.comp.web.quixote.cvs |
|---|---|
| Message-ID | <[email protected]> |
Update of /home/cvs/quixote/test
In directory hewson:/tmp/cvs-serv20173/test
Modified Files:
test_html.py
Log Message:
Add more tests. Test both the Python and C implementation.
Index: test_html.py
===================================================================
RCS file: /home/cvs/quixote/test/test_html.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- test_html.py 20 Nov 2002 19:43:23 -0000 1.2
+++ test_html.py 8 Jan 2003 19:46:07 -0000 1.3
@@ -1,5 +1,6 @@
from sancho.unittest import TestScenario, parse_args, run_scenarios
-from quixote.html import htmltext, htmlescape
+from quixote import _py_htmltext
+from quixote import _c_htmltext
tested_modules = [ "quixote.html" ]
@@ -13,13 +14,23 @@
def __str__ (self):
return self.s
+class Broken:
+ def __str__(self):
+ raise RuntimeError, 'eieee'
+
+ def __repr__(self):
+ raise RuntimeError, 'eieee'
+
markupchars = '<>&"'
quotedchars = '<>&"'
class HTMLTest (TestScenario):
def setup (self):
- pass
+ global htmltext, escape, htmlescape
+ htmltext = _py_htmltext.htmltext
+ escape = _py_htmltext._escape_string
+ htmlescape = _py_htmltext.htmlescape
def shutdown (self):
pass
@@ -30,16 +41,24 @@
self.test_val("str(htmltext(markupchars))", markupchars)
self.test_val("str(htmltext(None))", 'None')
self.test_val("str(htmltext(1))", '1')
+ self.test_exc("htmltext(Broken())", RuntimeError)
- def check_quote (self):
+ def check_escape (self):
self.test_val("htmlescape(markupchars)", quotedchars)
- self.test_val("htmltext.quote(markupchars)", quotedchars)
+ self.test_bool("isinstance(htmlescape(markupchars), htmltext)")
+ self.test_val("escape(markupchars)", quotedchars)
+ self.test_bool("isinstance(escape(markupchars), str)")
self.test_val("htmlescape(htmlescape(markupchars))", quotedchars)
+ self.test_exc("escape(1)", TypeError)
def check_cmp (self):
s = htmltext("foo")
self.test_bool("s == 'foo'")
self.test_bool("s != 'bar'")
+ self.test_bool("s == htmltext('foo')")
+ self.test_bool("s != htmltext('bar')")
+ self.test_bool("htmltext('1') != 1")
+ self.test_bool("1 != s")
def check_len (self):
self.test_val("len(htmltext('foo'))", 3)
@@ -57,25 +76,44 @@
self.test_val("'bar' + s", "barfoo")
self.test_val("s + htmltext('bar')", "foobar")
self.test_val("s + markupchars", "foo" + quotedchars)
+ self.test_bool("isinstance(s + markupchars, htmltext)")
self.test_val("markupchars + s", quotedchars + "foo")
+ self.test_bool("isinstance(markupchars + s, htmltext)")
+ self.test_exc("s + 1", TypeError)
+ self.test_exc("1 + s", TypeError)
def check_repeat (self):
- self.test_val("htmltext('a') * 3", "aaa")
+ s = htmltext('a')
+ self.test_val("s * 3", "aaa")
+ self.test_bool("isinstance(s * 3, htmltext)")
self.test_val("htmlescape(markupchars) * 3", quotedchars * 3)
+ self.test_exc("s * 'a'", TypeError)
+ self.test_exc("'a' * s", TypeError)
+ self.test_exc("s * s", TypeError)
def check_format (self):
- self.test_val("htmltext('%s') % 'foo'", "foo")
- self.test_val("htmltext('%s') % markupchars", quotedchars)
- self.test_val("htmltext('%s') % None", "None")
+ s_fmt = htmltext('%s')
+ self.test_val("s_fmt % 'foo'", "foo")
+ self.test_bool("isinstance(s_fmt % 'foo', htmltext)")
+ self.test_val("s_fmt % markupchars", quotedchars)
+ self.test_val("s_fmt % None", "None")
self.test_val("htmltext('%r') % Wrapper(markupchars)", quotedchars)
self.test_val("htmltext('%s%s') % ('foo', htmltext(markupchars))",
"foo" + markupchars)
self.test_val("htmltext('%d') % 10", "10")
self.test_val("htmltext('%.1f') % 10", "10.0")
+ self.test_exc("s_fmt % Broken()", RuntimeError)
+ self.test_exc("s_fmt % (1, 2)", TypeError)
def check_dict_format (self):
self.test_val("htmltext('%(a)s %(a)r %(b)s') % "
- " {'a': 'foo', 'b': htmltext('bar')}", "foo 'foo' bar")
+ " {'a': 'foo&', 'b': htmltext('bar&')}",
+ "foo& 'foo&' bar&")
+ self.test_val("htmltext('%(a)s') % {'a': 'foo&'}", "foo&")
+ self.test_bool("isinstance(htmltext('%(a)s') % {'a': 'a'}, htmltext)")
+ self.test_val("htmltext('%s') % {'a': 'foo&'}", "{'a': 'foo&'}")
+ self.test_exc("htmltext('%(a)s') % 1", TypeError)
+ self.test_exc("htmltext('%(a)s') % {}", KeyError)
def check_join (self):
self.test_val("htmltext(' ').join(['foo', 'bar'])", "foo bar")
@@ -85,27 +123,53 @@
"foo" + quotedchars + "bar")
self.test_val("htmltext(' ').join([htmltext(markupchars), 'bar'])",
markupchars + " bar")
+ self.test_bool("isinstance(htmltext('').join([]), htmltext)")
+ self.test_exc("htmltext('').join(1)", TypeError)
+ self.test_exc("htmltext('').join([1])", TypeError)
def check_startswith (self):
self.test_bool("htmltext('foo').startswith('fo')")
self.test_bool("htmlescape(markupchars).startswith(markupchars[:3])")
self.test_bool("htmltext(markupchars).startswith("
" htmltext(markupchars[:3]))")
+ self.test_exc("htmltext('').startswith(1)", TypeError)
def check_endswith (self):
self.test_bool("htmltext('foo').endswith('oo')")
self.test_bool("htmlescape(markupchars).endswith(markupchars[-3:])")
self.test_bool("htmltext(markupchars).endswith("
" htmltext(markupchars[-3:]))")
+ self.test_exc("htmltext('').endswith(1)", TypeError)
def check_replace (self):
self.test_val("htmlescape('&').replace('&', 'foo')", "foo")
self.test_val("htmltext('&').replace(htmltext('&'), 'foo')", "foo")
self.test_val("htmltext('foo').replace('foo', htmltext('&'))", "&")
+ self.test_bool("isinstance(htmltext('a').replace('a', 'b'), htmltext)")
+ self.test_exc("htmltext('').replace(1, 'a')", TypeError)
+ def check_lower (self):
+ self.test_val("htmltext('aB').lower()", "ab")
+ self.test_bool("isinstance(htmltext('a').lower(), htmltext)")
+
+ def check_upper (self):
+ self.test_val("htmltext('aB').upper()", "AB")
+ self.test_bool("isinstance(htmltext('a').upper(), htmltext)")
+
+ def check_capitalize (self):
+ self.test_val("htmltext('aB').capitalize()", "Ab")
+ self.test_bool("isinstance(htmltext('a').capitalize(), htmltext)")
+class CHTMLTest(HTMLTest):
+ def setup (self):
+ # using globals like this is a bit of a hack since it assumes
+ # Sancho tests each class individually, oh well
+ global htmltext, escape, htmlescape
+ htmltext = _c_htmltext.htmltext
+ escape = _c_htmltext._escape_string
+ htmlescape = _c_htmltext.htmlescape
+
if __name__ == "__main__":
(scenarios, options) = parse_args()
run_scenarios (scenarios, options)
-