root / json-framework-3.2.0 / Tests / StreamParserIntegrationTest.m @ 3ebe9884
History | View | Annotate | Download (4.2 kB)
1 | 3ebe9884 | Miltiadis Vasilakis | /* |
---|---|---|---|
2 | 3ebe9884 | Miltiadis Vasilakis | Copyright (c) 2010, Stig Brautaset. |
3 | 3ebe9884 | Miltiadis Vasilakis | All rights reserved. |
4 | 3ebe9884 | Miltiadis Vasilakis | |
5 | 3ebe9884 | Miltiadis Vasilakis | Redistribution and use in source and binary forms, with or without |
6 | 3ebe9884 | Miltiadis Vasilakis | modification, are permitted provided that the following conditions are |
7 | 3ebe9884 | Miltiadis Vasilakis | met: |
8 | 3ebe9884 | Miltiadis Vasilakis | |
9 | 3ebe9884 | Miltiadis Vasilakis | Redistributions of source code must retain the above copyright |
10 | 3ebe9884 | Miltiadis Vasilakis | notice, this list of conditions and the following disclaimer. |
11 | 3ebe9884 | Miltiadis Vasilakis | |
12 | 3ebe9884 | Miltiadis Vasilakis | Redistributions in binary form must reproduce the above copyright |
13 | 3ebe9884 | Miltiadis Vasilakis | notice, this list of conditions and the following disclaimer in the |
14 | 3ebe9884 | Miltiadis Vasilakis | documentation and/or other materials provided with the distribution. |
15 | 3ebe9884 | Miltiadis Vasilakis | |
16 | 3ebe9884 | Miltiadis Vasilakis | Neither the name of the the author nor the names of its contributors |
17 | 3ebe9884 | Miltiadis Vasilakis | may be used to endorse or promote products derived from this software |
18 | 3ebe9884 | Miltiadis Vasilakis | without specific prior written permission. |
19 | 3ebe9884 | Miltiadis Vasilakis | |
20 | 3ebe9884 | Miltiadis Vasilakis | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS |
21 | 3ebe9884 | Miltiadis Vasilakis | IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
22 | 3ebe9884 | Miltiadis Vasilakis | TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A |
23 | 3ebe9884 | Miltiadis Vasilakis | PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
24 | 3ebe9884 | Miltiadis Vasilakis | HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
25 | 3ebe9884 | Miltiadis Vasilakis | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
26 | 3ebe9884 | Miltiadis Vasilakis | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
27 | 3ebe9884 | Miltiadis Vasilakis | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
28 | 3ebe9884 | Miltiadis Vasilakis | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
29 | 3ebe9884 | Miltiadis Vasilakis | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
30 | 3ebe9884 | Miltiadis Vasilakis | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
31 | 3ebe9884 | Miltiadis Vasilakis | */ |
32 | 3ebe9884 | Miltiadis Vasilakis | |
33 | 3ebe9884 | Miltiadis Vasilakis | |
34 | 3ebe9884 | Miltiadis Vasilakis | #import <SenTestingKit/SenTestingKit.h> |
35 | 3ebe9884 | Miltiadis Vasilakis | #import <SBJson/SBJson.h> |
36 | 3ebe9884 | Miltiadis Vasilakis | |
37 | 3ebe9884 | Miltiadis Vasilakis | #import "JsonTestCase.h" |
38 | 3ebe9884 | Miltiadis Vasilakis | |
39 | 3ebe9884 | Miltiadis Vasilakis | @interface StreamParserIntegrationTest : SenTestCase < SBJsonStreamParserAdapterDelegate> { |
40 | 3ebe9884 | Miltiadis Vasilakis | SBJsonStreamParser *parser; |
41 | 3ebe9884 | Miltiadis Vasilakis | SBJsonStreamParserAdapter *adapter; |
42 | 3ebe9884 | Miltiadis Vasilakis | NSUInteger arrayCount, objectCount; |
43 | 3ebe9884 | Miltiadis Vasilakis | NSDirectoryEnumerator *files; |
44 | 3ebe9884 | Miltiadis Vasilakis | NSString *path; |
45 | 3ebe9884 | Miltiadis Vasilakis | } |
46 | 3ebe9884 | Miltiadis Vasilakis | @end |
47 | 3ebe9884 | Miltiadis Vasilakis | |
48 | 3ebe9884 | Miltiadis Vasilakis | @implementation StreamParserIntegrationTest |
49 | 3ebe9884 | Miltiadis Vasilakis | |
50 | 3ebe9884 | Miltiadis Vasilakis | - (void)setUp { |
51 | 3ebe9884 | Miltiadis Vasilakis | adapter = [SBJsonStreamParserAdapter new]; |
52 | 3ebe9884 | Miltiadis Vasilakis | adapter.delegate = self; |
53 | 3ebe9884 | Miltiadis Vasilakis | |
54 | 3ebe9884 | Miltiadis Vasilakis | parser = [SBJsonStreamParser new]; |
55 | 3ebe9884 | Miltiadis Vasilakis | parser.delegate = adapter; |
56 | 3ebe9884 | Miltiadis Vasilakis | parser.supportMultipleDocuments = YES; |
57 | 3ebe9884 | Miltiadis Vasilakis | |
58 | 3ebe9884 | Miltiadis Vasilakis | arrayCount = objectCount = 0u; |
59 | 3ebe9884 | Miltiadis Vasilakis | |
60 | 3ebe9884 | Miltiadis Vasilakis | NSString *suite = @"Tests/Stream/"; |
61 | 3ebe9884 | Miltiadis Vasilakis | path = [JsonTestCase pathForSuite:suite]; |
62 | 3ebe9884 | Miltiadis Vasilakis | files = [[NSFileManager defaultManager] enumeratorAtPath:path]; |
63 | 3ebe9884 | Miltiadis Vasilakis | |
64 | 3ebe9884 | Miltiadis Vasilakis | } |
65 | 3ebe9884 | Miltiadis Vasilakis | |
66 | 3ebe9884 | Miltiadis Vasilakis | - (void)parser:(SBJsonStreamParser *)parser foundArray:(NSArray *)array { |
67 | 3ebe9884 | Miltiadis Vasilakis | arrayCount++; |
68 | 3ebe9884 | Miltiadis Vasilakis | } |
69 | 3ebe9884 | Miltiadis Vasilakis | |
70 | 3ebe9884 | Miltiadis Vasilakis | - (void)parser:(SBJsonStreamParser *)parser foundObject:(NSDictionary *)dict { |
71 | 3ebe9884 | Miltiadis Vasilakis | objectCount++; |
72 | 3ebe9884 | Miltiadis Vasilakis | } |
73 | 3ebe9884 | Miltiadis Vasilakis | |
74 | 3ebe9884 | Miltiadis Vasilakis | /* |
75 | 3ebe9884 | Miltiadis Vasilakis | This test reads a 100k chunk of data downloaded from |
76 | 3ebe9884 | Miltiadis Vasilakis | http://stream.twitter.com/1/statuses/sample.json |
77 | 3ebe9884 | Miltiadis Vasilakis | and split into 1k files. It simulates streaming by parsing |
78 | 3ebe9884 | Miltiadis Vasilakis | this data incrementally. |
79 | 3ebe9884 | Miltiadis Vasilakis | */ |
80 | 3ebe9884 | Miltiadis Vasilakis | - (void)testMultipleDocuments { |
81 | 3ebe9884 | Miltiadis Vasilakis | NSString *fileName; |
82 | 3ebe9884 | Miltiadis Vasilakis | while ((fileName = [files nextObject])) { |
83 | 3ebe9884 | Miltiadis Vasilakis | NSString *file = [path stringByAppendingPathComponent:fileName]; |
84 | 3ebe9884 | Miltiadis Vasilakis | |
85 | 3ebe9884 | Miltiadis Vasilakis | // Don't accidentally test directories. That would be bad. |
86 | 3ebe9884 | Miltiadis Vasilakis | BOOL isDir = NO; |
87 | 3ebe9884 | Miltiadis Vasilakis | if (NO == [[NSFileManager defaultManager] fileExistsAtPath:file isDirectory:&isDir] || YES == isDir) |
88 | 3ebe9884 | Miltiadis Vasilakis | continue; |
89 | 3ebe9884 | Miltiadis Vasilakis | |
90 | 3ebe9884 | Miltiadis Vasilakis | NSData *data = [NSData dataWithContentsOfMappedFile:file]; |
91 | 3ebe9884 | Miltiadis Vasilakis | STAssertNotNil(data, nil); |
92 | 3ebe9884 | Miltiadis Vasilakis | |
93 | 3ebe9884 | Miltiadis Vasilakis | STAssertEquals([parser parse:data], SBJsonStreamParserWaitingForData, @"%@ - %@", file, parser.error); |
94 | 3ebe9884 | Miltiadis Vasilakis | } |
95 | 3ebe9884 | Miltiadis Vasilakis | STAssertEquals(arrayCount, (NSUInteger)0, nil); |
96 | 3ebe9884 | Miltiadis Vasilakis | STAssertEquals(objectCount, (NSUInteger)98, nil); |
97 | 3ebe9884 | Miltiadis Vasilakis | } |
98 | 3ebe9884 | Miltiadis Vasilakis | |
99 | 3ebe9884 | Miltiadis Vasilakis | - (void)parseArrayOfObjects { |
100 | 3ebe9884 | Miltiadis Vasilakis | [parser parse:[NSData dataWithBytes:"[" length:1]]; |
101 | 3ebe9884 | Miltiadis Vasilakis | for (int i = 1;; i++) { |
102 | 3ebe9884 | Miltiadis Vasilakis | char *utf8 = "{\"foo\":[],\"bar\":[]}"; |
103 | 3ebe9884 | Miltiadis Vasilakis | [parser parse:[NSData dataWithBytes:utf8 length:strlen(utf8)]]; |
104 | 3ebe9884 | Miltiadis Vasilakis | if (i == 100) |
105 | 3ebe9884 | Miltiadis Vasilakis | break; |
106 | 3ebe9884 | Miltiadis Vasilakis | [parser parse:[NSData dataWithBytes:"," length:1]]; |
107 | 3ebe9884 | Miltiadis Vasilakis | } |
108 | 3ebe9884 | Miltiadis Vasilakis | [parser parse:[NSData dataWithBytes:"]" length:1]]; |
109 | 3ebe9884 | Miltiadis Vasilakis | } |
110 | 3ebe9884 | Miltiadis Vasilakis | |
111 | 3ebe9884 | Miltiadis Vasilakis | - (void)testSingleArray { |
112 | 3ebe9884 | Miltiadis Vasilakis | [self parseArrayOfObjects]; |
113 | 3ebe9884 | Miltiadis Vasilakis | STAssertEquals(arrayCount, (NSUInteger)1, nil); |
114 | 3ebe9884 | Miltiadis Vasilakis | STAssertEquals(objectCount, (NSUInteger)0, nil); |
115 | 3ebe9884 | Miltiadis Vasilakis | } |
116 | 3ebe9884 | Miltiadis Vasilakis | |
117 | 3ebe9884 | Miltiadis Vasilakis | - (void)testSkipArray { |
118 | 3ebe9884 | Miltiadis Vasilakis | adapter.levelsToSkip = 1; |
119 | 3ebe9884 | Miltiadis Vasilakis | [self parseArrayOfObjects]; |
120 | 3ebe9884 | Miltiadis Vasilakis | STAssertEquals(arrayCount, (NSUInteger)0, nil); |
121 | 3ebe9884 | Miltiadis Vasilakis | STAssertEquals(objectCount, (NSUInteger)100, nil); |
122 | 3ebe9884 | Miltiadis Vasilakis | } |
123 | 3ebe9884 | Miltiadis Vasilakis | |
124 | 3ebe9884 | Miltiadis Vasilakis | - (void)testSkipArrayAndObject { |
125 | 3ebe9884 | Miltiadis Vasilakis | adapter.levelsToSkip = 2; |
126 | 3ebe9884 | Miltiadis Vasilakis | [self parseArrayOfObjects]; |
127 | 3ebe9884 | Miltiadis Vasilakis | STAssertEquals(arrayCount, (NSUInteger)200, nil); |
128 | 3ebe9884 | Miltiadis Vasilakis | STAssertEquals(objectCount, (NSUInteger)0, nil); |
129 | 3ebe9884 | Miltiadis Vasilakis | } |
130 | 3ebe9884 | Miltiadis Vasilakis | |
131 | 3ebe9884 | Miltiadis Vasilakis | |
132 | 3ebe9884 | Miltiadis Vasilakis | @end |