Create first test that renders and validates the the rendered PNG is correct.
This commit is contained in:
parent
0dded38353
commit
f0585baefa
5 changed files with 90 additions and 5 deletions
|
|
@ -292,8 +292,7 @@ class GerberCairoContext(GerberContext):
|
|||
self.ctx.paint()
|
||||
|
||||
def dump(self, filename):
|
||||
is_svg = filename.lower().endswith(".svg")
|
||||
if is_svg:
|
||||
if filename and filename.lower().endswith(".svg"):
|
||||
self.surface.finish()
|
||||
self.surface_buffer.flush()
|
||||
with open(filename, "w") as f:
|
||||
|
|
@ -301,7 +300,7 @@ class GerberCairoContext(GerberContext):
|
|||
f.write(self.surface_buffer.read())
|
||||
f.flush()
|
||||
else:
|
||||
self.surface.write_to_png(filename)
|
||||
return self.surface.write_to_png(filename)
|
||||
|
||||
def dump_svg_str(self):
|
||||
self.surface.finish()
|
||||
|
|
|
|||
BIN
gerber/tests/golden/example_two_square_boxes.png
Normal file
BIN
gerber/tests/golden/example_two_square_boxes.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
19
gerber/tests/resources/example_two_square_boxes.gbr
Normal file
19
gerber/tests/resources/example_two_square_boxes.gbr
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
G04 Ucamco ex. 1: Two square boxes*
|
||||
%FSLAX25Y25*%
|
||||
%MOMM*%
|
||||
%TF.Part,Other*%
|
||||
%LPD*%
|
||||
%ADD10C,0.010*%
|
||||
D10*
|
||||
X0Y0D02*
|
||||
G01*
|
||||
X500000Y0D01*
|
||||
Y500000D01*
|
||||
X0D01*
|
||||
Y0D01*
|
||||
X600000D02*
|
||||
X1100000D01*
|
||||
Y500000D01*
|
||||
X600000D01*
|
||||
Y0D01*
|
||||
M02*
|
||||
59
gerber/tests/test_cairo_backend.py
Normal file
59
gerber/tests/test_cairo_backend.py
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
#! /usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Author: Garret Fick <garret@ficksworkshop.com>
|
||||
import os
|
||||
import io
|
||||
|
||||
from ..render.cairo_backend import GerberCairoContext
|
||||
from ..rs274x import read, GerberFile
|
||||
from .tests import *
|
||||
|
||||
|
||||
|
||||
TWO_BOXES_FILE = os.path.join(os.path.dirname(__file__),
|
||||
'resources/example_two_square_boxes.gbr')
|
||||
TWO_BOXES_EXPECTED = os.path.join(os.path.dirname(__file__),
|
||||
'golden/example_two_square_boxes.png')
|
||||
|
||||
def test_render_polygon():
|
||||
|
||||
_test_render(TWO_BOXES_FILE, TWO_BOXES_EXPECTED)
|
||||
|
||||
def _test_render(gerber_path, png_expected_path, create_output_path = None):
|
||||
"""Render the gerber file and compare to the expected PNG output.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
gerber_path : string
|
||||
Path to Gerber file to open
|
||||
png_expected_path : string
|
||||
Path to the PNG file to compare to
|
||||
create_output : string|None
|
||||
If not None, write the generated PNG to the specified path.
|
||||
This is primarily to help with
|
||||
"""
|
||||
|
||||
gerber = read(gerber_path)
|
||||
|
||||
# Create PNG image to the memory stream
|
||||
ctx = GerberCairoContext()
|
||||
gerber.render(ctx)
|
||||
|
||||
actual_bytes = ctx.dump(None)
|
||||
|
||||
# If we want to write the file bytes, do it now. This happens
|
||||
if create_output_path:
|
||||
with open(create_output_path, 'wb') as out_file:
|
||||
out_file.write(actual_bytes)
|
||||
# Creating the output is dangerous - it could overwrite the expected result.
|
||||
# So if we are creating the output, we make the test fail on purpose so you
|
||||
# won't forget to disable this
|
||||
assert_false(True, 'Test created the output %s. This needs to be disabled to make sure the test behaves correctly' % (create_output_path,))
|
||||
|
||||
# Read the expected PNG file
|
||||
|
||||
with open(png_expected_path, 'rb') as expected_file:
|
||||
expected_bytes = expected_file.read()
|
||||
|
||||
assert_equal(expected_bytes, actual_bytes)
|
||||
|
|
@ -9,10 +9,18 @@ from operator import add
|
|||
|
||||
def test_primitive_smoketest():
|
||||
p = Primitive()
|
||||
assert_raises(NotImplementedError, p.bounding_box)
|
||||
try:
|
||||
p.bounding_box
|
||||
assert_false(True, 'should have thrown the exception')
|
||||
except NotImplementedError:
|
||||
pass
|
||||
p.to_metric()
|
||||
p.to_inch()
|
||||
p.offset(1, 1)
|
||||
try:
|
||||
p.offset(1, 1)
|
||||
assert_false(True, 'should have thrown the exception')
|
||||
except NotImplementedError:
|
||||
pass
|
||||
|
||||
def test_line_angle():
|
||||
""" Test Line primitive angle calculation
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue