~roger-booth/mysql-proxy/laminator

« back to all changes in this revision

Viewing changes to trunk/tests/unit/check_sql_tokenizer.c

  • Committer: Kay Roepke
  • Author(s): jkneschke
  • Date: 2007-09-06 20:42:36 UTC
  • Revision ID: kay@mysql.com-20070906204236-425s26foo0o191dw
added a unit-testing using "check"

@note: needs a conditional to be skipped when libcheck is not available

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <stdio.h>
 
2
#include <stdlib.h>
 
3
#include <string.h>
 
4
 
 
5
#include <glib.h>
 
6
 
 
7
#include <check.h>
 
8
 
 
9
#include "sql-tokenizer.h"
 
10
 
 
11
#define C(x) x, sizeof(x) - 1
 
12
 
 
13
START_TEST(test_tokenizer) {
 
14
        GPtrArray *tokens = NULL;
 
15
        gsize i;
 
16
 
 
17
        tokens = g_ptr_array_new();
 
18
 
 
19
        sql_tokenizer(tokens, C("SELEcT \"qq-end\"\"\", \"\"\"qq-start\", \"'\"`qq-mixed''\" FROM a AS `b`, `ABC``FOO` "));
 
20
 
 
21
        for (i = 0; i < tokens->len; i++) {
 
22
                sql_token *token = tokens->pdata[i];
 
23
 
 
24
#define T(t_id, t_text) \
 
25
                fail_unless(token->token_id == t_id, "token[%d].token_id should be '%s', got '%s'", i, sql_token_get_name(t_id), sql_token_get_name(token->token_id)); \
 
26
                fail_unless(0 == strcmp(token->text->str, t_text), "token[%d].text should be '%s', got '%s'", i, t_text, token->text->str); \
 
27
 
 
28
                switch (i) {
 
29
                case 0: T(TK_SQL_SELECT, "SELEcT"); break;
 
30
                case 1: T(TK_STRING, "qq-end\""); break;
 
31
                case 2: T(TK_COMMA, ","); break;
 
32
                case 3: T(TK_STRING, "\"qq-start"); break;
 
33
                case 4: T(TK_COMMA, ","); break;
 
34
                case 5: T(TK_STRING, "'\"`qq-mixed''"); break;
 
35
                case 6: T(TK_SQL_FROM, "FROM"); break;
 
36
                case 7: T(TK_LITERAL, "a"); break;
 
37
                case 8: T(TK_SQL_AS, "AS"); break;
 
38
                case 9: T(TK_LITERAL, "b"); break;
 
39
                case 10: T(TK_COMMA, ","); break;
 
40
                case 11: T(TK_LITERAL, "ABC`FOO"); break;
 
41
#undef T
 
42
                default:
 
43
                         /**
 
44
                          * a self-writing test-case 
 
45
                          */
 
46
                        printf("case %"G_GSIZE_FORMAT": T(%s, \"%s\"); break;\n", i, sql_token_get_name(token->token_id), token->text->str);
 
47
                        break;
 
48
                }
 
49
        }
 
50
 
 
51
        for (i = 0; i < tokens->len; i++) {
 
52
                sql_token *token = tokens->pdata[i];
 
53
 
 
54
                sql_token_free(token);
 
55
        }
 
56
        g_ptr_array_free(tokens, TRUE);
 
57
 
 
58
        /* cleanup */
 
59
} END_TEST
 
60
 
 
61
Suite *sql_tokenizer_suite(void) {
 
62
        Suite *s = suite_create("sql-tokenizer");
 
63
        TCase *tc_core = tcase_create("Core");
 
64
 
 
65
        suite_add_tcase (s, tc_core);
 
66
        tcase_add_test(tc_core, test_tokenizer);
 
67
 
 
68
        return s;
 
69
}
 
70
 
 
71
int main() {
 
72
        int nf;
 
73
        Suite *s = sql_tokenizer_suite();
 
74
        SRunner *sr = srunner_create(s);
 
75
                
 
76
        srunner_run_all(sr, CK_ENV);
 
77
 
 
78
        nf = srunner_ntests_failed(sr);
 
79
 
 
80
        srunner_free(sr);
 
81
        
 
82
        return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
 
83
}
 
84