54 std::unique_ptr<LIB_SYMBOL> symbol = std::make_unique<LIB_SYMBOL>( wxS(
"Symbol" ) );
55 std::unique_ptr<SCH_SCREEN> screen = std::make_unique<SCH_SCREEN>();
59 SYMBOL_BUFFER buffer( std::move( symbol ), std::move( screen ) );
62 BOOST_CHECK( &buffer.
GetSymbol() == &symbolRef );
68 std::unique_ptr<LIB_SYMBOL> originalSymbol =
69 std::make_unique<LIB_SYMBOL>( wxS(
"OriginalSymbol" ) );
70 LIB_SYMBOL& originalSymbolRef = *originalSymbol;
74 BOOST_CHECK( &buffer.
GetOriginal() == &originalSymbolRef );
75 BOOST_CHECK( buffer.
GetOriginal() == originalSymbolRef );
85 wxArrayString symbolNames;
91 auto parentSymbol1 = std::make_unique<LIB_SYMBOL>( wxS(
"Parent1" ) );
98 parentSymbol1->GetValueField().SetText( parentSymbol1->GetName() );
99 libBuffer.
CreateBuffer( std::move( parentSymbol1 ), std::make_unique<SCH_SCREEN>() );
100 BOOST_CHECK( libBuffer.
GetSymbol( parentSymbol1Ref.
GetName() ) == &parentSymbol1Ref );
117 auto childSymbol1 = std::make_unique<LIB_SYMBOL>( wxS(
"Child1" ) );
120 childSymbol1->
SetParent( &parentSymbol1Ref );
121 childSymbol1->GetValueField().SetText( childSymbol1->GetName() );
122 libBuffer.
CreateBuffer( std::move( childSymbol1 ), std::make_unique<SCH_SCREEN>() );
123 BOOST_CHECK( libBuffer.
GetSymbol( childSymbol1Ref.
GetName() ) == &childSymbol1Ref );
144 std::shared_ptr<SYMBOL_BUFFER> buf = libBuffer.
GetBuffer( parentSymbol1Ref.
GetName() );
154 BOOST_CHECK( deletedOk );
155 BOOST_CHECK( libBuffer.
GetBuffers().empty() );
166 props.
name = wxS(
"Standalone" );
179 std::unique_ptr<LIB_SYMBOL> standalone =
184 BOOST_CHECK( standalone->GetPinNameOffset() > 0 );
186 auto parent = std::make_unique<LIB_SYMBOL>( wxS(
"Parent" ) );
187 parent->GetValueField().SetText( parent->GetName() );
190 parent->AddField( user );
192 props.
name = wxS(
"Child" );
199 std::unique_ptr<LIB_SYMBOL> child =
202 BOOST_CHECK( child->GetParent().lock().get() == parent.get() );
203 BOOST_CHECK( child->GetFootprintField().GetText().IsEmpty() );
204 BOOST_CHECK( child->GetDatasheetField().GetText().IsEmpty() );
206 std::vector<SCH_FIELD*> childFields;
207 child->GetFields( childFields );
216 BOOST_CHECK( field->GetText().IsEmpty() );
220 BOOST_CHECK( found );
235 wxString tempDir = wxFileName::CreateTempFileName( wxS(
"kicad_test_" ) );
236 wxRemoveFile( tempDir );
237 wxFileName::Mkdir( tempDir );
238 wxString libPath = wxFileName( tempDir, wxS(
"test_lib.kicad_sym" ) ).GetFullPath();
243 plugin->CreateLibrary( libPath );
246 std::unique_ptr<LIB_SYMBOL> parentSymbol = std::make_unique<LIB_SYMBOL>( wxS(
"Parent" ) );
247 parentSymbol->GetValueField().SetText( wxS(
"Parent" ) );
248 parentSymbol->GetReferenceField().SetText( wxS(
"U" ) );
251 plugin->SaveSymbol( libPath,
new LIB_SYMBOL( *parentSymbol ) );
254 std::unique_ptr<LIB_SYMBOL> derivedSymbol = std::make_unique<LIB_SYMBOL>( wxS(
"Derived" ) );
255 derivedSymbol->GetValueField().SetText( wxS(
"Derived" ) );
256 derivedSymbol->SetParent( parentPtr );
258 plugin->SaveSymbol( libPath,
new LIB_SYMBOL( *derivedSymbol ) );
259 plugin->SaveLibrary( libPath );
265 LIB_SYMBOL* parent = plugin->LoadSymbol( libPath, wxS(
"Parent" ) );
266 LIB_SYMBOL* derived = plugin->LoadSymbol( libPath, wxS(
"Derived" ) );
278 LIB_SYMBOL* loadedParent = plugin->LoadSymbol( libPath, wxS(
"Parent" ) );
279 LIB_SYMBOL* loadedDerived = plugin->LoadSymbol( libPath, wxS(
"Derived" ) );
285 loadedDerived->
SetParent( loadedParent );
288 libBuffer.
CreateBuffer( std::make_unique<LIB_SYMBOL>( *loadedParent ),
289 std::make_unique<SCH_SCREEN>() );
291 std::unique_ptr<LIB_SYMBOL> derivedCopy = std::make_unique<LIB_SYMBOL>( *loadedDerived );
292 derivedCopy->SetParent( libBuffer.
GetSymbol( wxS(
"Parent" ) ) );
293 libBuffer.
CreateBuffer( std::move( derivedCopy ), std::make_unique<SCH_SCREEN>() );
298 BOOST_CHECK( libBuffer.
GetSymbol( wxS(
"Parent" ) ) !=
nullptr );
299 BOOST_CHECK( libBuffer.
GetSymbol( wxS(
"Derived" ) ) !=
nullptr );
302 std::shared_ptr<SYMBOL_BUFFER> derivedBuf = libBuffer.
GetBuffer( wxS(
"Derived" ) );
305 bool deleteResult = libBuffer.
DeleteBuffer( *derivedBuf );
306 BOOST_CHECK( deleteResult );
310 BOOST_CHECK( libBuffer.
GetSymbol( wxS(
"Parent" ) ) !=
nullptr );
311 BOOST_CHECK( libBuffer.
GetSymbol( wxS(
"Derived" ) ) ==
nullptr );
316 std::map<std::string, UTF8> properties;
320 for(
const std::shared_ptr<SYMBOL_BUFFER>& symbolBuf : libBuffer.
GetBuffers() )
322 libBuffer.
SaveBuffer( *symbolBuf, libPath, &*plugin,
true );
326 for(
const std::shared_ptr<SYMBOL_BUFFER>& deletedBuf : libBuffer.
GetDeletedBuffers() )
328 const wxString& originalName = deletedBuf->GetOriginal().GetName();
330 if( plugin->LoadSymbol( libPath, originalName ) )
331 plugin->DeleteSymbol( libPath, originalName, &properties );
334 plugin->SaveLibrary( libPath );
342 LIB_SYMBOL* parent = plugin->LoadSymbol( libPath, wxS(
"Parent" ) );
343 LIB_SYMBOL* derived = plugin->LoadSymbol( libPath, wxS(
"Derived" ) );
345 BOOST_CHECK( parent !=
nullptr );
347 BOOST_CHECK_MESSAGE( derived ==
nullptr,
348 "Derived symbol should have been deleted from the library file" );
352 if( wxFileName::DirExists( tempDir ) )
354 wxFileName::Rmdir( tempDir, wxPATH_RMDIR_RECURSIVE );
BOOST_CHECK_EQUAL(result, "25.4")