Create first test that renders and validates the the rendered PNG is correct.

This commit is contained in:
Garret Fick 2016-07-17 13:14:54 +08:00
parent 0dded38353
commit f0585baefa
5 changed files with 90 additions and 5 deletions

View file

@ -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()

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View 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*

View 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)

View file

@ -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