23#include <boost/test/unit_test.hpp>
25#include <wx/filename.h>
32#include <api/board/board_commands.pb.h>
33#include <api/common/envelope.pb.h>
34#include <api/common/types/base_types.pb.h>
46const wxString F_CU_ZONE = wxS(
"00000000-0000-0000-0000-00005c07d704" );
47const wxString B_CU_ZONE = wxS(
"00000000-0000-0000-0000-00005c07d701" );
48const wxString IN1_CU_ZONE = wxS(
"00000000-0000-0000-0000-00005c07d707" );
49const wxString IN2_CU_ZONE = wxS(
"00000000-0000-0000-0000-00005c07d70a" );
52struct API_HANDLER_PCB_FIXTURE
54 SETTINGS_MANAGER m_settingsManager;
55 std::unique_ptr<BOARD> m_board;
56 std::shared_ptr<HEADLESS_PCB_CONTEXT> m_context;
60 BOARD* loadBoard(
const wxString& aRelPath )
64 BOARD* board = m_board.get();
65 m_context = std::make_shared<HEADLESS_PCB_CONTEXT>( std::move( m_board ),
66 &m_settingsManager.Prj(),
nullptr );
70 kiapi::common::ApiRequest makeRefillRequest(
BOARD* aBoard,
const std::vector<wxString>& aZoneIds )
const
72 kiapi::board::commands::RefillZones command;
73 command.mutable_board()->set_type( kiapi::common::types::DocumentType::DOCTYPE_PCB );
74 command.mutable_board()->set_board_filename(
75 wxFileName( aBoard->
GetFileName() ).GetFullName().ToStdString() );
77 for(
const wxString&
id : aZoneIds )
80 kiapi::common::ApiRequest request;
81 request.mutable_header()->set_client_name(
"kicad.qa" );
82 BOOST_REQUIRE( request.mutable_message()->PackFrom( command ) );
87 ZONE* zoneByUuid(
BOARD* aBoard,
const wxString& aUuid )
const
89 for( ZONE* zone : aBoard->
Zones() )
91 if( zone->m_Uuid.AsString() == aUuid )
98 void unfillAll(
BOARD* aBoard )
const
101 for( ZONE* zone : aBoard->
Zones() )
112BOOST_FIXTURE_TEST_SUITE( ApiHandlerPcb, API_HANDLER_PCB_FIXTURE )
117 BOARD*
board = loadBoard( wxS(
"issue5830" ) );
122 kiapi::common::ApiRequest request = makeRefillRequest(
board, { F_CU_ZONE, IN1_CU_ZONE } );
127 BOOST_FAIL(
"RefillZones returned status " <<
result.error().status() <<
": "
128 <<
result.error().error_message() );
133 ZONE* fCu = zoneByUuid(
board, F_CU_ZONE );
134 ZONE* bCu = zoneByUuid(
board, B_CU_ZONE );
135 ZONE* in1Cu = zoneByUuid(
board, IN1_CU_ZONE );
136 ZONE* in2Cu = zoneByUuid(
board, IN2_CU_ZONE );
150 BOARD*
board = loadBoard( wxS(
"issue5830" ) );
156 board->BuildConnectivity();
157 const unsigned baseline =
board->GetConnectivity()->GetUnconnectedCount(
false );
158 BOOST_REQUIRE_MESSAGE( baseline > 0,
"expected an unconnected baseline with zones empty" );
161 kiapi::common::ApiRequest request = makeRefillRequest(
board, { F_CU_ZONE, IN1_CU_ZONE } );
166 BOOST_FAIL(
"RefillZones returned status " <<
result.error().status() <<
": "
167 <<
result.error().error_message() );
170 const unsigned afterFill =
board->GetConnectivity()->GetUnconnectedCount(
false );
175 BOOST_CHECK_MESSAGE( afterFill > 0,
"connectivity was cleared, not rebuilt, after the fill" );
176 BOOST_CHECK_MESSAGE( afterFill < baseline,
177 "filling the GND planes should reduce the unconnected count ("
178 << afterFill <<
" vs baseline " << baseline <<
")" );
184 BOARD*
board = loadBoard( wxS(
"issue5830" ) );
189 kiapi::common::ApiRequest request = makeRefillRequest(
board, {} );
194 BOOST_FAIL(
"RefillZones returned status " <<
result.error().status() <<
": "
195 <<
result.error().error_message() );
202 BOOST_CHECK_MESSAGE( zone->IsFilled(),
"zone " << zone->m_Uuid.AsStdString() <<
" not filled" );
208 BOARD*
board = loadBoard( wxS(
"issue5830" ) );
211 kiapi::common::ApiRequest request =
212 makeRefillRequest(
board, { wxS(
"deadbeef-0000-0000-0000-000000000000" ) } );
tl::expected< ApiResponse, ApiResponseStatus > API_RESULT
API_RESULT Handle(ApiRequest &aMsg)
Attempt to handle the given API request, if a handler exists in this class for the message.
Information pertinent to a Pcbnew printed circuit board.
const ZONES & Zones() const
const wxString & GetFileName() const
Handle a list of polygons defining a copper zone.
static std::string ToStdString(const wxString &aStr)
void LoadBoard(SETTINGS_MANAGER &aSettingsManager, const wxString &aRelPath, std::unique_ptr< BOARD > &aBoard)
BOOST_AUTO_TEST_CASE(HorizontalAlignment)
BOOST_AUTO_TEST_CASE(RefillZonesSubset)
BOOST_REQUIRE(intersection.has_value()==c.ExpectedIntersection.has_value())
BOOST_AUTO_TEST_SUITE_END()
wxString result
Test unit parsing edge cases and error handling.
BOOST_CHECK_EQUAL(result, "25.4")