Config type for 'words' and some tests
This commit is contained in:
parent
cd8b523550
commit
cf3c601a77
3 changed files with 115 additions and 6 deletions
|
|
@ -246,14 +246,77 @@ lumiera_config_string_set (const char* key, char** value, const char* fmt)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Word
|
* Word
|
||||||
* A single word, no quotes, nothing
|
* A single word, no quotes, chopped
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* helper function, takes a raw input string and give a tmpbuf with the word parsed back.
|
||||||
|
*/
|
||||||
|
static char*
|
||||||
|
scan_word (const char* in)
|
||||||
|
{
|
||||||
|
/* chop leading blanks */
|
||||||
|
in += strspn(in, " \t");
|
||||||
|
|
||||||
|
char* ret = lumiera_tmpbuf_strndup (in, SIZE_MAX);
|
||||||
|
char* end = ret;
|
||||||
|
|
||||||
|
/* chop trailing blanks */
|
||||||
|
while (*end != ' ' && *end != '\t')
|
||||||
|
++end;
|
||||||
|
|
||||||
|
*end++ = '\0';
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
lumiera_config_word_get (const char* key, char** value, const char* def)
|
lumiera_config_word_get (const char* key, char** value, const char* def)
|
||||||
{
|
{
|
||||||
TRACE (config_typed);
|
TRACE (config_typed, "KEY %s", key);
|
||||||
UNIMPLEMENTED();
|
|
||||||
return 0;
|
int ret = -1;
|
||||||
|
|
||||||
|
const char* raw_value = NULL;
|
||||||
|
|
||||||
|
LUMIERA_RDLOCK_SECTION (config_typed, &lumiera_global_config->lock)
|
||||||
|
{
|
||||||
|
if (!lumiera_config_get (key, &raw_value))
|
||||||
|
{
|
||||||
|
if (raw_value)
|
||||||
|
{
|
||||||
|
*value = scan_word (raw_value);
|
||||||
|
|
||||||
|
TRACE (config_typed, "RAW_VALUE %s, scanned .%s.", raw_value, *value);
|
||||||
|
|
||||||
|
if (*value)
|
||||||
|
ret = 0; /* all ok */
|
||||||
|
else if (def)
|
||||||
|
goto try_default;
|
||||||
|
}
|
||||||
|
else if (def)
|
||||||
|
{
|
||||||
|
ret = 0;
|
||||||
|
try_default:
|
||||||
|
|
||||||
|
*value = scan_word (def);
|
||||||
|
TRACE (config_typed, "DEFAULT %s, scanned .%s.", def, *value);
|
||||||
|
if (*value)
|
||||||
|
{
|
||||||
|
TODO ("register default (writelock or mutex!)");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret = -1;
|
||||||
|
LUMIERA_ERROR_SET (config_typed, CONFIG_DEFAULT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
LUMIERA_ERROR_SET (config, CONFIG_NO_ENTRY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
||||||
|
|
@ -106,20 +106,28 @@ LUMIERA_TEST_STRING=' "quoted string "" not ignored" #comment'
|
||||||
TEST "string get, quoted, escaped" string_get test.string default <<END
|
TEST "string get, quoted, escaped" string_get test.string default <<END
|
||||||
out: 'quoted string " not ignored'
|
out: 'quoted string " not ignored'
|
||||||
END
|
END
|
||||||
|
unset LUMIERA_TEST_STRING
|
||||||
|
|
||||||
|
|
||||||
PLANNED "string set" <<END
|
TEST "string set" string_set test.string 'foo bar' <<END
|
||||||
|
out: 'foo bar'
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
PLANNED "word get" <<END
|
export LUMIERA_TEST_WORD=' " double quote is just right'
|
||||||
|
|
||||||
|
TEST "word get" word_get test.word default <<END
|
||||||
|
out: '"'
|
||||||
END
|
END
|
||||||
|
|
||||||
|
unset LUMIERA_TEST_WORD
|
||||||
|
|
||||||
|
|
||||||
PLANNED "word set" <<END
|
PLANNED "word set" <<END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PLANNED "bool get" <<END
|
PLANNED "bool get" <<END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -88,4 +88,42 @@ TEST ("string_get")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TEST ("string_set")
|
||||||
|
{
|
||||||
|
REQUIRE (argv[2]);
|
||||||
|
REQUIRE (argv[3]);
|
||||||
|
|
||||||
|
lumiera_config_init ("./");
|
||||||
|
|
||||||
|
lumiera_config_string_set (argv[2], &argv[3], NULL);
|
||||||
|
FIXME ("handle error");
|
||||||
|
|
||||||
|
const char* string;
|
||||||
|
if (!lumiera_config_get (argv[2], &string))
|
||||||
|
printf ("'%s'\n", string);
|
||||||
|
else
|
||||||
|
printf ("%s, '%s'\n", lumiera_error (), string);
|
||||||
|
|
||||||
|
lumiera_config_destroy ();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TEST ("word_get")
|
||||||
|
{
|
||||||
|
REQUIRE (argv[2]);
|
||||||
|
REQUIRE (argv[3]);
|
||||||
|
|
||||||
|
lumiera_config_init ("./");
|
||||||
|
|
||||||
|
char* word;
|
||||||
|
|
||||||
|
if (!lumiera_config_word_get (argv[2], &word, argv[3]))
|
||||||
|
printf ("'%s'\n", word);
|
||||||
|
else
|
||||||
|
printf ("%s, '%s'\n", lumiera_error (), word);
|
||||||
|
|
||||||
|
lumiera_config_destroy ();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
TESTS_END
|
TESTS_END
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue