wordreference/libjson/_internal/TestSuite/TestStreams.cpp

171 lines
4.9 KiB
C++

#include "TestSuite.h"
#ifdef JSON_STREAM
unsigned int counter = 0;
unsigned int errorCounter = 0;
void errorCallback(void *);
void errorCallback(void *){
++errorCounter;
}
#ifdef JSON_LIBRARY
void Callback(JSONNODE * test, void *);
void Callback(JSONNODE * test, void *){
++counter;
switch(counter){
case 1:
assertEquals(json_type(test), JSON_NODE);
assertTrue(json_empty(test));
break;
case 2:
assertEquals(json_type(test), JSON_ARRAY);
assertTrue(json_empty(test));
break;
case 3:{
assertEquals(json_type(test), JSON_NODE);
assertEquals(json_size(test), 1);
json_char * temp = json_name(json_at(test, 0));
assertCStringSame(temp, JSON_TEXT("hello"));
json_free(temp);
assertEquals(json_as_int(json_at(test, 0)), 1);
break;}
case 4:
assertEquals(json_type(test), JSON_ARRAY);
assertEquals(json_size(test), 3);
break;
case 5:{
assertEquals(json_type(test), JSON_NODE);
assertEquals(json_size(test), 1);
json_char * temp = json_name(json_at(test, 0));
assertCStringSame(temp, JSON_TEXT("hi"));
json_free(temp);
assertEquals(json_size(json_at(test, 0)), 1);
assertEquals(json_type(json_at(json_at(test, 0),0)), JSON_NUMBER);
temp = json_name(json_at(json_at(test, 0),0));
assertCStringSame(temp, JSON_TEXT("one"));
json_free(temp);
assertEquals(json_as_int(json_at(json_at(test, 0),0)), 1);
break;}
}
}
#else
void Callback(JSONNode & test, void * ide);
void Callback(JSONNode & test, void * ide){
assertEquals(ide, (void*)0xDEADBEEF);
++counter;
switch(counter){
case 1:
assertEquals(test.type(), JSON_NODE);
assertTrue(test.empty());
break;
case 2:
assertEquals(test.type(), JSON_ARRAY);
assertTrue(test.empty());
break;
case 3:
assertEquals(test.type(), JSON_NODE);
assertEquals(test.size(), 1);
assertEquals(test[0].name(), JSON_TEXT("hello"));
assertEquals(test[0].as_int(), 1);
break;
case 4:
assertEquals(test.type(), JSON_ARRAY);
assertEquals(test.size(), 3);
break;
case 5:
assertEquals(test.type(), JSON_NODE);
assertEquals(test.size(), 1);
assertEquals(test[0].name(), JSON_TEXT("hi"));
assertEquals(test[0].size(), 1)
assertEquals(test[0][0].type(), JSON_NUMBER);
assertEquals(test[0][0].name(), JSON_TEXT("one"));
assertEquals(test[0][0].as_int(), 1);
break;
}
}
#endif //library
#endif //stream
void TestSuite::TestStreams(void){
#ifdef JSON_STREAM
UnitTest::SetPrefix("TestStreams.cpp - Streams");
counter = 0;
errorCounter = 0;
#ifdef JSON_LIBRARY
JSONSTREAM * test = json_new_stream(Callback, errorCallback, (void*)0xDEADBEEF);
json_stream_push(test, JSON_TEXT("{}[]"));
assertEquals(2, counter);
assertEquals(0, errorCounter);
json_stream_push(test, JSON_TEXT("{\"hel"));
assertEquals(2, counter);
assertEquals(0, errorCounter);
json_stream_push(test, JSON_TEXT("lo\" : 1"));
assertEquals(2, counter);
assertEquals(0, errorCounter);
json_stream_push(test, JSON_TEXT("}["));
assertEquals(3, counter);
assertEquals(0, errorCounter);
json_stream_push(test, JSON_TEXT("1,2,3]{\"hi\" : { \"one\" : 1}"));
assertEquals(4, counter);
assertEquals(0, errorCounter);
json_stream_push(test, JSON_TEXT("}"));
assertEquals(5, counter);
assertEquals(0, errorCounter);
#ifdef JSON_SAFE
json_stream_push(test, JSON_TEXT("{\"hello\":12keaueuataueaouhe"));
assertEquals(1, errorCounter);
#endif
json_delete_stream(test);
#else
JSONStream test(Callback, errorCallback, (void*)0xDEADBEEF);
test << JSON_TEXT("{}[]");
assertEquals(2, counter);
assertEquals(0, errorCounter);
test << JSON_TEXT("{\"hel");
assertEquals(2, counter);
assertEquals(0, errorCounter);
test << JSON_TEXT("lo\" : 1");
assertEquals(2, counter);
assertEquals(0, errorCounter);
test << JSON_TEXT("}[");
assertEquals(3, counter);
assertEquals(0, errorCounter);
test << JSON_TEXT("1,2,3]{\"hi\" : { \"one\" : 1}");
assertEquals(4, counter);
assertEquals(0, errorCounter);
test << JSON_TEXT("}");
assertEquals(5, counter);
assertEquals(0, errorCounter);
#ifdef JSON_SAFE
test << JSON_TEXT("{\"hello\":12keaueuataueaouhe");
assertEquals(1, errorCounter);
#endif
#ifdef JSON_SECURITY_MAX_STREAM_OBJECTS
test.reset();
unsigned int currentCount = errorCounter;
json_string safe;
for(int i = 0; i < JSON_SECURITY_MAX_STREAM_OBJECTS; ++i){
safe += JSON_TEXT("{}");
}
test << safe;
assertEquals(133, counter);
assertEquals(currentCount, errorCounter);
test.reset();
json_string unsafe;
for(int i = 0; i <= JSON_SECURITY_MAX_STREAM_OBJECTS + 1; ++i){
unsafe += JSON_TEXT("{}");
}
test << unsafe;
assertEquals(261, counter);
assertEquals(currentCount + 1, errorCounter);
#endif
#endif
#endif
}