-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathFAFStringScannerMainTests.m
More file actions
251 lines (165 loc) · 7.33 KB
/
FAFStringScannerMainTests.m
File metadata and controls
251 lines (165 loc) · 7.33 KB
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
//
// FAFStringScannerMainTests.m
// FAFStringScannerTester
//
// Created by Manoah F Adams on 2014-05-01.
// Copyright 2014 Manoah F. Adams. All rights reserved.
//
#import "FAFStringScannerMainTests.h"
#import "FAFStringScanner.h"
@implementation FAFStringScannerMainTests
- (void) setUp
{
// Create data structures here.
NSLog(@"SET UP");
}
- (void) tearDown
{
// Release data structures here.
NSLog(@"TEAR DOWN");
}
- (void) test_readRemainder
{
FAFStringScanner* scanner = [[FAFStringScanner alloc] initWithString:@"BEGIN: A sample string :END"];
NSString* result = [scanner readRemainder];
STAssertEqualObjects(result, @"BEGIN: A sample string :END", @"readRemainder returned wrong value");
[scanner release];
}
- (void) test_readBalanced_parenthesis
{
FAFStringScanner* scanner = [[FAFStringScanner alloc] initWithString:@"(Happy days are here again)"];
NSString* result = [scanner readBalanced];
STAssertEqualObjects(result, @"(Happy days are here again)", @"readBalanced returned wrong value");
[scanner release];
}
- (void) test_readBalanced_bracket
{
FAFStringScanner* scanner = [[FAFStringScanner alloc] initWithString:@"[Happy days are here again]"];
NSString* result = [scanner readBalanced];
STAssertEqualObjects(result, @"[Happy days are here again]", @"readBalanced returned wrong value");
[scanner release];
}
- (void) test_readBalanced_brace
{
FAFStringScanner* scanner = [[FAFStringScanner alloc] initWithString:@"{Happy days are here again}"];
NSString* result = [scanner readBalanced];
STAssertEqualObjects(result, @"{Happy days are here again}", @"readBalanced returned wrong value");
[scanner release];
}
- (void) test_readBalanced_quote
{
FAFStringScanner* scanner = [[FAFStringScanner alloc] initWithString:@"\"Happy days are here again\""];
NSString* result = [scanner readBalanced];
STAssertEqualObjects(result, @"\"Happy days are here again\"", @"readBalanced returned wrong value");
[scanner release];
}
- (void) test_readBalanced_quote_with_escapes
{
NSString* input = @"\"Happy days \\\"are\\\" here again\"";
FAFStringScanner* scanner = [[FAFStringScanner alloc] initWithString:input];
NSString* result = [scanner readBalanced];
STAssertEqualObjects(result, input, @"readBalanced could not handle escaped quote.");
[scanner release];
}
- (void) test_unescape_quotes
{
NSString* input = @"Happy days \\\"are\\\" here again";
NSString* result = [FAFStringScanner unescapeString:input];
STAssertEqualObjects(result, @"Happy days \"are\" here again", @"unescapeString could not handle escaped quote.");
}
- (void) test_readBalanced_mixed
{
FAFStringScanner* scanner = [[FAFStringScanner alloc] initWithString:@"{([\"Happy {days are here again\"[)}"];
NSString* result = [scanner readBalanced];
STAssertEqualObjects(result, @"{([\"Happy {days are here again\"[)}", @"readBalanced returned wrong value");
[scanner release];
}
- (void) test_isAtEnd
{
FAFStringScanner* scanner = [[FAFStringScanner alloc] initWithString:@"Happy days are here again"];
[scanner advance:6];
STAssertFalse([scanner isAtEnd], nil);
[scanner advance:18];
STAssertFalse([scanner isAtEnd], nil);
[scanner advance:2];
STAssertTrue([scanner isAtEnd], [scanner readCharacter]);
[scanner release];
}
- (void) test_advance
{
FAFStringScanner* scanner = [[FAFStringScanner alloc] initWithString:@"Happy days are here again."];
int loc = [scanner scanLocation];
[scanner advance:1];
STAssertTrue( ([scanner scanLocation] == loc + 1) , @"Scanner did not advance by 1");
loc = [scanner scanLocation];
[scanner advance:24];
STAssertTrue( ([scanner scanLocation] == loc + 24) , @"Scanner did not advance by 24");
//loc = [scanner scanLocation];
//[scanner advance:20];
//STAssertTrue( ([scanner scanLocation] == loc) , @"Scanner errored on advance overflow.");
[scanner advance: -50];
STAssertTrue( ([scanner scanLocation] == 0) , @"Scanner errored on advance underflow.");
[scanner release];
}
- (void) test_readCharacter
{
FAFStringScanner* scanner = [[FAFStringScanner alloc] initWithString:@"Happy days are here again."];
STAssertEqualObjects( [scanner readCharacter] , @"H" , @"Scanner failed at beginning of string.");
[scanner advance:5];
STAssertEqualObjects( [scanner readCharacter] , @"d" , @"Scanner failed in middle of string.");
[scanner advance:18];
STAssertEqualObjects( [scanner readCharacter] , @"." , @"Scanner failed at end of string.");
NSString* result = [scanner readCharacter];
STAssertNil( result , @"Scanner failed to return nil after end of string (%@).", result);
[scanner release];
}
- (void) test_nextCharacter
{
FAFStringScanner* scanner = [[FAFStringScanner alloc] initWithString:@"Happy days are here again."];
STAssertEqualObjects( [scanner nextCharacter] , @"H" , @"Scanner failed at beginning of string.");
[scanner advance:6];
STAssertEqualObjects( [scanner nextCharacter] , @"d" , @"Scanner failed in middle of string.");
[scanner advance:19];
STAssertEqualObjects( [scanner nextCharacter] , @"." , @"Scanner failed at end of string.");
[scanner release];
}
- (void) test_prevCharacter
{
FAFStringScanner* scanner = [[FAFStringScanner alloc] initWithString:@"Happy days are here again."];
[scanner advance:1];
STAssertEqualObjects( [scanner prevCharacter] , @"H" , @"Scanner failed at beginning of string.");
[scanner advance:7];
STAssertEqualObjects( [scanner prevCharacter] , @"a" , @"Scanner failed in middle of string.");
//[scanner advance:20];
//STAssertEqualObjects( [scanner prevCharacter] , @"n" , @"Scanner failed at end of string.");
[scanner release];
}
- (void) test_readUntilString
{
FAFStringScanner* scanner = [[FAFStringScanner alloc] initWithString:@"Happy days are here again."];
STAssertEqualObjects( [scanner readUntilString:@"days"] , @"Happy " , @"Scanner failed at beginning of string.");
STAssertEqualObjects( [scanner readUntilString:@"asdasdasd"] , @"Happy days are here again." , @"Scanner failed at end of string.");
STAssertEqualObjects( [scanner readUntilString:@"Happy"] , @"" , @"Scanner failed to return empty string.");
STAssertEqualObjects( [scanner readUntilString:@"ys"] , @"Happy da" , @"Scanner returned too soon.");
[scanner release];
}
- (void) test_readUntilStringAdvancingPast
{
FAFStringScanner* scanner = [[FAFStringScanner alloc] initWithString:@"Happy days are\n here\n\nagain."];
STAssertEqualObjects( [scanner readUntilStringAdvancingPast:@"days"] , @"Happy " , @"Scanner failed.");
STAssertEqualObjects( [scanner readUntilStringAdvancingPast:@"\n"] , @" are" , @"Scanner failed given on newline.");
STAssertEqualObjects( [scanner readUntilStringAdvancingPast:@"\n"] , @" here" , @"Scanner stopped at second match.");
[scanner release];
}
- (void) test_lineCounting
{
FAFStringScanner* scanner = [[FAFStringScanner alloc] initWithString:@"Happy days are here again.\nBut there are yet more days to come.\nHowever, this should be the last line."];
[scanner readUntilStringAdvancingTo:@"again."];
STAssertTrue([scanner lineCount] == 1, @"Scanner failed at beginning of string.");
[scanner readUntilStringAdvancingTo:@"days to come."];
STAssertTrue([scanner lineCount] == 2 , @"Scanner failed in middle of string.");
[scanner readUntilStringAdvancingTo:@"last line."];
STAssertTrue([scanner lineCount] == 3 , @"Scanner failed at end of string.");
[scanner release];
}
@end