Added tests for various schematic strange cases.

- Component withour lib
- Missing component
- Poligon without points
- Pin with unknown direction
This commit is contained in:
Salvador E. Tropea 2020-09-02 10:04:32 -03:00
parent 018d99e3b2
commit 220e2f252e
5 changed files with 135 additions and 8 deletions

View File

@ -9,6 +9,7 @@ F1 "R" 0 0 50 V V C CNN
F2 "" -70 0 50 V I C CNN
F3 "" 0 0 50 H I C CNN
F4 "Hi!" 0 0 50 H I C CNN "Test"
ALIAS Resistor
$FPLIST
R_*
R_*
@ -37,4 +38,22 @@ P 5 0 0 0 -50 -75 75 -75 0 100 -75 -75 -50 -75 f
ENDDRAW
ENDDEF
#
# C
#
DEF C C 0 10 N Y 1 F N
F0 "C" 25 100 50 H V L CNN
F1 "C" 25 -100 50 H V L CNN
F2 "" 38 -150 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
C_*
$ENDFPLIST
DRAW
P 2 0 1 20 -80 -30 80 -30 N
P 2 0 1 20 -80 30 80 30 N
X ~ 1 0 150 110 D 50 50 1 1 P
X ~ 2 0 -150 110 U 50 50 1 1 P
ENDDRAW
ENDDEF
#
#End Library

View File

@ -0,0 +1,66 @@
EESchema Schematic File Version 4
EELAYER 30 0
EELAYER END
$Descr A4 11693 8268
encoding utf-8
Sheet 1 1
Title "KiBom Test Schematic"
Date "2020-03-12"
Rev "A"
Comp "https://github.com/SchrodingersGat/KiBom"
Comment1 ""
Comment2 ""
Comment3 ""
Comment4 ""
$EndDescr
Text Notes 550 1050 0 118 ~ 0
This schematic serves as a test file for the KiBot export script.\nHere we have a component without lib (from old KiCad?) \nand another that isn't in any lib.
$Comp
L l1:C C1
U 1 1 5F43BEC2
P 1000 1700
F 0 "C1" H 1115 1746 50 0000 L CNN
F 1 "1nF" H 1115 1655 50 0000 L CNN
F 2 "Capacitor_SMD:C_0805_2012Metric" H 1038 1550 50 0001 C CNN
F 3 "~" H 1000 1700 50 0001 C CNN
F 4 "T2" H 1000 1700 50 0001 C CNN "Config"
1 1000 1700
1 0 0 -1
$EndComp
$Comp
L l1:C C2
U 1 1 5F43CE1C
P 1450 1700
F 0 "C2" H 1565 1746 50 0000 L CNN
F 1 "1000 pF" H 1565 1655 50 0000 L CNN
F 2 "Capacitor_SMD:C_0805_2012Metric" H 1488 1550 50 0001 C CNN
F 3 "~" H 1450 1700 50 0001 C CNN
F 4 "T3" H 1450 1700 50 0001 C CNN "Config"
1 1450 1700
1 0 0 -1
$EndComp
$Comp
L Resistor R1
U 1 1 5F43D144
P 2100 1700
F 0 "R1" H 2170 1746 50 0000 L CNN
F 1 "1k" H 2170 1655 50 0000 L CNN
F 2 "Resistor_SMD:R_0805_2012Metric" V 2030 1700 50 0001 C CNN
F 3 "~" H 2100 1700 50 0001 C CNN
F 4 "default" H 2100 1700 50 0001 C CNN "Config"
1 2100 1700
1 0 0 -1
$EndComp
$Comp
L l1:FooBar R2
U 1 1 5F43D4BB
P 2500 1700
F 0 "R2" H 2570 1746 50 0000 L CNN
F 1 "1000" H 2570 1655 50 0000 L CNN
F 2 "Resistor_SMD:R_0805_2012Metric" V 2430 1700 50 0001 C CNN
F 3 "~" H 2500 1700 50 0001 C CNN
F 4 "T1" H 2500 1700 50 0001 C CNN "Config"
1 2500 1700
1 0 0 -1
$EndComp
$EndSCHEMATC

View File

@ -1908,7 +1908,7 @@ B8 00 A2 1F 41 E0 C7 2A 65 BE 7E E1 F5 E7 46 4B 3D 22 C6 18 DB CE 36 66 F9 2E 00
EndData
$EndBitmap
$Comp
L l1:R R1
L l1:Resistor R1
U 1 1 5F33EC02
P 1300 3450
F 0 "R1" V 1093 3450 50 0000 C CNN

View File

@ -12,12 +12,13 @@ pytest-3 --log-cli-level debug
import os
import sys
import logging
import coverage
# 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
from kibot.kicad.v5_sch import Schematic, SchFileError, DrawPoligon, Pin
# Utils import
from utils import context
@ -25,6 +26,7 @@ PDF_DIR = ''
PDF_FILE = 'Schematic.pdf'
SVG_FILE = 'Schematic.svg'
NI_DIR = 'no_inductor'
cov = coverage.Coverage()
def test_print_sch_ok():
@ -115,3 +117,35 @@ def test_print_sch_variant_ni_2():
ctx.expect_out_file(o_name)
ctx.compare_pdf(o_name, r_name)
ctx.clean_up()
def test_sch_missing():
""" R1 exists in l1.lib, but the lib isn't specified.
R2 is bogus, completely missing """
prj = 'missing'
ctx = context.TestContextSCH('test_sch_missing', prj, 'sch_no_inductors_1', PDF_DIR)
ctx.run()
o_name = os.path.join(NI_DIR, prj+'.sch')
ctx.expect_out_file(o_name)
ctx.search_err("Component .?Resistor.? doesn't specify its library")
ctx.search_err("Missing component .?l1:FooBar.?")
ctx.search_err("Missing component(.*)Resistor", invert=True)
ctx.clean_up()
def test_sch_bizarre_cases():
""" Poligon without points.
Pin with unknown direction. """
pol = DrawPoligon()
pol.points = 0
pol.coords = []
pin = Pin()
pin.dir = 'bogus'
cov.load()
cov.start()
x1, y1, x2, y2, ok_pol = pol.get_rect()
x1, y1, x2, y2, ok_pin = pin.get_rect()
cov.stop()
cov.save()
assert ok_pol is False
assert ok_pin is False

View File

@ -263,18 +263,26 @@ class TestContext(object):
logging.debug('output match: `{}` OK'.format(text))
return m
def search_err(self, text):
def search_err(self, text, invert=False):
if isinstance(text, list):
res = []
for t in text:
m = re.search(t, self.err, re.MULTILINE)
assert m is not None, t
logging.debug('error match: `{}` (`{}`) OK'.format(t, m.group(0)))
res.append(m)
if invert:
assert m is None, t
logging.debug('error no match: `{}` OK'.format(t))
else:
assert m is not None, t
logging.debug('error match: `{}` (`{}`) OK'.format(t, m.group(0)))
res.append(m)
return res
m = re.search(text, self.err, re.MULTILINE)
assert m is not None
logging.debug('error match: `{}` (`{}`) OK'.format(text, m.group(0)))
if invert:
assert m is None, text
logging.debug('error no match: `{}` OK'.format(text))
else:
assert m is not None, text
logging.debug('error match: `{}` (`{}`) OK'.format(text, m.group(0)))
return m
def search_in_file(self, file, texts):