Mercurial > p > roundup > code
comparison test/test_misc.py @ 6347:3b945aee0919
accept_language parse; fix priority order; preserve insertion order
There are conditions under which the order is not correctly returned.
Use hashq.hashpop in a loop to get items out of hash (list) in proper
priority order. Make 3 element tuples in hashq include insertion
order. This makes tuples inserted later lower in priority when
priority q values are the same. Makes:
"zn;q=1.0;q= 1.0,pt-br,en-US; q=0.5"
return ['zn', 'pt_br', 'en_US'] (pt_br is default prio of 1 like
zn). Otherwise we get ['pt_br', 'zn', 'en_US'] since 'p' > 'z'.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sun, 21 Mar 2021 18:39:43 -0400 |
| parents | 9a09719b0d8e |
| children | 5986ddd0d2e7 |
comparison
equal
deleted
inserted
replaced
| 6346:7c6713e801d9 | 6347:3b945aee0919 |
|---|---|
| 6 | 6 |
| 7 class AcceptLanguageTest(unittest.TestCase): | 7 class AcceptLanguageTest(unittest.TestCase): |
| 8 def testParse(self): | 8 def testParse(self): |
| 9 self.assertEqual(parse("da, en-gb;q=0.8, en;q=0.7"), | 9 self.assertEqual(parse("da, en-gb;q=0.8, en;q=0.7"), |
| 10 ['da', 'en_gb', 'en']) | 10 ['da', 'en_gb', 'en']) |
| 11 self.assertEqual(parse("da, en-gb;q=0.7, en;q=0.8"), | |
| 12 ['da', 'en', 'en_gb']) | |
| 11 self.assertEqual(parse("en;q=0.2, fr;q=1"), ['fr', 'en']) | 13 self.assertEqual(parse("en;q=0.2, fr;q=1"), ['fr', 'en']) |
| 12 self.assertEqual(parse("zn; q = 0.2 ,pt-br;q =1"), ['pt_br', 'zn']) | 14 self.assertEqual(parse("zn; q = 0.2 ,pt-br;q =1"), ['pt_br', 'zn']) |
| 15 self.assertEqual(parse("pt-br;q =1, zn; q = 0.2"), ['pt_br', 'zn']) | |
| 16 self.assertEqual(parse("pt-br,zn;q= 0.1, en-US;q=0.5"), | |
| 17 ['pt_br', 'en_US', 'zn']) | |
| 18 # verify that items with q=1.0 are in same output order as input | |
| 19 self.assertEqual(parse("pt-br,en-US; q=0.5, zn;q= 1.0" ), | |
| 20 ['pt_br', 'zn', 'en_US']) | |
| 21 self.assertEqual(parse("zn;q=1.0;q= 1.0,pt-br,en-US; q=0.5" ), | |
| 22 ['zn', 'pt_br', 'en_US']) | |
| 13 self.assertEqual(parse("es-AR"), ['es_AR']) | 23 self.assertEqual(parse("es-AR"), ['es_AR']) |
| 14 self.assertEqual(parse("es-es-cat"), ['es_es_cat']) | 24 self.assertEqual(parse("es-es-cat"), ['es_es_cat']) |
| 15 self.assertEqual(parse(""), []) | 25 self.assertEqual(parse(""), []) |
| 16 self.assertEqual(parse(None),[]) | 26 self.assertEqual(parse(None),[]) |
| 17 self.assertEqual(parse(" "), []) | 27 self.assertEqual(parse(" "), []) |
