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(),
85 wxXmlNode* root = xdoc.GetRoot();
88 wxXmlNode* xgroups =
find_child( root, wxT(
"groups" ) );
89 BOOST_REQUIRE_MESSAGE( xgroups,
"expected a <groups> block in the netlist" );
91 std::set<wxString> groupUuids;
92 std::vector<std::set<wxString>> groupMembers;
94 for( wxXmlNode* xgroup = xgroups->GetChildren(); xgroup; xgroup = xgroup->GetNext() )
96 if( xgroup->GetName() != wxT(
"group" ) )
99 groupUuids.insert( xgroup->GetAttribute( wxT(
"uuid" ), wxEmptyString ) );
101 std::set<wxString> members;
103 if( wxXmlNode* xmembers =
find_child( xgroup, wxT(
"members" ) ) )
105 for( wxXmlNode* xm = xmembers->GetChildren(); xm; xm = xm->GetNext() )
107 if( xm->GetName() == wxT(
"member" ) )
108 members.insert( xm->GetAttribute( wxT(
"uuid" ), wxEmptyString ) );
112 groupMembers.push_back( std::move( members ) );
115 BOOST_REQUIRE_MESSAGE( groupUuids.size() >= 2,
"fixture must contain a parent and a nested child group" );
117 bool nestedReferenceFound =
false;
119 for(
const std::set<wxString>& members : groupMembers )
121 for(
const wxString& member : members )
123 if( groupUuids.count( member ) )
125 nestedReferenceFound =
true;
130 if( nestedReferenceFound )
134 BOOST_CHECK_MESSAGE( nestedReferenceFound,
"no group lists another group's UUID as a member; nested group "
135 "membership was dropped during XML export" );
137 wxRemoveFile( netFile.GetFullPath() );