72 lines
2.6 KiB
Python
72 lines
2.6 KiB
Python
# coding=utf-8
|
|
"""Test units inkex module functionality"""
|
|
|
|
from inkex.units import (
|
|
are_near_relative,
|
|
convert_unit,
|
|
discover_unit,
|
|
parse_unit,
|
|
render_unit,
|
|
)
|
|
from inkex.tester import TestCase
|
|
|
|
|
|
class UnitsTest(TestCase):
|
|
"""Tests for Inkscape Units handling"""
|
|
|
|
def test_parse_unit(self):
|
|
"""Test parsing a unit in a document"""
|
|
self.assertEqual(parse_unit("50px"), (50.0, "px"))
|
|
self.assertEqual(parse_unit("50"), (50.0, "px"))
|
|
self.assertEqual(parse_unit("50quaks"), None)
|
|
self.assertEqual(parse_unit("50quaks", default_value=10), (10.0, "px"))
|
|
self.assertEqual(parse_unit("50%"), (50.0, "%"))
|
|
|
|
def test_near(self):
|
|
"""Test the closeness of numbers"""
|
|
self.assertFalse(are_near_relative(10.0, 5.0))
|
|
self.assertTrue(are_near_relative(10.0, 9.99))
|
|
|
|
def test_discover_unit(self):
|
|
"""Based on the size of a document and it's viewBox"""
|
|
self.assertEqual(discover_unit("50px", 50), "px")
|
|
self.assertEqual(discover_unit("100mm", 3.94), "in")
|
|
self.assertEqual(discover_unit("3779", 1.0), "m")
|
|
self.assertEqual(discover_unit("50quaks", 150), "px")
|
|
|
|
def test_convert_unit(self):
|
|
"""Convert units from one to another"""
|
|
self.assertEqual(convert_unit("10mm", "px"), 37.79527559055118)
|
|
self.assertEqual(convert_unit("1in", "cm"), 2.54)
|
|
self.assertEqual(convert_unit("37.79527559055118px", "mm"), 10.0)
|
|
self.assertEqual(convert_unit("1in", ""), 96.0)
|
|
self.assertEqual(convert_unit("96", "in"), 1.0)
|
|
self.assertEqual(convert_unit("10%", "mm"), 0.0)
|
|
self.assertEqual(convert_unit("1in", "grad"), 0.0)
|
|
self.assertEqual(convert_unit("10quaks", "mm"), 0.0)
|
|
self.assertEqual(convert_unit("10mm", "quaks"), 0.0)
|
|
|
|
def test_render_unit(self):
|
|
"""Convert unit and value pair into rendered unit string"""
|
|
self.assertEqual(render_unit(10.0, "mm"), "10mm")
|
|
self.assertEqual(render_unit(10.01, "mm"), "10.01mm")
|
|
self.assertEqual(render_unit(10.000001, "mm"), "10mm")
|
|
self.assertEqual(render_unit("10cm", "mm"), "10cm")
|
|
|
|
def test_number_parsing(self):
|
|
"""Width number parsing test"""
|
|
for value in (
|
|
"100mm",
|
|
"100 mm",
|
|
" 100mm",
|
|
"100mm ",
|
|
"+100mm",
|
|
"100.0mm",
|
|
"100.0e0mm",
|
|
"10.0e1mm",
|
|
"10.0e+1mm",
|
|
"1000.0e-1mm",
|
|
".1e+3mm",
|
|
"+.1e+3mm",
|
|
):
|
|
self.assertEqual(parse_unit(value), (100, "mm"))
|