Test SCH_SHEET_PIN rotation
Also remove useless variables and memory leaks in tests.
This commit is contained in:
parent
513aba1552
commit
4b87c4c21c
|
@ -40,7 +40,20 @@
|
||||||
#include <sch_sheet.h>
|
#include <sch_sheet.h>
|
||||||
|
|
||||||
|
|
||||||
static SCH_ITEM* Instatiate( KICAD_T aType )
|
class TEST_SCH_ITEM_FIXTURE
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TEST_SCH_ITEM_FIXTURE() : m_sheet()
|
||||||
|
{
|
||||||
|
m_sheet.SetPosition( wxPoint( Millimeter2iu( 5 ), Millimeter2iu( 10 ) ) );
|
||||||
|
m_sheet.SetSize( wxSize( Millimeter2iu( 50 ), Millimeter2iu( 100 ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
SCH_SHEET m_sheet;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static SCH_ITEM* Instatiate( KICAD_T aType, SCH_SHEET* sheet )
|
||||||
{
|
{
|
||||||
if( !IsEeschemaType( aType ) )
|
if( !IsEeschemaType( aType ) )
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -57,14 +70,24 @@ static SCH_ITEM* Instatiate( KICAD_T aType )
|
||||||
case SCH_BUS_BUS_ENTRY_T: return new SCH_BUS_BUS_ENTRY();
|
case SCH_BUS_BUS_ENTRY_T: return new SCH_BUS_BUS_ENTRY();
|
||||||
case SCH_LINE_T: return new SCH_LINE();
|
case SCH_LINE_T: return new SCH_LINE();
|
||||||
case SCH_BITMAP_T: return new SCH_BITMAP();
|
case SCH_BITMAP_T: return new SCH_BITMAP();
|
||||||
case SCH_TEXT_T: return new SCH_TEXT( wxPoint( 0, 0 ), "test" );
|
case SCH_TEXT_T: return new SCH_TEXT( wxPoint( 0, 0 ), "test text" );
|
||||||
case SCH_LABEL_T: return new SCH_LABEL( wxPoint( 0, 0 ), "test" );
|
case SCH_LABEL_T: return new SCH_LABEL( wxPoint( 0, 0 ), "test label" );
|
||||||
case SCH_GLOBAL_LABEL_T: return new SCH_GLOBALLABEL();
|
case SCH_GLOBAL_LABEL_T: return new SCH_GLOBALLABEL();
|
||||||
case SCH_HIER_LABEL_T: return new SCH_HIERLABEL();
|
case SCH_HIER_LABEL_T: return new SCH_HIERLABEL();
|
||||||
case SCH_FIELD_T: return new SCH_FIELD( wxPoint( 0, 0 ), 0, nullptr );
|
case SCH_FIELD_T: return new SCH_FIELD( wxPoint( 0, 0 ), 0, nullptr );
|
||||||
case SCH_SYMBOL_T: return new SCH_SYMBOL();
|
case SCH_SYMBOL_T: return new SCH_SYMBOL();
|
||||||
|
|
||||||
case SCH_SHEET_PIN_T:
|
case SCH_SHEET_PIN_T:
|
||||||
|
{
|
||||||
|
// XXX: Sheet pins need to be manually placed on sheet item side.
|
||||||
|
SCH_SHEET_PIN* pin = new SCH_SHEET_PIN(
|
||||||
|
sheet,
|
||||||
|
wxPoint( sheet->GetPosition().x, sheet->GetPosition().y + Millimeter2iu( 40 ) ),
|
||||||
|
"test pin" );
|
||||||
|
|
||||||
|
return pin;
|
||||||
|
}
|
||||||
|
|
||||||
case SCH_SHEET_T:
|
case SCH_SHEET_T:
|
||||||
case SCH_PIN_T:
|
case SCH_PIN_T:
|
||||||
case SCHEMATIC_T:
|
case SCHEMATIC_T:
|
||||||
|
@ -90,17 +113,21 @@ static SCH_ITEM* Instatiate( KICAD_T aType )
|
||||||
static void CompareItems( SCH_ITEM* aItem, SCH_ITEM* aOriginalItem )
|
static void CompareItems( SCH_ITEM* aItem, SCH_ITEM* aOriginalItem )
|
||||||
{
|
{
|
||||||
BOOST_CHECK_EQUAL( aItem->GetPosition(), aOriginalItem->GetPosition() );
|
BOOST_CHECK_EQUAL( aItem->GetPosition(), aOriginalItem->GetPosition() );
|
||||||
BOOST_CHECK_EQUAL( aItem->GetBoundingBox().GetOrigin(),
|
BOOST_CHECK_EQUAL( aItem->GetBoundingBox().GetTop(),
|
||||||
aOriginalItem->GetBoundingBox().GetOrigin() );
|
aOriginalItem->GetBoundingBox().GetTop() );
|
||||||
BOOST_CHECK_EQUAL( aItem->GetBoundingBox().GetSize(),
|
BOOST_CHECK_EQUAL( aItem->GetBoundingBox().GetLeft(),
|
||||||
aOriginalItem->GetBoundingBox().GetSize() );
|
aOriginalItem->GetBoundingBox().GetLeft() );
|
||||||
|
BOOST_CHECK_EQUAL( aItem->GetBoundingBox().GetBottom(),
|
||||||
|
aOriginalItem->GetBoundingBox().GetBottom() );
|
||||||
|
BOOST_CHECK_EQUAL( aItem->GetBoundingBox().GetRight(),
|
||||||
|
aOriginalItem->GetBoundingBox().GetRight() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Declare the test suite
|
* Declare the test suite
|
||||||
*/
|
*/
|
||||||
BOOST_AUTO_TEST_SUITE( SchItem )
|
BOOST_FIXTURE_TEST_SUITE( SchItem, TEST_SCH_ITEM_FIXTURE )
|
||||||
|
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE( Move )
|
BOOST_AUTO_TEST_CASE( Move )
|
||||||
|
@ -109,10 +136,9 @@ BOOST_AUTO_TEST_CASE( Move )
|
||||||
{
|
{
|
||||||
KICAD_T type = static_cast<KICAD_T>( i );
|
KICAD_T type = static_cast<KICAD_T>( i );
|
||||||
|
|
||||||
auto item = std::unique_ptr<SCH_ITEM>( Instatiate( type ) );
|
auto item = std::unique_ptr<SCH_ITEM>( Instatiate( type, &m_sheet ) );
|
||||||
auto originalItem = std::unique_ptr<SCH_ITEM>( Instatiate( type ) );
|
|
||||||
|
|
||||||
if( item == nullptr || originalItem == nullptr )
|
if( item == nullptr )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
BOOST_TEST_CONTEXT( "Class: " << item->GetClass() )
|
BOOST_TEST_CONTEXT( "Class: " << item->GetClass() )
|
||||||
|
@ -121,12 +147,12 @@ BOOST_AUTO_TEST_CASE( Move )
|
||||||
item.get(),
|
item.get(),
|
||||||
[]( SCH_ITEM* aOriginalItem, wxPoint aOffset )
|
[]( SCH_ITEM* aOriginalItem, wxPoint aOffset )
|
||||||
{
|
{
|
||||||
SCH_ITEM* aItem = aOriginalItem->Duplicate();
|
auto item = std::unique_ptr<SCH_ITEM>( aOriginalItem->Duplicate() );
|
||||||
|
|
||||||
aItem->Move( aOffset );
|
item->Move( aOffset );
|
||||||
aItem->Move( -aOffset );
|
item->Move( -aOffset );
|
||||||
|
|
||||||
CompareItems( aItem, aOriginalItem );
|
CompareItems( item.get(), aOriginalItem );
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -139,30 +165,44 @@ BOOST_AUTO_TEST_CASE( Rotate )
|
||||||
{
|
{
|
||||||
KICAD_T type = static_cast<KICAD_T>( i );
|
KICAD_T type = static_cast<KICAD_T>( i );
|
||||||
|
|
||||||
auto item = std::unique_ptr<SCH_ITEM>( Instatiate( type ) );
|
auto item = std::unique_ptr<SCH_ITEM>( Instatiate( type, &m_sheet ) );
|
||||||
auto originalItem = std::unique_ptr<SCH_ITEM>( Instatiate( type ) );
|
|
||||||
|
|
||||||
if( item == nullptr || originalItem == nullptr )
|
if( item == nullptr )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
BOOST_TEST_CONTEXT( "Class: " << item->GetClass() )
|
BOOST_TEST_CONTEXT( "Class: " << item->GetClass() )
|
||||||
|
{
|
||||||
|
if( item->GetClass() == "SCH_SHEET_PIN" )
|
||||||
|
{
|
||||||
|
auto newItem = std::unique_ptr<SCH_ITEM>( item->Duplicate() );
|
||||||
|
|
||||||
|
// Only rotating pins around the center of parent sheet works.
|
||||||
|
item->Rotate( m_sheet.GetBodyBoundingBox().GetCenter() );
|
||||||
|
item->Rotate( m_sheet.GetBodyBoundingBox().GetCenter() );
|
||||||
|
item->Rotate( m_sheet.GetBodyBoundingBox().GetCenter() );
|
||||||
|
item->Rotate( m_sheet.GetBodyBoundingBox().GetCenter() );
|
||||||
|
|
||||||
|
CompareItems( newItem.get(), item.get() );
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
IterateOverPositionsAndReferences<SCH_ITEM>(
|
IterateOverPositionsAndReferences<SCH_ITEM>(
|
||||||
item.get(),
|
item.get(),
|
||||||
[]( SCH_ITEM* aOriginalItem, wxPoint aRef )
|
[]( SCH_ITEM* aOriginalItem, wxPoint aRef )
|
||||||
{
|
{
|
||||||
SCH_ITEM* aItem = aOriginalItem->Duplicate();
|
auto item = std::unique_ptr<SCH_ITEM>( aOriginalItem->Duplicate() );
|
||||||
|
|
||||||
// Four rotations are an identity.
|
// Four rotations are an identity.
|
||||||
aItem->Rotate( aRef );
|
item->Rotate( aRef );
|
||||||
aItem->Rotate( aRef );
|
item->Rotate( aRef );
|
||||||
aItem->Rotate( aRef );
|
item->Rotate( aRef );
|
||||||
aItem->Rotate( aRef );
|
item->Rotate( aRef );
|
||||||
|
|
||||||
CompareItems( aItem, aOriginalItem );
|
CompareItems( item.get(), aOriginalItem );
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -172,10 +212,9 @@ BOOST_AUTO_TEST_CASE( MirrorHorizontally )
|
||||||
{
|
{
|
||||||
KICAD_T type = static_cast<KICAD_T>( i );
|
KICAD_T type = static_cast<KICAD_T>( i );
|
||||||
|
|
||||||
auto item = std::unique_ptr<SCH_ITEM>( Instatiate( type ) );
|
auto item = std::unique_ptr<SCH_ITEM>( Instatiate( type, &m_sheet ) );
|
||||||
auto originalItem = std::unique_ptr<SCH_ITEM>( Instatiate( type ) );
|
|
||||||
|
|
||||||
if( item == nullptr || originalItem == nullptr )
|
if( item == nullptr )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
BOOST_TEST_CONTEXT( "Class: " << item->GetClass() )
|
BOOST_TEST_CONTEXT( "Class: " << item->GetClass() )
|
||||||
|
@ -184,13 +223,13 @@ BOOST_AUTO_TEST_CASE( MirrorHorizontally )
|
||||||
item.get(),
|
item.get(),
|
||||||
[]( SCH_ITEM* aOriginalItem, wxPoint aRef )
|
[]( SCH_ITEM* aOriginalItem, wxPoint aRef )
|
||||||
{
|
{
|
||||||
SCH_ITEM* aItem = aOriginalItem->Duplicate();
|
auto item = std::unique_ptr<SCH_ITEM>( aOriginalItem->Duplicate() );
|
||||||
|
|
||||||
// Two mirrorings are an identity.
|
// Two mirrorings are an identity.
|
||||||
aItem->MirrorHorizontally( aRef.x );
|
item->MirrorHorizontally( aRef.x );
|
||||||
aItem->MirrorHorizontally( aRef.x );
|
item->MirrorHorizontally( aRef.x );
|
||||||
|
|
||||||
CompareItems( aItem, aOriginalItem );
|
CompareItems( item.get(), aOriginalItem );
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -203,10 +242,10 @@ BOOST_AUTO_TEST_CASE( MirrorVertically )
|
||||||
{
|
{
|
||||||
KICAD_T type = static_cast<KICAD_T>( i );
|
KICAD_T type = static_cast<KICAD_T>( i );
|
||||||
|
|
||||||
auto item = std::unique_ptr<SCH_ITEM>( Instatiate( type ) );
|
auto item = std::unique_ptr<SCH_ITEM>( Instatiate( type, &m_sheet ) );
|
||||||
auto originalItem = std::unique_ptr<SCH_ITEM>( Instatiate( type ) );
|
auto originalItem = std::unique_ptr<SCH_ITEM>( Instatiate( type, &m_sheet ) );
|
||||||
|
|
||||||
if( item == nullptr || originalItem == nullptr )
|
if( item == nullptr )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
BOOST_TEST_CONTEXT( "Class: " << item->GetClass() )
|
BOOST_TEST_CONTEXT( "Class: " << item->GetClass() )
|
||||||
|
@ -215,13 +254,13 @@ BOOST_AUTO_TEST_CASE( MirrorVertically )
|
||||||
item.get(),
|
item.get(),
|
||||||
[]( SCH_ITEM* aOriginalItem, wxPoint aRef )
|
[]( SCH_ITEM* aOriginalItem, wxPoint aRef )
|
||||||
{
|
{
|
||||||
SCH_ITEM* aItem = aOriginalItem->Duplicate();
|
auto item = std::unique_ptr<SCH_ITEM>( aOriginalItem->Duplicate() );
|
||||||
|
|
||||||
// Two mirrorings are an identity.
|
// Two mirrorings are an identity.
|
||||||
aItem->MirrorVertically( aRef.x );
|
item->MirrorVertically( aRef.x );
|
||||||
aItem->MirrorVertically( aRef.x );
|
item->MirrorVertically( aRef.x );
|
||||||
|
|
||||||
CompareItems( aItem, aOriginalItem );
|
CompareItems( item.get(), aOriginalItem );
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue