@@ -35,18 +35,29 @@ def test_modbrowse(self):
3535 assert '46.d' in W .get_data (as_text = True )
3636
3737 def test_search (self ):
38- W = self .tc .get ('/Character/Dirichlet/?conductor=15&order=4' )
39- assert r'15.e' in W .get_data (as_text = True )
40- W = self .tc .get ('/Character/Dirichlet/?conductor=25-50&order=5-7' )
41- assert r'25.d' in W .get_data (as_text = True )
42- W = self .tc .get ('/Character/Dirichlet/?conductor=25-50&order=5-7&primitive=Yes' )
43- assert r'25.d' in W .get_data (as_text = True )
44- W = self .tc .get ('/Character/Dirichlet/?conductor=25-50&order=5-7&primitive=No' )
45- assert r'50.d' in W .get_data (as_text = True )
46- W = self .tc .get ('/Character/Dirichlet/?conductor=25-50&order=5-7&primitive=No&parity=Odd' )
47- assert r'56.n' in W .get_data (as_text = True )
48- W = self .tc .get ('/Character/Dirichlet/?conductor=25-50&order=5-7&primitive=No&parity=Even' )
49- assert r'50.d' in W .get_data (as_text = True )
38+ # Each filter is checked in both directions, so a parameter that stops
39+ # being parsed widens the search and trips a negative assertion.
40+ # Conductor 16, order 4 has a primitive even orbit (16.e), a primitive
41+ # odd one (16.f), and imprimitive counterparts at modulus 32. Labels
42+ # carry their tags, since a bare '16.e' also matches '416.e'.
43+ page = self .tc .get ('/Character/Dirichlet/?conductor=15&order=4' ).get_data (as_text = True )
44+ assert '>15.e<' in page
45+ page = self .tc .get ('/Character/Dirichlet/?conductor=16&order=4&is_primitive=no' ).get_data (as_text = True )
46+ assert '>32.e<' in page and '>32.f<' in page
47+ assert '>16.e<' not in page and '>16.f<' not in page
48+ page = self .tc .get ('/Character/Dirichlet/?conductor=16&order=4&parity=even' ).get_data (as_text = True )
49+ assert '>16.e<' in page and '>32.e<' in page
50+ assert '>16.f<' not in page and '>32.f<' not in page
51+ page = self .tc .get ('/Character/Dirichlet/?conductor=16&order=4&parity=odd' ).get_data (as_text = True )
52+ assert '>16.f<' in page and '>32.f<' in page
53+ assert '>16.e<' not in page and '>32.e<' not in page
54+ page = self .tc .get ('/Character/Dirichlet/?conductor=16&order=4&is_primitive=no&parity=odd' ).get_data (as_text = True )
55+ assert '>32.f<' in page
56+ assert '>16.e<' not in page and '>16.f<' not in page and '>32.e<' not in page
57+ # A conductor range matches no index prefix, so this one reads every
58+ # orbit of conductor 25-50 before it can sort; allow the timeout page.
59+ self .check_args_with_timeout (
60+ '/Character/Dirichlet/?conductor=25-50&order=5-7' , '>25.d<' )
5061
5162 def test_condsearch (self ):
5263 W = self .tc .get ('/Character/Dirichlet/?conductor=111' )
0 commit comments