summaryrefslogtreecommitdiff
path: root/tests/test_cachecontrol.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@plope.com>2011-03-20 23:25:37 -0400
committerChris McDonough <chrism@plope.com>2011-03-20 23:25:37 -0400
commitd8176e7279e19ab3e618056555a05d710bb161d4 (patch)
tree43717841fd1326d22a4aaea2d1a17c1c0ce72fcb /tests/test_cachecontrol.py
parent1c4912af221e89ecf117154e2708f58984287ad8 (diff)
parentc3f021fbf2fd027b0778ca9dadc79ae7b2a5394b (diff)
downloadwebob-tests.pycon2011.tar.gz
merge from headtests.pycon2011
Diffstat (limited to 'tests/test_cachecontrol.py')
-rw-r--r--tests/test_cachecontrol.py266
1 files changed, 266 insertions, 0 deletions
diff --git a/tests/test_cachecontrol.py b/tests/test_cachecontrol.py
new file mode 100644
index 0000000..2388020
--- /dev/null
+++ b/tests/test_cachecontrol.py
@@ -0,0 +1,266 @@
+from nose.tools import eq_
+from nose.tools import raises
+import unittest
+
+
+def test_cache_control_object_max_age_None():
+ from webob.cachecontrol import CacheControl
+ cc = CacheControl({}, 'a')
+ cc.properties['max-age'] = None
+ eq_(cc.max_age, -1)
+
+
+class TestUpdateDict(unittest.TestCase):
+
+ def setUp(self):
+ self.call_queue = []
+ def callback(args):
+ self.call_queue.append("Called with: %s" % repr(args))
+ self.callback = callback
+
+ def make_one(self, callback):
+ from webob.cachecontrol import UpdateDict
+ ud = UpdateDict()
+ ud.updated = callback
+ return ud
+
+ def test_clear(self):
+ newone = self.make_one(self.callback)
+ newone['first'] = 1
+ assert len(newone) == 1
+ newone.clear()
+ assert len(newone) == 0
+
+ def test_update(self):
+ newone = self.make_one(self.callback)
+ d = {'one' : 1 }
+ newone.update(d)
+ assert newone == d
+
+ def test_set_delete(self):
+ newone = self.make_one(self.callback)
+ newone['first'] = 1
+ assert len(self.call_queue) == 1
+ assert self.call_queue[-1] == "Called with: {'first': 1}"
+
+ del newone['first']
+ assert len(self.call_queue) == 2
+ assert self.call_queue[-1] == 'Called with: {}'
+
+ def test_setdefault(self):
+ newone = self.make_one(self.callback)
+ assert newone.setdefault('haters', 'gonna-hate') == 'gonna-hate'
+ assert len(self.call_queue) == 1
+ assert self.call_queue[-1] == "Called with: {'haters': 'gonna-hate'}", self.call_queue[-1]
+
+ # no effect if failobj is not set
+ assert newone.setdefault('haters', 'gonna-love') == 'gonna-hate'
+ assert len(self.call_queue) == 1
+
+ def test_pop(self):
+ newone = self.make_one(self.callback)
+ newone['first'] = 1
+ newone.pop('first')
+ assert len(self.call_queue) == 2
+ assert self.call_queue[-1] == 'Called with: {}', self.call_queue[-1]
+
+ def test_popitem(self):
+ newone = self.make_one(self.callback)
+ newone['first'] = 1
+ assert newone.popitem() == ('first', 1)
+ assert len(self.call_queue) == 2
+ assert self.call_queue[-1] == 'Called with: {}', self.call_queue[-1]
+
+ def test_callback_args(self):
+ assert True
+ #assert False
+
+
+class TestExistProp(unittest.TestCase):
+ """
+ Test webob.cachecontrol.exists_property
+ """
+
+ def setUp(self):
+ pass
+
+ def make_one(self):
+ from webob.cachecontrol import exists_property
+
+ class Dummy(object):
+ properties = dict(prop=1)
+ type = 'dummy'
+ prop = exists_property('prop', 'dummy')
+ badprop = exists_property('badprop', 'big_dummy')
+
+ return Dummy
+
+ def test_get_on_class(self):
+ from webob.cachecontrol import exists_property
+ Dummy = self.make_one()
+ assert isinstance(Dummy.prop, exists_property), Dummy.prop
+
+ def test_get_on_instance(self):
+ obj = self.make_one()()
+ assert obj.prop is True
+
+ @raises(AttributeError)
+ def test_type_mismatch_raise(self):
+ obj = self.make_one()()
+ obj.badprop = True
+
+ def test_set_w_value(self):
+ obj = self.make_one()()
+ obj.prop = True
+ assert obj.prop is True
+ assert obj.properties['prop'] is None
+
+ def test_del_value(self):
+ obj = self.make_one()()
+ del obj.prop
+ assert not 'prop' in obj.properties
+
+
+class TestValueProp(unittest.TestCase):
+ """
+ Test webob.cachecontrol.exists_property
+ """
+
+ def setUp(self):
+ pass
+
+ def make_one(self):
+ from webob.cachecontrol import value_property
+
+ class Dummy(object):
+ properties = dict(prop=1)
+ type = 'dummy'
+ prop = value_property('prop', 'dummy')
+ badprop = value_property('badprop', 'big_dummy')
+
+ return Dummy
+
+ def test_get_on_class(self):
+ from webob.cachecontrol import value_property
+ Dummy = self.make_one()
+ assert isinstance(Dummy.prop, value_property), Dummy.prop
+
+ def test_get_on_instance(self):
+ dummy = self.make_one()()
+ assert dummy.prop, dummy.prop
+ #assert isinstance(Dummy.prop, value_property), Dummy.prop
+
+ def test_set_on_instance(self):
+ dummy = self.make_one()()
+ dummy.prop = "new"
+ assert dummy.prop == "new", dummy.prop
+ assert dummy.properties['prop'] == "new", dict(dummy.properties)
+
+ def test_set_on_instance_bad_attribute(self):
+ dummy = self.make_one()()
+ dummy.prop = "new"
+ assert dummy.prop == "new", dummy.prop
+ assert dummy.properties['prop'] == "new", dict(dummy.properties)
+
+ def test_set_wrong_type(self):
+ from webob.cachecontrol import value_property
+ class Dummy(object):
+ properties = dict(prop=1, type='fail')
+ type = 'dummy'
+ prop = value_property('prop', 'dummy', type='failingtype')
+ dummy = Dummy()
+ def assign():
+ dummy.prop = 'foo'
+ self.assertRaises(AttributeError, assign)
+
+ def test_set_type_true(self):
+ dummy = self.make_one()()
+ dummy.prop = True
+ self.assertEquals(dummy.prop, None)
+
+ def test_set_on_instance_w_default(self):
+ dummy = self.make_one()()
+ dummy.prop = "dummy"
+ assert dummy.prop == "dummy", dummy.prop
+ #@@ this probably needs more tests
+
+ def test_del(self):
+ dummy = self.make_one()()
+ dummy.prop = 'Ian Bicking likes to skip'
+ del dummy.prop
+ assert dummy.prop == "dummy", dummy.prop
+
+
+def test_copy_cc():
+ from webob.cachecontrol import CacheControl
+ cc = CacheControl({'header':'%', "msg":'arewerichyet?'}, 'request')
+ cc2 = cc.copy()
+ assert cc.properties is not cc2.properties
+ assert cc.type is cc2.type
+
+# 212
+
+def test_serialize_cache_control_emptydict():
+ from webob.cachecontrol import serialize_cache_control
+ result = serialize_cache_control(dict())
+ assert result == ''
+
+def test_serialize_cache_control_cache_control_object():
+ from webob.cachecontrol import serialize_cache_control, CacheControl
+ result = serialize_cache_control(CacheControl({}, 'request'))
+ assert result == ''
+
+def test_serialize_cache_control_object_with_headers():
+ from webob.cachecontrol import serialize_cache_control, CacheControl
+ result = serialize_cache_control(CacheControl({'header':'a'}, 'request'))
+ assert result == 'header=a'
+
+def test_serialize_cache_control_value_is_None():
+ from webob.cachecontrol import serialize_cache_control, CacheControl
+ result = serialize_cache_control(CacheControl({'header':None}, 'request'))
+ assert result == 'header'
+
+def test_serialize_cache_control_value_needs_quote():
+ from webob.cachecontrol import serialize_cache_control, CacheControl
+ result = serialize_cache_control(CacheControl({'header':'""'}, 'request'))
+ assert result == 'header=""""'
+
+class TestCacheControl(unittest.TestCase):
+ def make_one(self, props, typ):
+ from webob.cachecontrol import CacheControl
+ return CacheControl(props, typ)
+
+ def test_ctor(self):
+ cc = self.make_one({'a':1}, 'typ')
+ self.assertEquals(cc.properties, {'a':1})
+ self.assertEquals(cc.type, 'typ')
+
+ def test_parse(self):
+ from webob.cachecontrol import CacheControl
+ cc = CacheControl.parse("public, max-age=315360000")
+ self.assertEquals(type(cc), CacheControl)
+ self.assertEquals(cc.max_age, 315360000)
+ self.assertEquals(cc.public, True)
+
+ def test_parse_updates_to(self):
+ from webob.cachecontrol import CacheControl
+ def foo(arg): return { 'a' : 1 }
+ cc = CacheControl.parse("public, max-age=315360000", updates_to=foo)
+ self.assertEquals(type(cc), CacheControl)
+ self.assertEquals(cc.max_age, 315360000)
+
+ def test_parse_valueerror_int(self):
+ from webob.cachecontrol import CacheControl
+ def foo(arg): return { 'a' : 1 }
+ cc = CacheControl.parse("public, max-age=abc")
+ self.assertEquals(type(cc), CacheControl)
+ self.assertEquals(cc.max_age, 'abc')
+
+ def test_repr(self):
+ cc = self.make_one({'a':'1'}, 'typ')
+ result = repr(cc)
+ self.assertEqual(result, "<CacheControl 'a=1'>")
+
+
+
+