45 for(
bool backend : {
false,
true } )
51 std::unique_ptr<SCHEMATIC> schematic;
53 std::vector<SCH_SHEET_PATH> paths;
57 if(
path.LastScreen()->GetFileName().EndsWith(
"ampli_ht.kicad_sch" ) )
58 paths.push_back(
path );
61 BOOST_REQUIRE_EQUAL( paths.size(), 2 );
75 const wxString badName(
" Snapshot Field " );
82 const std::array<SCH_FIELD*, 2> fields{ symbolField, sheetField };
83 const std::array<KIID, 2> owners{ symbol->
m_Uuid, sheet->
m_Uuid };
84 std::array<VECTOR2I, 2> positions;
86 for(
size_t i = 0; i < fields.size(); ++i )
88 fields[i]->SetPosition(
VECTOR2I( 1000000 + i * 1000000, 3000000 ) );
89 positions[i] = fields[i]->GetPosition();
92 schematic->RebuildConnectivity();
93 schematic->SetCurrentSheet( paths[1] );
95 const auto check = [&](
bool present )
98 std::array<std::set<KIID_PATH>, 2> seen;
99 std::vector<std::pair<SCH_SCREEN*, SCH_MARKER*>> markers;
101 for(
SCH_SCREEN* current : { schematic->RootScreen(), screen } )
105 auto* marker =
static_cast<SCH_MARKER*
>( item );
106 const auto error = std::static_pointer_cast<ERC_ITEM>( marker->GetRCItem() );
107 markers.emplace_back( current, marker );
112 for(
size_t i = 0; i < fields.size(); ++i )
114 if( error->GetMainItemID() != owners[i] )
117 BOOST_CHECK( error->GetAuxItemID() == fields[i]->m_Uuid );
118 BOOST_CHECK( marker->GetPosition() == positions[i] );
119 BOOST_CHECK( error->GetErrorMessage(
true ).Contains( badName ) );
121 const KIID_PATH&
path = error->GetSpecificSheetPath().PathRef();
122 BOOST_CHECK( error->GetMainItemSheetPath().PathRef() ==
path );
123 BOOST_CHECK( error->GetAuxItemSheetPath().PathRef() ==
path );
124 BOOST_CHECK( seen[i].insert(
path ).second );
129 const std::set<KIID_PATH> symbolPaths = present
130 ? std::set<KIID_PATH>{ paths[0].PathRef(), paths[1].PathRef() } : std::set<KIID_PATH>{};
131 const std::set<KIID_PATH> sheetPaths = present
132 ? std::set<KIID_PATH>{ schematic->Hierarchy().front().PathRef() } : std::set<KIID_PATH>{};
133 BOOST_CHECK( seen[0] == symbolPaths );
134 BOOST_CHECK( seen[1] == sheetPaths );
136 for(
const auto& [current, marker] : markers )
137 current->DeleteItem( marker );
143 field->SetName(
"Snapshot Field" );
144 field->SetPosition( field->GetPosition() +
VECTOR2I( 500000, 500000 ) );
147 schematic->RebuildConnectivity();
150 for(
size_t i = 0; i < fields.size(); ++i )
152 fields[i]->SetName( badName );
153 positions[i] = fields[i]->GetPosition();
156 schematic->RebuildConnectivity();
161 for(
size_t i = 0; i < fields.size(); ++i )
164 commit.
Modify( fields[i], i == 0 ? screen : schematic->RootScreen() );
165 fields[i]->SetPosition( fields[i]->GetPosition() +
VECTOR2I( 500000, 0 ) );
166 positions[i] = fields[i]->GetPosition();
170 schematic->Connectivity().Recalculate( *schematic,
false );
172 schematic->RebuildConnectivity();
BOOST_CHECK_EQUAL(result, "25.4")