def testTrivialHTTP_ACCEPT_CHARSET(self): # If the client provides a trivial HTTP_ACCEPT_CHARSET, it can # accept any charset request = {'HTTP_ACCEPT_CHARSET': ''} browser_charsets = HTTPCharsets(request) self.assertEqual(list(browser_charsets.getPreferredCharsets()), ['utf-8'])
def testStarAndUtf8(self): # If '*' and 'utf-8' are in HTTP_ACCEPT_CHARSET, we won't insert # an extra 'utf-8'. request = {'HTTP_ACCEPT_CHARSET': 'ISO-8859-1, utf-8, *'} browser_charsets = HTTPCharsets(request) self.assertEqual(list(browser_charsets.getPreferredCharsets()), ['utf-8', 'iso-8859-1', '*'])
def testNoHTTP_ACCEPT_CHARSET(self): # If the client doesn't provide a HTTP_ACCEPT_CHARSET, it can # accept any charset. request = {} browser_charsets = HTTPCharsets(request) self.assertEqual(list(browser_charsets.getPreferredCharsets()), ['utf-8'])
def testGetPreferredCharset(self): request = { 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1, UTF-8;q=0.66, UTF-16;q=0.33' } browser_charsets = HTTPCharsets(request) self.assertEqual(list(browser_charsets.getPreferredCharsets()), ['utf-8', 'iso-8859-1', 'utf-16'])
def testMalformedHTTP_ACCEPT_CHARSET(self): """ Test for Launchpad #253362 """ request = { 'HTTP_ACCEPT_CHARSET': 'utf-8;q=0.7,iso-8859-1;q=0.2*;q=0.1' } browser_charsets = HTTPCharsets(request) self.assertEqual(list(browser_charsets.getPreferredCharsets()), ['utf-8', 'iso-8859-1'])
def testStarNoUtf8(self): # If '*' is in HTTP_ACCEPT_CHARSET, but 'utf-8' isn't, we insert # utf-8 in the list, since we prefer that over any other # # charset. request = {'HTTP_ACCEPT_CHARSET': 'ISO-8859-1, *'} browser_charsets = HTTPCharsets(request) self.assertEqual(list(browser_charsets.getPreferredCharsets()), ['utf-8', 'iso-8859-1', '*'])
def testTrivialHTTP_ACCEPT_CHARSET(self): # If the client provides a trivial HTTP_ACCEPT_CHARSET, it should # accept any charset (this test is aimed at Zope 2's handling # of request queries for entries starting with HTTP_ # See: https://bugs.launchpad.net/zope2/+bug/143873 request = {'HTTP_ACCEPT_CHARSET': ''} browser_charsets = HTTPCharsets(request) self.assertEqual(list(browser_charsets.getPreferredCharsets()), [])
def testGetPreferredCharsetBogusQuality(self): # test that handling of bogus "quality values" and non-quality # parameters is reasonable request = { 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1;x, UTF-16;Q=0.33, UTF-8;q=foo' } browser_charsets = HTTPCharsets(request) self.assertEqual(list(browser_charsets.getPreferredCharsets()), ['iso-8859-1', 'utf-16'])
def testGetPreferredCharsetOrdering(self): # test that the charsets are returned sorted according to # their "quality value" request = { 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1, UTF-16;Q=0.33, UTF-8;q=0.66' } browser_charsets = HTTPCharsets(request) self.assertEqual(list(browser_charsets.getPreferredCharsets()), ['utf-8', 'iso-8859-1', 'utf-16'])
def testNoStar(self): request = {'HTTP_ACCEPT_CHARSET': 'utf-16;q=0.66'} browser_charsets = HTTPCharsets(request) self.assertEqual(list(browser_charsets.getPreferredCharsets()), ['iso-8859-1', 'utf-16'])
def PyramidBrowserPreferredCharsets(request): # Unfortunately, the trick we use for UserPreferredLanguages # (through an interface) does not work here and so we have to tightly # couple to an implementation. return HTTPCharsets(PyramidZopeRequestProxy(request))
def test_star_header(self): """ test star charset header keeps zope publisher's behaviour """ req = create_request('*') zope_publisher = HTTPCharsets(req).getPreferredCharsets() self._validate(req, zope_publisher)
def test_specific_header(self): """ test explicit charset header keeps zope publisher's behaviour """ req = create_request('ISO-8859-1,utf-8;q=0.7,*;q=0.3') zope_publisher = HTTPCharsets(req).getPreferredCharsets() self._validate(req, zope_publisher)