File: test_shell_parse_argv_internal.c

package info (click to toggle)
fluidsynth 2.5.3%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,292 kB
  • sloc: ansic: 45,503; cpp: 4,974; xml: 877; sh: 200; makefile: 74
file content (89 lines) | stat: -rw-r--r-- 2,033 bytes parent folder | download
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;
}