Added tests for sch_variant and pdf_print_sch

For the filter and variant stuff.
This commit is contained in:
Salvador E. Tropea 2020-09-01 16:56:31 -03:00
parent c26481790a
commit 7f6144e32e
8 changed files with 161 additions and 12 deletions

View File

@ -106,6 +106,9 @@ gen_ref:
cp -a $(REFILL).refill $(REFILL)
src/kibot -c tests/yaml_samples/pdf_zone-refill.kibot.yaml -b tests/board_samples/zone-refill.kicad_pcb -d $(REFDIR)
src/kibot -c tests/yaml_samples/print_pcb_zone-refill.kibot.yaml -b tests/board_samples/zone-refill.kicad_pcb -d $(REFDIR)
src/kibot -c tests/yaml_samples/sch_no_inductors.kibot.yaml -e tests/board_samples/test_v5.sch -d $(REFDIR)
mv "$(REFDIR)no_inductor/test_v5-schematic_(no_L).pdf" $(REFDIR)
rmdir $(REFDIR)no_inductor/
cp -a $(REFILL).ok $(REFILL)
doc:

Binary file not shown.

View File

@ -11,17 +11,20 @@ pytest-3 --log-cli-level debug
import os
import sys
import logging
# Look for the 'utils' module from where the script is running
prev_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if prev_dir not in sys.path:
sys.path.insert(0, prev_dir)
from kibot.misc import (PDF_SCH_PRINT, SVG_SCH_PRINT)
from kibot.kicad.v5_sch import Schematic, SchFileError
# Utils import
from utils import context
PDF_DIR = ''
PDF_FILE = 'Schematic.pdf'
SVG_FILE = 'Schematic.svg'
NI_DIR = 'no_inductor'
def test_print_sch_ok():
@ -54,3 +57,61 @@ def test_print_sch_svg_fail():
ctx = context.TestContext('PrSCHFail_SVG', prj, 'print_sch_svg', PDF_DIR)
ctx.run(SVG_SCH_PRINT, no_board_file=True, extra=['-e', os.path.join(ctx.get_board_dir(), 'print_err.sch')])
ctx.clean_up()
def check_l1(ctx):
ctx.run()
o_name = os.path.join(NI_DIR, 'test_v5.sch')
ctx.expect_out_file(o_name)
sch = Schematic()
try:
sch.load(ctx.get_out_path(o_name))
except SchFileError as e:
logging.error('At line {} of `{}`: {}'.format(e.line, e.file, e.msg))
logging.error('Line content: `{}`'.format(e.code))
assert False
comps = sch.get_components()
l1 = next(c for c in comps if c.ref == 'L1')
assert l1
logging.debug('Found L1')
assert l1.lib == 'n'
logging.debug('L1 is crossed')
ctx.clean_up()
def test_sch_variant_ni_1():
""" Using a variant """
prj = 'test_v5' # Is the most complete, contains every KiCad object I know
ctx = context.TestContextSCH('test_sch_variant_ni_1', prj, 'sch_no_inductors_1', PDF_DIR)
check_l1(ctx)
def test_sch_variant_ni_2():
""" Using a filter """
prj = 'test_v5' # Is the most complete, contains every KiCad object I know
ctx = context.TestContextSCH('test_sch_variant_ni_2', prj, 'sch_no_inductors_2', PDF_DIR)
check_l1(ctx)
def test_print_sch_variant_ni_1():
""" Using a variant """
prj = 'test_v5' # Is the most complete, contains every KiCad object I know
ctx = context.TestContextSCH('test_print_sch_variant_ni_1', prj, 'print_pdf_no_inductors_1', PDF_DIR)
ctx.run()
r_name = 'test_v5-schematic_(no_L).pdf'
o_name = os.path.join(NI_DIR, r_name)
ctx.expect_out_file(o_name)
ctx.compare_pdf(o_name, r_name)
ctx.clean_up()
def test_print_sch_variant_ni_2():
""" Using a filter """
prj = 'test_v5' # Is the most complete, contains every KiCad object I know
ctx = context.TestContextSCH('test_print_sch_variant_ni_2', prj, 'print_pdf_no_inductors_2', PDF_DIR)
ctx.run()
r_name = 'test_v5-schematic_(no_L).pdf'
o_name = os.path.join(NI_DIR, 'test_v5-schematic.pdf')
ctx.expect_out_file(o_name)
ctx.compare_pdf(o_name, r_name)
ctx.clean_up()

