KiCad PCB EDA Suite
Loading...
Searching...
No Matches
test_symbol_library_manager.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2023 Wayne Stambaugh <[email protected]>
5 * Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * This program is free software: you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation, either version 3 of the License, or (at your
10 * option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License along
18 * with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
27
28// Code under test
30
32{
33public:
35 {
36 }
37};
38
39
40BOOST_FIXTURE_TEST_SUITE( SymbolLibraryManager, SYMBOL_LIBRARY_MANAGER_TEST_FIXTURE )
41
42
43
46BOOST_AUTO_TEST_CASE( SymbolBuffer )
47{
48 LIB_SYMBOL* symbol = new LIB_SYMBOL( wxS( "Symbol" ) );
49 std::unique_ptr<SCH_SCREEN> screen( new SCH_SCREEN() );
50
51 SYMBOL_BUFFER buffer( symbol, std::move( screen ) );
52
53 BOOST_CHECK( !buffer.IsModified() );
54 BOOST_CHECK( buffer.GetSymbol() == symbol );
55 BOOST_CHECK( *buffer.GetOriginal() == *symbol );
56
57 buffer.GetScreen()->SetContentModified();
58 BOOST_CHECK( buffer.IsModified() );
59
60 LIB_SYMBOL* originalSymbol = new LIB_SYMBOL( wxS( "OriginalSymbol" ) );
61 buffer.SetOriginal( originalSymbol );
62
63 BOOST_CHECK( buffer.GetOriginal() == originalSymbol );
64 BOOST_CHECK( *buffer.GetOriginal() == *originalSymbol );
65 BOOST_CHECK( *buffer.GetSymbol() != *buffer.GetOriginal() );
66
67 // Allocated memory is cleaned up by the SYMBOL_BUFFER object dtor.
68}
69
70
75{
76 wxArrayString symbolNames;
77 LIB_BUFFER libBuffer( wxS( "TestLibrary" ) );
78
79 BOOST_CHECK( !libBuffer.IsModified() );
80 BOOST_CHECK_EQUAL( libBuffer.GetHash(), 1 );
81
82 LIB_SYMBOL* parentSymbol1 = new LIB_SYMBOL( wxS( "Parent1" ) );
83
84 BOOST_CHECK_EQUAL( libBuffer.GetSymbol( parentSymbol1->GetName() ), nullptr );
85
86 parentSymbol1->GetValueField().SetText( parentSymbol1->GetName() );
87 libBuffer.CreateBuffer( parentSymbol1, new SCH_SCREEN() );
88 BOOST_CHECK( libBuffer.GetSymbol( parentSymbol1->GetName() ) == parentSymbol1 );
89 BOOST_CHECK( !libBuffer.HasDerivedSymbols( parentSymbol1->GetName() ) );
90 BOOST_CHECK_EQUAL( libBuffer.GetHash(), 2 );
91
92 libBuffer.GetSymbolNames( symbolNames );
93 BOOST_CHECK_EQUAL( symbolNames.GetCount(), 1 );
94 BOOST_CHECK_EQUAL( symbolNames[0], parentSymbol1->GetName() );
95
96 symbolNames.Clear();
97 libBuffer.GetSymbolNames( symbolNames, SYMBOL_NAME_FILTER::ROOT_ONLY );
98 BOOST_CHECK_EQUAL( symbolNames.GetCount(), 1 );
99 BOOST_CHECK_EQUAL( symbolNames[0], parentSymbol1->GetName() );
100
101 symbolNames.Clear();
102 libBuffer.GetSymbolNames( symbolNames, SYMBOL_NAME_FILTER::DERIVED_ONLY );
103 BOOST_CHECK_EQUAL( symbolNames.GetCount(), 0 );
104
105 LIB_SYMBOL* childSymbol1 = new LIB_SYMBOL( wxS( "Child1" ) );
106 childSymbol1->SetParent( parentSymbol1 );
107 childSymbol1->GetValueField().SetText( childSymbol1->GetName() );
108 libBuffer.CreateBuffer( childSymbol1, new SCH_SCREEN() );
109 BOOST_CHECK( libBuffer.GetSymbol( childSymbol1->GetName() ) == childSymbol1 );
110 BOOST_CHECK( libBuffer.HasDerivedSymbols( parentSymbol1->GetName() ) );
111 BOOST_CHECK_EQUAL( libBuffer.GetHash(), 3 );
112
113 symbolNames.Clear();
114 libBuffer.GetSymbolNames( symbolNames );
115 BOOST_CHECK_EQUAL( symbolNames.GetCount(), 2 );
116 BOOST_CHECK_EQUAL( symbolNames[0], parentSymbol1->GetName() );
117 BOOST_CHECK_EQUAL( symbolNames[1], childSymbol1->GetName() );
118
119 symbolNames.Clear();
120 libBuffer.GetSymbolNames( symbolNames, SYMBOL_NAME_FILTER::DERIVED_ONLY );
121 BOOST_CHECK_EQUAL( symbolNames.GetCount(), 1 );
122 BOOST_CHECK_EQUAL( symbolNames[0], childSymbol1->GetName() );
123
124 symbolNames.Clear();
125 BOOST_CHECK_EQUAL( libBuffer.GetDerivedSymbolNames( parentSymbol1->GetName(),
126 symbolNames ), 1 );
127 BOOST_CHECK_EQUAL( symbolNames[0], childSymbol1->GetName() );
128
129 std::shared_ptr<SYMBOL_BUFFER> buf = libBuffer.GetBuffer( parentSymbol1->GetName() );
130 LIB_SYMBOL* tmp = new LIB_SYMBOL( *parentSymbol1 );
131 tmp->GetDescriptionField().SetText( wxS( "Description" ) );
132 libBuffer.UpdateBuffer( buf, tmp );
133 BOOST_CHECK_EQUAL( libBuffer.GetHash(), 4 );
134 BOOST_CHECK( *libBuffer.GetSymbol( parentSymbol1->GetName() ) == *tmp );
135
136 libBuffer.DeleteBuffer( buf );
137 BOOST_CHECK( libBuffer.GetBuffers().empty() );
138}
139
140
141BOOST_AUTO_TEST_SUITE_END()
void SetContentModified(bool aModified=true)
Definition: base_screen.h:59
size_t GetDerivedSymbolNames(const wxString &aSymbolName, wxArrayString &aList)
Fetch all of the symbols derived from a aSymbolName into aList.
bool DeleteBuffer(std::shared_ptr< SYMBOL_BUFFER > aSymbolBuf)
bool CreateBuffer(LIB_SYMBOL *aCopy, SCH_SCREEN *aScreen)
Update the buffered symbol with the contents of aCopy.
bool IsModified() const
void GetSymbolNames(wxArrayString &aSymbolNames, SYMBOL_NAME_FILTER aFilter=SYMBOL_NAME_FILTER::ALL)
Fetch a list of root symbols names from the library buffer.
bool UpdateBuffer(std::shared_ptr< SYMBOL_BUFFER > aSymbolBuf, LIB_SYMBOL *aCopy)
const std::deque< std::shared_ptr< SYMBOL_BUFFER > > & GetBuffers() const
std::shared_ptr< SYMBOL_BUFFER > GetBuffer(const wxString &aAlias) const
Return all buffered symbols.
LIB_SYMBOL * GetSymbol(const wxString &aAlias) const
Create a new buffer to store a symbol. LIB_BUFFER takes ownership of aCopy.
int GetHash() const
Return the working copy of a LIB_SYMBOL root object with specified alias.
bool HasDerivedSymbols(const wxString &aParentName) const
Check to see any symbols in the buffer are derived from a parent named aParentName.
Define a library symbol object.
Definition: lib_symbol.h:77
SCH_FIELD & GetValueField() const
Return reference to the value field.
void SetParent(LIB_SYMBOL *aParent=nullptr)
Definition: lib_symbol.cpp:570
wxString GetName() const override
Definition: lib_symbol.h:136
SCH_FIELD & GetDescriptionField() const
Return reference to the description field.
void SetText(const wxString &aText) override
Definition: sch_field.cpp:1107
Store a working copy of a library.
SCH_SCREEN * GetScreen() const
LIB_SYMBOL * GetOriginal() const
void SetOriginal(LIB_SYMBOL *aSymbol)
LIB_SYMBOL * GetSymbol() const
BOOST_CHECK(box.ClosestPointTo(VECTOR2D(0, 0))==VECTOR2D(1, 2))
Test suite for KiCad math code.
BOOST_AUTO_TEST_CASE(SymbolBuffer)
Test the SYMBOL_BUFFER object.