Skip to content

Commit

Permalink
Added regression test to check variants can be selected from a .ini
Browse files Browse the repository at this point in the history
Related to a discussion in SchrodingersGat#150
  • Loading branch information
set-soft committed Dec 23, 2020
1 parent d766427 commit f2ee08f
Show file tree
Hide file tree
Showing 2 changed files with 116 additions and 4 deletions.
111 changes: 111 additions & 0 deletions tests/config_samples/production.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
[BOM_OPTIONS]
; General BoM options here
; If 'ignore_dnf' option is set to 1, rows that are not to be fitted on the PCB will not be written to the BoM file
ignore_dnf = 1
; If 'html_generate_dnf' option is set to 1, also generate a list of components not fitted on the PCB (HTML only)
html_generate_dnf = 1
; If 'use_alt' option is set to 1, grouped references will be printed in the alternate compressed style eg: R1-R7,R18
use_alt = 0
; If 'number_rows' option is set to 1, each row in the BoM will be prepended with an incrementing row number
number_rows = 1
; If 'group_connectors' option is set to 1, connectors with the same footprints will be grouped together, independent of the name of the connector
group_connectors = 1
; If 'test_regex' option is set to 1, each component group will be tested against a number of regular-expressions (specified, per column, below). If any matches are found, the row is ignored in the output file
test_regex = 1
; If 'merge_blank_fields' option is set to 1, component groups with blank fields will be merged into the most compatible group, where possible
merge_blank_fields = 1
; Specify output file name format, %O is the defined output name, %v is the version, %V is the variant name which will be ammended according to 'variant_file_name_format'.
output_file_name = %O_bom_%v%V
; Specify the variant file name format, this is a unique field as the variant is not always used/specified. When it is unused you will want to strip all of this.
variant_file_name_format = _(%V)
; Field name used to determine if a particular part is to be fitted
fit_field = Config
; Make a backup of the bom before generating the new one, using the following template
make_backup = %O.tmp
; Put the datasheet as a link for the following field
datasheet_as_link =
; Default number of boards to produce if none given on CLI with -n
number_boards = 1
; Default PCB variant if none given on CLI with -r
board_variant = production
; If 'hide_headers' option is set to 1, column headers aren't included in the output file
hide_headers = 0
; If 'hide_pcb_info' option is set to 1, PCB info isn't included in the output file
hide_pcb_info = 0
; Interpret as a Digikey P/N and link the following field
digikey_link =

[IGNORE_COLUMNS]
; Any column heading that appears here will be excluded from the Generated BoM
; Titles are case-insensitive
part lib
footprint lib
sheetpath

[COLUMN_ORDER]
; Columns will apear in the order they are listed here
; Titles are case-insensitive
Description
Part
Part Lib
References
Value
Footprint
Footprint Lib
Quantity Per PCB
Build Quantity
Datasheet

[GROUP_FIELDS]
; List of fields used for sorting individual components into groups
; Components which match (comparing *all* fields) will be grouped together
; Field names are case-insensitive
Part
Part Lib
Value
Footprint
Footprint Lib

[COMPONENT_ALIASES]
; A series of values which are considered to be equivalent for the part name
; Each line represents a list of equivalent component name values separated by white space
; e.g. 'c c_small cap' will ensure the equivalent capacitor symbols can be grouped together
; Aliases are case-insensitive
c c_small cap capacitor
r r_small res resistor
sw switch
l l_small inductor
zener zenersmall
d diode d_small

[JOIN]
; A list of rules to join the content of fields
; Each line is a rule, the first name is the field that will receive the data
; from the other fields
; Use tab (ASCII 9) as separator
; Field names are case sensitive

[REGEX_INCLUDE]
; A series of regular expressions used to include parts in the BoM
; If there are any regex defined here, only components that match against ANY of them will be included in the BOM
; Column names are case-insensitive
; Format is: "[ColumName] [Regex]" (white-space separated)

[COLUMN_RENAME]
; A list of columns to be renamed
; Format is: "[ColumName] [NewName]" (white-space separated)

[REGEX_EXCLUDE]
; A series of regular expressions used to exclude parts from the BoM
; If a component matches ANY of these, it will be excluded from the BoM
; Column names are case-insensitive
; Format is: "[ColumName] [Regex]" (white-space separated)
References ^TP[0-9]*
References ^FID
Part mount.*hole
Part solder.*bridge
Part test.*point
Footprint test.*point
Footprint mount.*hole
Footprint fiducial

9 changes: 5 additions & 4 deletions tests/test_bom/test_bugs.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,11 @@ def test_variants_issue_SG136_default():
def test_variants_issue_SG136_production():
prj = 'kibom-variant_2'
ext = 'csv'
ctx = context.TestContext('test_variants_issue_SG136_production', prj, ext)
extra = ['-r', 'production']
ctx.run(no_config_file=True, extra=extra)
out = prj + '_bom_A_(production).' + ext
ctx = context.TestContext('test_variants_issue_SG136_production', prj, ext, 'production')
ctx.run()
# ctx.run(no_config_file=True, extra=['-r', 'production'])
# out = prj + '_bom_A_(production).' + ext
out = prj + '_bom_A.' + ext
rows, components = ctx.load_csv(out)
assert len(rows) == 2
assert len(components) == 3
Expand Down

0 comments on commit f2ee08f

Please sign in to comment.