View File

@ -20,6 +20,10 @@ MODE_SCH = 1
MODE_PCB = 0
def quote(s):
return '"'+s+'"'
class TestContext(object):
def __init__(self, test_name, board_name, yaml_name, sub_dir, yaml_compressed=False):
@ -296,17 +300,21 @@ class TestContext(object):
m = re.search(t, txt, re.MULTILINE)
assert m is None
def compare_image(self, image, reference=None, diff='diff.png'):
def compare_image(self, image, reference=None, diff='diff.png', ref_out_dir=False):
""" For images and single page PDFs """
if reference is None:
reference = image
if ref_out_dir:
reference = self.get_out_path(reference)
else:
reference = os.path.join(REF_DIR, reference)
cmd = ['compare',
# Tolerate 5 % error in color
'-fuzz', '5%',
# Count how many pixels differ
'-metric', 'AE',
self.get_out_path(image),
os.path.join(REF_DIR, reference),
reference,
# Avoid the part where KiCad version is printed
'-crop', '100%x92%+0+0', '+repage',
'-colorspace', 'RGB',
@ -344,16 +352,7 @@ class TestContext(object):
assert len(ref_pages) == len(gen_pages)
# Compare each page
for page in range(len(ref_pages)):
cmd = ['compare', '-metric', 'MSE',
self.get_out_path('ref-'+str(page)+'.png'),
self.get_out_path('gen-'+str(page)+'.png'),
self.get_out_path(diff.format(page))]
logging.debug('Comparing images with: '+str(cmd))
res = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
m = re.match(r'([\d\.]+) \(([\d\.]+)\)', res.decode())
assert m
logging.debug('MSE={} ({})'.format(m.group(1), m.group(2)))
assert float(m.group(2)) == 0.0
self.compare_image('gen-'+str(page)+'.png', 'ref-'+str(page)+'.png', diff.format(page), ref_out_dir=True)
def compare_txt(self, text, reference=None, diff='diff.txt'):
if reference is None:

View File

@ -0,0 +1,25 @@
# Example KiBot config file
kibot:
version: 1
filters:
- name: 'no_inductor'
comment: 'Inductors removed'
type: generic
exclude_refs:
- L*
variants:
- name: 'no_inductor'
comment: 'Inductors removed'
type: kibom
file_id: '_(no_L)'
dnf_filter: 'no_inductor'
outputs:
- name: 'no_inductor'
comment: "Inductors removed"
type: pdf_sch_print
dir: no_inductor
options:
variant: 'no_inductor'

View File

@ -0,0 +1,18 @@
# Example KiBot config file
kibot:
version: 1
filters:
- name: 'no_inductor'
comment: 'Inductors removed'
type: generic
exclude_refs:
- L*
outputs:
- name: 'no_inductor'
comment: "Inductors removed"
type: pdf_sch_print
dir: no_inductor
options:
dnf_filter: 'no_inductor'

View File

@ -0,0 +1,25 @@
# Example KiBot config file
kibot:
version: 1
filters:
- name: 'no_inductor'
comment: 'Inductors removed'
type: generic
exclude_refs:
- L*
variants:
- name: 'no_inductor'
comment: 'Inductors removed'
type: kibom
file_id: '_(no_L)'
dnf_filter: 'no_inductor'
outputs:
- name: 'no_inductor'
comment: "Inductors removed"
type: sch_variant
dir: no_inductor
options:
variant: 'no_inductor'

View File

@ -0,0 +1,18 @@
# Example KiBot config file
kibot:
version: 1
filters:
- name: 'no_inductor'
comment: 'Inductors removed'
type: generic
exclude_refs:
- L*
outputs:
- name: 'no_inductor'
comment: "Inductors removed"
type: sch_variant
dir: no_inductor
options:
dnf_filter: 'no_inductor'