68 wxFileName netFile = m_schematic->Project().GetProjectFullName();
69 netFile.SetName( netFile.GetName() + wxT(
"_nested_groups_test" ) );
70 netFile.SetExt( wxT(
"xml" ) );
72 if( wxFileExists( netFile.GetFullPath() ) )
73 wxRemoveFile( netFile.GetFullPath() );
76 std::unique_ptr<NETLIST_EXPORTER_XML> exporter = std::make_unique<NETLIST_EXPORTER_XML>( m_schematic.get() );
84 wxXmlNode* root = xdoc.GetRoot();
87 wxXmlNode* xgroups =
find_child( root, wxT(
"groups" ) );
88 BOOST_REQUIRE_MESSAGE( xgroups,
"expected a <groups> block in the netlist" );
90 std::set<wxString> groupUuids;
91 std::vector<std::set<wxString>> groupMembers;
93 for( wxXmlNode* xgroup = xgroups->GetChildren(); xgroup; xgroup = xgroup->GetNext() )
95 if( xgroup->GetName() != wxT(
"group" ) )
98 groupUuids.insert( xgroup->GetAttribute( wxT(
"uuid" ), wxEmptyString ) );
100 std::set<wxString> members;
102 if( wxXmlNode* xmembers =
find_child( xgroup, wxT(
"members" ) ) )
104 for( wxXmlNode* xm = xmembers->GetChildren(); xm; xm = xm->GetNext() )
106 if( xm->GetName() == wxT(
"member" ) )
107 members.insert( xm->GetAttribute( wxT(
"uuid" ), wxEmptyString ) );
111 groupMembers.push_back( std::move( members ) );
114 BOOST_REQUIRE_MESSAGE( groupUuids.size() >= 2,
"fixture must contain a parent and a nested child group" );
116 bool nestedReferenceFound =
false;
118 for(
const std::set<wxString>& members : groupMembers )
120 for(
const wxString& member : members )
122 if( groupUuids.count( member ) )
124 nestedReferenceFound =
true;
129 if( nestedReferenceFound )
133 BOOST_CHECK_MESSAGE( nestedReferenceFound,
"no group lists another group's UUID as a member; nested group "
134 "membership was dropped during XML export" );
136 wxRemoveFile( netFile.GetFullPath() );