summaryrefslogtreecommitdiff
path: root/tests/test_descriptors.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_descriptors.py')
-rw-r--r--tests/test_descriptors.py797
1 files changed, 797 insertions, 0 deletions
diff --git a/tests/test_descriptors.py b/tests/test_descriptors.py
new file mode 100644
index 0000000..9329068
--- /dev/null
+++ b/tests/test_descriptors.py
@@ -0,0 +1,797 @@
+# -*- coding: utf-8 -*-
+
+from datetime import tzinfo
+from datetime import timedelta
+
+from nose.tools import eq_
+from nose.tools import ok_
+from nose.tools import assert_raises
+
+from webob import Request
+
+
+class GMT(tzinfo):
+ """UTC"""
+ ZERO = timedelta(0)
+ def utcoffset(self, dt):
+ return self.ZERO
+
+ def tzname(self, dt):
+ return "UTC"
+
+ def dst(self, dt):
+ return self.ZERO
+
+
+class MockDescriptor:
+ _val = 'avalue'
+ def __get__(self, obj, type=None):
+ return self._val
+ def __set__(self, obj, val):
+ self._val = val
+ def __delete__(self, obj):
+ self._val = None
+
+
+def test_environ_getter_docstring():
+ from webob.descriptors import environ_getter
+ desc = environ_getter('akey')
+ eq_(desc.__doc__, "Gets and sets the 'akey' key in the environment.")
+
+def test_environ_getter_nodefault_keyerror():
+ from webob.descriptors import environ_getter
+ req = Request.blank('/')
+ desc = environ_getter('akey')
+ assert_raises(KeyError, desc.fget, req)
+
+def test_environ_getter_nodefault_fget():
+ from webob.descriptors import environ_getter
+ req = Request.blank('/')
+ desc = environ_getter('akey')
+ desc.fset(req, 'bar')
+ eq_(req.environ['akey'], 'bar')
+
+def test_environ_getter_nodefault_fdel():
+ from webob.descriptors import environ_getter
+ desc = environ_getter('akey')
+ eq_(desc.fdel, None)
+
+def test_environ_getter_default_fget():
+ from webob.descriptors import environ_getter
+ req = Request.blank('/')
+ desc = environ_getter('akey', default='the_default')
+ eq_(desc.fget(req), 'the_default')
+
+def test_environ_getter_default_fset():
+ from webob.descriptors import environ_getter
+ req = Request.blank('/')
+ desc = environ_getter('akey', default='the_default')
+ desc.fset(req, 'bar')
+ eq_(req.environ['akey'], 'bar')
+
+def test_environ_getter_default_fset_none():
+ from webob.descriptors import environ_getter
+ req = Request.blank('/')
+ desc = environ_getter('akey', default='the_default')
+ desc.fset(req, 'baz')
+ desc.fset(req, None)
+ ok_('akey' not in req.environ)
+
+def test_environ_getter_default_fdel():
+ from webob.descriptors import environ_getter
+ req = Request.blank('/')
+ desc = environ_getter('akey', default='the_default')
+ desc.fset(req, 'baz')
+ assert 'akey' in req.environ
+ desc.fdel(req)
+ ok_('akey' not in req.environ)
+
+def test_environ_getter_rfc_section():
+ from webob.descriptors import environ_getter
+ desc = environ_getter('akey', rfc_section='14.3')
+ eq_(desc.__doc__, "Gets and sets the 'akey' key in the environment. For "
+ "more information on akey see `section 14.3 "
+ "<http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3>`_.")
+
+def test_upath_property_fget():
+ from webob.descriptors import upath_property
+ req = Request.blank('/')
+ desc = upath_property('akey')
+ eq_(desc.fget(req), '')
+
+def test_upath_property_fset():
+ from webob.descriptors import upath_property
+ req = Request.blank('/')
+ desc = upath_property('akey')
+ desc.fset(req, 'avalue')
+ eq_(desc.fget(req), 'avalue')
+
+def test_header_getter_doc():
+ from webob.descriptors import header_getter
+ desc = header_getter('AHEADER', '14.3')
+ eq_(desc.__doc__, "Gets and sets and deletes the AHEADER header. For "
+ "more information on AHEADER see `section 14.3 "
+ "<http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3>`_.")
+
+def test_header_getter_fget():
+ from webob.descriptors import header_getter
+ from webob import Response
+ resp = Response('aresp')
+ desc = header_getter('AHEADER', '14.3')
+ eq_(desc.fget(resp), None)
+
+def test_header_getter_fset():
+ from webob.descriptors import header_getter
+ from webob import Response
+ resp = Response('aresp')
+ desc = header_getter('AHEADER', '14.3')
+ desc.fset(resp, 'avalue')
+ eq_(desc.fget(resp), 'avalue')
+
+def test_header_getter_fset_none():
+ from webob.descriptors import header_getter
+ from webob import Response
+ resp = Response('aresp')
+ desc = header_getter('AHEADER', '14.3')
+ desc.fset(resp, 'avalue')
+ desc.fset(resp, None)
+ eq_(desc.fget(resp), None)
+
+def test_header_getter_fdel():
+ from webob.descriptors import header_getter
+ from webob import Response
+ resp = Response('aresp')
+ desc = header_getter('AHEADER', '14.3')
+ desc.fset(resp, 'avalue2')
+ desc.fdel(resp)
+ eq_(desc.fget(resp), None)
+
+def test_header_getter_unicode():
+ from webob.descriptors import header_getter
+ desc = header_getter('AHEADER', '14.3')
+ eq_(desc.__doc__, "Gets and sets and deletes the AHEADER header. For "
+ "more information on AHEADER see `section 14.3 "
+ "<http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3>`_.")
+
+def test_header_getter_unicode_fget_none():
+ from webob.descriptors import header_getter
+ from webob import Response
+ resp = Response('aresp')
+ desc = header_getter('AHEADER', '14.3')
+ eq_(desc.fget(resp), None)
+
+def test_header_getter_unicode_fget():
+ from webob.descriptors import header_getter
+ from webob import Response
+ resp = Response('aresp')
+ desc = header_getter('AHEADER', '14.3')
+ desc.fset(resp, u'avalue')
+ eq_(desc.fget(resp), u'avalue')
+
+def test_header_getter_unicode_fset_none():
+ from webob.descriptors import header_getter
+ from webob import Response
+ resp = Response('aresp')
+ desc = header_getter('AHEADER', '14.3')
+ desc.fset(resp, None)
+ eq_(desc.fget(resp), None)
+
+def test_header_getter_unicode_fset():
+ from webob.descriptors import header_getter
+ from webob import Response
+ resp = Response('aresp')
+ desc = header_getter('AHEADER', '14.3')
+ desc.fset(resp, u'avalue2')
+ eq_(desc.fget(resp), u'avalue2')
+
+def test_header_getter_unicode_fdel():
+ from webob.descriptors import header_getter
+ from webob import Response
+ resp = Response('aresp')
+ desc = header_getter('AHEADER', '14.3')
+ desc.fset(resp, u'avalue3')
+ desc.fdel(resp)
+ eq_(desc.fget(resp), None)
+
+def test_converter_not_prop():
+ from webob.descriptors import converter
+ from webob.descriptors import parse_int_safe
+ from webob.descriptors import serialize_int
+ assert_raises(AssertionError,converter,
+ ('CONTENT_LENGTH', None, '14.13'),
+ parse_int_safe, serialize_int, 'int')
+
+def test_converter_with_name_docstring():
+ from webob.descriptors import converter
+ from webob.descriptors import environ_getter
+ from webob.descriptors import parse_int_safe
+ from webob.descriptors import serialize_int
+ desc = converter(
+ environ_getter('CONTENT_LENGTH', '666', '14.13'),
+ parse_int_safe, serialize_int, 'int')
+ eq_(desc.__doc__, "Gets and sets the 'CONTENT_LENGTH' key in the "
+ "environment. For more information on CONTENT_LENGTH see `section 14.13 "
+ "<http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13>`_. "
+ "Converts it using int.")
+
+def test_converter_with_name_fget():
+ from webob.descriptors import converter
+ from webob.descriptors import environ_getter
+ from webob.descriptors import parse_int_safe
+ from webob.descriptors import serialize_int
+ req = Request.blank('/')
+ desc = converter(
+ environ_getter('CONTENT_LENGTH', '666', '14.13'),
+ parse_int_safe, serialize_int, 'int')
+ eq_(desc.fget(req), 666)
+
+def test_converter_with_name_fset():
+ from webob.descriptors import converter
+ from webob.descriptors import environ_getter
+ from webob.descriptors import parse_int_safe
+ from webob.descriptors import serialize_int
+ req = Request.blank('/')
+ desc = converter(
+ environ_getter('CONTENT_LENGTH', '666', '14.13'),
+ parse_int_safe, serialize_int, 'int')
+ desc.fset(req, '999')
+ eq_(desc.fget(req), 999)
+
+def test_converter_without_name_fget():
+ from webob.descriptors import converter
+ from webob.descriptors import environ_getter
+ from webob.descriptors import parse_int_safe
+ from webob.descriptors import serialize_int
+ req = Request.blank('/')
+ desc = converter(
+ environ_getter('CONTENT_LENGTH', '666', '14.13'),
+ parse_int_safe, serialize_int)
+ eq_(desc.fget(req), 666)
+
+def test_converter_without_name_fset():
+ from webob.descriptors import converter
+ from webob.descriptors import environ_getter
+ from webob.descriptors import parse_int_safe
+ from webob.descriptors import serialize_int
+ req = Request.blank('/')
+ desc = converter(
+ environ_getter('CONTENT_LENGTH', '666', '14.13'),
+ parse_int_safe, serialize_int)
+ desc.fset(req, '999')
+ eq_(desc.fget(req), 999)
+
+def test_converter_none_for_wrong_type():
+ from webob.descriptors import converter
+ from webob.descriptors import environ_getter
+ from webob.descriptors import parse_int_safe
+ from webob.descriptors import serialize_int
+ req = Request.blank('/')
+ desc = converter(
+ ## XXX: Should this fail if the type is wrong?
+ environ_getter('CONTENT_LENGTH', 'sixsixsix', '14.13'),
+ parse_int_safe, serialize_int, 'int')
+ eq_(desc.fget(req), None)
+
+def test_converter_delete():
+ from webob.descriptors import converter
+ from webob.descriptors import environ_getter
+ from webob.descriptors import parse_int_safe
+ from webob.descriptors import serialize_int
+ req = Request.blank('/')
+ desc = converter(
+ ## XXX: Should this fail if the type is wrong?
+ environ_getter('CONTENT_LENGTH', '666', '14.13'),
+ parse_int_safe, serialize_int, 'int')
+ assert_raises(KeyError, desc.fdel, req)
+
+def test_list_header():
+ from webob.descriptors import list_header
+ desc = list_header('CONTENT_LENGTH', '14.13')
+ eq_(type(desc), property)
+
+def test_parse_list_single():
+ from webob.descriptors import parse_list
+ result = parse_list('avalue')
+ eq_(result, ('avalue',))
+
+def test_parse_list_multiple():
+ from webob.descriptors import parse_list
+ result = parse_list('avalue,avalue2')
+ eq_(result, ('avalue', 'avalue2'))
+
+def test_parse_list_none():
+ from webob.descriptors import parse_list
+ result = parse_list(None)
+ eq_(result, None)
+
+def test_parse_list_unicode_single():
+ from webob.descriptors import parse_list
+ result = parse_list(u'avalue')
+ eq_(result, ('avalue',))
+
+def test_parse_list_unicode_multiple():
+ from webob.descriptors import parse_list
+ result = parse_list(u'avalue,avalue2')
+ eq_(result, ('avalue', 'avalue2'))
+
+def test_serialize_list():
+ from webob.descriptors import serialize_list
+ result = serialize_list(('avalue', 'avalue2'))
+ eq_(result, 'avalue, avalue2')
+
+def test_serialize_list_string():
+ from webob.descriptors import serialize_list
+ result = serialize_list('avalue')
+ eq_(result, 'avalue')
+
+def test_serialize_list_unicode():
+ from webob.descriptors import serialize_list
+ result = serialize_list(u'avalue')
+ eq_(result, u'avalue')
+
+def test_converter_date():
+ import datetime
+ from webob.descriptors import converter_date
+ from webob.descriptors import environ_getter
+ req = Request.blank('/')
+ UTC = GMT()
+ desc = converter_date(environ_getter(
+ "HTTP_DATE", "Tue, 15 Nov 1994 08:12:31 GMT", "14.8"))
+ eq_(desc.fget(req),
+ datetime.datetime(1994, 11, 15, 8, 12, 31, tzinfo=UTC))
+
+def test_converter_date_docstring():
+ from webob.descriptors import converter_date
+ from webob.descriptors import environ_getter
+ desc = converter_date(environ_getter(
+ "HTTP_DATE", "Tue, 15 Nov 1994 08:12:31 GMT", "14.8"))
+ eq_(desc.__doc__, "Gets and sets the 'HTTP_DATE' key in the environment. "
+ "For more information on Date see `section 14.8 "
+ "<http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.8>`_. "
+ "Converts it using HTTP date.")
+
+def test_date_header_fget_none():
+ from webob import Response
+ from webob.descriptors import date_header
+ resp = Response('aresponse')
+ desc = date_header('HTTP_DATE', "14.8")
+ eq_(desc.fget(resp), None)
+
+def test_date_header_fset_fget():
+ import datetime
+ from webob import Response
+ from webob.descriptors import date_header
+ resp = Response('aresponse')
+ UTC = GMT()
+ desc = date_header('HTTP_DATE', "14.8")
+ desc.fset(resp, "Tue, 15 Nov 1994 08:12:31 GMT")
+ eq_(desc.fget(resp), datetime.datetime(1994, 11, 15, 8, 12, 31, tzinfo=UTC))
+
+def test_date_header_fdel():
+ from webob import Response
+ from webob.descriptors import date_header
+ resp = Response('aresponse')
+ desc = date_header('HTTP_DATE', "14.8")
+ desc.fset(resp, "Tue, 15 Nov 1994 08:12:31 GMT")
+ desc.fdel(resp)
+ eq_(desc.fget(resp), None)
+
+def test_deprecated_property_ctor_prop():
+ from webob.descriptors import deprecated_property
+ prop = property()
+ dep = deprecated_property(prop,
+ 'deprecated_property',
+ "Don't use it",
+ warning=False)
+ eq_(dep.descriptor, prop)
+
+def test_deprecated_property_ctor_attr():
+ from webob.descriptors import deprecated_property
+ prop = property()
+ dep = deprecated_property(prop,
+ 'deprecated_property',
+ "Don't use it",
+ warning=False)
+ eq_(dep.attr, 'deprecated_property')
+
+def test_deprecated_property_ctor_message():
+ from webob.descriptors import deprecated_property
+ prop = property()
+ dep = deprecated_property(prop,
+ 'deprecated_property',
+ "Don't use it",
+ warning=False)
+ eq_(dep.message, "Don't use it")
+
+def test_deprecated_property_ctor_raises():
+ from webob.descriptors import deprecated_property
+ prop = property()
+ dep = deprecated_property(prop,
+ 'deprecated_property',
+ "Don't use it",
+ warning=False)
+ assert_raises(DeprecationWarning, dep.warn)
+
+def test_deprecated_property_get():
+ from webob.descriptors import deprecated_property
+ dep = deprecated_property(deprecated_property,
+ 'deprecated_property',
+ 'DEPRECATED',
+ warning=False)
+ assert_raises(DeprecationWarning, dep.__get__, dep)
+
+def test_deprecated_property_get_none():
+ from webob.descriptors import deprecated_property
+ dep = deprecated_property(None,
+ 'deprecated_property',
+ 'DEPRECATED',
+ warning=False)
+ eq_(dep.__get__(None), dep)
+
+def test_deprecated_property_set():
+ from webob.descriptors import deprecated_property
+ dep = deprecated_property(deprecated_property,
+ 'deprecated_property',
+ 'DEPRECATED',
+ warning=False)
+ assert_raises(DeprecationWarning, dep.__set__, dep, 'avalue')
+
+def test_deprecated_property_delete():
+ from webob.descriptors import deprecated_property
+ dep = deprecated_property(deprecated_property,
+ 'deprecated_property',
+ 'DEPRECATED',
+ warning=False)
+ assert_raises(DeprecationWarning, dep.__delete__, dep)
+
+def test_deprecated_property_repr():
+ import warnings
+ from webob.descriptors import deprecated_property
+ mock = MockDescriptor()
+ try:
+ warnings.simplefilter('ignore')
+ dep = deprecated_property(mock,
+ 'mock_property',
+ 'DEPRECATED')
+ assert dep.__repr__().startswith(
+ "<Deprecated attribute mock_property: "
+ "<tests.test_descriptors.MockDescriptor instance at")
+ finally:
+ warnings.resetwarnings()
+
+def test_deprecated_property_warn_get():
+ import warnings
+ from webob.descriptors import deprecated_property
+ mock = MockDescriptor()
+ dep = deprecated_property(mock,
+ 'mock_property',
+ 'DEPRECATED')
+ try:
+ warnings.simplefilter('error')
+ assert_raises(DeprecationWarning, dep.__get__, mock)
+ finally:
+ warnings.resetwarnings()
+
+def test_deprecated_property_warn_set():
+ import warnings
+ from webob.descriptors import deprecated_property
+ mock = MockDescriptor()
+ dep = deprecated_property(mock,
+ 'mock_property',
+ 'DEPRECATED')
+ try:
+ warnings.simplefilter('error')
+ assert_raises(DeprecationWarning, dep.__set__, mock, 'avalue')
+ finally:
+ warnings.resetwarnings()
+
+def test_deprecated_property_warn_delete():
+ import warnings
+ from webob.descriptors import deprecated_property
+ mock = MockDescriptor()
+ dep = deprecated_property(mock,
+ 'mock_property',
+ 'DEPRECATED')
+ try:
+ warnings.simplefilter('error')
+ assert_raises(DeprecationWarning, dep.__delete__, mock)
+ finally:
+ warnings.resetwarnings()
+
+def test_deprecated_property_warn_get_call():
+ import warnings
+ from webob.descriptors import deprecated_property
+ mock = MockDescriptor()
+ dep = deprecated_property(mock,
+ 'mock_property',
+ 'DEPRECATED')
+ try:
+ warnings.simplefilter('ignore')
+ eq_(dep.__get__(mock), 'avalue')
+ finally:
+ warnings.resetwarnings()
+
+def test_deprecated_property_warn_set_call():
+ import warnings
+ from webob.descriptors import deprecated_property
+ mock = MockDescriptor()
+ dep = deprecated_property(mock,
+ 'mock_property',
+ 'DEPRECATED')
+ try:
+ warnings.simplefilter('ignore')
+ dep.__set__(mock, 'avalue2')
+ eq_(dep.__get__(mock), 'avalue2')
+ finally:
+ warnings.resetwarnings()
+
+def test_deprecated_property_warn_delete_call():
+ import warnings
+ from webob.descriptors import deprecated_property
+ mock = MockDescriptor()
+ dep = deprecated_property(mock,
+ 'mock_property',
+ 'DEPRECATED')
+ try:
+ warnings.simplefilter('ignore')
+ dep.__delete__(mock)
+ eq_(dep.__get__(mock), None)
+ finally:
+ warnings.resetwarnings()
+
+def test_parse_etag_response():
+ from webob.descriptors import parse_etag_response
+ etresp = parse_etag_response("etag")
+ eq_(etresp, "etag")
+
+def test_parse_etag_response_quoted():
+ from webob.descriptors import parse_etag_response
+ etresp = parse_etag_response('"etag"')
+ eq_(etresp, "etag")
+
+def test_parse_etag_response_is_none():
+ from webob.descriptors import parse_etag_response
+ etresp = parse_etag_response(None)
+ eq_(etresp, None)
+
+def test_serialize_etag_response():
+ from webob.descriptors import serialize_etag_response
+ etresp = serialize_etag_response("etag")
+ eq_(etresp, '"etag"')
+
+def test_parse_if_range_is_None():
+ from webob.descriptors import parse_if_range
+ from webob.descriptors import NoIfRange
+ eq_(NoIfRange, parse_if_range(None))
+
+def test_parse_if_range_date_ifr():
+ from webob.descriptors import parse_if_range
+ from webob.descriptors import IfRange
+ ifr = parse_if_range("2011-03-15 01:24:43.272409")
+ eq_(type(ifr), IfRange)
+
+def test_parse_if_range_date_etagmatcher():
+ from webob.descriptors import parse_if_range
+ from webob.etag import ETagMatcher
+ ifr = parse_if_range("2011-03-15 01:24:43.272409")
+ eq_(type(ifr.etag), ETagMatcher)
+
+def test_serialize_if_range_string():
+ from webob.descriptors import serialize_if_range
+ val = serialize_if_range("avalue")
+ eq_(val, "avalue")
+
+def test_serialize_if_range_unicode():
+ from webob.descriptors import serialize_if_range
+ val = serialize_if_range(u"avalue")
+ eq_(val, u"avalue")
+
+def test_serialize_if_range_datetime():
+ import datetime
+ from webob.descriptors import serialize_if_range
+ UTC = GMT()
+ val = serialize_if_range(datetime.datetime(1994, 11, 15, 8, 12, 31, tzinfo=UTC))
+ eq_(val, "Tue, 15 Nov 1994 08:12:31 GMT")
+
+def test_serialize_if_range_other():
+ from webob.descriptors import serialize_if_range
+ val = serialize_if_range(123456)
+ eq_(val, '123456')
+
+def test_parse_range_none():
+ from webob.descriptors import parse_range
+ val = parse_range(None)
+ eq_(val, None)
+
+def test_parse_range_type():
+ from webob.byterange import Range
+ from webob.descriptors import parse_range
+ val = parse_range("bytes=1-500")
+ eq_(type(val), type(Range.parse("bytes=1-500")))
+
+def test_parse_range_values():
+ from webob.byterange import Range
+ from webob.descriptors import parse_range
+ val = parse_range("bytes=1-500")
+ eq_(val.ranges, Range.parse("bytes=1-500").ranges)
+
+def test_serialize_range_none():
+ from webob.descriptors import serialize_range
+ val = serialize_range(None)
+ eq_(val, None)
+
+def test_serialize_range():
+ from webob.descriptors import serialize_range
+ val = serialize_range((1,500))
+ eq_(val, 'bytes=1-499')
+
+def test_serialize_invalid_len():
+ from webob.descriptors import serialize_range
+ assert_raises(ValueError, serialize_range, (1,))
+
+def test_parse_int_none():
+ from webob.descriptors import parse_int
+ val = parse_int(None)
+ eq_(val, None)
+
+def test_parse_int_emptystr():
+ from webob.descriptors import parse_int
+ val = parse_int('')
+ eq_(val, None)
+
+def test_parse_int():
+ from webob.descriptors import parse_int
+ val = parse_int('123')
+ eq_(val, 123)
+
+def test_parse_int_invalid():
+ from webob.descriptors import parse_int
+ assert_raises(ValueError, parse_int, 'abc')
+
+def test_parse_int_safe_none():
+ from webob.descriptors import parse_int_safe
+ eq_(parse_int_safe(None), None)
+
+def test_parse_int_safe_emptystr():
+ from webob.descriptors import parse_int_safe
+ eq_(parse_int_safe(''), None)
+
+def test_parse_int_safe():
+ from webob.descriptors import parse_int_safe
+ eq_(parse_int_safe('123'), 123)
+
+def test_parse_int_safe_invalid():
+ from webob.descriptors import parse_int_safe
+ eq_(parse_int_safe('abc'), None)
+
+def test_serialize_int():
+ from webob.descriptors import serialize_int
+ assert serialize_int is str
+
+def test_parse_content_range_none():
+ from webob.descriptors import parse_content_range
+ eq_(parse_content_range(None), None)
+
+def test_parse_content_range_emptystr():
+ from webob.descriptors import parse_content_range
+ eq_(parse_content_range(' '), None)
+
+def test_parse_content_range_length():
+ from webob.byterange import ContentRange
+ from webob.descriptors import parse_content_range
+ val = parse_content_range("bytes 0-499/1234")
+ eq_(val.length, ContentRange.parse("bytes 0-499/1234").length)
+
+def test_parse_content_range_start():
+ from webob.byterange import ContentRange
+ from webob.descriptors import parse_content_range
+ val = parse_content_range("bytes 0-499/1234")
+ eq_(val.start, ContentRange.parse("bytes 0-499/1234").start)
+
+def test_parse_content_range_stop():
+ from webob.byterange import ContentRange
+ from webob.descriptors import parse_content_range
+ val = parse_content_range("bytes 0-499/1234")
+ eq_(val.stop, ContentRange.parse("bytes 0-499/1234").stop)
+
+def test_serialize_content_range_none():
+ from webob.descriptors import serialize_content_range
+ eq_(serialize_content_range(None), 'None') ### XXX: Seems wrong
+
+def test_serialize_content_range_emptystr():
+ from webob.descriptors import serialize_content_range
+ eq_(serialize_content_range(''), None)
+
+def test_serialize_content_range_invalid():
+ from webob.descriptors import serialize_content_range
+ assert_raises(ValueError, serialize_content_range, (1,))
+
+def test_serialize_content_range_asterisk():
+ from webob.descriptors import serialize_content_range
+ eq_(serialize_content_range((0, 500)), 'bytes 0-499/*')
+
+def test_serialize_content_range_defined():
+ from webob.descriptors import serialize_content_range
+ eq_(serialize_content_range((0, 500, 1234)), 'bytes 0-499/1234')
+
+def test_parse_auth_params_leading_capital_letter():
+ from webob.descriptors import parse_auth_params
+ val = parse_auth_params('Basic Realm=WebOb')
+ eq_(val, {'ealm': 'WebOb'})
+
+def test_parse_auth_params_trailing_capital_letter():
+ from webob.descriptors import parse_auth_params
+ val = parse_auth_params('Basic realM=WebOb')
+ eq_(val, {})
+
+def test_parse_auth_params_doublequotes():
+ from webob.descriptors import parse_auth_params
+ val = parse_auth_params('Basic realm="Web Object"')
+ eq_(val, {'realm': 'Web Object'})
+
+def test_parse_auth_params_multiple_values():
+ from webob.descriptors import parse_auth_params
+ val = parse_auth_params("foo='blah &&234', qop=foo, nonce='qwerty1234'")
+ eq_(val, {'nonce': "'qwerty1234'", 'foo': "'blah &&234'", 'qop': 'foo'})
+
+def test_parse_auth_params_truncate_on_comma():
+ from webob.descriptors import parse_auth_params
+ val = parse_auth_params("Basic realm=WebOb,this_will_truncate")
+ eq_(val, {'realm': 'WebOb'})
+
+def test_parse_auth_params_emptystr():
+ from webob.descriptors import parse_auth_params
+ eq_(parse_auth_params(''), {})
+
+def test_parse_auth_none():
+ from webob.descriptors import parse_auth
+ eq_(parse_auth(None), None)
+
+def test_parse_auth_emptystr():
+ from webob.descriptors import parse_auth
+ assert_raises(ValueError, parse_auth, '')
+
+def test_parse_auth_basic():
+ from webob.descriptors import parse_auth
+ eq_(parse_auth("Basic realm=WebOb"), ('Basic', 'realm=WebOb'))
+
+def test_parse_auth_basic_quoted():
+ from webob.descriptors import parse_auth
+ eq_(parse_auth('Basic realm="Web Ob"'), ('Basic', {'realm': 'Web Ob'}))
+
+def test_parse_auth_basic_quoted_multiple_unknown():
+ from webob.descriptors import parse_auth
+ eq_(parse_auth("foo='blah &&234', qop=foo, nonce='qwerty1234'"),
+ ("foo='blah", "&&234', qop=foo, nonce='qwerty1234'"))
+
+def test_parse_auth_basic_quoted_known_multiple():
+ from webob.descriptors import parse_auth
+ eq_(parse_auth("Basic realm='blah &&234', qop=foo, nonce='qwerty1234'"),
+ ('Basic', "realm='blah &&234', qop=foo, nonce='qwerty1234'"))
+
+def test_serialize_auth_none():
+ from webob.descriptors import serialize_auth
+ eq_(serialize_auth(None), None)
+
+def test_serialize_auth_emptystr():
+ from webob.descriptors import serialize_auth
+ eq_(serialize_auth(''), '')
+
+def test_serialize_auth_basic_quoted():
+ from webob.descriptors import serialize_auth
+ val = serialize_auth(('Basic', 'realm="WebOb"'))
+ eq_(val, 'Basic realm="WebOb"')
+
+def test_serialize_auth_digest_multiple():
+ from webob.descriptors import serialize_auth
+ val = serialize_auth(('Digest', 'realm="WebOb", nonce=abcde12345, qop=foo'))
+ flags = val[len('Digest'):]
+ result = sorted([ x.strip() for x in flags.split(',') ])
+ eq_(result, ['nonce=abcde12345', 'qop=foo', 'realm="WebOb"'])
+
+def test_serialize_auth_digest_tuple():
+ from webob.descriptors import serialize_auth
+ val = serialize_auth(('Digest', {'realm':'"WebOb"', 'nonce':'abcde12345', 'qop':'foo'}))
+ flags = val[len('Digest'):]
+ result = sorted([ x.strip() for x in flags.split(',') ])
+ eq_(result, ['nonce="abcde12345"', 'qop="foo"', 'realm=""WebOb""'])