170 lines
4.6 KiB
Python
170 lines
4.6 KiB
Python
"""
|
|
Tests of Printing PCB files
|
|
|
|
We test:
|
|
- PDF for bom.kicad_pcb
|
|
|
|
For debug information use:
|
|
pytest-3 --log-cli-level debug
|
|
|
|
"""
|
|
import logging
|
|
import os
|
|
import pytest
|
|
from . import context
|
|
PDF_DIR = 'Layers'
|
|
PDF_FILE = 'bom-F_Cu+F_SilkS.pdf'
|
|
PDF_FILE_B = 'PCB_Bot.pdf'
|
|
PDF_FILE_C = 'PCB_Bot_def.pdf'
|
|
# Even the Ubuntu builds are slightly different
|
|
is_debian = os.path.isfile('/etc/debian_version') and not os.path.isfile('/etc/lsb-release')
|
|
DIFF_TOL = 10 if is_debian else 5000
|
|
DIFF_TOL2 = 100 if is_debian else 5000
|
|
|
|
|
|
@pytest.mark.slow
|
|
@pytest.mark.pcbnew
|
|
def test_print_pcb_simple(test_dir):
|
|
prj = 'bom'
|
|
ctx = context.TestContext(test_dir, prj, 'print_pcb', PDF_DIR)
|
|
ctx.run()
|
|
# Check all outputs are there
|
|
ctx.expect_out_file_d(PDF_FILE)
|
|
ctx.clean_up()
|
|
|
|
|
|
@pytest.mark.slow
|
|
@pytest.mark.pcbnew
|
|
def test_print_pcb_svg_simple_1(test_dir):
|
|
prj = 'bom'
|
|
ctx = context.TestContext(test_dir, prj, 'print_pcb_svg')
|
|
ctx.run()
|
|
# Check all outputs are there
|
|
file = PDF_FILE.replace('.pdf', '.svg')
|
|
ctx.expect_out_file(file)
|
|
ctx.compare_image(file)
|
|
ctx.clean_up()
|
|
|
|
|
|
@pytest.mark.slow
|
|
@pytest.mark.pcbnew
|
|
def test_print_pcb_svg_simple_2(test_dir):
|
|
""" Check the portrait version is OK """
|
|
prj = 'bom_portrait'
|
|
ctx = context.TestContext(test_dir, prj, 'print_pcb_svg')
|
|
ctx.run()
|
|
# Check all outputs are there
|
|
file = prj+'-F_Cu+F_SilkS.svg'
|
|
ctx.expect_out_file(file)
|
|
ctx.compare_image(file)
|
|
ctx.clean_up()
|
|
|
|
|
|
@pytest.mark.slow
|
|
@pytest.mark.pcbnew
|
|
def test_print_pcb_refill_1(test_dir):
|
|
prj = 'zone-refill'
|
|
ctx = context.TestContext(test_dir, prj, 'print_pcb_zone-refill')
|
|
ctx.run()
|
|
ctx.expect_out_file(PDF_FILE_B)
|
|
ctx.compare_image(PDF_FILE_B, tol=10)
|
|
ctx.clean_up()
|
|
|
|
|
|
@pytest.mark.slow
|
|
@pytest.mark.pcbnew
|
|
def test_print_pcb_refill_2(test_dir):
|
|
""" Using KiCad 6 colors """
|
|
if context.ki5():
|
|
return
|
|
prj = 'zone-refill'
|
|
ctx = context.TestContext(test_dir, prj, 'print_pcb_zone-refill_def')
|
|
ctx.run()
|
|
ctx.expect_out_file(PDF_FILE_B)
|
|
ctx.compare_image(PDF_FILE_B, PDF_FILE_C, tol=10)
|
|
ctx.clean_up()
|
|
|
|
|
|
@pytest.mark.slow
|
|
@pytest.mark.pcbnew
|
|
def test_print_variant_1(test_dir):
|
|
prj = 'kibom-variant_3_txt'
|
|
ctx = context.TestContext(test_dir, prj, 'print_pcb_variant_1')
|
|
ctx.run()
|
|
# Check all outputs are there
|
|
fname = prj+'-F_Fab.pdf'
|
|
ctx.search_err(r'KiCad project file not found', True)
|
|
ctx.expect_out_file(fname)
|
|
ctx.compare_pdf(fname, height='100%')
|
|
ctx.clean_up(keep_project=True)
|
|
|
|
|
|
@pytest.mark.slow
|
|
@pytest.mark.pcbnew
|
|
def test_print_pcb_options(test_dir):
|
|
prj = 'bom'
|
|
ctx = context.TestContext(test_dir, prj, 'print_pcb_options', PDF_DIR)
|
|
ctx.run()
|
|
# Check all outputs are there
|
|
ctx.expect_out_file(PDF_FILE)
|
|
ctx.compare_pdf(PDF_FILE)
|
|
ctx.clean_up()
|
|
|
|
|
|
@pytest.mark.slow
|
|
@pytest.mark.pcbnew
|
|
def test_print_wrong_paste(test_dir):
|
|
prj = 'wrong_paste'
|
|
ctx = context.TestContext(test_dir, prj, 'wrong_paste', PDF_DIR)
|
|
ctx.run()
|
|
# Check all outputs are there
|
|
ctx.expect_out_file(prj+'-F_Fab.pdf')
|
|
ctx.search_err(r'Pad with solder paste, but no copper')
|
|
ctx.clean_up()
|
|
|
|
|
|
@pytest.mark.slow
|
|
@pytest.mark.pcbnew
|
|
def test_pcb_print_simple_1(test_dir):
|
|
prj = 'light_control'
|
|
ctx = context.TestContext(test_dir, prj, 'pcb_print_2')
|
|
ctx.run()
|
|
ctx.expect_out_file(prj+'-F_Cu_mono.png')
|
|
ctx.expect_out_file(prj+'-F_Cu_color.png')
|
|
if is_debian:
|
|
ctx.compare_image(prj+'-F_Cu_color.png', height='100%', fuzz='10%', tol=50)
|
|
ctx.expect_out_file(prj+'-assembly_page_01.eps')
|
|
ctx.expect_out_file(prj+'-assembly_page_01.svg')
|
|
ctx.expect_out_file(prj+'-assembly.ps')
|
|
ctx.clean_up(keep_project=True)
|
|
|
|
|
|
def test_pcb_print_simple_2(test_dir):
|
|
if context.ki6():
|
|
prj = 'pcb_print_rare'
|
|
yaml = 'pcb_print_3'
|
|
else:
|
|
prj = 'bom_portrait'
|
|
yaml = 'pcb_print_4'
|
|
ctx = context.TestContext(test_dir, prj, yaml)
|
|
ctx.run()
|
|
file = ctx.expect_out_file(prj+'-assembly.pdf')
|
|
w, h = ctx.get_pdf_size(file)
|
|
logging.debug('PDF size {} x {} mm'.format(w, h))
|
|
if context.ki6():
|
|
assert abs(w-431.8) < 0.1 and abs(h-279.4) < 0.1
|
|
else:
|
|
assert abs(w-210.0) < 0.1 and abs(h-297.0) < 0.1
|
|
ctx.clean_up()
|
|
|
|
|
|
@pytest.mark.skipif(context.ki5(), reason="uses KiCad 6 nested zones")
|
|
def test_pcb_print_multizone_1(test_dir):
|
|
prj = 'print_multizone'
|
|
ctx = context.TestContext(test_dir, prj, 'print_multizone')
|
|
ctx.run()
|
|
ctx.compare_image(prj+'-assembly_page_01.png', tol=DIFF_TOL)
|
|
# 7.0.1+f1f69c6 generates 48 diff compared to 7.0.1 release
|
|
ctx.compare_image(prj+'-assembly_page_02.png', tol=DIFF_TOL2)
|
|
ctx.clean_up()
|