Statistics
| Branch: | Revision:

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