root / trunk / tests / Parse.c

Revision 225, 5.0 kB (checked in by why, 3 years ago)

ext/ruby/ext/syck/rubyext.c: round-tripping of implicit symbols.
lib/*.c: fix warnings during -Wall.
lib/emitter.c: make sure scalars with indicators at conclusion get quoted.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1//
2// Parse.c
3//
4// $Author$
5// $Date$
6//
7// Copyright (C) 2003 why the lucky stiff
8//
9
10#include <string.h>
11#include "syck.h"
12#include "CuTest.h"
13
14//
15// 1. Test the buffering -- read 4 bytes at a time
16//
17void
18TestSyckReadString( CuTest *tc )
19{
20    SyckParser *parser;
21    char *tmp;
22    int len = 0;
23
24    parser = syck_new_parser();
25    syck_parser_str_auto( parser, "test: 1\nand: 2\nalso: 3", syck_io_str_read );
26
27    len = syck_parser_readlen( parser, 4 );
28    CuAssert( tc, "Wrong length, line 1.", 4 == len );
29    parser->token = parser->buffer + 4;
30    tmp = syck_strndup( parser->buffer, len );
31    CuAssertStrEquals( tc, "test", tmp );
32    free( tmp );
33
34    len = syck_parser_readlen( parser, 4 );
35    CuAssert( tc, "Wrong length, line 2.", 4 == len );
36    parser->token = parser->buffer + 4;
37    tmp = syck_strndup( parser->buffer, len );
38    CuAssertStrEquals( tc, ": 1\n", tmp );
39    free( tmp );
40   
41    len = syck_parser_readlen( parser, 4 );
42    CuAssert( tc, "Wrong length, line 3.", 4 == len );
43    parser->token = parser->buffer + 4;
44    tmp = syck_strndup( parser->buffer, len );
45    CuAssertStrEquals( tc, "and:", tmp );
46    free( tmp );
47
48    len = syck_parser_readlen( parser, 4 );
49    CuAssert( tc, "Wrong length, line 4.", 4 == len );
50    parser->token = parser->buffer + 4;
51    tmp = syck_strndup( parser->buffer, len );
52    CuAssertStrEquals( tc, " 2\na", tmp );
53    free( tmp );
54
55    len = syck_parser_readlen( parser, 4 );
56    CuAssert( tc, "Wrong length, line 5.", 4 == len );
57    parser->token = parser->buffer + 4;
58    tmp = syck_strndup( parser->buffer, len );
59    CuAssertStrEquals( tc, "lso:", tmp );
60    free( tmp );
61
62    len = syck_parser_readlen( parser, 4 );
63    CuAssert( tc, "Wrong length, line 6.", 2 == len );
64    parser->token = parser->buffer + 4;
65    tmp = syck_strndup( parser->buffer, len );
66    CuAssertStrEquals( tc, " 3", tmp );
67    free( tmp );
68
69    free_any_io( parser );
70    syck_free_parser( parser );
71}
72
73//
74// 2. Test parsing a simple string and handler
75//
76SYMID
77SyckParseStringHandler( SyckParser *p, SyckNode *n )
78{
79    if ( n->kind != syck_str_kind )
80        return 100;
81
82    if ( strcmp( syck_str_read( n ), "a_test_string" ) != 0 )
83        return 200;
84
85    return 1112;
86}
87
88void
89TestSyckParseString( CuTest *tc )
90{
91    SyckParser *parser;
92    SYMID id;
93
94    parser = syck_new_parser();
95    syck_parser_handler( parser, SyckParseStringHandler );
96    syck_parser_str_auto( parser, "--- a_test_string", NULL );
97
98    id = syck_parse( parser );
99    CuAssert( tc, "Handler returned incorrect value.", 1112 == id );
100
101    syck_free_parser( parser );
102}
103
104//
105// 3. 
106//
107SYMID
108SyckParseString2Handler( SyckParser *p, SyckNode *n )
109{
110    if ( n->kind != syck_str_kind )
111        return 100;
112
113    if ( strcmp( syck_str_read( n ), "a_test_string" ) != 0 )
114        return 200;
115
116    return 1112;
117}
118
119enum st_retval
120ListAnchors( char *key, SyckNode *n, CuTest *tc )
121{
122    char *sd = syck_strndup( n->data.str->ptr, n->data.str->len );
123    CuAssertStrEquals( tc, "test", key );
124    CuAssertStrEquals( tc, "13", sd );
125    free( sd );
126    return ST_CONTINUE;
127}
128
129void
130TestSyckParseString2( CuTest *tc )
131{
132    SyckParser *parser;
133    parser = syck_new_parser();
134    syck_parser_handler( parser, SyckParseStringHandler );
135    syck_parser_str_auto( parser, "--- {test: 1, and: 2, or: &test 13}", NULL );
136    syckparse( parser );
137    st_foreach( parser->anchors, ListAnchors, tc );
138    syck_free_parser( parser );
139}
140
141void
142TestSyckParseMap( CuTest *tc )
143{
144    SyckParser *parser;
145    parser = syck_new_parser();
146    syck_parser_handler( parser, SyckParseStringHandler );
147    syck_parser_str_auto( parser, "\ntest: 1\nand: 2\nor:\n  test: 1\n  and: 2\n  fourdepth:\n    deep: 1\nlast: end", NULL );
148    syck_parse( parser );
149    syck_free_parser( parser );
150}
151
152void
153TestSyckParseFold( CuTest *tc )
154{
155    SyckParser *parser;
156    parser = syck_new_parser();
157    syck_parser_handler( parser, SyckParseStringHandler );
158    syck_parser_str_auto( parser, "\ntest: |\n   deep: 1\nlast: end\n  \n", NULL );
159    syck_parse( parser );
160    syck_free_parser( parser );
161}
162
163void
164TestSyckParseMultidoc( CuTest *tc )
165{
166    SyckParser *parser;
167    parser = syck_new_parser();
168    syck_parser_handler( parser, SyckParseStringHandler );
169    syck_parser_str_auto( parser, "---\ntest: |\n   deep: 1\n---\nlast: end\n  \n", NULL );
170    syck_parse( parser );
171    syck_parse( parser );
172    syck_free_parser( parser );
173}
174
175CuSuite *
176SyckGetSuite()
177{
178    CuSuite *suite = CuSuiteNew();
179    SUITE_ADD_TEST( suite, TestSyckReadString );
180    SUITE_ADD_TEST( suite, TestSyckParseString );
181    SUITE_ADD_TEST( suite, TestSyckParseString2 );
182    SUITE_ADD_TEST( suite, TestSyckParseMap );
183    SUITE_ADD_TEST( suite, TestSyckParseFold );
184    SUITE_ADD_TEST( suite, TestSyckParseMultidoc );
185    return suite;
186}
187
188int main(void)
189{
190        CuString *output = CuStringNew();
191        CuSuite* suite = SyckGetSuite();
192    int count;
193
194        CuSuiteRun(suite);
195        CuSuiteSummary(suite, output);
196        CuSuiteDetails(suite, output);
197
198        printf("%s\n", output->buffer);
199    count = suite->failCount;
200
201    CuStringFree( output );
202    CuSuiteFree( suite );
203
204    return count;
205}
Note: See TracBrowser for help on using the browser.