corelib/tests/srd-preproc-cmd-strings.cc

931 lines
31 KiB
C++

#include "srd-preproc-cmd-common.hh"
class SRDPreprocCmdStringsTest : public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE( SRDPreprocCmdStringsTest );
CPPUNIT_TEST( testConcatNoArgs );
CPPUNIT_TEST( testConcatBadArgs );
CPPUNIT_TEST( testConcatOneString );
CPPUNIT_TEST( testConcatStrings );
CPPUNIT_TEST( testConcatStringWord );
CPPUNIT_TEST( testConcatStringNumeric );
CPPUNIT_TEST( testConcatStringBinary );
CPPUNIT_TEST( testConcatOneBinary );
CPPUNIT_TEST( testConcatBinary );
CPPUNIT_TEST( testSubstrNotEnoughArgs );
CPPUNIT_TEST( testSubstrStringNotEnoughArgs );
CPPUNIT_TEST( testSubstrBinaryNotEnoughArgs );
CPPUNIT_TEST( testSubstrStringTooManyArgs );
CPPUNIT_TEST( testSubstrBinaryTooManyArgs );
CPPUNIT_TEST( testSubstrBadTooManyArgs );
CPPUNIT_TEST( testSubstrStringOffset );
CPPUNIT_TEST( testSubstrBinaryOffset );
CPPUNIT_TEST( testSubstrBadOffset );
CPPUNIT_TEST( testSubstrStringBad );
CPPUNIT_TEST( testSubstrStringInvalid );
CPPUNIT_TEST( testSubstrStringHigh );
CPPUNIT_TEST( testSubstrStringOffsetLength );
CPPUNIT_TEST( testSubstrBinaryOffsetLength );
CPPUNIT_TEST( testSubstrStringOffsetBad );
CPPUNIT_TEST( testSubstrStringOffsetToOffset );
CPPUNIT_TEST( testSubstrBinaryOffsetToOffset );
CPPUNIT_TEST( testSubstrStringRangeInverted );
CPPUNIT_TEST( testSubstrBinaryRangeInverted );
CPPUNIT_TEST( testSubstrStringOffsetBadOffset );
CPPUNIT_TEST( testSubstrStringOffsetToBad );
CPPUNIT_TEST( testSubstrRangeInvalidStart );
CPPUNIT_TEST( testSubstrRangeInvalidEnd );
CPPUNIT_TEST( testSplitNotEnoughArgs );
CPPUNIT_TEST( testSplitTooManyArgs );
CPPUNIT_TEST( testSplitBadString );
CPPUNIT_TEST( testSplitStringBad );
CPPUNIT_TEST( testSplitStringEmpty );
CPPUNIT_TEST( testSplitStringStringBad );
CPPUNIT_TEST( testSplitStringStringNegative );
CPPUNIT_TEST( testSplitSingleNormal );
CPPUNIT_TEST( testSplitSingleStart );
CPPUNIT_TEST( testSplitSingleEnd );
CPPUNIT_TEST( testSplitSingleNowhere );
CPPUNIT_TEST( testSplitMultiNormal );
CPPUNIT_TEST( testSplitMultiStart );
CPPUNIT_TEST( testSplitMultiEnd );
CPPUNIT_TEST( testSplitMultiNowhere );
CPPUNIT_TEST( testSplitMultiLonger );
CPPUNIT_TEST( testSplitLimitZero );
CPPUNIT_TEST( testSplitLimit );
CPPUNIT_TEST( testSplitLimitGreater );
CPPUNIT_TEST( testSWNotEnoughArgs );
CPPUNIT_TEST( testSWTooManyArgs );
CPPUNIT_TEST( testSWStringYes );
CPPUNIT_TEST( testSWStringYesEqual );
CPPUNIT_TEST( testSWStringYesEmpty );
CPPUNIT_TEST( testSWStringNoShorter );
CPPUNIT_TEST( testSWStringNoLonger );
CPPUNIT_TEST( testSWBinaryYes );
CPPUNIT_TEST( testSWBinaryYesEqual );
CPPUNIT_TEST( testSWBinaryYesEmpty );
CPPUNIT_TEST( testSWBinaryNoShorter );
CPPUNIT_TEST( testSWBinaryNoLonger );
CPPUNIT_TEST( testSWWordString );
CPPUNIT_TEST( testSWStringWord );
CPPUNIT_TEST( testSWStringBad );
CPPUNIT_TEST( testSWBadString );
CPPUNIT_TEST( testEWNotEnoughArgs );
CPPUNIT_TEST( testEWTooManyArgs );
CPPUNIT_TEST( testEWStringYes );
CPPUNIT_TEST( testEWStringYesEqual );
CPPUNIT_TEST( testEWStringYesEmpty );
CPPUNIT_TEST( testEWStringNoShorter );
CPPUNIT_TEST( testEWStringNoLonger );
CPPUNIT_TEST( testEWBinaryYes );
CPPUNIT_TEST( testEWBinaryYesEqual );
CPPUNIT_TEST( testEWBinaryYesEmpty );
CPPUNIT_TEST( testEWBinaryNoShorter );
CPPUNIT_TEST( testEWBinaryNoLonger );
CPPUNIT_TEST( testEWWordString );
CPPUNIT_TEST( testEWStringWord );
CPPUNIT_TEST( testEWStringBad );
CPPUNIT_TEST( testEWBadString );
CPPUNIT_TEST_SUITE_END( );
public:
// -concat
void testConcatNoArgs( );
void testConcatBadArgs( );
void testConcatOneString( );
void testConcatStrings( );
void testConcatStringWord( );
void testConcatStringNumeric( );
void testConcatStringBinary( );
void testConcatOneBinary( );
void testConcatBinary( );
// -substr
void testSubstrNotEnoughArgs( ); // Not enough arguments
void testSubstrStringNotEnoughArgs( ); // String
void testSubstrBinaryNotEnoughArgs( ); // Binary
void testSubstrStringTooManyArgs( ); // String + too many arguments
void testSubstrBinaryTooManyArgs( ); // Binary + too many arguments
void testSubstrBadTooManyArgs( ); // Invalid argument + too many arguments
void testSubstrStringOffset( ); // String and offset arguments
void testSubstrBinaryOffset( ); // Binary data and offset arguments
void testSubstrBadOffset( ); // Invalid argument + offset
void testSubstrStringBad( ); // String + invalid argument
void testSubstrStringInvalid( ); // String, offset < 0
void testSubstrStringHigh( ); // String, offset > length
void testSubstrStringOffsetLength( ); // String, offset and length arguments
void testSubstrBinaryOffsetLength( ); // Binary, offset and length arguments
void testSubstrStringOffsetBad( ); // String and offset followed by invalid argument
void testSubstrStringOffsetToOffset( ); // String, range mode
void testSubstrBinaryOffsetToOffset( ); // Binary, range mode
void testSubstrStringRangeInverted( ); // String, range mode, end < start
void testSubstrBinaryRangeInverted( ); // Binary, range mode, end < start
void testSubstrStringOffsetBadOffset( );
// String, range mode, wrong "to" argument
void testSubstrStringOffsetToBad( ); // String, range mode, wrong end argument
void testSubstrRangeInvalidStart( ); // String, range mode, start < 0
void testSubstrRangeInvalidEnd( ); // String, range mode, end < 0
// -str-split
void testSplitNotEnoughArgs( ); // Not enough arguments
void testSplitTooManyArgs( ); // Too many arguments
void testSplitBadString( ); // Invalid argument, string
void testSplitStringBad( ); // String, invalid argument
void testSplitStringEmpty( ); // String, empty string
void testSplitStringStringBad( ); // String, string, invalid argument
void testSplitStringStringNegative( ); // String, string, negative integer
void testSplitSingleNormal( ); // Single-character delimiter, inside string
void testSplitSingleStart( ); // Single-character delimiter, start of string
void testSplitSingleEnd( ); // Single-character delimiter, end of string
void testSplitSingleNowhere( ); // Single-character delimiter, not in string
void testSplitMultiNormal( ); // Multi-character delimiter, inside string
void testSplitMultiStart( ); // Multi-character delimiter, start of string
void testSplitMultiEnd( ); // Multi-character delimiter, end of string
void testSplitMultiNowhere( ); // Multi-character delimiter, not in string
void testSplitMultiLonger( ); // Multi-character delimiter, longer than string
void testSplitLimitZero( ); // With limit set to 0
void testSplitLimit( ); // With a non-zero limit
void testSplitLimitGreater( ); // With a limit higher than the result count
// -starts-with
void testSWNotEnoughArgs( );
void testSWTooManyArgs( );
void testSWStringYes( );
void testSWStringYesEqual( );
void testSWStringYesEmpty( );
void testSWStringNoShorter( );
void testSWStringNoLonger( );
void testSWBinaryYes( );
void testSWBinaryYesEqual( );
void testSWBinaryYesEmpty( );
void testSWBinaryNoShorter( );
void testSWBinaryNoLonger( );
void testSWWordString( );
void testSWStringWord( );
void testSWStringBad( );
void testSWBadString( );
// -ends-with
void testEWNotEnoughArgs( );
void testEWTooManyArgs( );
void testEWStringYes( );
void testEWStringYesEqual( );
void testEWStringYesEmpty( );
void testEWStringNoShorter( );
void testEWStringNoLonger( );
void testEWBinaryYes( );
void testEWBinaryYesEqual( );
void testEWBinaryYesEmpty( );
void testEWBinaryNoShorter( );
void testEWBinaryNoLonger( );
void testEWWordString( );
void testEWStringWord( );
void testEWStringBad( );
void testEWBadString( );
};
CPPUNIT_TEST_SUITE_REGISTRATION( SRDPreprocCmdStringsTest );
/*----------------------------------------------------------------------------*/
void SRDPreprocCmdStringsTest::testConcatNoArgs( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -concat )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "not enough arguments" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 11 );
CPPUNIT_ASSERT( check( "\"\"" , output ) );
}
void SRDPreprocCmdStringsTest::testConcatBadArgs( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -concat ( nope ) [ 01 ] )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "binary array, text or numeric argument expected" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 11 );
CPPUNIT_ASSERT( check( "[ 01 ]" , output ) );
}
void SRDPreprocCmdStringsTest::testConcatOneString( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -concat \"string\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( uint32_t( 0 ) , errors.size( ) );
CPPUNIT_ASSERT( check( "\"string\"" , output ) );
}
void SRDPreprocCmdStringsTest::testConcatStrings( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -concat \"str\" \"ing\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( uint32_t( 0 ) , errors.size( ) );
CPPUNIT_ASSERT( check( "\"string\"" , output ) );
}
void SRDPreprocCmdStringsTest::testConcatStringWord( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -concat \"str\" ing )" , errors ) );
CPPUNIT_ASSERT_EQUAL( uint32_t( 0 ) , errors.size( ) );
CPPUNIT_ASSERT( check( "\"string\"" , output ) );
}
void SRDPreprocCmdStringsTest::testConcatStringNumeric( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -concat \"i\" 2 \"l\" ( -to-long 2 ) \"f\" 1.2 )" , errors ) );
CPPUNIT_ASSERT_EQUAL( uint32_t( 0 ) , errors.size( ) );
CPPUNIT_ASSERT( check( "\"i2l2f1.2\"" , output ) );
}
void SRDPreprocCmdStringsTest::testConcatStringBinary( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -concat \"string\"\n[ 01 ] )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "text or numeric argument expected" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 2 , 1 );
CPPUNIT_ASSERT( check( "\"string\"" , output ) );
}
void SRDPreprocCmdStringsTest::testConcatOneBinary( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -concat [ ] )" , errors ) );
CPPUNIT_ASSERT_EQUAL( uint32_t( 0 ) , errors.size( ) );
CPPUNIT_ASSERT( check( "[ ]" , output ) );
}
void SRDPreprocCmdStringsTest::testConcatBinary( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -concat [ 01 ] [] [ 02 ] )" , errors ) );
CPPUNIT_ASSERT_EQUAL( uint32_t( 0 ) , errors.size( ) );
CPPUNIT_ASSERT( check( "[ 01 02 ]" , output ) );
}
/*----------------------------------------------------------------------------*/
void SRDPreprocCmdStringsTest::testSubstrNotEnoughArgs( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "not enough arguments" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 11 );
CPPUNIT_ASSERT( check( "\"\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSubstrStringNotEnoughArgs( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr \"abcdef\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "not enough arguments" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 20 );
CPPUNIT_ASSERT( check( "\"\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSubstrBinaryNotEnoughArgs( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr [ 01 02 03 04 05 06 ] )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "not enough arguments" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 33 );
CPPUNIT_ASSERT( check( "[]" , output ) );
}
void SRDPreprocCmdStringsTest::testSubstrStringTooManyArgs( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr \"abcdef\" 1 to 2 blah )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "too many arguments" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 27 );
CPPUNIT_ASSERT( check( "\"bc\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSubstrBinaryTooManyArgs( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr [ 01 02 03 04 05 06 ] 1 to 2 blah )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "too many arguments" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 40 );
CPPUNIT_ASSERT( check( "[]" , output ) );
}
void SRDPreprocCmdStringsTest::testSubstrBadTooManyArgs( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr -12 1 to 2 blah )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "binary array or text argument expected" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 11 );
CPPUNIT_ASSERT( check( "\"\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSubstrStringOffset( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr \"abcdef\" 3 )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "\"def\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSubstrBinaryOffset( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr [ 01 02 03 04 05 06 ] 3 )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "[ 04 05 06 ]" , output ) );
}
void SRDPreprocCmdStringsTest::testSubstrBadOffset( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr 12 3 )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "binary array or text argument expected" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 11 );
CPPUNIT_ASSERT( check( "\"\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSubstrStringBad( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr \"\" \"\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "integer argument expected" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 14 );
CPPUNIT_ASSERT( check( "\"\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSubstrStringInvalid( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr \"abcdef\" -1 )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "invalid argument value" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 20 );
CPPUNIT_ASSERT( check( "\"\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSubstrStringHigh( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr \"abcdef\" 7 )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "\"\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSubstrStringOffsetLength( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr \"abcdef\" 2 3 )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "\"cde\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSubstrBinaryOffsetLength( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr [ 01 02 03 04 05 06 ] 2 3 )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "[ 03 04 05 ]" , output ) );
}
void SRDPreprocCmdStringsTest::testSubstrStringOffsetBad( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr \"abcdef\" 2 nope )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "'to' or integer argument expected" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 22 );
CPPUNIT_ASSERT( check( "\"\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSubstrStringOffsetToOffset( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr \"abcdef\" 2 to 3 )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "\"cd\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSubstrBinaryOffsetToOffset( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr [ 01 02 03 04 05 06 ] 2 to 3 )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "[ 03 04 ]" , output ) );
}
void SRDPreprocCmdStringsTest::testSubstrStringRangeInverted( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr \"abcdef\" 3 to 2 )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "\"\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSubstrBinaryRangeInverted( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr [ 01 02 03 04 05 06 ] 3 to 2 )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "[ ]" , output ) );
}
void SRDPreprocCmdStringsTest::testSubstrStringOffsetBadOffset( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr \"abcdef\" 2 ot 3 )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "'to' or integer argument expected" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 22 );
CPPUNIT_ASSERT( check( "\"\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSubstrStringOffsetToBad( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr \"abcdef\" 2 to meh )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "integer argument expected" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 25 );
CPPUNIT_ASSERT( check( "\"\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSubstrRangeInvalidStart( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr \"abcdef\" -2 to 12 )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "invalid argument value" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 20 );
CPPUNIT_ASSERT( check( "\"\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSubstrRangeInvalidEnd( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -substr \"abcdef\" 2 to -2 )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "invalid argument value" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 25 );
CPPUNIT_ASSERT( check( "\"\"" , output ) );
}
/*----------------------------------------------------------------------------*/
void SRDPreprocCmdStringsTest::testSplitNotEnoughArgs( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -str-split \"x\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "not enough arguments" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 18 );
CPPUNIT_ASSERT( check( "\"\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSplitTooManyArgs( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -str-split \"a\" \"b\" 12 a b c )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "too many arguments" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 25 );
CPPUNIT_ASSERT( check( "\"b\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSplitBadString( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -str-split 12 \"x\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "text argument expected" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 14 );
CPPUNIT_ASSERT( check( "\"\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSplitStringBad( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -str-split \"x\" 12 )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "text argument expected" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 18 );
CPPUNIT_ASSERT( check( "\"\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSplitStringEmpty( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -str-split \"\" \"...\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "invalid argument value" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 14 );
CPPUNIT_ASSERT( check( "\"\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSplitStringStringBad( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -str-split \"a\" \"...\" x )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "integer argument or end of list expected" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 24 );
CPPUNIT_ASSERT( check( "\"...\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSplitStringStringNegative( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -str-split \"a\" \"bab\" -1 )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "invalid argument value" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 24 );
CPPUNIT_ASSERT( check( "\"b\" \"b\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSplitSingleNormal( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -str-split \"a\" \"babaab\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "\"b\" \"b\" \"\" \"b\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSplitSingleStart( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -str-split \"a\" \"ab\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "\"\" \"b\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSplitSingleEnd( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -str-split \"a\" \"ba\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "\"b\" \"\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSplitSingleNowhere( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -str-split \"a\" \"nope\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "\"nope\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSplitMultiNormal( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -str-split \"aba\" \"babaxabaababa\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "\"b\" \"x\" \"\" \"ba\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSplitMultiStart( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -str-split \"aba\" \"abab\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "\"\" \"b\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSplitMultiEnd( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -str-split \"aba\" \"baba\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "\"b\" \"\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSplitMultiNowhere( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -str-split \"aba\" \"nope\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "\"nope\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSplitMultiLonger( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -str-split \"moomoo\" \"nope\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "\"nope\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSplitLimitZero( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -str-split \"x\" \"abababa\" 0 )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "\"abababa\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSplitLimit( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -str-split \"b\" \"abababa\" 2 )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "\"a\" \"a\" \"aba\"" , output ) );
}
void SRDPreprocCmdStringsTest::testSplitLimitGreater( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -str-split \"b\" \"abababa\" 12 )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "\"a\" \"a\" \"a\" \"a\"" , output ) );
}
/*----------------------------------------------------------------------------*/
void SRDPreprocCmdStringsTest::testSWNotEnoughArgs( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -starts-with \"x\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "not enough arguments" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 20 );
CPPUNIT_ASSERT( check( "0" , output ) );
}
void SRDPreprocCmdStringsTest::testSWTooManyArgs( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -starts-with x y z )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "too many arguments" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 20 );
CPPUNIT_ASSERT( check( "0" , output ) );
}
void SRDPreprocCmdStringsTest::testSWStringYes( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -starts-with \"abc\" \"abcdef\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "1" , output ) );
}
void SRDPreprocCmdStringsTest::testSWStringYesEqual( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -starts-with \"abc\" \"abc\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "1" , output ) );
}
void SRDPreprocCmdStringsTest::testSWStringYesEmpty( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -starts-with \"\" \"abc\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "1" , output ) );
}
void SRDPreprocCmdStringsTest::testSWStringNoShorter( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -starts-with \"abc\" \"defg\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "0" , output ) );
}
void SRDPreprocCmdStringsTest::testSWStringNoLonger( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -starts-with \"defg\" \"abc\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "0" , output ) );
}
void SRDPreprocCmdStringsTest::testSWBinaryYes( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -starts-with [ 00 ] [ 00 01 02 ] )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "1" , output ) );
}
void SRDPreprocCmdStringsTest::testSWBinaryYesEqual( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -starts-with [ 00 01 02 ] [ 00 01 02 ] )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "1" , output ) );
}
void SRDPreprocCmdStringsTest::testSWBinaryYesEmpty( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -starts-with [ ] [ 00 01 02 ] )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "1" , output ) );
}
void SRDPreprocCmdStringsTest::testSWBinaryNoShorter( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -starts-with [ 01 ] [ 00 01 02 ] )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "0" , output ) );
}
void SRDPreprocCmdStringsTest::testSWBinaryNoLonger( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -starts-with [ 00 01 02 ] [ 00 ] )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "0" , output ) );
}
void SRDPreprocCmdStringsTest::testSWWordString( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -starts-with abc \"abc d\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "1" , output ) );
}
void SRDPreprocCmdStringsTest::testSWStringWord( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -starts-with \"abc\" abc-d )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "1" , output ) );
}
void SRDPreprocCmdStringsTest::testSWStringBad( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -starts-with \"abc\" 12 )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "text argument expected" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 22 );
CPPUNIT_ASSERT( check( "0" , output ) );
}
void SRDPreprocCmdStringsTest::testSWBadString( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -starts-with 12 \"abc\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "binary array or text argument expected" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 16 );
CPPUNIT_ASSERT( check( "0" , output ) );
}
/*----------------------------------------------------------------------------*/
void SRDPreprocCmdStringsTest::testEWNotEnoughArgs( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -ends-with \"x\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "not enough arguments" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 18 );
CPPUNIT_ASSERT( check( "0" , output ) );
}
void SRDPreprocCmdStringsTest::testEWTooManyArgs( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -ends-with x y z )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "too many arguments" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 18 );
CPPUNIT_ASSERT( check( "0" , output ) );
}
void SRDPreprocCmdStringsTest::testEWStringYes( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -ends-with \"def\" \"abcdef\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "1" , output ) );
}
void SRDPreprocCmdStringsTest::testEWStringYesEqual( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -ends-with \"abc\" \"abc\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "1" , output ) );
}
void SRDPreprocCmdStringsTest::testEWStringYesEmpty( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -ends-with \"\" \"abc\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "1" , output ) );
}
void SRDPreprocCmdStringsTest::testEWStringNoShorter( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -ends-with \"abc\" \"defg\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "0" , output ) );
}
void SRDPreprocCmdStringsTest::testEWStringNoLonger( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -ends-with \"defg\" \"abc\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "0" , output ) );
}
void SRDPreprocCmdStringsTest::testEWBinaryYes( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -ends-with [ 02 ] [ 00 01 02 ] )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "1" , output ) );
}
void SRDPreprocCmdStringsTest::testEWBinaryYesEqual( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -ends-with [ 00 01 02 ] [ 00 01 02 ] )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "1" , output ) );
}
void SRDPreprocCmdStringsTest::testEWBinaryYesEmpty( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -ends-with [ ] [ 00 01 02 ] )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "1" , output ) );
}
void SRDPreprocCmdStringsTest::testEWBinaryNoShorter( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -ends-with [ 01 ] [ 00 01 02 ] )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "0" , output ) );
}
void SRDPreprocCmdStringsTest::testEWBinaryNoLonger( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -ends-with [ 00 01 02 ] [ 00 ] )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "0" , output ) );
}
void SRDPreprocCmdStringsTest::testEWWordString( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -ends-with d \"abc d\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "1" , output ) );
}
void SRDPreprocCmdStringsTest::testEWStringWord( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -ends-with \"c-d\" abc-d )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 0u , errors.size( ) );
CPPUNIT_ASSERT( check( "1" , output ) );
}
void SRDPreprocCmdStringsTest::testEWStringBad( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -ends-with \"abc\" 12 )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "text argument expected" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 20 );
CPPUNIT_ASSERT( check( "0" , output ) );
}
void SRDPreprocCmdStringsTest::testEWBadString( )
{
T_SRDErrors errors;
T_SRDList output( process( "( -ends-with 12 \"abc\" )" , errors ) );
CPPUNIT_ASSERT_EQUAL( 2u , errors.size( ) );
M_CKERR_( 0 , "binary array or text argument expected" , 1 , 3 );
M_CKERR_( 1 , "previous error cause" , 1 , 14 );
CPPUNIT_ASSERT( check( "0" , output ) );
}