20#include <boost/test/unit_test.hpp>
25#include <api/schematic/schematic_types.pb.h>
46#include <wx/filename.h>
57 for(
SCH_ITEM* item : m_schematic->RootScreen()->Items() )
59 switch( item->Type() )
66 return std::make_unique<SCH_JUNCTION>();
75 return std::make_unique<SCH_NO_CONNECT>();
84 return std::make_unique<SCH_BUS_WIRE_ENTRY>();
93 return std::make_unique<SCH_BUS_BUS_ENTRY>();
102 return std::make_unique<SCH_LINE>();
111 return std::make_unique<SCH_SHAPE>();
120 return std::make_unique<SCH_RULE_AREA>();
129 return std::make_unique<SCH_BITMAP>();
138 return std::make_unique<SCH_TEXT>();
147 return std::make_unique<SCH_TEXTBOX>();
156 return std::make_unique<SCH_LABEL>();
165 return std::make_unique<SCH_GLOBALLABEL>();
174 return std::make_unique<SCH_HIERLABEL>();
183 return std::make_unique<SCH_DIRECTIVE_LABEL>();
192 return std::make_unique<SCH_GROUP>( m_schematic->RootScreen() );
201 return std::make_unique<SCH_SHEET>( m_schematic->RootScreen() );
210 return std::make_unique<SCH_TABLE>();
221 kiapi::schematic::types::SchematicSymbolInstance symbolProto;
223 BOOST_REQUIRE_MESSAGE(
result,
"Serialization failed" );
225 std::unique_ptr<SCH_SYMBOL> output = std::make_unique<SCH_SYMBOL>();
229 output->SetParent( m_schematic->RootScreen() );
232 BOOST_REQUIRE_MESSAGE(
result,
"Deserialization failed" );
235 m_schematic.get() ) );
237 kiapi::schematic::types::SchematicSymbolInstance outputProto;
239 BOOST_REQUIRE_MESSAGE(
result,
"Second serialization failed" );
241 if( !( outputProto.SerializeAsString() == symbolProto.SerializeAsString() ) )
245 BOOST_TEST_FAIL(
"Round-tripped protobuf does not match" );
248 if( !output->operator==( *symbol ) )
249 BOOST_TEST_FAIL(
"Round-tripped object does not match" );
278 const wxString variantName( wxS(
"api-variant" ) );
279 const bool baseDNP = symbol->
GetDNP();
281 kiapi::schematic::types::SchematicSymbolInstance proto;
284 kiapi::schematic::types::SchematicSymbolVariant* variant =
285 proto.mutable_variants()->add_variants();
286 variant->set_name( variantName.ToUTF8() );
287 variant->mutable_attributes()->set_do_not_populate( !baseDNP );
293 BOOST_CHECK( m_schematic->GetVariantNames().count( variantName ) );
296 kiapi::schematic::types::SchematicSymbolInstance untouched;
297 untouched.mutable_reference_field()->mutable_text()->set_text(
306 kiapi::schematic::types::SchematicSymbolInstance cleared;
308 BOOST_REQUIRE_EQUAL( cleared.variants().variants_size(), 1 );
309 cleared.mutable_variants()->clear_variants();
314 BOOST_CHECK( m_schematic->GetVariantNames().count( variantName ) );
334 const wxString variantName( wxS(
"api-variant" ) );
337 const wxString overrideValue( wxS(
"Override" ) );
339 kiapi::schematic::types::SchematicSymbolInstance proto;
342 kiapi::schematic::types::SchematicSymbolVariant* variant = proto.mutable_variants()->add_variants();
343 variant->set_name( variantName.ToUTF8() );
344 variant->mutable_attributes()->set_do_not_populate(
true );
345 ( *variant->mutable_fields() )[std::string( fieldName.ToUTF8() )] = overrideValue.ToUTF8();
350 BOOST_CHECK( symbol->
GetDNP( &
path, variantName ) );
352 kiapi::schematic::types::SchematicSymbolInstance withoutField;
354 BOOST_REQUIRE_EQUAL( withoutField.variants().variants_size(), 1 );
356 withoutField.mutable_variants()->mutable_variants( 0 )->clear_fields();
361 BOOST_CHECK( symbol->
GetDNP( &
path, variantName ) );
363 kiapi::schematic::types::SchematicSymbolInstance cleared;
365 cleared.mutable_variants()->clear_variants();
369 BOOST_CHECK( !symbol->
GetDNP( &
path, variantName ) );
370 BOOST_CHECK( m_schematic->GetVariantNames().count( variantName ) );
377 fn.AppendDir( wxS(
"variants" ) );
378 fn.SetName( wxS(
"variants" ) );
379 fn.SetExt( wxS(
"kicad_sch" ) );
394 kiapi::schematic::types::SheetSymbol proto;
398 BOOST_REQUIRE_EQUAL( proto.variants().variants_size(), 1 );
400 const kiapi::schematic::types::SheetVariant& variant = proto.variants().variants( 0 );
402 BOOST_CHECK( variant.exclude_from_sim() );
404 std::unique_ptr<SCH_SHEET> output = std::make_unique<SCH_SHEET>( m_schematic->RootScreen() );
405 output->SetParent( m_schematic->RootScreen() );
406 output->SetScreen(
new SCH_SCREEN( m_schematic.get() ) );
415 BOOST_CHECK( output->GetExcludedFromSim( &parentPath, wxS(
"Variant 1" ) ) );
417 kiapi::schematic::types::SheetSymbol outputProto;
421 BOOST_REQUIRE_EQUAL( outputProto.variants().variants_size(), 1 );
424 proto.variants().variants( 0 ).exclude_from_sim() );
444 const wxString variantName( wxS(
"api-sheet-variant" ) );
445 const bool baseDNP = sheet->
GetDNP( &parentPath );
447 kiapi::schematic::types::SheetSymbol proto;
450 kiapi::schematic::types::SheetVariant* variant = proto.mutable_variants()->add_variants();
451 variant->set_name( variantName.ToUTF8() );
452 variant->set_dnp( !baseDNP );
458 BOOST_CHECK( m_schematic->GetVariantNames().count( variantName ) );
460 kiapi::schematic::types::SheetSymbol untouched;
462 untouched.clear_variants();
464 if( untouched.page_number().empty() )
465 untouched.set_page_number(
"1" );
471 kiapi::schematic::types::SheetSymbol cleared;
473 BOOST_REQUIRE_EQUAL( cleared.variants().variants_size(), 1 );
474 cleared.mutable_variants()->clear_variants();
479 BOOST_CHECK( m_schematic->GetVariantNames().count( variantName ) );
void ApplySymbolInstance(SCH_SYMBOL *aSymbol, const kiapi::schematic::types::SchematicSymbolInstance &aInput, const SCH_SHEET_PATH &aPath, SCHEMATIC *aSchematic)
Apply placement-specific data to an aSymbol at aPath: reference, unit, and the per-placement attribut...
tl::expected< bool, ApiResponseStatus > UnpackSheet(SCH_SHEET *aOutput, const kiapi::schematic::types::SheetSymbol &aInput)
Unpack the every placement data from the input.
bool PackSheet(kiapi::schematic::types::SheetSymbol *aOutput, const SCH_SHEET *aInput, const SCH_SHEET_PATH &aPath)
bool PackSymbol(kiapi::schematic::types::SchematicSymbolInstance *aOutput, const SCH_SYMBOL *aInput, const SCH_SHEET_PATH &aPath)
void ApplySheetInstance(SCH_SHEET *aSheet, const kiapi::schematic::types::SheetSymbol &aInput, const SCH_SHEET_PATH &aParentPath, SCHEMATIC *aSchematic)
Apply the placement data in a sheet message to aSheet: page number and the variants the message carri...
bool UnpackSymbol(SCH_SYMBOL *aOutput, const kiapi::schematic::types::SchematicSymbolInstance &aInput)
Unpack the geometry, the library definition, fields, and the default-variant attributes that are shar...
void testProtoFromKiCadObject(KiCadClass *aInput, Factory &&aCreateOutput)
std::string AsStdString() const
A generic fixture for loading schematics and associated settings for qa tests.
Object to handle a bitmap image that can be inserted in a schematic.
Class for a bus to bus entry.
Class for a wire to bus entry.
wxString GetName(bool aUseDefaultName=true) const
Return the field name (not translated).
A set of SCH_ITEMs (i.e., without duplicates).
Base class for any item which can be embedded within the SCHEMATIC container class,...
Segment description base class to describe items which have 2 end points (track, wire,...
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
wxString GetPageNumber() const
void push_back(SCH_SHEET *aSheet)
Forwarded method from std::vector.
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
bool GetDNP(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
Set or clear the 'Do Not Populate' flags.
wxString GetFieldText(const wxString &aFieldName, const SCH_SHEET_PATH *aPath=nullptr, const wxString &aVariantName=wxEmptyString) const
virtual bool GetDNP(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
Set or clear the 'Do Not Populate' flag.
const wxString GetRef(const SCH_SHEET_PATH *aSheet, bool aIncludeUnit=false) const override
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this symbol.
std::string GetEeschemaTestDataDir()
Get the configured location of Eeschema test data.
Class to handle a set of SCH_ITEMs.
static void LoadSchematic(SCHEMATIC *aSchematic, SCH_SHEET *aRootSheet, const wxString &aFileName)
Definition of the SCH_SHEET_PATH and SCH_SHEET_LIST classes for Eeschema.
@ VALUE
Field Value of part, i.e. "3.3K".
BOOST_AUTO_TEST_CASE(HorizontalAlignment)
BOOST_REQUIRE(intersection.has_value()==c.ExpectedIntersection.has_value())
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_CASE(KitchenSink)
BOOST_TEST_CONTEXT("Test Clearance")
BOOST_TEST_MESSAGE("Polyline has "<< chain.PointCount()<< " points")
wxString result
Test unit parsing edge cases and error handling.
BOOST_CHECK_EQUAL(result, "25.4")