-
Notifications
You must be signed in to change notification settings - Fork 5
/
qs_test.c
138 lines (123 loc) · 9.04 KB
/
qs_test.c
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/* Licensed under the MIT License by Bart Grantham, 2010. See ./LICENSE or
* http://www.opensource.org/licenses/mit-license.php
*/
#include <stdio.h>
#include "qs_parse.h"
int main(int argc, char * argv[])
{
int i,j;
char * kvpairs[256];
char value[256];
unsigned char r, g, b, a;
double dr, dg, db, da;
char foo[] = "foo";
char foobar[] = "foobar";
char foo_enc[] = "fo%6f";
char foobar_enc[] = "fo%6fbar";
char foo_mal[] = "fo%6";
char foo_mal2[] = "foo%6";
char foo_end[] = "foo&";
/* This test query string includes:
* - URL encoded values (percent-encoded and +-as-space)
* - URL encoded keys (percent-encoded +-as-space)
* - Incorrectly encoded values (FFFFFF%f)
* - A trailing anchor
* - null (0-char) values
*
* I should add:
* - leading URL junk (before a ?)
*/
char getstring[] = "FUNNYJUNK://@?t%65xt=bleh+bleh%20!&font=Vera.ttf&size=40.3&fg=Fa98BF44%f&debug1&bg=0C0&color=FF4455F&hash=24a%62cdef%7a&rot=123.1&tr+i=cky&debug2#don'tparseme,bro";
printf("Testing qs_* functions\n");
printf(" Testing qs_strncmp():\n");
printf(" %s, %s, 3 should be 0 : %d\n", foo, foo, qs_strncmp(foo, foo, 3));
printf(" %s, %s, 4 should be 0 : %d\n", foo, foo, qs_strncmp(foo, foo, 4));
printf(" %s, %s, 99 should be 0 : %d\n", foo, foo, qs_strncmp(foo, foo, 99));
printf(" %s, %s, 3 should be 0 : %d\n", foo, foo_enc, qs_strncmp(foo, foo_enc, 3));
printf(" %s, %s, 4 should be 0 : %d\n", foo, foo_enc, qs_strncmp(foo, foo_enc, 4));
printf(" %s, %s, 99 should be 0 : %d\n", foo, foo_enc, qs_strncmp(foo, foo_enc, 99));
printf(" %s, %s, 3 should be 0 : %d\n", foo_enc, foo_enc, qs_strncmp(foo_enc, foo_enc, 3));
printf(" %s, %s, 4 should be 0 : %d\n", foo_enc, foo_enc, qs_strncmp(foo_enc, foo_enc, 4));
printf(" %s, %s, 99 should be 0 : %d\n", foo_enc, foo_enc, qs_strncmp(foo_enc, foo_enc, 99));
printf(" %s, %s, 3 should be 0 : %d\n", foo, foobar, qs_strncmp(foo, foobar, 3));
printf(" %s, %s, 4 should be - : %d\n", foo, foobar, qs_strncmp(foo, foobar, 4));
printf(" %s, %s, 99 should be - : %d\n", foo, foobar, qs_strncmp(foo, foobar, 99));
printf(" %s, %s, 3 should be 0 : %d\n", foo, foobar_enc, qs_strncmp(foo, foobar_enc, 3));
printf(" %s, %s, 4 should be - : %d\n", foo, foobar_enc, qs_strncmp(foo, foobar_enc, 4));
printf(" %s, %s, 99 should be - : %d\n", foo, foobar_enc, qs_strncmp(foo, foobar_enc, 99));
printf(" %s, %s, 3 should be 0 : %d\n", foo_enc, foobar_enc, qs_strncmp(foo_enc, foobar_enc, 3));
printf(" %s, %s, 4 should be - : %d\n", foo_enc, foobar_enc, qs_strncmp(foo_enc, foobar_enc, 4));
printf(" %s, %s, 99 should be - : %d\n", foo_enc, foobar_enc, qs_strncmp(foo_enc, foobar_enc, 99));
printf(" %s, %s, 2 should be 0 : %d\n", foo, foo_mal, qs_strncmp(foo, foo_mal, 2));
printf(" %s, %s, 3 should be + : %d\n", foo, foo_mal, qs_strncmp(foo, foo_mal, 3));
printf(" %s, %s, 99 should be + : %d\n", foo, foo_mal, qs_strncmp(foo, foo_mal, 99));
printf(" %s, %s, 2 should be 0 : %d\n", foo, foo_mal2, qs_strncmp(foo, foo_mal2, 2));
printf(" %s, %s, 3 should be 0 : %d\n", foo, foo_mal2, qs_strncmp(foo, foo_mal2, 3));
printf(" %s, %s, 4 should be 0 : %d\n", foo, foo_mal2, qs_strncmp(foo, foo_mal2, 4));
printf(" %s, %s, 99 should be 0 : %d\n", foo, foo_mal2, qs_strncmp(foo, foo_mal2, 99));
printf(" %s, %s, 2 should be 0 : %d\n", foo, foo_end, qs_strncmp(foo, foo_end, 2));
printf(" %s, %s, 3 should be 0 : %d\n", foo, foo_end, qs_strncmp(foo, foo_end, 3));
printf(" %s, %s, 4 should be 0 : %d\n", foo, foo_end, qs_strncmp(foo, foo_end, 4));
printf(" %s, %s, 99 should be 0 : %d\n", foo, foo_end, qs_strncmp(foo, foo_end, 99));
printf("\n");
printf(" Testing qs_scanvalue() with query string:\n %s\n", getstring);
printf(" The following should say \"bleh bleh !\" : \"%s\"\n", qs_scanvalue("text", getstring, value, 256));
printf(" The following should say \"Vera.ttf\" : \"%s\"\n", qs_scanvalue("font", getstring, value, 256));
printf(" The following should say \"40.3\" : \"%s\"\n", qs_scanvalue("size", getstring, value, 256));
printf(" The following should say \"Fa98BF44\" : \"%s\"\n", qs_scanvalue("fg", getstring, value, 256));
printf(" The following should say \"\" : \"%s\"\n", qs_scanvalue("debug1", getstring, value, 256));
printf(" The following should say \"0C0\" : \"%s\"\n", qs_scanvalue("bg", getstring, value, 256));
printf(" The following should say \"FF4455F\" : \"%s\"\n", qs_scanvalue("color", getstring, value, 256));
printf(" The following should say \"24abcdefz\" : \"%s\"\n", qs_scanvalue("hash", getstring, value, 256));
printf(" The following should say \"123.1\" : \"%s\"\n", qs_scanvalue("rot", getstring, value, 256));
printf(" The following should say \"cky\" : \"%s\"\n", qs_scanvalue("tr i", getstring, value, 256));
printf(" The following should say \"\" : \"%s\"\n", qs_scanvalue("debug2", getstring, value, 256));
printf("\n");
printf(" Running qs_parse() against query string (also exersizes qs_decode()):\n %s\n", getstring);
i = qs_parse(getstring, kvpairs, 256);
printf(" I should have found 11 k/v substrings, actually found: %d\n", i);
printf("\n");
printf(" Testing qs_k2v() against our kv pair substrings:\n");
printf(" The following should say \"bleh bleh !\" : \"%s\"\n", qs_k2v("text", kvpairs, i));
printf(" The following should say \"Vera.ttf\" : \"%s\"\n", qs_k2v("font", kvpairs, i));
printf(" The following should say \"40.3\" : \"%s\"\n", qs_k2v("size", kvpairs, i));
printf(" The following should say \"Fa98BF44\" : \"%s\"\n", qs_k2v("fg", kvpairs, i));
printf(" The following should say \"\" : \"%s\"\n", qs_k2v("debug1", kvpairs, i));
printf(" The following should say \"0C0\" : \"%s\"\n", qs_k2v("bg", kvpairs, i));
printf(" The following should say \"FF4455F\" : \"%s\"\n", qs_k2v("color", kvpairs, i));
printf(" The following should say \"24abcdefz\" : \"%s\"\n", qs_k2v("hash", kvpairs, i));
printf(" The following should say \"123.1\" : \"%s\"\n", qs_k2v("rot", kvpairs, i));
printf(" The following should say \"cky\" : \"%s\"\n", qs_k2v("tr i", kvpairs, i));
printf(" The following should say \"\" : \"%s\"\n", qs_k2v("debug2", kvpairs, i));
printf("\n");
printf(" Testing hex2ccolor() and hex2dcolor() with fg (\"%s\"):\n", qs_k2v("fg", kvpairs, i));
j = hex2ccolor(qs_k2v("fg", kvpairs, i), &r, &g, &b, &a);
printf(" hex2ccolor() should have decoded 8 chars, r/g/b/a should be 250/152/191/68 : %d chars decoded, r/g/b/a is %d/%d/%d/%d\n", j, r, g, b, a);
j = hex2dcolor(qs_k2v("fg", kvpairs, i), &dr, &dg, &db, &da);
printf(" hex2dcolor() should have decoded 8 chars, r/g/b/a should be 0.98/0.60/0.75/0.27 : %d chars decoded, r/g/b/a is %.2f/%.2f/%.2f/%.2f\n", j, dr, dg, db, da);
printf(" Testing hex2ccolor() and hex2dcolor() with bg (\"%s\"):\n", qs_k2v("bg", kvpairs, i));
j = hex2ccolor(qs_k2v("bg", kvpairs, i), &r, &g, &b, &a);
printf(" hex2ccolor() should have decoded 3 chars, r/g/b should be 0/204/0 : %d chars decoded, r/g/b is %d/%d/%d\n", j, r, g, b);
j = hex2dcolor(qs_k2v("bg", kvpairs, i), &dr, &dg, &db, &da);
printf(" hex2dcolor() should have decoded 3 chars, r/g/b should be 0.00/0.80/0.00 : %d chars decoded, r/g/b is %.2f/%.2f/%.2f\n", j, dr, dg, db);
printf(" Testing hex2ccolor() and hex2dcolor() with color (\"%s\"):\n", qs_k2v("color", kvpairs, i));
j = hex2ccolor(qs_k2v("color", kvpairs, i), &r, &g, &b, &a);
printf(" hex2ccolor() should have decoded 0 chars : %d chars decoded\n", j);
j = hex2dcolor(qs_k2v("color", kvpairs, i), &dr, &dg, &db, &da);
printf(" hex2dcolor() should have decoded 0 chars : %d chars decoded\n", j);
/*
print
if ( qs_scanvalue("color", getstring, value, sizeof(value)) != NULL )
{
printf("Key %s is set, and the value is: \"%s\"\n", "color", value);
if ( hex2ccolor(value, &r, &g, &b, &a) != 0 && hex2dcolor(value, &dr, &dg, &db, &da) != 0 )
{
printf(" \"%s\" successfully decoded as uchar : r=%d, g=%d, b=%d, a=%d\n", "color", r, g, b, a);
printf(" \"%s\" successfully decoded as double : r=%.2f, g=%.2f, b=%.2f, a=%.2f\n", "color", dr, dg, db, da);
}
else
printf(" \"%s\" NOT successfully decoded\n", "color");
}
*/
return 0;
}