@@ -78,6 +78,42 @@ def test_with_custom_type(self):
7878 self .assertEqual (test_validator .maximum , 0x12 )
7979
8080
81+ class TestSingleRegex (unittest .TestCase ):
82+ def test_single_regex (self ):
83+ pattern = r'^[A-Z]{3}\d{3}$'
84+ validator = validators .matches_regex (pattern )
85+ self .assertTrue (validator ('ABC123' ))
86+ self .assertFalse (validator ('abc123' ))
87+ self .assertFalse (validator ('AB1234' ))
88+ self .assertFalse (validator ('ABCD12' ))
89+
90+
91+ class TestMultipleRegex (unittest .TestCase ):
92+ patterns_1 = [r'^[A-Z]{1}\d{1}$' , r'^[A-Z]{2}\d{2}$' , r'^[A-Z]{3}\d{3}$' ]
93+ patterns_2 = [r'^\d{1}[A-Z]{1}$' ]
94+ def test_multiple_regex_lists (self ):
95+
96+ validator_1 = validators .matches_any_regex (TestMultipleRegex .patterns_1 , TestMultipleRegex .patterns_2 )
97+ self .assertTrue (validator_1 ('ABC123' ))
98+ self .assertTrue (validator_1 ('A1' ))
99+ self .assertTrue (validator_1 ('1A' ))
100+ self .assertFalse (validator_1 ('123-ABCD' ))
101+
102+ def test_single_regex_list (self ):
103+ validator_2 = validators .matches_any_regex (TestMultipleRegex .patterns_2 )
104+ self .assertTrue (validator_2 ('1A' ))
105+ self .assertFalse (validator_2 ('A1' ))
106+
107+ def test_invalid_arguments (self ):
108+ with self .assertRaisesRegex (ValueError , "Each argument must be a list of regex patterns." ):
109+ validators .matches_any_regex (r'^[A-Z]{3}\d{3}$' )
110+
111+ with self .assertRaisesRegex (ValueError , "Each argument must be a list of regex patterns." ):
112+ validators .matches_any_regex ([])
113+
114+ with self .assertRaisesRegex (ValueError , "Each argument must be a list of regex patterns." ):
115+ validators .matches_any_regex (r'd{3}' , r'd{4}' )
116+
81117class TestAllInRange (unittest .TestCase ):
82118
83119 def setUp (self ):
@@ -395,3 +431,7 @@ def phase(test):
395431
396432 phase_record = yield phase
397433 self .assertMeasurementFail (phase_record , 'pivot' )
434+
435+ if __name__ == '__main__' :
436+ from unittest import main
437+ main ()
0 commit comments