# coding=utf-8 """ Test each of the extensions base classes (if needed) and sometimes provide specialised test classes for testers to use. """ import inkex from inkex.tester import ComparisonMixin, TestCase class TurnGreenEffect(inkex.ColorExtension): """Turn everything the purest green!""" def modify_color(self, name, color): return inkex.Color("green") def modify_opacity(self, name, opacity): if name == "opacity": return 1.0 return opacity class ColorEffectTest(ComparisonMixin, TestCase): """Direct tests for color mechanisms""" effect_class = TurnGreenEffect effect_name = "inkex_extensions_color" compare_file = "svg/colors.svg" python3_only = True comparisons = [ ("--id=r1",), # One shape only ("--id=r2",), # CSS Styles ("--id=r3",), # Element Attributes ("--id=r4",), # Gradient stops ("--id=r1", "--id=r2"), # Two shapes ("--id=color_svg",), # Recursive group/children (), # Process all shapes ] class ColorBaseCase(TestCase): """Base class for all color effect extensions""" color_tests = [] opacity_tests = [] def _test_list(self, tsts): for tst in tsts: inp, outp, args = (list(tst) + [[]])[:3] self.effect.parse_arguments([self.empty_svg] + args) yield inp, outp def test_colors(self): """Run all color tests""" for x, (inp, outp) in enumerate(self._test_list(self.color_tests)): outp = inkex.Color(outp) got = self.effect._modify_color("fill", inkex.Color(inp)) self.assertTrue( isinstance(got, inkex.Color), "Bad output type: {}".format(type(got).__name__), ) outp, got = str(outp), str(got.to(outp.space)) self.assertEqual( outp, got, "Color mismatch, test:{} {} != {}".format(x, outp, got) ) for x, (inp, outp) in enumerate(self._test_list(self.opacity_tests)): got = self.effect.modify_opacity("opacity", inp) self.assertTrue(isinstance(got, float)) self.assertAlmostEqual(got, outp, delta=0.1)