/* * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2022 KiCad Developers, see AUTHORS.TXT for contributors. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, you may find one at * http://www.gnu.org/licenses/ */ #include #include #include #include #include #include #include #include #include struct ERC_REGRESSION_TEST_FIXTURE { ERC_REGRESSION_TEST_FIXTURE() : m_settingsManager( true /* headless */ ) { } SETTINGS_MANAGER m_settingsManager; std::unique_ptr m_schematic; }; BOOST_FIXTURE_TEST_CASE( ERCGlobalLabels, ERC_REGRESSION_TEST_FIXTURE ) { LOCALE_IO dummy; // Check for Errors when using global labels std::vector> tests = { { "issue9367", 12 } }; for( const std::pair& test : tests ) { KI_TEST::LoadSchematic( m_settingsManager, test.first, m_schematic ); ERC_SETTINGS& settings = m_schematic->ErcSettings(); SHEETLIST_ERC_ITEMS_PROVIDER errors( m_schematic.get() ); // Skip the "Modified symbol" warning settings.m_ERCSeverities[ERCE_LIB_SYMBOL_ISSUES] = RPT_SEVERITY_IGNORE; settings.m_ERCSeverities[ERCE_LIB_SYMBOL_MISMATCH] = RPT_SEVERITY_IGNORE; SCH_SHEET_LIST sheets = m_schematic->BuildSheetListSortedByPageNumbers(); m_schematic->ConnectionGraph()->Recalculate( sheets, true ); m_schematic->ConnectionGraph()->RunERC(); ERC_TESTER tester( m_schematic.get() ); tester.TestConflictingBusAliases(); tester.TestMultUnitPinConflicts(); tester.TestMultiunitFootprints(); tester.TestNoConnectPins(); tester.TestPinToPin(); tester.TestSimilarLabels(); errors.SetSeverities( RPT_SEVERITY_ERROR | RPT_SEVERITY_WARNING ); ERC_REPORT reportWriter( m_schematic.get(), EDA_UNITS::MILLIMETRES ); BOOST_CHECK_MESSAGE( errors.GetCount() == test.second, "Expected " << test.second << " errors in " << test.first.ToStdString() << " but got " << errors.GetCount() << "\n" << reportWriter.GetTextReport() ); } } BOOST_FIXTURE_TEST_CASE( ERCSingleGlobalLabels, ERC_REGRESSION_TEST_FIXTURE ) { LOCALE_IO dummy; // Check for Errors when using global labels std::vector> tests = { { "issue13212", 3 } }; for( const std::pair& test : tests ) { KI_TEST::LoadSchematic( m_settingsManager, test.first, m_schematic ); ERC_SETTINGS& settings = m_schematic->ErcSettings(); SHEETLIST_ERC_ITEMS_PROVIDER errors( m_schematic.get() ); // Skip the "Modified symbol" warning settings.m_ERCSeverities[ERCE_LIB_SYMBOL_ISSUES] = RPT_SEVERITY_IGNORE; settings.m_ERCSeverities[ERCE_LIB_SYMBOL_MISMATCH] = RPT_SEVERITY_IGNORE; // Configure the rules under test settings.m_ERCSeverities[ERCE_GLOBLABEL] = RPT_SEVERITY_IGNORE; settings.m_ERCSeverities[ERCE_SINGLE_GLOBAL_LABEL] = RPT_SEVERITY_ERROR; SCH_SHEET_LIST sheets = m_schematic->BuildSheetListSortedByPageNumbers(); m_schematic->ConnectionGraph()->Recalculate( sheets, true ); m_schematic->ConnectionGraph()->RunERC(); ERC_TESTER tester( m_schematic.get() ); tester.TestConflictingBusAliases(); tester.TestMultUnitPinConflicts(); tester.TestMultiunitFootprints(); tester.TestNoConnectPins(); tester.TestPinToPin(); tester.TestSimilarLabels(); errors.SetSeverities( RPT_SEVERITY_ERROR | RPT_SEVERITY_WARNING ); ERC_REPORT reportWriter( m_schematic.get(), EDA_UNITS::MILLIMETRES ); BOOST_CHECK_MESSAGE( errors.GetCount() == test.second, "Expected " << test.second << " errors in " << test.first.ToStdString() << " but got " << errors.GetCount() << "\n" << reportWriter.GetTextReport() ); } }