3535 parse_measurement ,
3636 pc ,
3737 pt ,
38- sizes ,
3938 um
4039 )
40+ from domdf_python_tools .pagesizes .utils import _measurement_re
4141
4242
4343@pytest .mark .parametrize (
@@ -116,14 +116,6 @@ def test_convert_size(unit):
116116 assert isclose (getattr (size , unit_str )[1 ], 34 , abs_tol = 1e-8 )
117117
118118
119- #
120- # def test_parse_measurement():
121- # assert parse_measurement("12mm") == (12 * mm).as_pt()
122- # assert parse_measurement("12 mm") == (12 * mm).as_pt()
123- # assert parse_measurement("12.34 mm") == (12.34 * mm).as_pt()
124- # assert parse_measurement("5inch") == (5 * inch).as_pt()
125- # assert parse_measurement("5in") == (5 * inch).as_pt()
126- #
127119#
128120# @pytest.mark.parametrize(
129121# "size, expected",
@@ -147,20 +139,46 @@ def test_convert_size(unit):
147139#
148140# # TODO: tests for Unit
149141#
150- def test_convert_from ():
151- assert convert_from (1 , pt ) == 1
152- assert convert_from (1 , inch ) == 72
153- assert convert_from (1 , cm ) == 28.3464566929
154- assert convert_from (1 , mm ) == 2.83464566929
155- assert convert_from (1 , um ) == 0.00283464566929
156- assert convert_from (1 , pc ) == 12
157-
158- assert convert_from (5 , pt ) == 1 * 5
159- assert convert_from (5 , inch ) == 72 * 5
160- assert convert_from (5 , cm ) == 28.3464566929 * 5
161- assert convert_from (5 , mm ) == 2.83464566929 * 5
162- assert convert_from (5 , um ) == 0.00283464566929 * 5
163- assert convert_from (5 , pc ) == 12 * 5
142+
143+
144+ @pytest .mark .parametrize (
145+ "value, unit, expects" ,
146+ [
147+ (1 , pt , 1 ),
148+ (1 , inch , 72 ),
149+ (1 , cm , 28.3464566929 ),
150+ (1 , mm , 2.83464566929 ),
151+ (1 , um , 0.00283464566929 ),
152+ (1 , pc , 12 ),
153+ (5 , pt , 1 * 5 ),
154+ (5 , inch , 72 * 5 ),
155+ (5 , cm , 28.3464566929 * 5 ),
156+ (5 , mm , 2.83464566929 * 5 ),
157+ (5 , um , 0.00283464566929 * 5 ),
158+ (5 , pc , 12 * 5 ),
159+ ([1 ], pt , (1 , )),
160+ ([1 ], inch , (72 , )),
161+ ([1 ], cm , (28.3464566929 , )),
162+ ([1 ], mm , (2.83464566929 , )),
163+ ([1 ], um , (0.00283464566929 , )),
164+ ([1 ], pc , (12 , )),
165+ ([5 ], pt , (1 * 5 , )),
166+ ([5 ], inch , (72 * 5 , )),
167+ ([5 ], cm , (28.3464566929 * 5 , )),
168+ ([5 ], mm , (2.83464566929 * 5 , )),
169+ ([5 ], um , (0.00283464566929 * 5 , )),
170+ ([5 ], pc , (12 * 5 , )),
171+ ([1 , 5 ], pt , (1 , 1 * 5 )),
172+ ([1 , 5 ], inch , (72 , 72 * 5 )),
173+ ([1 , 5 ], cm , (28.3464566929 , 28.3464566929 * 5 )),
174+ ([1 , 5 ], mm , (2.83464566929 , 2.83464566929 * 5 )),
175+ ([1 , 5 ], um , (0.00283464566929 , 0.00283464566929 * 5 )),
176+ ([1 , 5 ], pc , (12 , 12 * 5 )),
177+ pytest .param (2 , 5 , 10 , id = "not isinstance(from_, Unit)" ),
178+ ]
179+ )
180+ def test_convert_from (value , unit , expects ):
181+ assert convert_from (value , unit ) == expects
164182
165183
166184@pytest .mark .parametrize (
@@ -172,3 +190,76 @@ def test_convert_from():
172190def test_from_size (size , expected , class_ ):
173191 print (class_ .from_size (size ))
174192 assert class_ .from_size (size ) == expected
193+
194+
195+ @pytest .mark .parametrize (
196+ "string, expects" ,
197+ [
198+ ("12.34mm" , [("12.34" , "mm" )]),
199+ ("12.34 mm" , [("12.34" , "mm" )]),
200+ (".34 mm" , [(".34" , "mm" )]),
201+ ("12.34in" , [("12.34" , "in" )]),
202+ ("12.34 in" , [("12.34" , "in" )]),
203+ (".34 in" , [(".34" , "in" )]),
204+ ("12.34\" " , [("12.34" , "\" " )]),
205+ ("12.34 \" " , [("12.34" , "\" " )]),
206+ (".34 \" " , [(".34" , "\" " )]),
207+ ("12.34mm .34\" " , [("12.34" , "mm" ), (".34" , "\" " )]),
208+ ("12" , [("12" , '' )]),
209+ ('' , []),
210+ ('10μm' , [('10' , 'μm' )]),
211+ ]
212+ )
213+ def test_measurement_re (string , expects ):
214+ assert _measurement_re .findall (string ) == expects
215+
216+
217+ def test_parse_measurement_errors ():
218+ with pytest .raises (ValueError , match = "Too many measurements" ):
219+ parse_measurement ("12.34mm .34\" " )
220+ with pytest .raises (ValueError , match = "Unable to parse measurement" ):
221+ parse_measurement ("" )
222+ with pytest .raises (ValueError , match = "Unable to parse measurement" ):
223+ parse_measurement ("bananas" )
224+ with pytest .raises (ValueError , match = "Unable to parse measurement" ):
225+ parse_measurement ('' )
226+ with pytest .raises (ValueError , match = "Unable to parse measurement" ):
227+ parse_measurement ("12" )
228+ with pytest .raises (ValueError , match = "Unable to parse measurement" ):
229+ parse_measurement ("mm" )
230+ with pytest .raises (ValueError , match = "Unknown unit" ):
231+ parse_measurement ("12'" )
232+
233+
234+ @pytest .mark .parametrize (
235+ "string, expects" ,
236+ [
237+ ("12mm" , mm (12 )),
238+ ("12 mm" , mm (12 )),
239+ ("12.34 mm" , mm (12.34 )),
240+ ("12 um" , um (12 )),
241+ ("12um" , um (12 )),
242+ ("12 μm" , um (12 )),
243+ ("12μm" , um (12 )),
244+ ("12 µm" , um (12 )),
245+ ("12µm" , um (12 )),
246+ ("12 in" , inch (12 )),
247+ ("12 inch" , inch (12 )),
248+ ("12\" " , inch (12 )),
249+ ("12 cm" , cm (12 )),
250+ ("12cm" , cm (12 )),
251+ ("12 pc" , pc (12 )),
252+ ("12pc" , pc (12 )),
253+ ("12 pica" , pc (12 )),
254+ ("12pica" , pc (12 )),
255+ ("12 pt" , pt (12 )),
256+ ("12pt" , pt (12 )),
257+ ("12mm" , 12 * mm ),
258+ ("12 mm" , 12 * mm ),
259+ ("12.34 mm" , 12.34 * mm ),
260+ ("5inch" , 5 * inch ),
261+ ("5in" , 5 * inch ),
262+ ]
263+ )
264+ def test_parse_measurement (string , expects ):
265+ assert parse_measurement (string ) == expects
0 commit comments