KiCad PCB EDA Suite
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
test_sch_pin.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 The KiCad Developers, see AUTHORS.txt for contributors.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, you may find one here:
18 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
19 * or you may search the http://www.gnu.org website for the version 2 license,
20 * or you may write to the Free Software Foundation, Inc.,
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
22 */
23
26
27// Code under test
28#include <lib_symbol.h>
29#include <sch_pin.h>
30#include <sch_symbol.h>
31
32
34{
35public:
37 {
38 m_parent_part = new LIB_SYMBOL( "parent_part", nullptr );
39
42
43 // give the pin some kind of data we can use to test
44 m_lib_pin->SetNumber( "42" );
45 m_lib_pin->SetName( "pinname" );
46 m_lib_pin->SetType( ELECTRICAL_PINTYPE::PT_INPUT );
47 m_lib_pin->SetPosition( VECTOR2I( 1, 2 ) );
48
51 VECTOR2I( 1, 2 ) );
52 m_parent_symbol->SetRef( &path, "U2" );
54
56 }
57
59 {
60 delete m_parent_symbol;
61 delete m_parent_part;
62 }
63
66
68 SCH_PIN* m_sch_pin; // owned by m_parent_symbol, not us
69};
70
71
75BOOST_FIXTURE_TEST_SUITE( SchPin, TEST_SCH_PIN_FIXTURE )
76
77
80BOOST_AUTO_TEST_CASE( DefaultProperties )
81{
82 BOOST_CHECK_EQUAL( m_sch_pin->GetParentSymbol(), m_parent_symbol );
83
84 BOOST_CHECK_EQUAL( m_sch_pin->GetLocalPosition(), VECTOR2I( 1, 2 ) );
85 BOOST_CHECK_EQUAL( m_sch_pin->GetPosition(), VECTOR2I( 2, 4 ) );
86
87 BOOST_CHECK_EQUAL( m_sch_pin->IsVisible(), m_lib_pin->IsVisible() );
88 BOOST_CHECK_EQUAL( m_sch_pin->GetName(), m_lib_pin->GetName() );
89 BOOST_CHECK_EQUAL( m_sch_pin->GetNumber(), m_lib_pin->GetNumber() );
90
91 BOOST_CHECK( ( m_sch_pin->GetType() == m_lib_pin->GetType() ) );
92
93 BOOST_CHECK_EQUAL( m_sch_pin->IsGlobalPower(), m_lib_pin->IsGlobalPower() );
94 BOOST_CHECK_EQUAL( m_sch_pin->IsLocalPower(), m_lib_pin->IsLocalPower() );
95}
96
101{
102 SCH_PIN assigned = *m_sch_pin;
103
104 BOOST_CHECK_EQUAL( assigned.GetParentSymbol(), m_parent_symbol );
105 BOOST_CHECK_EQUAL( assigned.GetNumber(), m_lib_pin->GetNumber() );
106}
107
112{
113 SCH_PIN copied( *m_sch_pin );
114
115 BOOST_CHECK_EQUAL( copied.GetParentSymbol(), m_parent_symbol );
116 BOOST_CHECK_EQUAL( copied.GetNumber(), m_lib_pin->GetNumber() );
117 BOOST_CHECK_EQUAL( copied.GetAlt(), wxEmptyString );
118
119 // Set some non-default values
120 copied.SetAlt( "alt" );
121
122 SCH_PIN copied2( copied );
123 BOOST_CHECK_EQUAL( copied2.GetAlt(), "alt" );
124}
125
130{
131 // dangles by default
132 BOOST_CHECK_EQUAL( m_sch_pin->IsDangling(), true );
133
134 // all you have to do to un-dangle is say so
135 m_sch_pin->SetIsDangling( false );
136 BOOST_CHECK_EQUAL( m_sch_pin->IsDangling(), false );
137
138 // and the same to re-dangle
139 m_sch_pin->SetIsDangling( true );
140 BOOST_CHECK_EQUAL( m_sch_pin->IsDangling(), true );
141}
142
146BOOST_AUTO_TEST_CASE( PinNumbering )
147{
149
150 const wxString name = m_sch_pin->GetDefaultNetName( path );
151 BOOST_CHECK_EQUAL( name, "Net-(U2-pinname)" );
152
153 // do it again: this should now (transparently) go though the net name map
154 // can't really check directly, but coverage tools should see this
155 const wxString map_name = m_sch_pin->GetDefaultNetName( path );
156 BOOST_CHECK_EQUAL( map_name, name );
157}
158
162BOOST_AUTO_TEST_CASE( PinNumberingPower )
163{
164 // but if we set isPower...
165 m_lib_pin->SetType( ELECTRICAL_PINTYPE::PT_POWER_IN );
166 m_parent_part->SetGlobalPower();
167 BOOST_CHECK_EQUAL( m_lib_pin->IsGlobalPower(), true );
168
169 // and update symbol from library...
171 delete m_parent_symbol;
172 m_parent_symbol = new SCH_SYMBOL( *m_parent_part, m_parent_part->GetLibId(), &path, 0, 0,
173 VECTOR2I( 1, 2 ) );
174 m_parent_symbol->SetRef( &path, "U2" );
175 m_parent_symbol->SetValueFieldText( "voltage_value" );
176 m_parent_symbol->UpdatePins();
177
178 m_sch_pin = m_parent_symbol->GetPins( &path )[0];
179
180 // ... then the name is just the pin name
181 const wxString pwr_name = m_sch_pin->GetDefaultNetName( path );
182 BOOST_CHECK_EQUAL( pwr_name, "voltage_value" );
183}
184
const char * name
Definition: DXF_plotter.cpp:59
Define a library symbol object.
Definition: lib_symbol.h:85
const LIB_ID & GetLibId() const override
Definition: lib_symbol.h:155
void AddDrawItem(SCH_ITEM *aItem, bool aSort=true)
Add a new draw aItem to the draw object list and sort according to aSort.
Definition: lib_symbol.cpp:783
const SYMBOL * GetParentSymbol() const
Definition: sch_item.cpp:172
void SetNumber(const wxString &aNumber)
Definition: sch_pin.cpp:545
ALT GetAlt(const wxString &aAlt)
Definition: sch_pin.h:147
void SetName(const wxString &aName)
Definition: sch_pin.cpp:415
void SetPosition(const VECTOR2I &aPos) override
Definition: sch_pin.h:214
void SetType(ELECTRICAL_PINTYPE aType)
Definition: sch_pin.cpp:325
const wxString & GetNumber() const
Definition: sch_pin.h:123
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
Schematic symbol object.
Definition: sch_symbol.h:75
void UpdatePins()
Updates the cache of SCH_PIN objects for each pin.
Definition: sch_symbol.cpp:287
void SetRef(const SCH_SHEET_PATH *aSheet, const wxString &aReference)
Set the reference for the given sheet path for this symbol.
Definition: sch_symbol.cpp:653
std::vector< SCH_PIN * > GetPins(const SCH_SHEET_PATH *aSheet) const
Retrieve a list of the SCH_PINs for the given sheet path.
SCH_SYMBOL * m_parent_symbol
LIB_SYMBOL * m_parent_part
@ PT_POWER_IN
power input (GND, VCC for ICs). Must be connected to a power output.
BOOST_CHECK_EQUAL(ret, c.m_exp_result)
BOOST_AUTO_TEST_SUITE_END()
bool copied
BOOST_AUTO_TEST_CASE(DefaultProperties)
Declare the test suite.
VECTOR2< int32_t > VECTOR2I
Definition: vector2d.h:695