1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
#include "test.h"
#include "utils/fluid_sys.h"
#include <glib.h>
// test for fluid_shell_parse_argv_internal() vs. g_shell_parse_argv()
static void parse_line(const char *line)
{
int i;
int glib_argc;
char **glib_argv;
int glib_result;
int internal_argc;
char **internal_argv;
int internal_result;
FLUID_LOG(FLUID_INFO, "parsing: %s", line);
glib_result = g_shell_parse_argv(line, &glib_argc, &glib_argv, NULL);
internal_result = fluid_shell_parse_argv_internal(line, &internal_argc, &internal_argv);
FLUID_LOG(FLUID_INFO, "result %d vs %d", glib_result, internal_result);
TEST_ASSERT(glib_result == internal_result);
if (!glib_result)
return;
FLUID_LOG(FLUID_INFO, "parsed %d vs %d", glib_argc, internal_argc);
TEST_ASSERT(glib_argc == internal_argc);
for (i = 0; i < glib_argc; i++)
{
FLUID_LOG(FLUID_INFO, "glib: \"%s\"", glib_argv[i]);
FLUID_LOG(FLUID_INFO, "intr: \"%s\"", internal_argv[i]);
TEST_ASSERT(strcmp(glib_argv[i], internal_argv[i]) == 0);
}
g_strfreev(glib_argv);
fluid_strfreev_internal(internal_argv);
}
static void parse_file(const char *name)
{
FILE *file;
char *buffer;
int max_length = 100000;
int read;
const char *line;
char *search;
file = FLUID_FOPEN(name, "rb");
TEST_ASSERT(file != NULL);
buffer = (char *)FLUID_MALLOC(max_length);
TEST_ASSERT(buffer != NULL);
read = FLUID_FREAD(buffer, 1, max_length, file);
TEST_ASSERT(read > 0 && read <= max_length);
buffer[read] = 0;
line = buffer;
search = buffer;
do
{
if (*search == '\n' || *search == 0)
{
*search = 0;
parse_line(line);
line = search + 1;
}
search++;
read--;
}
while (read > 0);
FLUID_FREE(buffer);
}
int main(void)
{
parse_file(TEST_COMMAND_LINES);
parse_file(TEST_MIDI_UTF8); /* throw some binary data at it as well */
return EXIT_SUCCESS;
}
|