mirror of
git://git.psyc.eu/libpsyc
synced 2024-08-15 03:19:02 +00:00
psyc_text + tests
This commit is contained in:
parent
29b8e8c0d5
commit
f8d44070cc
7 changed files with 279 additions and 40 deletions
|
@ -3,7 +3,7 @@ DEBUG = 2
|
|||
CFLAGS = -I../include -Wall ${OPT}
|
||||
LDFLAGS = -L../lib
|
||||
LOADLIBES = -lpsyc -lm
|
||||
TARGETS = testServer testParser testMatch testRender isRoutingVar getVarType
|
||||
TARGETS = testServer testParser testMatch testRender testText isRoutingVar getVarType
|
||||
WRAPPER =
|
||||
DIET = diet
|
||||
PORT = 4440
|
||||
|
|
90
test/testText.c
Normal file
90
test/testText.c
Normal file
|
@ -0,0 +1,90 @@
|
|||
#include <psyc/lib.h>
|
||||
#include <psyc/text.h>
|
||||
|
||||
#define BUFSIZE 512
|
||||
|
||||
uint8_t verbose;
|
||||
|
||||
psycTextValueRC getValueFooBar (char *name, size_t len, psycString *value)
|
||||
{
|
||||
value->ptr = "Foo Bar";
|
||||
value->length = 7;
|
||||
return PSYC_TEXT_VALUE_FOUND;
|
||||
}
|
||||
|
||||
psycTextValueRC getValueEmpty (char *name, size_t len, psycString *value)
|
||||
{
|
||||
value->ptr = "";
|
||||
value->length = 0;
|
||||
return PSYC_TEXT_VALUE_FOUND;
|
||||
}
|
||||
|
||||
psycTextValueRC getValueNotFound (char *name, size_t len, psycString *value)
|
||||
{
|
||||
return PSYC_TEXT_VALUE_NOT_FOUND;
|
||||
}
|
||||
|
||||
int testText (char *template, size_t tmplen, char *buffer, size_t buflen, psycString *result, psycTextCB getValue)
|
||||
{
|
||||
psycTextState state;
|
||||
size_t length = 0;
|
||||
psycTextRC ret;
|
||||
|
||||
psyc_initTextState(&state, template, tmplen, buffer, buflen);
|
||||
do
|
||||
{
|
||||
ret = psyc_text(&state, getValue);
|
||||
length += state.written;
|
||||
switch (ret)
|
||||
{
|
||||
case PSYC_TEXT_INCOMPLETE:
|
||||
if (verbose)
|
||||
printf("# %.*s...\n", (int)length, buffer);
|
||||
psyc_setTextBuffer2(&state, buffer + length, BUFSIZE - length);
|
||||
break;
|
||||
case PSYC_TEXT_COMPLETE:
|
||||
if (verbose)
|
||||
printf("%.*s\n", (int)length, buffer);
|
||||
result->length = length;
|
||||
result->ptr = buffer;
|
||||
return ret;
|
||||
case PSYC_TEXT_NO_SUBST:
|
||||
if (verbose)
|
||||
printf("%.*s\n", (int)tmplen, template);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
while (ret == PSYC_TEXT_INCOMPLETE);
|
||||
|
||||
return -2; // shouldn't be reached
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
verbose = argc > 1;
|
||||
char buffer[BUFSIZE];
|
||||
psycString result;
|
||||
|
||||
char *str = "Hello [_foo] & [_bar]!";
|
||||
size_t len = strlen(str);
|
||||
int i;
|
||||
|
||||
testText(str, len, buffer, BUFSIZE, &result, &getValueFooBar);
|
||||
if (memcmp(result.ptr, PSYC_C2ARG("Hello Foo Bar & Foo Bar!")))
|
||||
return 1;
|
||||
|
||||
testText(str, len, buffer, BUFSIZE, &result, &getValueEmpty);
|
||||
if (memcmp(result.ptr, PSYC_C2ARG("Hello & !")))
|
||||
return 2;
|
||||
|
||||
if (testText(str, len, buffer, BUFSIZE, &result, &getValueNotFound) != PSYC_TEXT_NO_SUBST)
|
||||
return 3;
|
||||
|
||||
for (i = 1; i < 22; i++)
|
||||
{
|
||||
testText(str, len, buffer, i, &result, &getValueFooBar);
|
||||
if (memcmp(result.ptr, PSYC_C2ARG("Hello Foo Bar & Foo Bar!")))
|
||||
return 10 + i;
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue