111 const wxString chainName = wxT(
"TEST_HIER_CHAIN" );
112 const wxString chainNetClass = wxT(
"HighSpeed" );
115 m_schematic = std::make_unique<SCHEMATIC>(
nullptr );
116 m_schematic->SetProject( m_project );
117 m_schematic->CreateDefaultScreens();
119 std::vector<SCH_SHEET*> topSheets = m_schematic->GetTopLevelSheets();
126 wxString rootFileName = PathInWorkDir( wxT(
"hier_roundtrip.kicad_sch" ) );
127 wxString subFileName = PathInWorkDir( wxT(
"hier_roundtrip_sub.kicad_sch" ) );
129 topSheet->
SetFileName( wxT(
"hier_roundtrip.kicad_sch" ) );
134 subSheet->
SetName( wxT(
"SubSheet" ) );
135 subSheet->
SetFileName( wxT(
"hier_roundtrip_sub.kicad_sch" ) );
138 topScreen->
Append( subSheet );
140 m_schematic->RefreshHierarchy();
142 auto chain = std::make_unique<SCH_NETCHAIN>();
143 chain->SetName( chainName );
144 chain->AddNet( wxT(
"/NET_A" ) );
145 chain->AddNet( wxT(
"/NET_B" ) );
146 chain->SetTerminalRefs( wxT(
"U1" ), wxT(
"1" ), wxT(
"U2" ), wxT(
"2" ) );
147 chain->SetNetClass( chainNetClass );
148 chain->SetColor( chainColor );
152 BOOST_REQUIRE_EQUAL( m_schematic->ConnectionGraph()->GetCommittedNetChains().size(), 1u );
155 BOOST_REQUIRE_NO_THROW( saver.
SaveSchematicFile( rootFileName, topSheet, m_schematic.get() ) );
156 BOOST_REQUIRE_NO_THROW( saver.
SaveSchematicFile( subFileName, subSheet, m_schematic.get() ) );
165 auto reloaded = std::make_unique<SCHEMATIC>(
nullptr );
166 reloaded->SetProject( m_project );
171 BOOST_REQUIRE_NO_THROW( loadedRoot = loader.
LoadSchematicFile( rootFileName, reloaded.get() ) );
174 reloaded->SetTopLevelSheets( { loadedRoot } );
175 reloaded->RefreshHierarchy();
177 const auto& classOverrides = reloaded->ConnectionGraph()->GetNetChainNetClassOverrides();
178 const auto& colorOverrides = reloaded->ConnectionGraph()->GetNetChainColorOverrides();
179 const auto& terminalOverrides = reloaded->ConnectionGraph()->GetNetChainTerminalRefOverrides();
182 classOverrides.size() == 1u,
183 "Net-chain netclass overrides were wiped during hierarchical load (size = "
184 << classOverrides.size() <<
")" );
187 colorOverrides.size() == 1u,
188 "Net-chain color overrides were wiped during hierarchical load (size = "
189 << colorOverrides.size() <<
")" );
192 terminalOverrides.size() == 1u,
193 "Net-chain terminal-ref overrides were wiped during hierarchical load (size = "
194 << terminalOverrides.size() <<
")" );
196 auto classIt = classOverrides.find( chainName );
200 auto colorIt = colorOverrides.find( chainName );
206 constexpr double colorTolerance = 1.0 / 255.0 + 1e-9;
207 BOOST_CHECK_SMALL( colorIt->second.r - chainColor.
r, colorTolerance );
208 BOOST_CHECK_SMALL( colorIt->second.g - chainColor.
g, colorTolerance );
209 BOOST_CHECK_SMALL( colorIt->second.b - chainColor.
b, colorTolerance );
210 BOOST_CHECK_SMALL( colorIt->second.a - chainColor.
a, 1e-3 );
212 auto termIt = terminalOverrides.find( chainName );
BOOST_CHECK_EQUAL(result, "25.4")