From 9a476f830a62b48ddd782862faa333437932ff59 Mon Sep 17 00:00:00 2001 From: "Michael D. Lowis" Date: Sat, 2 Jun 2012 13:28:49 -0400 Subject: [PATCH] Added test for GetOptConfig --- source/opts.c | 54 ++++++++++++++++++++++++++++++++++++--------- source/opts.h | 2 ++ tests/test_opts.cpp | 35 +++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+), 10 deletions(-) diff --git a/source/opts.c b/source/opts.c index f3f3fd9..db41d0f 100644 --- a/source/opts.c +++ b/source/opts.c @@ -22,16 +22,16 @@ Result_T* OPTS_ParseOptions( OptionConfig_T* opts, int argc, char** argv ) // If we have an option if ( '-' == ctx.current ) { - // And its a long one - if( '-' == OPTS_NextCharacter( &ctx ) ) - { - (void)OPTS_ParseLongOption( &ctx ); - } - // or a short one - else - { - (void)OPTS_ParseShortOption( &ctx ); - } + OPTS_ParseShortOption( &ctx ); + //// And its a long one + //if( '-' == OPTS_NextCharacter( &ctx ) ) + //{ + // (void)OPTS_ParseLongOption( &ctx ); + //} + //// or a short one + //else + //{ + //} } // Or we have a floating argument else @@ -64,6 +64,24 @@ void OPTS_InitContext( StreamContext_T* ctx, int argc, char** argv ) void OPTS_ParseShortOption( StreamContext_T* ctx ) { + // Get Config + // if( current != ' ' ) + // { + // Get Config + // if( config != NULL ) + // { + // Save option + // if( has arg ) + // { + // Save arg + // } + // Add option to list + // } + // else + // { + // Exit: "Unknown option: %c\n" + // } + // } } void OPTS_ParseLongOption( StreamContext_T* ctx ) @@ -74,6 +92,22 @@ void OPTS_ParseArgument( StreamContext_T* ctx ) { } +OptionConfig_T* OPTS_GetOptConfig( OptionConfig_T* opts, OptionType_T typ, char* name ) +{ + OptionConfig_T* cfg = NULL; + int i = 0; + while( opts[i].type != END ) + { + if( (opts[i].type == typ) && (0 == strcmp(opts[i].name, name)) ) + { + cfg = &(opts[i]); + break; + } + i++; + } + return cfg; +} + char* OPTS_NextToken( StreamContext_T* ctx ) { char* tok = NULL; diff --git a/source/opts.h b/source/opts.h index 6329c20..50c6bed 100644 --- a/source/opts.h +++ b/source/opts.h @@ -61,6 +61,8 @@ void OPTS_ParseLongOption( StreamContext_T* ctx ); void OPTS_ParseArgument( StreamContext_T* ctx ); +OptionConfig_T* OPTS_GetOptConfig( OptionConfig_T* opts, OptionType_T typ, char* name ); + char* OPTS_NextToken( StreamContext_T* ctx ); char OPTS_NextCharacter( StreamContext_T* ctx ); diff --git a/tests/test_opts.cpp b/tests/test_opts.cpp index 163cb87..47dc209 100644 --- a/tests/test_opts.cpp +++ b/tests/test_opts.cpp @@ -104,6 +104,41 @@ namespace { // free(results); //} + + //------------------------------------------------------------------------- + // Test GetOptConfig Function + //------------------------------------------------------------------------- + TEST(Verify_GetOptConfig_Can_Retrieve_A_Short_Config_By_Name_And_Type) + { + OptionConfig_T* result = NULL; + result = OPTS_GetOptConfig( Options_Config, SHORT, "a" ); + CHECK( result == &(Options_Config[0]) ); + } + + TEST(Verify_GetOptConfig_Can_Retrieve_A_Long_Config_By_Name_And_Type) + { + OptionConfig_T* result = NULL; + result = OPTS_GetOptConfig( Options_Config, LONG, "foo" ); + CHECK( result == &(Options_Config[2]) ); + } + + TEST(Verify_GetOptConfig_Returns_Null_If_No_Config_Found) + { + OptionConfig_T* result = NULL; + result = OPTS_GetOptConfig( Options_Config, LONG, "baz" ); + CHECK( result == NULL ); + } + + TEST(Verify_GetOptConfig_Returns_Null_If_Config_List_Empty) + { + OptionConfig_T config[] = { + { END, NULL, NULL, 0, NULL } + }; + OptionConfig_T* result = NULL; + result = OPTS_GetOptConfig( config, LONG, "foo" ); + CHECK( result == NULL ); + } + //------------------------------------------------------------------------- // Test NextToken Function //------------------------------------------------------------------------- -- 2.54.0