Break out getTrailingInt from MODULE
This is not logic specific to MODULE. Breaking it out to kicad_string.h acheives: * Slimming of the MODULE interface * Enables reuse of the function * Enables testing of the function Also add a test under qa_common for this function.
This commit is contained in:
parent
f85f10930a
commit
dc20521cb9
|
@ -641,6 +641,29 @@ int SplitString( wxString strToSplit,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int GetTrailingInt( const wxString& aStr )
|
||||||
|
{
|
||||||
|
int number = 0;
|
||||||
|
int base = 1;
|
||||||
|
|
||||||
|
// Trim and extract the trailing numeric part
|
||||||
|
int index = aStr.Len() - 1;
|
||||||
|
while( index >= 0 )
|
||||||
|
{
|
||||||
|
const char chr = aStr.GetChar( index );
|
||||||
|
|
||||||
|
if( chr < '0' || chr > '9' )
|
||||||
|
break;
|
||||||
|
|
||||||
|
number += ( chr - '0' ) * base;
|
||||||
|
base *= 10;
|
||||||
|
index--;
|
||||||
|
}
|
||||||
|
|
||||||
|
return number;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
wxString GetIllegalFileNameWxChars()
|
wxString GetIllegalFileNameWxChars()
|
||||||
{
|
{
|
||||||
return FROM_UTF8( illegalFileNameChars );
|
return FROM_UTF8( illegalFileNameChars );
|
||||||
|
|
|
@ -71,7 +71,6 @@ class BOARD_ITEM : public EDA_ITEM
|
||||||
protected:
|
protected:
|
||||||
PCB_LAYER_ID m_Layer;
|
PCB_LAYER_ID m_Layer;
|
||||||
|
|
||||||
static int getTrailingInt( const wxString& aStr );
|
|
||||||
static int getNextNumberInSequence( const std::set<int>& aSeq, bool aFillSequenceGaps );
|
static int getNextNumberInSequence( const std::set<int>& aSeq, bool aFillSequenceGaps );
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -171,6 +171,13 @@ int SplitString( wxString strToSplit,
|
||||||
wxString* strDigits,
|
wxString* strDigits,
|
||||||
wxString* strEnd );
|
wxString* strEnd );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the trailing int, if any, from a string.
|
||||||
|
* @param aStr the string to check
|
||||||
|
* @return the trailing int or 0 if none found
|
||||||
|
*/
|
||||||
|
int GetTrailingInt( const wxString& aStr );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function GetIllegalFileNameWxChars
|
* Function GetIllegalFileNameWxChars
|
||||||
* @return a wString object containing the illegal file name characters for all platforms.
|
* @return a wString object containing the illegal file name characters for all platforms.
|
||||||
|
|
|
@ -95,29 +95,6 @@ void BOARD_ITEM::ViewGetLayers( int aLayers[], int& aCount ) const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int BOARD_ITEM::getTrailingInt( const wxString& aStr )
|
|
||||||
{
|
|
||||||
int number = 0;
|
|
||||||
int base = 1;
|
|
||||||
|
|
||||||
// Trim and extract the trailing numeric part
|
|
||||||
int index = aStr.Len() - 1;
|
|
||||||
while( index >= 0 )
|
|
||||||
{
|
|
||||||
const char chr = aStr.GetChar( index );
|
|
||||||
|
|
||||||
if( chr < '0' || chr > '9' )
|
|
||||||
break;
|
|
||||||
|
|
||||||
number += ( chr - '0' ) * base;
|
|
||||||
base *= 10;
|
|
||||||
index--;
|
|
||||||
}
|
|
||||||
|
|
||||||
return number;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int BOARD_ITEM::getNextNumberInSequence( const std::set<int>& aSeq, bool aFillSequenceGaps)
|
int BOARD_ITEM::getNextNumberInSequence( const std::set<int>& aSeq, bool aFillSequenceGaps)
|
||||||
{
|
{
|
||||||
if( aSeq.empty() )
|
if( aSeq.empty() )
|
||||||
|
|
|
@ -1309,7 +1309,7 @@ wxString MODULE::GetNextPadName( bool aFillSequenceGaps ) const
|
||||||
// Create a set of used pad numbers
|
// Create a set of used pad numbers
|
||||||
for( D_PAD* pad = PadsList(); pad; pad = pad->Next() )
|
for( D_PAD* pad = PadsList(); pad; pad = pad->Next() )
|
||||||
{
|
{
|
||||||
int padNumber = getTrailingInt( pad->GetName() );
|
int padNumber = GetTrailingInt( pad->GetName() );
|
||||||
usedNumbers.insert( padNumber );
|
usedNumbers.insert( padNumber );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1343,9 +1343,8 @@ wxString MODULE::GetReferencePrefix() const
|
||||||
|
|
||||||
void MODULE::IncrementReference( int aDelta )
|
void MODULE::IncrementReference( int aDelta )
|
||||||
{
|
{
|
||||||
SetReference( wxString::Format( wxT( "%s%i" ),
|
SetReference( wxString::Format(
|
||||||
GetReferencePrefix(),
|
wxT( "%s%i" ), GetReferencePrefix(), GetTrailingInt( GetReference() ) + aDelta ) );
|
||||||
getTrailingInt( GetReference() ) + aDelta ) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,7 @@ set( common_srcs
|
||||||
test_coroutine.cpp
|
test_coroutine.cpp
|
||||||
test_format_units.cpp
|
test_format_units.cpp
|
||||||
test_hotkey_store.cpp
|
test_hotkey_store.cpp
|
||||||
|
test_kicad_string.cpp
|
||||||
test_title_block.cpp
|
test_title_block.cpp
|
||||||
test_utf8.cpp
|
test_utf8.cpp
|
||||||
test_wildcards_and_files_ext.cpp
|
test_wildcards_and_files_ext.cpp
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2018 KiCad Developers, see CHANGELOG.TXT for contributors.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, you may find one here:
|
||||||
|
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||||
|
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||||
|
* or you may write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Test suite for general string functions
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <unit_test_utils/unit_test_utils.h>
|
||||||
|
|
||||||
|
// Code under test
|
||||||
|
#include <kicad_string.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Declare the test suite
|
||||||
|
*/
|
||||||
|
BOOST_AUTO_TEST_SUITE( KicadString )
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the #GetTrailingInt method.
|
||||||
|
*/
|
||||||
|
BOOST_AUTO_TEST_CASE( TrailingInt )
|
||||||
|
{
|
||||||
|
using CASE = std::pair<std::string, int>;
|
||||||
|
|
||||||
|
const std::vector<CASE> cases = {
|
||||||
|
{ "", 0 }, { "foo", 0 }, // no int
|
||||||
|
{ "0", 0 }, // only int
|
||||||
|
{ "42", 42 }, // only int
|
||||||
|
{ "1001", 1001 }, // only int
|
||||||
|
{ "Foo42", 42 }, { "12Foo42", 42 }, // only the trailing
|
||||||
|
{ "12Foo4.2", 2 }, // no dots
|
||||||
|
};
|
||||||
|
|
||||||
|
for( const auto& c : cases )
|
||||||
|
{
|
||||||
|
BOOST_CHECK_EQUAL( GetTrailingInt( c.first ), c.second );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_SUITE_END()
|
Loading…
Reference in New Issue