28 #include <boost/filesystem.hpp> 37 BOOST_AUTO_TEST_SUITE( GroupSaveLoad )
75 std::unique_ptr<BOARD>
createBoard(
const std::vector<std::vector<ItemType>>& spec )
77 std::unique_ptr<BOARD> board = std::make_unique<BOARD>();
78 std::vector<BOARD_ITEM*> items;
88 board->Add( textItem );
90 items.push_back( textItem );
106 items.push_back( gr );
109 std::bitset<NUM_ITEMS> used;
114 int groupIdx =
GROUP0 + offset;
116 PCB_GROUP* group = static_cast<PCB_GROUP*>( items[groupIdx] );
118 if( offset < spec.size() )
120 const std::vector<ItemType>& groupSpec = spec[offset];
124 used.set( static_cast<size_t>( item ) );
128 BOOST_CHECK_EQUAL( group->
GetItems().size(), groupSpec.size() );
131 else if( groupIdx !=
REMOVED_GROUP && used.test( groupIdx ) )
155 BOOST_TEST_CHECKPOINT(
"Returning fresh board" );
166 const std::unordered_set<BOARD_ITEM*>& items1 = group1.
GetItems();
167 const std::unordered_set<BOARD_ITEM*>& items2 = group2.
GetItems();
169 BOOST_CHECK_EQUAL( items1.size(), items2.size() );
176 return elem->m_Uuid.AsString() == item1->m_Uuid.AsString();
179 auto item2 = std::find_if( items2.begin(), items2.end(), cmp );
189 BOOST_CHECK_EQUAL( groups1.size(), groups2.size() );
195 return elem->m_Uuid.AsString() == group1->m_Uuid.AsString();
198 auto group2 = std::find_if( groups2.begin(), groups2.end(), cmp );
213 std::unique_ptr<BOARD> board1 =
createBoard( spec );
214 auto path = boost::filesystem::temp_directory_path() /
"group_saveload_tst.kicad_pcb";
249 BOOST_CHECK_EQUAL( board1->GroupsSanityCheck(),
"Cycle detected in group membership" );
254 BOOST_CHECK_EQUAL( board1->GroupsSanityCheck(),
"Cycle detected in group membership" );
257 board1.reset(
nullptr );
262 board1.reset(
nullptr );
268 BOOST_AUTO_TEST_SUITE_END()
bool AddItem(BOARD_ITEM *aItem)
Add item to group.
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
A set of BOARD_ITEMs (i.e., without duplicates).
void testGroupsEqual(const GROUPS &groups1, const GROUPS &groups2)
wxString AsString() const
static PCB_GROUP * s_removedGroup
static PCB_TEXT * s_removedText
Construction utilities for PCB tests.
std::unordered_set< BOARD_ITEM * > & GetItems()
BOOST_AUTO_TEST_CASE(HealthyGroups)
BOOST_CHECK(v2.Cross(v1)==1)
virtual void SetText(const wxString &aText)
void DumpBoardToFile(BOARD &board, const std::string &aFilename)
Utility function to simply write a Board out to a file.
void testSaveLoad(const std::vector< std::vector< ItemType >> &spec)
void testGroupEqual(const PCB_GROUP &group1, const PCB_GROUP &group2)
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
std::unique_ptr< BOARD > createBoard(const std::vector< std::vector< ItemType >> &spec)
General utilities for PCB file IO for QA programs.
std::unique_ptr< BOARD > ReadBoardFromFileOrStream(const std::string &aFilename, std::istream &aFallback)
Read a board from a file, or another stream, as appropriate.
void SetName(wxString aName)