| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412 |
- #include <dirent.h>
- #include <sys/stat.h>
- #include <unity.h>
- #include "dictionary.h"
- /* We need to directly insert the .c file in order to test the */
- /* static functions as well */
- #include "iniparser.c"
- #define GOOD_INI_PATH "ressources/good_ini"
- #define BAD_INI_PATH "ressources/bad_ini"
- #define OLD_INI_PATH "ressources/old.ini"
- #define NEW_INI_PATH "ressources/new.ini"
- #define TEST_INI_PATH "ressources/test.ini"
- #define TEST_TXT_PATH "ressources/test.txt"
- #define GRUEZI_INI_PATH "ressources/gruezi.ini"
- #define UTF8_INI_PATH "ressources/utf8.ini"
- #define TMP_INI_PATH "ressources/tmp.ini"
- #define MISFORMED_INI_SEC0 "[12345"
- #define MISFORMED_INI_SEC1 "12345]"
- #define MISFORMED_INI_SEC2 "123]45"
- #define MISFORMED_INI_ATTR "1111"
- #define QUOTES_INI_PATH "ressources/quotes.ini"
- #define QUOTES_INI_SEC "quotes"
- #define QUOTES_INI_ATTR0 "string0"
- #define QUOTES_INI_ATTR1 "string1"
- #define QUOTES_INI_ATTR2 "string2"
- #define QUOTES_INI_ATTR3 "string3"
- #define QUOTES_INI_ATTR4 "string4"
- #define QUOTES_INI_ATTR5 "string5"
- #define QUOTES_INI_VAL0 "str\"ing"
- #define QUOTES_INI_VAL1 "str;ing"
- #define QUOTES_INI_VAL2 "str#ing"
- #define stringify_2(x) #x
- #define stringify(x) stringify_2(x)
- static dictionary *dic = NULL;
- static FILE *ini;
- static DIR *dir;
- void setUp(void)
- {
- }
- void tearDown(void)
- {
- if(dic)
- dictionary_del(dic);
- dic = NULL;
- if(ini)
- fclose(ini);
- ini = NULL;
- if(dir)
- closedir(dir);
- dir = NULL;
- }
- /* Tool function to create and populate a generic non-empty dictionary */
- static dictionary * generate_dictionary(unsigned sections, unsigned entries_per_section)
- {
- unsigned i, j ;
- dictionary * dic;
- char sec_name[32];
- char key_name[64];
- char key_value[32];
- dic = dictionary_new(sections + sections * entries_per_section);
- if (dic == NULL)
- return NULL;
- /* Insert the sections */
- for (i = 0; i < sections; ++i) {
- sprintf(sec_name, "sec%d", i);
- dictionary_set(dic, sec_name, "");
- for (j = 0; j < entries_per_section; ++j) {
- /* Populate the section with the entries */
- sprintf(key_name, "%s:key%d", sec_name, j);
- sprintf(key_value, "value-%d/%d", i, j);
- dictionary_set(dic, key_name, key_value);
- }
- }
- return dic;
- }
- void test_iniparser_strlwc(void)
- {
- char out_buffer[128];
- /* NULL ptr as input */
- TEST_ASSERT_NULL(strlwc(NULL, NULL, 0));
- TEST_ASSERT_NULL(strlwc(NULL, out_buffer, sizeof (out_buffer)));
- TEST_ASSERT_NULL(strlwc("", NULL, sizeof (out_buffer)));
- TEST_ASSERT_NULL(strlwc("", out_buffer, 0));
- TEST_ASSERT_NULL(strlwc(NULL, NULL, 0));
- /* empty string */
- TEST_ASSERT_EQUAL_STRING("", strlwc("", out_buffer, sizeof (out_buffer)));
- TEST_ASSERT_EQUAL_STRING(" ",
- strlwc(" ", out_buffer, sizeof (out_buffer)));
- TEST_ASSERT_EQUAL_STRING("test",
- strlwc("test", out_buffer, sizeof (out_buffer)));
- TEST_ASSERT_EQUAL_STRING("test",
- strlwc("TEST", out_buffer, sizeof (out_buffer)));
- TEST_ASSERT_EQUAL_STRING("test",
- strlwc("TeSt", out_buffer, sizeof (out_buffer)));
- TEST_ASSERT_EQUAL_STRING("test test",
- strlwc("TEST TEST", out_buffer,
- sizeof (out_buffer)));
- TEST_ASSERT_EQUAL_STRING("very long string !!!!!!!",
- strlwc("very long string !!!!!!!", out_buffer,
- sizeof (out_buffer)));
- TEST_ASSERT_EQUAL_STRING("cutted string",
- strlwc("cutted string<---here", out_buffer, 14));
- /* test using same buffer as input and output */
- strcpy(out_buffer, "OVERWRITE ME !");
- TEST_ASSERT_NOT_NULL(strlwc(out_buffer, out_buffer, sizeof(out_buffer)));
- TEST_ASSERT_EQUAL_STRING("overwrite me !", out_buffer);
- }
- void test_iniparser_strstrip(void)
- {
- /* First element in the array is the expected stripping result */
- const char *strings_empty[] = {
- "",
- " ",
- "\n\n\n\n",
- "\t\t\t\t",
- "\n \t\n\t\n "
- };
- const char *strings_test[] = {
- "test",
- "test ",
- "test ",
- " test",
- " test ",
- "\ttest\t",
- "\ttest\n"
- };
- const char *test_with_spaces = "I am a test with\tspaces.";
- char stripped[ASCIILINESZ+1];
- char error_msg[1060];
- unsigned i;
- /* NULL ptr as input */
- strstrip(NULL);
- /* empty string */
- for (i = 0 ; i < sizeof (strings_empty) / sizeof (char *) ; ++i) {
- strcpy(stripped, strings_empty[i]);
- strstrip(stripped);
- sprintf(error_msg, "Bad stripping : strstrip(\"%s\") ==> \"%s\"",
- strings_empty[i], stripped);
- TEST_ASSERT_EQUAL_STRING_MESSAGE(stripped, strings_empty[0], error_msg);
- }
- /* test string */
- for (i = 0 ; i < sizeof (strings_test) / sizeof (char *) ; ++i) {
- strcpy(stripped, strings_test[i]);
- strstrip(stripped);
- sprintf(error_msg, "Bad stripping : strstrip(\"%s\") ==> \"%s\"",
- strings_test[i], stripped);
- TEST_ASSERT_EQUAL_STRING_MESSAGE(strings_test[0], stripped, error_msg);
- }
- strcpy(stripped, ".");
- strstrip(stripped);
- TEST_ASSERT_EQUAL_STRING(".", stripped);
- /* string containing spaces */
- strcpy(stripped, test_with_spaces);
- strstrip(stripped);
- TEST_ASSERT_EQUAL_STRING(test_with_spaces, stripped);
- }
- void test_iniparser_getnsec(void)
- {
- int i;
- char sec_name[32];
- /* NULL test */
- TEST_ASSERT_EQUAL(-1, iniparser_getnsec(NULL));
- /* Empty dictionary */
- dic = dictionary_new(10);
- TEST_ASSERT_NOT_NULL(dic);
- TEST_ASSERT_EQUAL(0, iniparser_getnsec(dic));
- dictionary_del(dic);
- dic = NULL;
- /* Regular dictionary */
- dic = generate_dictionary(512, 0);
- TEST_ASSERT_NOT_NULL(dic);
- TEST_ASSERT_EQUAL(512, iniparser_getnsec(dic));
- /* Check after removing sections */
- for (i = 1; i < 512; ++i) {
- sprintf(sec_name, "sec%d", i);
- dictionary_unset(dic, sec_name);
- TEST_ASSERT_EQUAL(512 - i, iniparser_getnsec(dic));
- }
- dictionary_del(dic);
- dic = NULL;
- /* Mix sections and regular keys */
- dic = generate_dictionary(10, 512);
- TEST_ASSERT_NOT_NULL(dic);
- TEST_ASSERT_EQUAL(10, iniparser_getnsec(dic));
- dictionary_del(dic);
- dic = NULL;
- }
- void test_iniparser_getsecname(void)
- {
- unsigned i;
- char sec_name[32];
- /* NULL test */
- TEST_ASSERT_NULL(iniparser_getsecname(NULL, 0));
- /* Empty dictionary */
- dic = dictionary_new(10);
- TEST_ASSERT_NOT_NULL(dic);
- TEST_ASSERT_NULL(iniparser_getsecname(dic, 0));
- dictionary_del(dic);
- dic = NULL;
- /* Sections without entries dictionary */
- dic = generate_dictionary(100, 0);
- TEST_ASSERT_NOT_NULL(dic);
- for (i = 0; i < 100; ++i) {
- sprintf(sec_name, "sec%d", i);
- TEST_ASSERT_EQUAL_STRING(sec_name, iniparser_getsecname(dic, i));
- }
- dictionary_del(dic);
- dic = NULL;
- /* Generic dictionary */
- dic = generate_dictionary(10, 100);
- TEST_ASSERT_NOT_NULL(dic);
- for (i = 0; i < 10; ++i) {
- sprintf(sec_name, "sec%d", i);
- TEST_ASSERT_EQUAL_STRING(sec_name, iniparser_getsecname(dic, i));
- }
- dictionary_del(dic);
- dic = NULL;
- }
- void test_iniparser_getseckeys(void)
- {
- unsigned i;
- char key_name[64];
- int nkeys;
- const char * keys[10]; /* At most 10 elements per section */
- /* NULL test */
- TEST_ASSERT_NULL(iniparser_getseckeys(NULL, NULL, NULL));
- TEST_ASSERT_NULL(iniparser_getseckeys(NULL, "dummy", NULL));
- TEST_ASSERT_NULL(iniparser_getseckeys(NULL, "dummy", keys));
- /* Empty dictionary */
- dic = dictionary_new(10);
- TEST_ASSERT_NOT_NULL(dic);
- TEST_ASSERT_NULL(iniparser_getseckeys(dic, NULL, keys));
- TEST_ASSERT_NULL(iniparser_getseckeys(dic, "dummy", keys));
- dictionary_del(dic);
- dic = NULL;
- /* Generic dictionary */
- dic = generate_dictionary(100, 10);
- TEST_ASSERT_NOT_NULL(dic);
- TEST_ASSERT_NULL(iniparser_getseckeys(dic, NULL, keys));
- TEST_ASSERT_NULL(iniparser_getseckeys(dic, "dummy", keys));
- TEST_ASSERT_NULL(iniparser_getseckeys(dic, "sec0", NULL));
- nkeys = iniparser_getsecnkeys(dic, "sec42");
- TEST_ASSERT_EQUAL(nkeys, 10);
- TEST_ASSERT_EQUAL_STRING(keys, iniparser_getseckeys(dic, "sec42", keys));
- for (i = 0; i < 10; ++i) {
- sprintf(key_name, "sec42:key%d", i);
- TEST_ASSERT_EQUAL_STRING(key_name, keys[i]);
- }
- /* Remove some keys to make the dictionary more real */
- dictionary_unset(dic, "sec42");
- dictionary_unset(dic, "sec99:key9");
- dictionary_unset(dic, "sec0:key0");
- dictionary_unset(dic, "sec0:key1");
- dictionary_unset(dic, "sec0:key2");
- TEST_ASSERT_NULL(iniparser_getseckeys(dic, "sec42", keys));
- nkeys = iniparser_getsecnkeys(dic, "Sec99");
- TEST_ASSERT_EQUAL(nkeys, 9);
- TEST_ASSERT_EQUAL_STRING(keys, iniparser_getseckeys(dic, "Sec99", keys));
- for (i = 0; i < 9; ++i) {
- sprintf(key_name, "sec99:key%d", i);
- TEST_ASSERT_EQUAL_STRING(key_name, keys[i]);
- }
- nkeys = iniparser_getsecnkeys(dic, "sec0");
- TEST_ASSERT_EQUAL(nkeys, 7);
- TEST_ASSERT_EQUAL_STRING(keys, iniparser_getseckeys(dic, "sec0", keys));
- for (i = 0; i < 7; ++i) {
- sprintf(key_name, "sec0:key%d", i + 3);
- TEST_ASSERT_EQUAL_STRING(key_name, keys[i]);
- }
- dictionary_del(dic);
- dic = NULL;
- }
- void test_iniparser_getstring(void)
- {
- /* NULL test */
- TEST_ASSERT_NULL(iniparser_getstring(NULL, NULL, NULL));
- TEST_ASSERT_NULL(iniparser_getstring(NULL, "dummy", NULL));
- /* Check the def return element */
- dic = dictionary_new(10);
- TEST_ASSERT_NOT_NULL(dic);
- TEST_ASSERT_NULL(iniparser_getstring(dic, "dummy", NULL));
- TEST_ASSERT_EQUAL_STRING("def", iniparser_getstring(dic, NULL, "def"));
- TEST_ASSERT_EQUAL_STRING("def", iniparser_getstring(dic, "dummy", "def"));
- dictionary_del(dic);
- dic = NULL;
- /* Generic dictionary */
- dic = generate_dictionary(100, 10);
- TEST_ASSERT_NOT_NULL(dic);
- TEST_ASSERT_EQUAL_STRING("value-0/0",
- iniparser_getstring(dic, "sec0:key0", NULL));
- TEST_ASSERT_EQUAL_STRING("value-42/5",
- iniparser_getstring(dic, "sec42:key5", NULL));
- TEST_ASSERT_EQUAL_STRING("value-99/9",
- iniparser_getstring(dic, "sec99:key9", NULL));
- dictionary_del(dic);
- dic = NULL;
- }
- void test_iniparser_getint(void)
- {
- unsigned i;
- char key_name[64];
- const struct {
- int num;
- const char *value;
- } good_val[] = {
- { 0, "0" },
- { 1, "1" },
- { -1, "-1" },
- { 1000, "1000" },
- { 077, "077" },
- { -01000, "-01000" },
- { 0xFFFF, "0xFFFF" },
- { -0xFFFF, "-0xFFFF" },
- { 0x4242, "0x4242" },
- { 0, NULL} /* must be last */
- };
- const char *bad_val[] = {
- "",
- "notanumber",
- "0x",
- "k2000",
- " ",
- "0xG1"
- };
- /* NULL test */
- TEST_ASSERT_EQUAL(-42, iniparser_getint(NULL, NULL, -42));
- TEST_ASSERT_EQUAL(-42, iniparser_getint(NULL, "dummy", -42));
- /* Check the def return element */
- dic = dictionary_new(10);
- TEST_ASSERT_NOT_NULL(dic);
- TEST_ASSERT_EQUAL(42, iniparser_getint(dic, "dummy", 42));
- TEST_ASSERT_EQUAL_HEX(0xFFFF, iniparser_getint(dic, NULL, 0xFFFF));
- TEST_ASSERT_EQUAL_HEX(-0xFFFF, iniparser_getint(dic, "dummy", -0xFFFF));
- dictionary_del(dic);
- dic = NULL;
- /* Generic dictionary */
- dic = dictionary_new(10);
- TEST_ASSERT_NOT_NULL(dic);
- for (i = 0; good_val[i].value != NULL; ++i) {
- sprintf(key_name, "int:value%d", i);
- dictionary_set(dic, key_name, good_val[i].value);
- }
- for (i = 0; good_val[i].value != NULL; ++i) {
- sprintf(key_name, "int:value%d", i);
- TEST_ASSERT_EQUAL(good_val[i].num,
- iniparser_getint(dic, key_name, 0));
- }
- dictionary_del(dic);
- dic = NULL;
- /* Test bad names */
- dic = dictionary_new(10);
- TEST_ASSERT_NOT_NULL(dic);
- for (i = 0; i < sizeof (bad_val) / sizeof (char *); ++i) {
- sprintf(key_name, "int:bad%d", i);
- dictionary_set(dic, key_name, bad_val[i]);
- }
- for (i = 0; i < sizeof (bad_val) / sizeof (char *); ++i) {
- sprintf(key_name, "int:bad%d", i);
- TEST_ASSERT_EQUAL(0,
- iniparser_getint(dic, key_name, 0));
- }
- dictionary_del(dic);
- dic = NULL;
- }
- void test_iniparser_getlongint(void)
- {
- unsigned i;
- char key_name[64];
- const struct {
- long int num;
- const char *value;
- } good_val[] = {
- { 0, "0" },
- { 1, "1" },
- { -1, "-1" },
- { 1000, "1000" },
- { 077, "077" },
- { -01000, "-01000" },
- { LONG_MAX, stringify(LONG_MAX) },
- { -LONG_MAX, stringify(-LONG_MAX) },
- { 0x4242, "0x4242" },
- { 0, NULL} /* must be last */
- };
- const char *bad_val[] = {
- "",
- "notanumber",
- "0x",
- "k2000",
- " ",
- "0xG1"
- };
- /* NULL test */
- TEST_ASSERT_EQUAL(-42, iniparser_getlongint(NULL, NULL, -42));
- TEST_ASSERT_EQUAL(-42, iniparser_getlongint(NULL, "dummy", -42));
- /* Check the def return element */
- dic = dictionary_new(10);
- TEST_ASSERT_NOT_NULL(dic);
- TEST_ASSERT_EQUAL(42, iniparser_getlongint(dic, "dummy", 42));
- TEST_ASSERT_EQUAL(LONG_MAX, iniparser_getlongint(dic, NULL, LONG_MAX));
- TEST_ASSERT_EQUAL(-LONG_MAX, iniparser_getlongint(dic, "dummy", -LONG_MAX));
- dictionary_del(dic);
- dic = NULL;
- /* Generic dictionary */
- dic = dictionary_new(10);
- TEST_ASSERT_NOT_NULL(dic);
- for (i = 0; good_val[i].value != NULL; ++i) {
- sprintf(key_name, "longint:value%d", i);
- dictionary_set(dic, key_name, good_val[i].value);
- }
- for (i = 0; good_val[i].value != NULL; ++i) {
- sprintf(key_name, "longint:value%d", i);
- TEST_ASSERT_EQUAL(good_val[i].num,
- iniparser_getlongint(dic, key_name, 0));
- }
- dictionary_del(dic);
- dic = NULL;
- /* Test bad names */
- dic = dictionary_new(10);
- TEST_ASSERT_NOT_NULL(dic);
- for (i = 0; i < sizeof (bad_val) / sizeof (char *); ++i) {
- sprintf(key_name, "longint:bad%d", i);
- dictionary_set(dic, key_name, bad_val[i]);
- }
- for (i = 0; i < sizeof (bad_val) / sizeof (char *); ++i) {
- sprintf(key_name, "longint:bad%d", i);
- TEST_ASSERT_EQUAL(0,
- iniparser_getlongint(dic, key_name, 0));
- }
- dictionary_del(dic);
- dic = NULL;
- }
- void test_iniparser_getint64(void)
- {
- unsigned i;
- char key_name[64];
- const struct {
- int64_t num;
- const char *value;
- } good_val[] = {
- { 0, "0" },
- { 1, "1" },
- { -1, "-1" },
- { 1000, "1000" },
- { 077, "077" },
- { -01000, "-01000" },
- { 0x7FFFFFFFFFFFFFFF, "0x7FFFFFFFFFFFFFFF" },
- { -0x7FFFFFFFFFFFFFFF, "-0x7FFFFFFFFFFFFFFF" },
- { 0x4242, "0x4242" },
- { 0, NULL} /* must be last */
- };
- const char *bad_val[] = {
- "",
- "notanumber",
- "0x",
- "k2000",
- " ",
- "0xG1"
- };
- /* NULL test */
- TEST_ASSERT_EQUAL_INT64(-42, iniparser_getint64(NULL, NULL, -42));
- TEST_ASSERT_EQUAL_INT64(-42, iniparser_getint64(NULL, "dummy", -42));
- /* Check the def return element */
- dic = dictionary_new(10);
- TEST_ASSERT_NOT_NULL(dic);
- TEST_ASSERT_EQUAL_INT64(42, iniparser_getint64(dic, "dummy", 42));
- TEST_ASSERT_EQUAL_HEX64(0x7FFFFFFFFFFFFFFF,
- iniparser_getint64(dic, NULL, 0x7FFFFFFFFFFFFFFF));
- TEST_ASSERT_EQUAL_HEX64(-0x7FFFFFFFFFFFFFFF,
- iniparser_getint64(dic, "dummy",
- -0x7FFFFFFFFFFFFFFF));
- dictionary_del(dic);
- dic = NULL;
- /* Generic dictionary */
- dic = dictionary_new(10);
- TEST_ASSERT_NOT_NULL(dic);
- for (i = 0; good_val[i].value != NULL; ++i) {
- sprintf(key_name, "longint:value%d", i);
- dictionary_set(dic, key_name, good_val[i].value);
- }
- for (i = 0; good_val[i].value != NULL; ++i) {
- sprintf(key_name, "longint:value%d", i);
- TEST_ASSERT_EQUAL_INT64(good_val[i].num,
- iniparser_getint64(dic, key_name, 0));
- }
- dictionary_del(dic);
- dic = NULL;
- /* Test bad names */
- dic = dictionary_new(10);
- TEST_ASSERT_NOT_NULL(dic);
- for (i = 0; i < sizeof (bad_val) / sizeof (char *); ++i) {
- sprintf(key_name, "longint:bad%d", i);
- dictionary_set(dic, key_name, bad_val[i]);
- }
- for (i = 0; i < sizeof (bad_val) / sizeof (char *); ++i) {
- sprintf(key_name, "longint:bad%d", i);
- TEST_ASSERT_EQUAL_INT64(0,
- iniparser_getint64(dic, key_name, 0));
- }
- dictionary_del(dic);
- dic = NULL;
- }
- void test_iniparser_getuint64(void)
- {
- unsigned i;
- char key_name[64];
- const struct {
- uint64_t num;
- const char *value;
- } good_val[] = {
- { 0, "0" },
- { 1, "1" },
- { -1, "-1" },
- { 1000, "1000" },
- { 077, "077" },
- { -01000, "-01000" },
- { 0xFFFFFFFFFFFFFFFF, "0xFFFFFFFFFFFFFFFF" },
- { -0xFFFFFFFFFFFFFFFF, "-0xFFFFFFFFFFFFFFFF" },
- { 0x4242, "0x4242" },
- { 0, NULL} /* must be last */
- };
- const char *bad_val[] = {
- "",
- "notanumber",
- "0x",
- "k2000",
- " ",
- "0xG1"
- };
- /* NULL test */
- TEST_ASSERT_EQUAL_UINT64(-42, iniparser_getuint64(NULL, NULL, -42));
- TEST_ASSERT_EQUAL_UINT64(-42, iniparser_getuint64(NULL, "dummy", -42));
- /* Check the def return element */
- dic = dictionary_new(10);
- TEST_ASSERT_NOT_NULL(dic);
- TEST_ASSERT_EQUAL_UINT64(42, iniparser_getuint64(dic, "dummy", 42));
- TEST_ASSERT_EQUAL_HEX64(0xFFFFFFFFFFFFFFFF,
- iniparser_getuint64(dic, NULL, 0xFFFFFFFFFFFFFFFF));
- TEST_ASSERT_EQUAL_HEX64(-0xFFFFFFFFFFFFFFFF,
- iniparser_getuint64(dic, "dummy",
- -0xFFFFFFFFFFFFFFFF));
- dictionary_del(dic);
- dic = NULL;
- /* Generic dictionary */
- dic = dictionary_new(10);
- TEST_ASSERT_NOT_NULL(dic);
- for (i = 0; good_val[i].value != NULL; ++i) {
- sprintf(key_name, "longint:value%d", i);
- dictionary_set(dic, key_name, good_val[i].value);
- }
- for (i = 0; good_val[i].value != NULL; ++i) {
- sprintf(key_name, "longint:value%d", i);
- TEST_ASSERT_EQUAL_UINT64(good_val[i].num,
- iniparser_getuint64(dic, key_name, 0));
- }
- dictionary_del(dic);
- dic = NULL;
- /* Test bad names */
- dic = dictionary_new(10);
- TEST_ASSERT_NOT_NULL(dic);
- for (i = 0; i < sizeof (bad_val) / sizeof (char *); ++i) {
- sprintf(key_name, "longint:bad%d", i);
- dictionary_set(dic, key_name, bad_val[i]);
- }
- for (i = 0; i < sizeof (bad_val) / sizeof (char *); ++i) {
- sprintf(key_name, "longint:bad%d", i);
- TEST_ASSERT_EQUAL_UINT64(0,
- iniparser_getuint64(dic, key_name, 0));
- }
- dictionary_del(dic);
- dic = NULL;
- }
- void test_iniparser_getdouble(void)
- {
- /* NULL test */
- TEST_ASSERT_EQUAL_DOUBLE(-42, iniparser_getdouble(NULL, NULL, -42));
- TEST_ASSERT_EQUAL_DOUBLE(4.2, iniparser_getdouble(NULL, "dummy", 4.2));
- /* Check the def return element */
- dic = dictionary_new(10);
- TEST_ASSERT_NOT_NULL(dic);
- TEST_ASSERT_EQUAL_DOUBLE(3.1415,
- iniparser_getdouble(dic, "dummy", 3.1415));
- TEST_ASSERT_EQUAL_DOUBLE(0xFFFFFFFF,
- iniparser_getdouble(dic, NULL, 0xFFFFFFFF));
- TEST_ASSERT_EQUAL_DOUBLE(-0xFFFFFFFF,
- iniparser_getdouble(dic, "dummy", -0xFFFFFFFF));
- /* Insert some values */
- dictionary_set(dic, "double", "");
- dictionary_set(dic, "double:good0", "0");
- dictionary_set(dic, "double:good1", "-0");
- dictionary_set(dic, "double:good2", "1.0");
- dictionary_set(dic, "double:good3", "3.1415");
- dictionary_set(dic, "double:good4", "6.6655957");
- dictionary_set(dic, "double:good5", "-123456789.123456789");
- /* Add dummy stuff too */
- dictionary_set(dic, "double:bad0", "foo");
- /* Get back the values */
- TEST_ASSERT_EQUAL_DOUBLE(0, iniparser_getdouble(dic, "double:good0", 0xFF));
- TEST_ASSERT_EQUAL_DOUBLE(0, iniparser_getdouble(dic, "double:good1", 0xFF));
- TEST_ASSERT_EQUAL_DOUBLE(1.0,
- iniparser_getdouble(dic, "double:good2", 0xFF));
- TEST_ASSERT_EQUAL_DOUBLE(3.1415,
- iniparser_getdouble(dic, "double:good3", 0xFF));
- TEST_ASSERT_EQUAL_DOUBLE(6.6655957,
- iniparser_getdouble(dic, "double:good4", 0xFF));
- TEST_ASSERT_EQUAL_DOUBLE(-123456789.123456789,
- iniparser_getdouble(dic, "double:good5", 0xFF));
- TEST_ASSERT_EQUAL_DOUBLE(0, iniparser_getdouble(dic, "double:bad0", 42.42));
- dictionary_del(dic);
- dic = NULL;
- }
- void test_iniparser_getboolean(void)
- {
- unsigned i;
- char key_name[64];
- const char *token_true[] = {
- "1",
- "true",
- "t",
- "TRUE",
- "T",
- "yes",
- "y",
- "YES",
- "Y",
- NULL
- };
- const char *token_false[] = {
- "0",
- "false",
- "f",
- "FALSE",
- "F",
- "no",
- "n",
- "NO",
- "N",
- NULL
- };
- /* NULL test */
- TEST_ASSERT_EQUAL(1, iniparser_getboolean(NULL, NULL, 1));
- TEST_ASSERT_EQUAL(1, iniparser_getboolean(NULL, "dummy", 1));
- /* Check the def return element */
- dic = dictionary_new(10);
- TEST_ASSERT_NOT_NULL(dic);
- TEST_ASSERT_EQUAL(1, iniparser_getboolean(dic, "dummy", 1));
- TEST_ASSERT_EQUAL(0, iniparser_getboolean(dic, NULL, 0));
- TEST_ASSERT_EQUAL(1, iniparser_getboolean(dic, "dummy", 1));
- for (i = 0; token_true[i] != NULL; ++i) {
- sprintf(key_name, "bool:true%d", i);
- iniparser_set(dic, key_name, token_true[i]);
- }
- for (i = 0; token_false[i] != NULL; ++i) {
- sprintf(key_name, "bool:false%d", i);
- iniparser_set(dic, key_name, token_false[i]);
- }
- for (i = 0; token_true[i] != NULL; ++i) {
- sprintf(key_name, "bool:true%d", i);
- TEST_ASSERT_EQUAL(1, iniparser_getboolean(dic, key_name, 0));
- }
- for (i = 0; token_false[i] != NULL; ++i) {
- sprintf(key_name, "bool:false%d", i);
- TEST_ASSERT_EQUAL(0, iniparser_getboolean(dic, key_name, 1));
- }
- /* Test bad boolean */
- iniparser_set(dic, "bool:bad0", "");
- iniparser_set(dic, "bool:bad1", "m'kay");
- iniparser_set(dic, "bool:bad2", "42");
- iniparser_set(dic, "bool:bad3", "_true");
- TEST_ASSERT_EQUAL_HEX(0xFF, iniparser_getboolean(dic, "bool:bad0", 0xFF));
- TEST_ASSERT_EQUAL_HEX(0xFF, iniparser_getboolean(dic, "bool:bad1", 0xFF));
- TEST_ASSERT_EQUAL_HEX(0xFF, iniparser_getboolean(dic, "bool:bad2", 0xFF));
- TEST_ASSERT_EQUAL_HEX(0xFF, iniparser_getboolean(dic, "bool:bad3", 0xFF));
- dictionary_del(dic);
- dic = NULL;
- }
- void test_iniparser_line(void)
- {
- char section [ASCIILINESZ+1] ;
- char key [ASCIILINESZ+1] ;
- char val [ASCIILINESZ+1] ;
- /* Test empty line */
- TEST_ASSERT_EQUAL(LINE_EMPTY, iniparser_line("", section, key, val));
- TEST_ASSERT_EQUAL(LINE_EMPTY, iniparser_line(" ", section, key, val));
- TEST_ASSERT_EQUAL(LINE_EMPTY, iniparser_line("\t", section, key, val));
- /* Test valid syntax */
- TEST_ASSERT_EQUAL(LINE_SECTION, iniparser_line("[s]", section, key, val));
- TEST_ASSERT_EQUAL_STRING("s", section);
- TEST_ASSERT_EQUAL(LINE_SECTION, iniparser_line("[section 0]", section, key, val));
- TEST_ASSERT_EQUAL_STRING("section 0", section);
- TEST_ASSERT_EQUAL(LINE_SECTION, iniparser_line("[ section 0 ]", section, key, val));
- TEST_ASSERT_EQUAL_STRING("section 0", section);
- TEST_ASSERT_EQUAL(LINE_SECTION, iniparser_line("[ section ]", section, key, val));
- TEST_ASSERT_EQUAL_STRING("section", section);
- TEST_ASSERT_EQUAL(LINE_VALUE, iniparser_line("k=1", section, key, val));
- TEST_ASSERT_EQUAL_STRING("k", key);
- TEST_ASSERT_EQUAL_STRING("1", val);
- TEST_ASSERT_EQUAL(LINE_VALUE, iniparser_line("key = 0x42", section, key, val));
- TEST_ASSERT_EQUAL_STRING("key", key);
- TEST_ASSERT_EQUAL_STRING("0x42", val);
- TEST_ASSERT_EQUAL(LINE_VALUE, iniparser_line("key= value with spaces", section, key, val));
- TEST_ASSERT_EQUAL_STRING("key", key);
- TEST_ASSERT_EQUAL_STRING("value with spaces", val);
- TEST_ASSERT_EQUAL(LINE_VALUE, iniparser_line("k =_!<>''", section, key, val));
- TEST_ASSERT_EQUAL_STRING("k", key);
- TEST_ASSERT_EQUAL_STRING("_!<>''", val);
- TEST_ASSERT_EQUAL(LINE_VALUE, iniparser_line("empty_value =", section, key, val));
- TEST_ASSERT_EQUAL_STRING("empty_value", key);
- TEST_ASSERT_EQUAL_STRING("", val);
- TEST_ASSERT_EQUAL(LINE_VALUE, iniparser_line("empty_value = \t\n", section, key, val));
- TEST_ASSERT_EQUAL_STRING("empty_value", key);
- TEST_ASSERT_EQUAL_STRING("", val);
- TEST_ASSERT_EQUAL(LINE_VALUE, iniparser_line("key =\tval # comment", section, key, val));
- TEST_ASSERT_EQUAL_STRING("key", key);
- TEST_ASSERT_EQUAL_STRING("val", val);
- TEST_ASSERT_EQUAL(LINE_VALUE, iniparser_line("key \n\n = \n val", section, key, val));
- TEST_ASSERT_EQUAL_STRING("key", key);
- TEST_ASSERT_EQUAL_STRING("val", val);
- TEST_ASSERT_EQUAL(LINE_COMMENT, iniparser_line(";comment", section, key, val));
- TEST_ASSERT_EQUAL(LINE_COMMENT, iniparser_line(" # comment", section, key, val));
- TEST_ASSERT_EQUAL(LINE_VALUE, iniparser_line("key = \" do_not_strip \"", section, key, val));
- TEST_ASSERT_EQUAL_STRING("key", key);
- TEST_ASSERT_EQUAL_STRING(" do_not_strip ", val);
- TEST_ASSERT_EQUAL(LINE_VALUE, iniparser_line("key = ' '", section, key, val));
- TEST_ASSERT_EQUAL_STRING("key", key);
- TEST_ASSERT_EQUAL_STRING(" ", val);
- TEST_ASSERT_EQUAL(LINE_VALUE, iniparser_line("key = \"\"", section, key, val));
- TEST_ASSERT_EQUAL_STRING("key", key);
- TEST_ASSERT_EQUAL_STRING("", val);
- TEST_ASSERT_EQUAL(LINE_VALUE, iniparser_line("key = ''", section, key, val));
- TEST_ASSERT_EQUAL_STRING("key", key);
- TEST_ASSERT_EQUAL_STRING("", val);
- /* Test syntax error */
- TEST_ASSERT_EQUAL(LINE_ERROR, iniparser_line("empty_value", section, key, val));
- TEST_ASSERT_EQUAL(LINE_ERROR, iniparser_line("not finished\\", section, key, val));
- TEST_ASSERT_EQUAL(LINE_ERROR, iniparser_line("0x42 / 0b101010", section, key, val));
- }
- void test_iniparser_load(void)
- {
- struct dirent *curr;
- struct stat curr_stat;
- char ini_path[276];
- /* Dummy tests */
- dic = iniparser_load("/you/shall/not/path");
- TEST_ASSERT_NULL(dic);
- /* Test all the good .ini files */
- dir = opendir(GOOD_INI_PATH);
- TEST_ASSERT_NOT_NULL_MESSAGE(dir, "cannot open " GOOD_INI_PATH);
- for (curr = readdir(dir); curr != NULL; curr = readdir(dir)) {
- sprintf(ini_path, "%s/%s", GOOD_INI_PATH, curr->d_name);
- stat(ini_path, &curr_stat);
- if (S_ISREG(curr_stat.st_mode)) {
- dic = iniparser_load(ini_path);
- TEST_ASSERT_NOT_NULL_MESSAGE(dic, ini_path);
- dictionary_del(dic);
- dic = NULL;
- }
- }
- closedir(dir);
- dir = NULL;
- /* Test all the bad .ini files */
- dir = opendir(BAD_INI_PATH);
- TEST_ASSERT_NOT_NULL_MESSAGE(dir, "cannot open " BAD_INI_PATH);
- for (curr = readdir(dir); curr != NULL; curr = readdir(dir)) {
- sprintf(ini_path, "%s/%s", BAD_INI_PATH, curr->d_name);
- stat(ini_path, &curr_stat);
- if (S_ISREG(curr_stat.st_mode)) {
- dic = iniparser_load(ini_path);
- TEST_ASSERT_EQUAL_PTR_MESSAGE(NULL, dic, ini_path);
- dictionary_del(dic);
- dic = NULL;
- }
- }
- closedir(dir);
- dir = NULL;
- }
- void test_dictionary_wrapper(void)
- {
- dic = dictionary_new(10);
- TEST_ASSERT_NOT_NULL(dic);
- TEST_ASSERT_EQUAL(-1, iniparser_set(dic, NULL, NULL));
- TEST_ASSERT_EQUAL(-1, iniparser_set(NULL, "section", "value"));
- TEST_ASSERT_EQUAL(0, iniparser_set(dic, "section", NULL));
- TEST_ASSERT_EQUAL(0, iniparser_set(dic, "section:key", "value"));
- TEST_ASSERT_EQUAL_STRING("value", iniparser_getstring(dic, "section:key", NULL));
- /* reset the key's value*/
- TEST_ASSERT_EQUAL(0, iniparser_set(dic, "section:key", NULL));
- TEST_ASSERT_NULL(iniparser_getstring(dic, "section:key", "dummy"));
- TEST_ASSERT_EQUAL(0, iniparser_set(dic, "section:key", "value"));
- TEST_ASSERT_EQUAL_STRING("value", iniparser_getstring(dic, "section:key", NULL));
- iniparser_unset(dic, "section:key");
- TEST_ASSERT_EQUAL_STRING("dummy", iniparser_getstring(dic, "section:key", "dummy"));
- TEST_ASSERT_NULL(iniparser_getstring(dic, "section", "dummy"));
- TEST_ASSERT_EQUAL(0, iniparser_set(dic, "section:key", NULL));
- TEST_ASSERT_EQUAL(0, iniparser_set(dic, "section:key1", NULL));
- TEST_ASSERT_EQUAL(0, iniparser_set(dic, "section:key2", NULL));
- iniparser_unset(dic, "section");
- TEST_ASSERT_NULL(iniparser_getstring(dic, "section", NULL));
- iniparser_freedict(dic);
- dic = NULL;
- }
- static char _last_error[1024];
- static int _error_callback(const char *format, ...)
- {
- int ret;
- va_list argptr;
- va_start(argptr, format);
- ret = vsprintf(_last_error, format, argptr);
- va_end(argptr);
- return ret;
- }
- void test_iniparser_error_callback(void)
- {
- /* Specify our custom error_callback */
- iniparser_set_error_callback(_error_callback);
- /* Trigger an error and check it was written on the right output */
- dic = iniparser_load("/path/to/nowhere.ini");
- TEST_ASSERT_NULL(dic);
- TEST_ASSERT_EQUAL_STRING("iniparser: cannot open /path/to/nowhere.ini\n",
- _last_error);
- /* Reset erro_callback */
- _last_error[0] = '\0';
- iniparser_set_error_callback(NULL);
- /* Make sure custom callback is no more called */
- dic = iniparser_load("/path/to/nowhere.ini");
- TEST_ASSERT_NULL(dic);
- TEST_ASSERT_EQUAL_STRING("", _last_error);
- }
- void test_iniparser_dump(void)
- {
- char buff[255];
- const char *str;
- /*loading old.ini*/
- dic = iniparser_load(OLD_INI_PATH);
- TEST_ASSERT_NOT_NULL_MESSAGE(dic, "cannot load " OLD_INI_PATH);
- /*check the data of old.ini*/
- str = iniparser_getstring(dic,"section:key_01",NULL);
- TEST_ASSERT_EQUAL_STRING("hello world", str);
- str = iniparser_getstring(dic,"section:key1",NULL);
- TEST_ASSERT_EQUAL_STRING("321abc", str);
- /*open test.txt*/
- ini = fopen(TEST_TXT_PATH,"w");
- TEST_ASSERT_NOT_NULL_MESSAGE(ini, "cannot open " TEST_TXT_PATH);
- /*dump the data of old.ini to new.ini*/
- iniparser_dump(dic,ini);
- fclose(ini);
- ini = NULL;
- iniparser_freedict(dic);
- dic = NULL;
- /*read the data of test.txt*/
- ini = fopen(TEST_TXT_PATH,"r");
- TEST_ASSERT_NOT_NULL_MESSAGE(ini, "cannot open " TEST_TXT_PATH);
- str = fgets(buff,100,ini);
- (void)str;
- /*remove '\n'*/
- if(buff[strlen(buff)-1] == '\n')
- {
- buff[strlen(buff)-1] = '\0';
- }
- TEST_ASSERT_EQUAL_STRING("[section]=UNDEF",buff);
- str = fgets(buff,100,ini);
- (void)str;
- if(buff[strlen(buff)-1] == '\n')
- {
- buff[strlen(buff)-1] = '\0';
- }
- TEST_ASSERT_EQUAL_STRING("[section:key_01]=[hello world]",buff);
- str = fgets(buff,100,ini);
- (void)str;
- if(buff[strlen(buff)-1] == '\n')
- {
- buff[strlen(buff)-1] = '\0';
- }
- TEST_ASSERT_EQUAL_STRING("[section:key1]=[321abc]",buff);
- fclose(ini);
- ini = NULL;
- }
- void test_iniparser_dump_ini(void)
- {
- const char *str;
- /*loading old.ini*/
- dic = iniparser_load(OLD_INI_PATH);
- TEST_ASSERT_NOT_NULL_MESSAGE(dic, "cannot load " OLD_INI_PATH);
- /*check the data of old.ini*/
- str = iniparser_getstring(dic,"section:key_01",NULL);
- TEST_ASSERT_EQUAL_STRING("hello world", str);
- str = iniparser_getstring(dic,"section:key1",NULL);
- TEST_ASSERT_EQUAL_STRING("321abc", str);
- /*open new.ini*/
- ini = fopen(NEW_INI_PATH,"w");
- TEST_ASSERT_NOT_NULL_MESSAGE(ini, "cannot open " NEW_INI_PATH);
- /*dump the data of old.ini to new.ini*/
- iniparser_dump_ini(dic,ini);
- fclose(ini);
- ini = NULL;
- iniparser_freedict(dic);
- dic = NULL;
- /*loading new.ini*/
- dic = iniparser_load(NEW_INI_PATH);
- TEST_ASSERT_NOT_NULL_MESSAGE(dic, "cannot load " NEW_INI_PATH);
- /*check the data of new.ini*/
- str = iniparser_getstring(dic,"section:key_01",NULL);
- TEST_ASSERT_EQUAL_STRING("hello world", str);
- str = iniparser_getstring(dic,"section:key1",NULL);
- TEST_ASSERT_EQUAL_STRING("321abc", str);
- iniparser_freedict(dic);
- dic = NULL;
- }
- void test_iniparser_dumpsection_ini(void)
- {
- const char *str;
- /*loading old.ini*/
- dic = iniparser_load(OLD_INI_PATH);
- TEST_ASSERT_NOT_NULL_MESSAGE(dic, "cannot load " OLD_INI_PATH);
- /*check the data of old.ini*/
- str = iniparser_getstring(dic,"section:key_01",NULL);
- TEST_ASSERT_EQUAL_STRING("hello world", str);
- str = iniparser_getstring(dic,"section:key1",NULL);
- TEST_ASSERT_EQUAL_STRING("321abc", str);
- /*open test.ini*/
- ini = fopen(TEST_INI_PATH,"w");
- TEST_ASSERT_NOT_NULL_MESSAGE(ini, "cannot open " TEST_INI_PATH);
- /*dump the data of old.ini to test.ini*/
- iniparser_dumpsection_ini(dic,"section",ini);
- fclose(ini);
- ini = NULL;
- iniparser_freedict(dic);
- dic = NULL;
- /*loading test.ini*/
- dic = iniparser_load(TEST_INI_PATH);
- TEST_ASSERT_NOT_NULL_MESSAGE(dic, "cannot load " TEST_INI_PATH);
- /*check the data of test.ini*/
- str = iniparser_getstring(dic,"section:key_01",NULL);
- TEST_ASSERT_EQUAL_STRING("hello world", str);
- str = iniparser_getstring(dic,"section:key1",NULL);
- TEST_ASSERT_EQUAL_STRING("321abc", str);
- iniparser_freedict(dic);
- dic = NULL;
- }
- void test_iniparser_find_entry(void)
- {
- int i, ret;
- /* NULL test */
- ret = iniparser_find_entry(NULL, NULL);
- TEST_ASSERT_EQUAL(0, ret);
- ret = iniparser_find_entry(NULL, "dummy");
- TEST_ASSERT_EQUAL(0, ret);
- /* Empty dictionary test*/
- dic = dictionary_new(10);
- TEST_ASSERT_NOT_NULL(dic);
- ret = iniparser_find_entry(dic, NULL);
- TEST_ASSERT_EQUAL(0, ret);
- ret = iniparser_find_entry(dic, "dummy");
- TEST_ASSERT_EQUAL(0, ret);
- dictionary_del(dic);
- dic = NULL;
- /*Regular dictionary */
- dic = generate_dictionary(1, 8);
- TEST_ASSERT_NOT_NULL(dic);
- for (i = 1; i < 8; i++)
- {
- ret = iniparser_find_entry(dic, dic->key[i]);
- TEST_ASSERT_EQUAL(1, ret);
- }
- ret = iniparser_find_entry(dic, "dummy");
- TEST_ASSERT_EQUAL(0, ret);
- iniparser_freedict(dic);
- dic = NULL;
- }
- void test_iniparser_utf8(void)
- {
- const char *str;
- int ret;
- dic = iniparser_load(GRUEZI_INI_PATH);
- TEST_ASSERT_NOT_NULL_MESSAGE(dic, "cannot load " GRUEZI_INI_PATH);
- /* Generic dictionary */
- str = iniparser_getstring(dic, "Chuchichäschtli:10.123", NULL);
- TEST_ASSERT_EQUAL_STRING("example", str);
- str = iniparser_getstring(dic, "Chuchichäschtli:Gruss", NULL);
- TEST_ASSERT_EQUAL_STRING("Grüzi", str);
- dictionary_del(dic);
- dic = iniparser_load(UTF8_INI_PATH);
- TEST_ASSERT_NOT_NULL_MESSAGE(dic, "cannot load " UTF8_INI_PATH);
- /* Generic dictionary */
- ret = iniparser_getboolean(dic, "拉麺:叉焼", -1);
- TEST_ASSERT_EQUAL(0, ret);
- ret = iniparser_getboolean(dic, "拉麺:味噌", -1);
- TEST_ASSERT_EQUAL(1, ret);
- ret = iniparser_getboolean(dic, "拉麺:海苔", -1);
- TEST_ASSERT_EQUAL(0, ret);
- str = iniparser_getstring(dic, "拉麺:メンマ", NULL);
- TEST_ASSERT_EQUAL_STRING("そうだね", str);
- dictionary_del(dic);
- dic = NULL;
- }
- static void create_empty_ini_file(const char *filename)
- {
- ini = fopen(filename, "w");
- TEST_ASSERT_NOT_NULL_MESSAGE(ini, filename);
- fclose(ini);
- ini = NULL;
- }
- void test_iniparser_misformed(void)
- {
- int ret;
- create_empty_ini_file(TMP_INI_PATH);
- dic = iniparser_load(TMP_INI_PATH);
- TEST_ASSERT_NOT_NULL_MESSAGE(dic, "cannot load " TMP_INI_PATH);
- ret = iniparser_set(dic, MISFORMED_INI_SEC0, NULL);
- TEST_ASSERT_GREATER_OR_EQUAL_MESSAGE(0, ret, "cannot set section "
- MISFORMED_INI_SEC0 " in: "
- TMP_INI_PATH);
- iniparser_set(dic, MISFORMED_INI_SEC0 ":" MISFORMED_INI_ATTR, "2222");
- /* test dictionary */
- ret = iniparser_getint(dic, MISFORMED_INI_SEC0 ":" MISFORMED_INI_ATTR, -1);
- TEST_ASSERT_EQUAL(2222, ret);
- ini = fopen(TMP_INI_PATH, "w+");
- TEST_ASSERT_NOT_NULL_MESSAGE(ini, "cannot open " TMP_INI_PATH);
- iniparser_dump_ini(dic, ini);
- fclose(ini);
- ini = NULL;
- dictionary_del(dic);
- /* check if section has been written as expected */
- dic = iniparser_load(TMP_INI_PATH);
- TEST_ASSERT_NOT_NULL_MESSAGE(dic, "cannot load " TMP_INI_PATH);
- ret = iniparser_getint(dic, MISFORMED_INI_SEC0 ":" MISFORMED_INI_ATTR, -1);
- TEST_ASSERT_EQUAL(2222, ret);
- dictionary_del(dic);
- dic = NULL;
- ret = remove(TMP_INI_PATH);
- TEST_ASSERT_GREATER_OR_EQUAL_MESSAGE(0, ret, "cannot remove " TMP_INI_PATH);
- create_empty_ini_file(TMP_INI_PATH);
- dic = iniparser_load(TMP_INI_PATH);
- TEST_ASSERT_NOT_NULL_MESSAGE(dic, "cannot load " TMP_INI_PATH);
- ret = iniparser_set(dic, MISFORMED_INI_SEC1, NULL);
- TEST_ASSERT_GREATER_OR_EQUAL_MESSAGE(0, ret, "cannot set section "
- MISFORMED_INI_SEC1 " in: "
- TMP_INI_PATH);
- iniparser_set(dic, MISFORMED_INI_SEC1 ":" MISFORMED_INI_ATTR, "2222");
- /* test dictionary */
- ret = iniparser_getint(dic, MISFORMED_INI_SEC1 ":" MISFORMED_INI_ATTR, -1);
- TEST_ASSERT_EQUAL(2222, ret);
- ini = fopen(TMP_INI_PATH, "w+");
- TEST_ASSERT_NOT_NULL_MESSAGE(ini, "cannot open " TMP_INI_PATH);
- iniparser_dump_ini(dic, ini);
- fclose(ini);
- ini = NULL;
- dictionary_del(dic);
- /* check if section has been written as expected */
- dic = iniparser_load(TMP_INI_PATH);
- TEST_ASSERT_NOT_NULL_MESSAGE(dic, "cannot load " TMP_INI_PATH);
- ret = iniparser_getint(dic, MISFORMED_INI_SEC1 ":" MISFORMED_INI_ATTR, -1);
- TEST_ASSERT_EQUAL(2222, ret);
- dictionary_del(dic);
- dic = NULL;
- ret = remove(TMP_INI_PATH);
- TEST_ASSERT_GREATER_OR_EQUAL_MESSAGE(0, ret, "cannot remove " TMP_INI_PATH);
- create_empty_ini_file(TMP_INI_PATH);
- dic = iniparser_load(TMP_INI_PATH);
- TEST_ASSERT_NOT_NULL_MESSAGE(dic, "cannot load " TMP_INI_PATH);
- ret = iniparser_set(dic, MISFORMED_INI_SEC2, NULL);
- TEST_ASSERT_GREATER_OR_EQUAL_MESSAGE(0, ret, "cannot set section "
- MISFORMED_INI_SEC2 " in: "
- TMP_INI_PATH);
- iniparser_set(dic, MISFORMED_INI_SEC2 ":" MISFORMED_INI_ATTR, "2222");
- /* test dictionary */
- ret = iniparser_getint(dic, MISFORMED_INI_SEC2 ":" MISFORMED_INI_ATTR, -1);
- TEST_ASSERT_EQUAL(2222, ret);
- ini = fopen(TMP_INI_PATH, "w+");
- TEST_ASSERT_NOT_NULL_MESSAGE(ini, "cannot open " TMP_INI_PATH);
- iniparser_dump_ini(dic, ini);
- fclose(ini);
- ini = NULL;
- dictionary_del(dic);
- /* check if section has been written as expected */
- dic = iniparser_load(TMP_INI_PATH);
- TEST_ASSERT_NOT_NULL_MESSAGE(dic, "cannot load " TMP_INI_PATH);
- ret = iniparser_getint(dic, MISFORMED_INI_SEC2 ":" MISFORMED_INI_ATTR, -1);
- TEST_ASSERT_EQUAL(2222, ret);
- dictionary_del(dic);
- dic = NULL;
- ret = remove(TMP_INI_PATH);
- TEST_ASSERT_GREATER_OR_EQUAL_MESSAGE(0, ret, "cannot remove " TMP_INI_PATH);
- }
- void test_iniparser_quotes(void)
- {
- const char *str;
- int ret;
- /**
- * Test iniparser_load()
- */
- /* check if section has been written as expected */
- dic = iniparser_load(QUOTES_INI_PATH);
- TEST_ASSERT_NOT_NULL_MESSAGE(dic, "cannot load " QUOTES_INI_PATH);
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" QUOTES_INI_ATTR0, NULL);
- TEST_ASSERT_EQUAL_STRING(QUOTES_INI_VAL0, str);
- /*
- * iniparser_load() supports semicolon and hash in values if they are
- * quoted
- */
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" QUOTES_INI_ATTR1, NULL);
- TEST_ASSERT_EQUAL_STRING(QUOTES_INI_VAL1, str);
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" QUOTES_INI_ATTR2, NULL);
- TEST_ASSERT_EQUAL_STRING(QUOTES_INI_VAL2, str);
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" QUOTES_INI_ATTR3, NULL);
- TEST_ASSERT_EQUAL_STRING(QUOTES_INI_VAL0, str);
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" QUOTES_INI_ATTR4, NULL);
- TEST_ASSERT_EQUAL_STRING("str", str);
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" QUOTES_INI_ATTR5, NULL);
- TEST_ASSERT_EQUAL_STRING("str", str);
- /*
- * iniparser_load() supports quotes in attributes
- */
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" "str\"ing", NULL);
- TEST_ASSERT_EQUAL_STRING(QUOTES_INI_VAL0, str);
- /*
- * iniparser_load() does not support semicolon or hash in attributes
- */
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" "str;ing", NULL);
- TEST_ASSERT_NULL(str);
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" "str#ing", NULL);
- TEST_ASSERT_NULL(str);
- /*
- * iniparser_load() does support colon in attributes
- */
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" "str:ing", NULL);
- TEST_ASSERT_EQUAL_STRING(QUOTES_INI_VAL0, str);
- ini = fopen(TMP_INI_PATH, "w+");
- TEST_ASSERT_NOT_NULL_MESSAGE(ini, "cannot open " TMP_INI_PATH);
- /**
- * Test iniparser_dump_ini()
- */
- iniparser_dump_ini(dic, ini);
- fclose(ini);
- ini = NULL;
- dictionary_del(dic);
- dic = iniparser_load(TMP_INI_PATH);
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" QUOTES_INI_ATTR0, NULL);
- TEST_ASSERT_EQUAL_STRING(QUOTES_INI_VAL0, str);
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" QUOTES_INI_ATTR1, NULL);
- TEST_ASSERT_EQUAL_STRING(QUOTES_INI_VAL1, str);
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" QUOTES_INI_ATTR2, NULL);
- TEST_ASSERT_EQUAL_STRING(QUOTES_INI_VAL2, str);
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" QUOTES_INI_ATTR3, NULL);
- TEST_ASSERT_EQUAL_STRING(QUOTES_INI_VAL0, str);
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" QUOTES_INI_ATTR4, NULL);
- TEST_ASSERT_EQUAL_STRING("str", str);
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" QUOTES_INI_ATTR5, NULL);
- TEST_ASSERT_EQUAL_STRING("str", str);
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" "str\"ing", NULL);
- TEST_ASSERT_EQUAL_STRING(QUOTES_INI_VAL0, str);
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" "str;ing", NULL);
- TEST_ASSERT_NULL(str);
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" "str#ing", NULL);
- TEST_ASSERT_NULL(str);
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" "str:ing", NULL);
- TEST_ASSERT_EQUAL_STRING(QUOTES_INI_VAL0, str);
- dictionary_del(dic);
- dic = NULL;
- ret = remove(TMP_INI_PATH);
- TEST_ASSERT_GREATER_OR_EQUAL_MESSAGE(0, ret, "cannot remove " TMP_INI_PATH);
- /**
- * test iniparser_set()
- */
- create_empty_ini_file(TMP_INI_PATH);
- dic = iniparser_load(TMP_INI_PATH);
- TEST_ASSERT_NOT_NULL_MESSAGE(dic, "cannot load " TMP_INI_PATH);
- ret = iniparser_set(dic, QUOTES_INI_SEC, NULL);
- TEST_ASSERT_GREATER_OR_EQUAL_MESSAGE(0, ret, "cannot set " QUOTES_INI_SEC
- " in: " TMP_INI_PATH);
- /* test dictionary */
- iniparser_set(dic, QUOTES_INI_SEC ":" QUOTES_INI_ATTR0, QUOTES_INI_VAL0);
- /* iniparser_set() supports quotes in values */
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" QUOTES_INI_ATTR0, NULL);
- TEST_ASSERT_EQUAL_STRING(QUOTES_INI_VAL0, str);
- ini = fopen(TMP_INI_PATH, "w+");
- TEST_ASSERT_NOT_NULL_MESSAGE(ini, "cannot open " TMP_INI_PATH);
- iniparser_dump_ini(dic, ini);
- fclose(ini);
- ini = NULL;
- dictionary_del(dic);
- /* check if section has been written as expected */
- dic = iniparser_load(TMP_INI_PATH);
- TEST_ASSERT_NOT_NULL_MESSAGE(dic, "cannot load " TMP_INI_PATH);
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" QUOTES_INI_ATTR0, NULL);
- TEST_ASSERT_EQUAL_STRING(QUOTES_INI_VAL0, str);
- dictionary_del(dic);
- dic = NULL;
- ret = remove(TMP_INI_PATH);
- TEST_ASSERT_GREATER_OR_EQUAL_MESSAGE(0, ret, "cannot remove " TMP_INI_PATH);
- /*
- * test semicolon comment
- */
- create_empty_ini_file(TMP_INI_PATH);
- dic = iniparser_load(TMP_INI_PATH);
- TEST_ASSERT_NOT_NULL_MESSAGE(dic, "cannot load " TMP_INI_PATH);
- ret = iniparser_set(dic, QUOTES_INI_SEC, NULL);
- TEST_ASSERT_GREATER_OR_EQUAL_MESSAGE(0, ret, "cannot set " QUOTES_INI_SEC
- " in: " TMP_INI_PATH);
- /* test dictionary */
- iniparser_set(dic, QUOTES_INI_SEC ":" QUOTES_INI_ATTR1, QUOTES_INI_VAL1);
- /* iniparser_set() supports ; in values */
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" QUOTES_INI_ATTR1, NULL);
- TEST_ASSERT_EQUAL_STRING(QUOTES_INI_VAL1, str);
- ini = fopen(TMP_INI_PATH, "w+");
- TEST_ASSERT_NOT_NULL_MESSAGE(ini, "cannot open " TMP_INI_PATH);
- iniparser_dump_ini(dic, ini);
- fclose(ini);
- ini = NULL;
- dictionary_del(dic);
- /* check if section has been written as expected */
- dic = iniparser_load(TMP_INI_PATH);
- TEST_ASSERT_NOT_NULL_MESSAGE(dic, "cannot load " TMP_INI_PATH);
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" QUOTES_INI_ATTR1, NULL);
- TEST_ASSERT_EQUAL_STRING(QUOTES_INI_VAL1, str);
- dictionary_del(dic);
- dic = NULL;
- ret = remove(TMP_INI_PATH);
- TEST_ASSERT_GREATER_OR_EQUAL_MESSAGE(0, ret, "cannot remove " TMP_INI_PATH);
- /*
- * test hash comment
- */
- create_empty_ini_file(TMP_INI_PATH);
- dic = iniparser_load(TMP_INI_PATH);
- TEST_ASSERT_NOT_NULL_MESSAGE(dic, "cannot load " TMP_INI_PATH);
- ret = iniparser_set(dic, QUOTES_INI_SEC, NULL);
- TEST_ASSERT_GREATER_OR_EQUAL_MESSAGE(0, ret, "cannot set " QUOTES_INI_SEC
- " in: " TMP_INI_PATH);
- /* test dictionary */
- iniparser_set(dic, QUOTES_INI_SEC ":" QUOTES_INI_ATTR2, QUOTES_INI_VAL2);
- /* iniparser_set() supports # in values */
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" QUOTES_INI_ATTR2, NULL);
- TEST_ASSERT_EQUAL_STRING(QUOTES_INI_VAL2, str);
- ini = fopen(TMP_INI_PATH, "w+");
- TEST_ASSERT_NOT_NULL_MESSAGE(ini, "cannot open " TMP_INI_PATH);
- iniparser_dump_ini(dic, ini);
- fclose(ini);
- ini = NULL;
- dictionary_del(dic);
- /* check if section has been written as expected */
- dic = iniparser_load(TMP_INI_PATH);
- TEST_ASSERT_NOT_NULL_MESSAGE(dic, "cannot load " TMP_INI_PATH);
- str = iniparser_getstring(dic, QUOTES_INI_SEC ":" QUOTES_INI_ATTR2, NULL);
- TEST_ASSERT_EQUAL_STRING(QUOTES_INI_VAL2, str);
- dictionary_del(dic);
- dic = NULL;
- ret = remove(TMP_INI_PATH);
- TEST_ASSERT_GREATER_OR_EQUAL_MESSAGE(0, ret, "cannot remove " TMP_INI_PATH);
- }
|