import _path_pyblosxom
import string
import os
import os.path
from Pyblosxom import tools
class Testis_year:
"""tools.is_year"""
def test_must_be_four_digits(self):
assert tools.is_year("abab") == 0
assert tools.is_year("ab") == 0
assert tools.is_year("199") == 0
assert tools.is_year("19999") == 0
assert tools.is_year("1997") == 1
assert tools.is_year("2097") == 1
def test_must_start_with_19_or_20(self):
assert tools.is_year("3090") == 0
assert tools.is_year("0101") == 0
def test_everything_else_returns_false(self):
assert tools.is_year(None) == 0
assert tools.is_year("") == 0
assert tools.is_year("ab") == 0
assert tools.is_year("97") == 0
class Testparse_args:
"""tools.parse_args"""
def test_args_can_be_len_0(self):
assert tools.parse_args( [] ) == []
def test_single_args(self):
assert tools.parse_args( ["--test"] ) == [ ("--test", "") ]
assert tools.parse_args( ["-a", "-b", "--c"] ) == [ ("-a", ""),
("-b", ""),
("--c", "") ]
def test_key_value_args(self):
assert tools.parse_args( ["--test", "foo"] ) == [ ("--test", "foo") ]
assert tools.parse_args( ["--test", "foo",
"-a",
"--bar", "baz"] ) == [ ("--test", "foo"),
("-a", ""),
("--bar", "baz") ]
class TestgenerateRandStr():
"""tools.generateRandStr
Note: This is a mediocre test because generateRandStr produces
a string that's of random length and random content.
It's possible for this test to pass even when the code is bad.
"""
def _gen_checker(self, s, minlen, maxlen):
assert len(s) >= minlen and len(s) <= maxlen
for c in s:
assert c in string.letters or c in string.digits
def test_generates_a_random_string(self):
self._gen_checker(tools.generateRandStr(), 5, 10)
self._gen_checker(tools.generateRandStr(), 5, 10)
self._gen_checker(tools.generateRandStr(), 5, 10)
self._gen_checker(tools.generateRandStr(), 5, 10)
self._gen_checker(tools.generateRandStr(), 5, 10)
def test_generates_a_random_string_between_minlen_and_maxlen(self):
self._gen_checker(tools.generateRandStr(4, 10), 4, 10)
self._gen_checker(tools.generateRandStr(4, 10), 4, 10)
self._gen_checker(tools.generateRandStr(4, 10), 4, 10)
self._gen_checker(tools.generateRandStr(4, 10), 4, 10)
self._gen_checker(tools.generateRandStr(4, 10), 4, 10)
self._gen_checker(tools.generateRandStr(3, 12), 3, 12)
self._gen_checker(tools.generateRandStr(3, 12), 3, 12)
self._gen_checker(tools.generateRandStr(3, 12), 3, 12)
self._gen_checker(tools.generateRandStr(3, 12), 3, 12)
self._gen_checker(tools.generateRandStr(3, 12), 3, 12)
class TestEscapeText():
"""tools.escape_text"""
def test_single_quote_to_pos(self):
assert tools.escape_text("a'b") == "a'b"
def test_double_quote_to_quot(self):
assert tools.escape_text("a\"b") == "a"b"
def test_everything_else_unchanged(self):
assert tools.escape_text(None) == None
assert tools.escape_text("") == ""
assert tools.escape_text("abc") == "abc"
class TestUrlencodeText():
"""tools.urlencode_text"""
def test_equals_to_3D(self):
assert tools.urlencode_text("a=c") == "a%3Dc"
def test_ampersand_to_26(self):
assert tools.urlencode_text("a&c") == "a%26c"
def test_space_to_20(self):
assert tools.urlencode_text("a c") == "a%20c"
def test_everything_else_unchanged(self):
assert tools.urlencode_text(None) == None
assert tools.urlencode_text("") == ""
assert tools.urlencode_text("abc") == "abc"
class TestVariableDict():
"""tools.VariableDict class"""
def __init__(self):
self.vd = tools.VariableDict()
self.vd.update( { "a": "b", \
"title": "This is my story", \
"title2": "Story: \"aha!\"", \
"filename": "joe.txt" } )
def _compare_unordered_lists(self, lista, listb):
assert len(lista) == len(listb)
lista.sort()
listb.sort()
for mem in lista:
print "comparing '" + mem + "' and '" + listb[0] + "'"
assert mem == listb[0]
listb.pop(0)
assert len(listb) == 0
def test_extends_dicts(self):
assert self.vd.get("a") == "b"
assert self.vd.get("title") == "This is my story"
assert self.vd.get("title2") == "Story: \"aha!\""
assert self.vd.get("badkey", "novalue") == "novalue"
self._compare_unordered_lists(self.vd.keys(),
["a", "title", "title2", "filename"])
self._compare_unordered_lists(self.vd.values(),
["b", "This is my story",
"Story: \"aha!\"", "joe.txt"])
def test_can_escape_value(self):
assert self.vd.get("a_escaped") == "b"
assert self.vd.get("title_escaped") == "This is my story"
assert self.vd.get("title2_escaped") == "Story: "aha!""
assert self.vd.get("badkey_escaped", "novalue") == "novalue"
assert self.vd.get("badkey_escaped", "no value") == "no value"
def test_can_urlencode_value(self):
assert self.vd.get("a_urlencoded") == "b"
assert self.vd.get("title_urlencoded") == "This%20is%20my%20story"
assert self.vd.get("title2_urlencoded") == "Story%3A%20%22aha%21%22"
assert self.vd.get("badkey_urlencoded", "novalue") == "novalue"
assert self.vd.get("badkey_urlencoded", "no value") == "no%20value"
class TestStripper:
"""tools.Stripper class"""
def _strip(self, text):
s = tools.Stripper()
s.feed(text)
s.close()
return s.gettext()
def test_replaces_html_markup_from_string_with_space(self):
s = tools.Stripper()
assert self._strip("") == ""
assert self._strip("abc") == "abc"
assert self._strip("abc") == " abc "
assert self._strip("abc def ghi") == "abc def ghi"
class TestWhatExt:
"""tools.what_ext"""
def __init__(self):
self._files = ["a.txt", "b.html", "c.txtl"]
d = os.path.dirname(__file__)
self._d = os.path.join(d, "what_ext_test_dir")
def _setup(self):
"""
Creates the directory with some files in it.
"""
try:
os.mkdir(self._d)
for mem in self._files:
f = open(os.path.join(self._d, mem), "w")
f.write("lorem ipsum")
f.close()
except:
self._teardown()
def _teardown(self):
"""
Cleans up the test files and the directory that we created.
"""
for mem in self._files:
try:
os.remove(os.path.join(self._d, mem))
except:
pass
try:
os.rmdir(self._d)
except:
pass
def test_returns_extension_if_file_has_extension(self):
self._setup()
try:
assert "txt" == tools.what_ext(["txt", "html"],
os.path.join(self._d, "a"))
assert "html" == tools.what_ext(["txt", "html"],
os.path.join(self._d, "b"))
finally:
self._teardown()
def test_returns_None_if_extension_not_present(self):
self._setup()
try:
assert None == tools.what_ext([],
os.path.join(self._d, "a"))
assert None == tools.what_ext(["html"],
os.path.join(self._d, "a"))
finally:
self._teardown()