79std::unique_ptr<BOARD>
createBoard(
const std::vector<std::vector<ItemType>>& spec )
81 std::unique_ptr<BOARD> board = std::make_unique<BOARD>();
82 std::vector<BOARD_ITEM*> items;
88 textItem->
SetText( wxString::Format(
_(
"some text-%d" ), idx ) );
92 board->Add( textItem );
94 items.push_back( textItem );
104 wxString
name = wxString::Format(
_(
"group-%d" ),
110 items.push_back( gr );
113 std::bitset<NUM_ITEMS> used;
118 int groupIdx =
GROUP0 + offset;
122 if( offset < spec.size() )
124 const std::vector<ItemType>& groupSpec = spec[offset];
128 used.set(
static_cast<size_t>( item ) );
129 group->AddItem( items[item] );
135 else if( groupIdx !=
REMOVED_GROUP && used.test( groupIdx ) )
159 BOOST_TEST_CHECKPOINT(
"Returning fresh board" );
170 const std::unordered_set<EDA_ITEM*>& items1 = group1.
GetItems();
171 const std::unordered_set<EDA_ITEM*>& items2 = group2.
GetItems();
180 return elem->m_Uuid.AsString() == item1->m_Uuid.AsString();
183 auto item2 = std::find_if( items2.begin(), items2.end(), cmp );
185 BOOST_CHECK( item2 != items2.end() );
199 return elem->m_Uuid.AsString() == group1->m_Uuid.AsString();
202 auto group2 = std::find_if( groups2.begin(), groups2.end(), cmp );
204 BOOST_CHECK( group2 != groups2.end() );
217 std::unique_ptr<BOARD> board1 =
createBoard( spec );
218 auto path = std::filesystem::temp_directory_path() /
"group_saveload_tst.kicad_pcb";
251 auto path = std::filesystem::temp_directory_path() /
"group_saveload_tst.kicad_pcb";
263 BOOST_CHECK_EQUAL( board1->GroupsSanityCheck(),
"Cycle detected in group membership" );
268 BOOST_CHECK_EQUAL( board1->GroupsSanityCheck(),
"Cycle detected in group membership" );
271 board1.reset(
nullptr );
276 board1.reset(
nullptr );
289 std::unique_ptr<BOARD> board = std::make_unique<BOARD>();
292 text0->
SetText( wxT(
"child-0" ) );
296 text1->
SetText( wxT(
"child-1" ) );
300 group->SetName( wxT(
"TestGroup" ) );
301 group->AddItem( text0 );
302 group->AddItem( text1 );
317 BOOST_CHECK( clonedChild != text0 );
318 BOOST_CHECK( clonedChild != text1 );
324 bool foundInOriginal =
group->GetItems().count( clonedChild ) > 0;
325 BOOST_CHECK_MESSAGE( !foundInOriginal,
326 "DeepClone child should not be in original group's m_items" );
330 std::unique_ptr<BOARD> tempBoard = std::make_unique<BOARD>();
331 tempBoard->Add( deepCopy );
340 auto path = std::filesystem::temp_directory_path() /
"group_deepclone_tst.kicad_pcb";
347 if( !reloaded->Groups().empty() )
363 std::unique_ptr<BOARD> board = std::make_unique<BOARD>();
366 text->SetText( wxT(
"generated-child" ) );
371 board->Add( nested );
382 BOOST_CHECK( clonedNestedRaw != nested );
390 BOOST_CHECK( member !=
text );
Construction utilities for PCB tests.
General utilities for PCB file IO for QA programs.
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
std::unordered_set< EDA_ITEM * > & GetItems()
void AddItem(EDA_ITEM *aItem)
Add item to group.
void SetName(const wxString &aName)
A base class for most all the KiCad significant classes used in schematics and boards.
KICAD_T Type() const
Returns the type of object.
virtual void SetText(const wxString &aText)
wxString AsString() const
PCB_GENERATOR * DeepClone() const
A set of BOARD_ITEMs (i.e., without duplicates).
void RunOnChildren(const std::function< void(BOARD_ITEM *)> &aFunction, RECURSE_MODE aMode) const override
Invoke a function on all children.
BOOST_AUTO_TEST_CASE(HealthyGroups)
void testGroupEqual(const PCB_GROUP &group1, const PCB_GROUP &group2)
void testGroupsEqual(const GROUPS &groups1, const GROUPS &groups2)
std::unique_ptr< BOARD > createBoard(const std::vector< std::vector< ItemType > > &spec)
static PCB_GROUP * s_removedGroup
void testSaveLoad(const std::vector< std::vector< ItemType > > &spec)
static PCB_TEXT * s_removedText
std::unique_ptr< BOARD > ReadBoardFromFileOrStream(const std::string &aFilename, std::istream &aFallback)
Read a board from a file, or another stream, as appropriate.
void DumpBoardToFile(BOARD &board, const std::string &aFilename)
Utility function to simply write a Board out to a file.
Class to handle a set of BOARD_ITEMs.
BOOST_AUTO_TEST_SUITE(CadstarPartParser)
BOOST_AUTO_TEST_SUITE_END()
BOOST_CHECK_EQUAL(result, "25.4")
@ PCB_GENERATOR_T
class PCB_GENERATOR, generator on a layer