258 lines
7.9 KiB
Python
258 lines
7.9 KiB
Python
"""
|
|
Tests miscellaneous stuff.
|
|
|
|
- -s all -i
|
|
- -s run_erc,update_xml,run_drc -i
|
|
- -s all,run_drc
|
|
- -s bogus
|
|
- An unknown output type
|
|
- -s all and_one_of_two_outs
|
|
- Missing schematic
|
|
- Wrong PCB name
|
|
- Missing PCB
|
|
- Missing config
|
|
- Wrong config name
|
|
- Guess the PCB and YAML
|
|
- Guess the PCB and YAML when more than one is present
|
|
- --list
|
|
|
|
For debug information use:
|
|
pytest-3 --log-cli-level debug
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import shutil
|
|
# 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)
|
|
# Utils import
|
|
from utils import context
|
|
prev_dir = os.path.dirname(prev_dir)
|
|
if prev_dir not in sys.path:
|
|
sys.path.insert(0, prev_dir)
|
|
from kiplot.misc import (EXIT_BAD_ARGS, EXIT_BAD_CONFIG, NO_SCH_FILE, NO_PCB_FILE)
|
|
|
|
|
|
POS_DIR = 'positiondir'
|
|
|
|
|
|
def test_skip_pre_and_outputs():
|
|
prj = 'simple_2layer'
|
|
ctx = context.TestContext('SkipPreAndPos', prj, 'pre_and_position', POS_DIR)
|
|
ctx.run(extra=['-s', 'all', '-i'])
|
|
|
|
ctx.dont_expect_out_file(ctx.get_pos_both_csv_filename())
|
|
assert ctx.search_err('Skipping all pre-flight actions')
|
|
assert ctx.search_err('Skipping all outputs')
|
|
|
|
ctx.clean_up()
|
|
|
|
|
|
def test_skip_pre_and_outputs_2():
|
|
prj = 'simple_2layer'
|
|
ctx = context.TestContext('SkipPreAndPos2', prj, 'pre_and_position', POS_DIR)
|
|
ctx.run(extra=['-s', 'run_erc,update_xml,run_drc', '-i'])
|
|
|
|
ctx.dont_expect_out_file(ctx.get_pos_both_csv_filename())
|
|
assert ctx.search_err('Skipping .?run_erc')
|
|
assert ctx.search_err('Skipping .?run_drc')
|
|
assert ctx.search_err('Skipping .?update_xml')
|
|
assert ctx.search_err('Skipping all outputs')
|
|
|
|
ctx.clean_up()
|
|
|
|
|
|
def test_skip_pre_and_outputs_3():
|
|
prj = 'simple_2layer'
|
|
ctx = context.TestContext('SkipPreAndPos3', prj, 'pre_and_position', POS_DIR)
|
|
ctx.run(EXIT_BAD_ARGS, extra=['-s', 'all,run_drc'])
|
|
|
|
ctx.dont_expect_out_file(ctx.get_pos_both_csv_filename())
|
|
assert ctx.search_err('Use `--skip all`')
|
|
|
|
ctx.clean_up()
|
|
|
|
|
|
def test_skip_pre_and_outputs_4():
|
|
prj = 'simple_2layer'
|
|
ctx = context.TestContext('SkipPreAndPos4', prj, 'pre_and_position', POS_DIR)
|
|
ctx.run(EXIT_BAD_ARGS, extra=['-s', 'bogus'])
|
|
|
|
ctx.dont_expect_out_file(ctx.get_pos_both_csv_filename())
|
|
assert ctx.search_err('Unknown preflight .?bogus')
|
|
|
|
ctx.clean_up()
|
|
|
|
|
|
def test_unknown_out():
|
|
prj = 'simple_2layer'
|
|
ctx = context.TestContext('UnknownOut', prj, 'unknown_out', POS_DIR)
|
|
ctx.run(EXIT_BAD_CONFIG)
|
|
|
|
ctx.dont_expect_out_file(ctx.get_pos_both_csv_filename())
|
|
assert ctx.search_err("Unknown output type:? .?bogus")
|
|
|
|
ctx.clean_up()
|
|
|
|
|
|
def test_select_output():
|
|
prj = '3Rs'
|
|
ctx = context.TestContext('DoASCIISkipCSV', prj, 'pre_and_position', POS_DIR)
|
|
ctx.run(extra=['-s', 'all', 'pos_ascii'])
|
|
|
|
ctx.dont_expect_out_file(ctx.get_pos_both_csv_filename())
|
|
ctx.expect_out_file(ctx.get_pos_both_filename())
|
|
assert ctx.search_err('Skipping (.*)position(.*) output')
|
|
|
|
ctx.clean_up()
|
|
|
|
|
|
def test_miss_sch():
|
|
prj = 'fail-project'
|
|
ctx = context.TestContext('MissingSCH', prj, 'pre_and_position', POS_DIR)
|
|
ctx.run(NO_SCH_FILE, extra=['pos_ascii'])
|
|
|
|
assert ctx.search_err('Missing schematic')
|
|
|
|
ctx.clean_up()
|
|
|
|
|
|
def test_miss_pcb():
|
|
prj = '3Rs'
|
|
ctx = context.TestContext('MissingPCB', prj, 'pre_and_position', POS_DIR)
|
|
ctx.board_file = 'bogus'
|
|
ctx.run(NO_PCB_FILE, extra=['-s', 'run_erc,update_xml', 'pos_ascii'])
|
|
|
|
assert ctx.search_err('Board file not found')
|
|
|
|
ctx.clean_up()
|
|
|
|
|
|
def test_miss_pcb_2():
|
|
ctx = context.TestContext('MissingPCB_2', '3Rs', 'pre_and_position', POS_DIR)
|
|
ctx.run(EXIT_BAD_ARGS, no_board_file=True)
|
|
|
|
assert ctx.search_err('No PCB file found')
|
|
|
|
ctx.clean_up()
|
|
|
|
|
|
def test_miss_yaml():
|
|
prj = '3Rs'
|
|
ctx = context.TestContext('MissingYaml', prj, 'pre_and_position', POS_DIR)
|
|
ctx.run(EXIT_BAD_ARGS, no_yaml_file=True)
|
|
|
|
assert ctx.search_err('No config file')
|
|
|
|
ctx.clean_up()
|
|
|
|
|
|
def test_miss_yaml_2():
|
|
prj = '3Rs'
|
|
ctx = context.TestContext('MissingYaml_wrong', prj, 'pre_and_position', POS_DIR)
|
|
ctx.yaml_file = 'bogus'
|
|
ctx.run(EXIT_BAD_ARGS)
|
|
|
|
assert ctx.search_err('Plot config file not found: bogus')
|
|
|
|
ctx.clean_up()
|
|
|
|
|
|
def test_auto_pcb_and_cfg():
|
|
prj = '3Rs'
|
|
ctx = context.TestContext('GuessPCB_cfg', prj, 'pre_and_position', POS_DIR)
|
|
|
|
board_file = os.path.basename(ctx.board_file)
|
|
shutil.copy2(ctx.board_file, ctx.get_out_path(board_file))
|
|
yaml_file = os.path.basename(ctx.yaml_file)
|
|
shutil.copy2(ctx.yaml_file, ctx.get_out_path(yaml_file))
|
|
|
|
ctx.run(extra=['-s', 'all', '-i', 'pos_ascii'], no_out_dir=True, no_board_file=True, no_yaml_file=True, chdir_out=True)
|
|
|
|
ctx.dont_expect_out_file(ctx.get_pos_both_filename())
|
|
ctx.expect_out_file(ctx.get_pos_both_csv_filename())
|
|
assert ctx.search_err('Using PCB file: '+board_file)
|
|
assert ctx.search_err('Using config file: '+yaml_file)
|
|
|
|
ctx.clean_up()
|
|
|
|
|
|
def test_auto_pcb_and_cfg_2():
|
|
prj = '3Rs'
|
|
ctx = context.TestContext('GuessPCB_cfg_rep', prj, 'pre_and_position', POS_DIR)
|
|
|
|
board_file = os.path.basename(ctx.board_file)
|
|
shutil.copy2(ctx.board_file, ctx.get_out_path(board_file))
|
|
shutil.copy2(ctx.board_file, ctx.get_out_path('b_'+board_file))
|
|
yaml_file = os.path.basename(ctx.yaml_file)
|
|
shutil.copy2(ctx.yaml_file, ctx.get_out_path(yaml_file))
|
|
shutil.copy2(ctx.yaml_file, ctx.get_out_path('b_'+yaml_file))
|
|
|
|
ctx.run(extra=['-s', 'all', '-i', 'pos_ascii'], no_out_dir=True, no_board_file=True, no_yaml_file=True, chdir_out=True)
|
|
|
|
assert ctx.search_err('WARNING:More than one PCB')
|
|
assert ctx.search_err('WARNING:More than one config')
|
|
m = ctx.search_err('Using (.*).kicad_pcb')
|
|
assert m
|
|
ctx.board_name = m.group(1)
|
|
|
|
ctx.dont_expect_out_file(ctx.get_pos_both_filename())
|
|
ctx.expect_out_file(ctx.get_pos_both_csv_filename())
|
|
|
|
ctx.clean_up()
|
|
|
|
|
|
def test_list():
|
|
ctx = context.TestContext('List', '3Rs', 'pre_and_position', POS_DIR)
|
|
ctx.run(extra=['--list'], no_verbose=True, no_out_dir=True)
|
|
|
|
assert ctx.search_err('run_erc: True')
|
|
assert ctx.search_err('run_drc: True')
|
|
assert ctx.search_err('update_xml: True')
|
|
assert ctx.search_err(r'Pick and place file.? \(position\) \[position\]')
|
|
assert ctx.search_err(r'Pick and place file.? \(pos_ascii\) \[position\]')
|
|
|
|
ctx.clean_up()
|
|
|
|
|
|
def test_help():
|
|
ctx = context.TestContext('Help', '3Rs', 'pre_and_position', POS_DIR)
|
|
ctx.run(extra=['--help'], no_verbose=True, no_out_dir=True, no_yaml_file=True)
|
|
assert ctx.search_out('Usage:')
|
|
assert ctx.search_out('Arguments:')
|
|
assert ctx.search_out('Options:')
|
|
ctx.clean_up()
|
|
|
|
|
|
def test_help_list_outputs():
|
|
ctx = context.TestContext('HelpListOutputs', '3Rs', 'pre_and_position', POS_DIR)
|
|
ctx.run(extra=['--help-list-outputs'], no_verbose=True, no_out_dir=True, no_yaml_file=True, no_board_file=True)
|
|
assert ctx.search_out('Supported outputs:')
|
|
assert ctx.search_out('Gerber format')
|
|
ctx.clean_up()
|
|
|
|
|
|
def test_help_output():
|
|
ctx = context.TestContext('HelpOutput', '3Rs', 'pre_and_position', POS_DIR)
|
|
ctx.run(extra=['--help-output', 'gerber'], no_verbose=True, no_out_dir=True, no_yaml_file=True, no_board_file=True)
|
|
assert ctx.search_out('Gerber format')
|
|
assert ctx.search_out('Type: .?gerber.?')
|
|
ctx.clean_up()
|
|
|
|
|
|
def test_help_outputs():
|
|
ctx = context.TestContext('HelpOutputs', '3Rs', 'pre_and_position', POS_DIR)
|
|
ctx.run(extra=['--help-outputs'], no_verbose=True, no_out_dir=True, no_yaml_file=True, no_board_file=True)
|
|
assert ctx.search_out('Gerber format')
|
|
assert ctx.search_out('Type: .?gerber.?')
|
|
ctx.clean_up()
|
|
|
|
|
|
def test_help_preflights():
|
|
ctx = context.TestContext('HelpPreflights', '3Rs', 'pre_and_position', POS_DIR)
|
|
ctx.run(extra=['--help-preflights'], no_verbose=True, no_out_dir=True, no_yaml_file=True, no_board_file=True)
|
|
assert ctx.search_out('Supported preflight options')
|
|
ctx.clean_up()
|