Mercurial > p > roundup > code
diff 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 |
line wrap: on
line diff
--- a/test/test_misc.py Sun Mar 21 15:39:22 2021 -0400 +++ b/test/test_misc.py Sun Mar 21 18:39:43 2021 -0400 @@ -8,8 +8,18 @@ def testParse(self): self.assertEqual(parse("da, en-gb;q=0.8, en;q=0.7"), ['da', 'en_gb', 'en']) + self.assertEqual(parse("da, en-gb;q=0.7, en;q=0.8"), + ['da', 'en', 'en_gb']) self.assertEqual(parse("en;q=0.2, fr;q=1"), ['fr', 'en']) self.assertEqual(parse("zn; q = 0.2 ,pt-br;q =1"), ['pt_br', 'zn']) + self.assertEqual(parse("pt-br;q =1, zn; q = 0.2"), ['pt_br', 'zn']) + self.assertEqual(parse("pt-br,zn;q= 0.1, en-US;q=0.5"), + ['pt_br', 'en_US', 'zn']) + # verify that items with q=1.0 are in same output order as input + self.assertEqual(parse("pt-br,en-US; q=0.5, zn;q= 1.0" ), + ['pt_br', 'zn', 'en_US']) + self.assertEqual(parse("zn;q=1.0;q= 1.0,pt-br,en-US; q=0.5" ), + ['zn', 'pt_br', 'en_US']) self.assertEqual(parse("es-AR"), ['es_AR']) self.assertEqual(parse("es-es-cat"), ['es_es_cat']) self.assertEqual(parse(""), [])
