68 SCH_SHEET_LIST sheets = m_schematic->BuildSheetListSortedByPageNumbers();
77 const std::set<wxString> originalNets = potential->
GetNets();
78 const std::size_t originalNetCnt = originalNets.size();
79 const std::size_t originalSymCnt = potential->
GetSymbols().size();
81 BOOST_REQUIRE_GT( originalNetCnt, 0u );
82 BOOST_REQUIRE_GT( originalSymCnt, 0u );
86 BOOST_REQUIRE_EQUAL( committed->
GetNets().size(), originalNetCnt );
87 BOOST_REQUIRE_EQUAL( committed->
GetSymbols().size(), originalSymCnt );
95 BOOST_REQUIRE_MESSAGE( refreshed,
96 "Committed chain disappeared across unconditional Recalculate" );
98 BOOST_CHECK_MESSAGE( !refreshed->
GetSymbols().empty(),
99 "Committed chain has empty m_symbols after unconditional Recalculate; "
100 "Reset() cleared the cache and RebuildNetChains() failed to refresh it" );
102 BOOST_CHECK_MESSAGE( !refreshed->
GetNets().empty(),
103 "Committed chain has empty m_nets after unconditional Recalculate" );
119 BOOST_CHECK( !twice->
GetNets().empty() );
167 m_schematic->ConnectionGraph()->Recalculate( m_schematic->Hierarchy(),
true );
168 auto& chains = m_schematic->NetChains();
169 const auto sheets = m_schematic->BuildSheetListSortedByPageNumbers();
170 BOOST_REQUIRE_EQUAL( sheets.size(), 1u );
171 const auto&
path = sheets.front();
173 auto*
chain = chains.CreateNetChainFromPotential( chains.GetPotentialNetChains().front().get(),
176 const KIID originalA =
chain->GetTerminalPinA();
177 const KIID originalB =
chain->GetTerminalPinB();
178 auto* original =
dynamic_cast<SCH_PIN*
>( m_schematic->ResolveItem( originalA,
nullptr,
true ) );
180 const auto connection = original->GetConnectionName( &
path );
182 SCH_PIN* replacement =
nullptr;
188 const auto net =
pin->GetConnectionName( &
path );
190 if(
pin->m_Uuid != originalA &&
pin->m_Uuid != originalB
191 && net && *net == *connection )
203 const KIID replacementId = replacement->
m_Uuid;
205 const wxString replacementNumber = replacement->
GetNumber();
206 BOOST_CHECK( !chains.ReplaceNetChainTerminalPin( {
"TERM_OVERRIDE", 1, originalA, path.Path() } ) );
207 BOOST_REQUIRE( chains.ReplaceNetChainTerminalPin( {
"TERM_OVERRIDE", 1, replacementId, path.Path() } ) );
208 BOOST_CHECK(
chain->GetTerminalPinA() == originalA );
209 BOOST_CHECK(
chain->GetTerminalPinB() == replacementId );
210 BOOST_REQUIRE( chains.ReplaceNetChainTerminalPin( {
"TERM_OVERRIDE", 1, originalB, path.Path() } ) );
211 BOOST_REQUIRE( chains.ReplaceNetChainTerminalPin( {
"TERM_OVERRIDE", 0, replacementId, path.Path() } ) );
213 BOOST_CHECK(
chain->GetTerminalPath( 0 ) ==
path.Path() );
214 BOOST_CHECK( !chains.ReplaceNetChainTerminalPin( {
"TERM_OVERRIDE", 2, originalA, path.Path() } ) );
216 for(
int pass = 0; pass < 2; ++pass )
218 m_schematic->ConnectionGraph()->Recalculate( m_schematic->Hierarchy(),
true );
219 BOOST_CHECK( chains.GetNetChainByName(
"TERM_OVERRIDE" ) ==
chain );
220 BOOST_CHECK(
chain->GetTerminalPinA() == replacementId );
221 BOOST_CHECK(
chain->GetTerminalPinB() == originalB );
222 BOOST_CHECK(
chain->GetTerminalPath( 0 ) ==
path.Path() );
228 auto library = replacementSymbol->GetLibSymbolRef()->Flatten();
229 replacementSymbol->SetLibSymbol(
library.release() );
230 m_schematic->ConnectionGraph()->Recalculate( m_schematic->Hierarchy(),
true );
231 BOOST_CHECK(
chain->GetTerminalPinA() == replacementId );
232 BOOST_CHECK(
chain->GetTerminalPath( 0 ) ==
path.Path() );
236 replacementRef =
"R900";
238 m_schematic->ConnectionGraph()->Recalculate( m_schematic->Hierarchy(),
true );
239 BOOST_CHECK( chains.GetNetChainByName(
"TERM_OVERRIDE" ) ==
chain );
240 BOOST_CHECK(
chain->GetTerminalPinA() == replacementId );
244 replacementRef =
"R901";
247 const wxString file = wxFileName::CreateTempFileName(
"netchain-terminal-" );
249 std::ifstream stream( file.ToStdString() );
253 reloaded->ConnectionGraph()->Recalculate( reloaded->Hierarchy(),
true );
254 auto* restored = reloaded->NetChains().GetNetChainByName(
"TERM_OVERRIDE" );
256 BOOST_CHECK( restored->GetTerminalPinA() == replacementId );
257 BOOST_CHECK( restored->GetTerminalPinB() == originalB );
261 wxRemoveFile( file );
264 path.LastScreen()->Remove( removedSymbol );
265 std::unique_ptr<SCH_SYMBOL> removed( removedSymbol );
267 m_schematic->ConnectionGraph()->Recalculate( m_schematic->Hierarchy(),
true );
268 BOOST_CHECK(
chain->GetTerminalPinA() == replacementId );
269 BOOST_CHECK(
chain->GetTerminalPath( 0 ) ==
path.Path() );
270 BOOST_CHECK( !
chain->GetSymbols().contains( removed.get() ) );
271 BOOST_CHECK(
chain->GetNets().empty() );
BOOST_CHECK_EQUAL(result, "25.4")