diff --git a/html/canvas/tools/gentestutilsunion.py b/html/canvas/tools/gentestutilsunion.py index 96a0ec862efe48..ae323a128739eb 100644 --- a/html/canvas/tools/gentestutilsunion.py +++ b/html/canvas/tools/gentestutilsunion.py @@ -332,6 +332,20 @@ def _preprocess_code(jinja_env: jinja2.Environment, code: str, return code +def _write_cairo_images(pycairo_code: str, output_files: _OutputPaths, + canvas_types: FrozenSet[_CanvasType]) -> None: + """Creates a png from pycairo code, for the specified canvas types.""" + if _CanvasType.HTML_CANVAS in canvas_types: + full_code = (f'{pycairo_code}\n' + f'surface.write_to_png("{output_files.element}")\n') + eval(compile(full_code, '', 'exec'), {'cairo': cairo}) + + if {_CanvasType.OFFSCREEN_CANVAS, _CanvasType.WORKER} & canvas_types: + full_code = (f'{pycairo_code}\n' + f'surface.write_to_png("{output_files.offscreen}")\n') + eval(compile(full_code, '', 'exec'), {'cairo': cairo}) + + class _Variant(): def __init__(self, params: _MutableTestParams) -> None: @@ -474,7 +488,6 @@ def finalize_params(self, jinja_env: jinja2.Environment, def generate_expected_image(self, output_dirs: _OutputPaths) -> None: """Creates a reference image using Cairo and save filename in params.""" expected = self.params['expected'] - name = self.params['name'] if expected == 'green': self._params['expected_img'] = '/images/green-100x50.png' @@ -487,23 +500,10 @@ def generate_expected_image(self, output_dirs: _OutputPaths) -> None: r'surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, \1, \2)' r'\ncr = cairo.Context(surface)', expected) - output_paths = output_dirs.sub_path(name) - if _CanvasType.HTML_CANVAS in self.params['canvas_types']: - expected_canvas = ( - f'{expected}\n' - f'surface.write_to_png("{output_paths.element}.png")\n') - eval(compile(expected_canvas, f'', 'exec'), {}, - {'cairo': cairo}) - - if {_CanvasType.OFFSCREEN_CANVAS, _CanvasType.WORKER - } & self.params['canvas_types']: - expected_offscreen = ( - f'{expected}\n' - f'surface.write_to_png("{output_paths.offscreen}.png")\n') - eval(compile(expected_offscreen, f'', 'exec'), {}, - {'cairo': cairo}) - - self._params['expected_img'] = f'{name}.png' + img_filename = f'{self.params["name"]}.png' + _write_cairo_images(expected, output_dirs.sub_path(img_filename), + self.params['canvas_types']) + self._params['expected_img'] = img_filename class _VariantGrid: