113 const wxString chainName = wxT(
"TEST_HIER_CHAIN" );
114 const wxString chainNetClass = wxT(
"HighSpeed" );
117 m_schematic = std::make_unique<SCHEMATIC>(
nullptr );
118 m_schematic->SetProject( m_project );
119 m_schematic->CreateDefaultScreens();
121 std::vector<SCH_SHEET*> topSheets = m_schematic->GetTopLevelSheets();
128 wxString rootFileName = PathInWorkDir( wxT(
"hier_roundtrip.kicad_sch" ) );
129 wxString subFileName = PathInWorkDir( wxT(
"hier_roundtrip_sub.kicad_sch" ) );
131 topSheet->
SetFileName( wxT(
"hier_roundtrip.kicad_sch" ) );
136 subSheet->
SetName( wxT(
"SubSheet" ) );
137 subSheet->
SetFileName( wxT(
"hier_roundtrip_sub.kicad_sch" ) );
140 topScreen->
Append( subSheet );
142 m_schematic->RefreshHierarchy();
144 auto chain = std::make_unique<SCH_NETCHAIN>();
145 chain->SetName( chainName );
146 chain->AddNet( wxT(
"/NET_A" ) );
147 chain->AddNet( wxT(
"/NET_B" ) );
148 chain->SetTerminalRefs( wxT(
"U1" ), wxT(
"1" ), wxT(
"U2" ), wxT(
"2" ) );
149 chain->SetNetClass( chainNetClass );
150 chain->SetColor( chainColor );
154 BOOST_REQUIRE_EQUAL( m_schematic->ConnectionGraph()->GetCommittedNetChains().size(), 1u );
157 BOOST_REQUIRE_NO_THROW( saver.
SaveSchematicFile( rootFileName, topSheet, m_schematic.get() ) );
158 BOOST_REQUIRE_NO_THROW( saver.
SaveSchematicFile( subFileName, subSheet, m_schematic.get() ) );
167 auto reloaded = std::make_unique<SCHEMATIC>(
nullptr );
168 reloaded->SetProject( m_project );
173 BOOST_REQUIRE_NO_THROW( loadedRoot = loader.
LoadSchematicFile( rootFileName, reloaded.get() ) );
176 reloaded->SetTopLevelSheets( { loadedRoot } );
177 reloaded->RefreshHierarchy();
179 const auto& classOverrides = reloaded->ConnectionGraph()->GetNetChainNetClassOverrides();
180 const auto& colorOverrides = reloaded->ConnectionGraph()->GetNetChainColorOverrides();
181 const auto& terminalOverrides = reloaded->ConnectionGraph()->GetNetChainTerminalRefOverrides();
184 classOverrides.size() == 1u,
185 "Net-chain netclass overrides were wiped during hierarchical load (size = "
186 << classOverrides.size() <<
")" );
189 colorOverrides.size() == 1u,
190 "Net-chain color overrides were wiped during hierarchical load (size = "
191 << colorOverrides.size() <<
")" );
194 terminalOverrides.size() == 1u,
195 "Net-chain terminal-ref overrides were wiped during hierarchical load (size = "
196 << terminalOverrides.size() <<
")" );
198 auto classIt = classOverrides.find( chainName );
202 auto colorIt = colorOverrides.find( chainName );
208 constexpr double colorTolerance = 1.0 / 255.0 + 1e-9;
209 BOOST_CHECK_SMALL( colorIt->second.r - chainColor.
r, colorTolerance );
210 BOOST_CHECK_SMALL( colorIt->second.g - chainColor.
g, colorTolerance );
211 BOOST_CHECK_SMALL( colorIt->second.b - chainColor.
b, colorTolerance );
212 BOOST_CHECK_SMALL( colorIt->second.a - chainColor.
a, 1e-3 );
214 auto termIt = terminalOverrides.find( chainName );
BOOST_CHECK_EQUAL(result, "25.4")