110 const wxString chainName = wxT(
"TEST_HIER_CHAIN" );
111 const wxString chainNetClass = wxT(
"HighSpeed" );
114 m_schematic = std::make_unique<SCHEMATIC>(
nullptr );
115 m_schematic->SetProject( m_project );
116 m_schematic->CreateDefaultScreens();
118 std::vector<SCH_SHEET*> topSheets = m_schematic->GetTopLevelSheets();
125 wxString rootFileName = PathInWorkDir( wxT(
"hier_roundtrip.kicad_sch" ) );
126 wxString subFileName = PathInWorkDir( wxT(
"hier_roundtrip_sub.kicad_sch" ) );
128 topSheet->
SetFileName( wxT(
"hier_roundtrip.kicad_sch" ) );
133 subSheet->
SetName( wxT(
"SubSheet" ) );
134 subSheet->
SetFileName( wxT(
"hier_roundtrip_sub.kicad_sch" ) );
137 topScreen->
Append( subSheet );
139 m_schematic->RefreshHierarchy();
141 auto chain = std::make_unique<SCH_NETCHAIN>();
142 chain->SetName( chainName );
143 chain->AddNet( wxT(
"/NET_A" ) );
144 chain->AddNet( wxT(
"/NET_B" ) );
145 chain->SetTerminalRefs( wxT(
"U1" ), wxT(
"1" ), wxT(
"U2" ), wxT(
"2" ) );
146 chain->SetNetClass( chainNetClass );
147 chain->SetColor( chainColor );
151 BOOST_REQUIRE_EQUAL( m_schematic->ConnectionGraph()->GetCommittedNetChains().size(), 1u );
154 BOOST_REQUIRE_NO_THROW( saver.
SaveSchematicFile( rootFileName, topSheet, m_schematic.get() ) );
155 BOOST_REQUIRE_NO_THROW( saver.
SaveSchematicFile( subFileName, subSheet, m_schematic.get() ) );
164 auto reloaded = std::make_unique<SCHEMATIC>(
nullptr );
165 reloaded->SetProject( m_project );
170 BOOST_REQUIRE_NO_THROW( loadedRoot = loader.
LoadSchematicFile( rootFileName, reloaded.get() ) );
173 reloaded->SetTopLevelSheets( { loadedRoot } );
174 reloaded->RefreshHierarchy();
176 const auto& classOverrides = reloaded->ConnectionGraph()->GetNetChainNetClassOverrides();
177 const auto& colorOverrides = reloaded->ConnectionGraph()->GetNetChainColorOverrides();
178 const auto& terminalOverrides = reloaded->ConnectionGraph()->GetNetChainTerminalRefOverrides();
181 classOverrides.size() == 1u,
182 "Net-chain netclass overrides were wiped during hierarchical load (size = "
183 << classOverrides.size() <<
")" );
186 colorOverrides.size() == 1u,
187 "Net-chain color overrides were wiped during hierarchical load (size = "
188 << colorOverrides.size() <<
")" );
191 terminalOverrides.size() == 1u,
192 "Net-chain terminal-ref overrides were wiped during hierarchical load (size = "
193 << terminalOverrides.size() <<
")" );
195 auto classIt = classOverrides.find( chainName );
199 auto colorIt = colorOverrides.find( chainName );
205 constexpr double colorTolerance = 1.0 / 255.0 + 1e-9;
206 BOOST_CHECK_SMALL( colorIt->second.r - chainColor.
r, colorTolerance );
207 BOOST_CHECK_SMALL( colorIt->second.g - chainColor.
g, colorTolerance );
208 BOOST_CHECK_SMALL( colorIt->second.b - chainColor.
b, colorTolerance );
209 BOOST_CHECK_SMALL( colorIt->second.a - chainColor.
a, 1e-3 );
211 auto termIt = terminalOverrides.find( chainName );
BOOST_CHECK_EQUAL(result, "25.4")