diff --git a/CHANGELOG b/CHANGELOG
index 683afd06b..34240d4bb 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -25,8 +25,7 @@ Release 1.5.2 (2013-03-??)
- fixed GH #124: Possible buffer overrun in Foundation/EventLogChannel
- fixed GH #119: JSON::Object holds values in ordered map
- added JSON::PrintHandler
-- renamed JSON::DefaultHandler to ParseHandler
-- redefined JSON::DefaultHandler as typedef to ParseHandler
+- renamed JSON::DefaultHandler to ParseHandler (breaking change!)
- fixed GH #127: Eliminate -Wshadow warnings
- fixed GH #79: Poco::Thread leak on Linux
- fixed GH #61: static_md build configs for Crypto and NetSSL
diff --git a/JSON/JSON_CE_vs90.vcproj b/JSON/JSON_CE_vs90.vcproj
index 19e64d3f6..790c83040 100644
--- a/JSON/JSON_CE_vs90.vcproj
+++ b/JSON/JSON_CE_vs90.vcproj
@@ -457,8 +457,6 @@
Name="Header Files">
-
-
diff --git a/JSON/JSON_vs100.vcxproj.filters b/JSON/JSON_vs100.vcxproj.filters
index 7b392ea7c..147a9a337 100644
--- a/JSON/JSON_vs100.vcxproj.filters
+++ b/JSON/JSON_vs100.vcxproj.filters
@@ -12,9 +12,6 @@
Header Files
-
- Header Files
-
Header Files
diff --git a/JSON/JSON_vs110.vcxproj b/JSON/JSON_vs110.vcxproj
index e5abd65e2..954928f7e 100644
--- a/JSON/JSON_vs110.vcxproj
+++ b/JSON/JSON_vs110.vcxproj
@@ -1,4 +1,4 @@
-
+
@@ -32,82 +32,82 @@
JSON
Win32Proj
-
-
+
+
StaticLibrary
MultiByte
v110
-
+
StaticLibrary
MultiByte
v110
-
+
StaticLibrary
MultiByte
v110
-
+
StaticLibrary
MultiByte
v110
-
+
DynamicLibrary
MultiByte
v110
-
+
DynamicLibrary
MultiByte
v110
-
-
-
-
+
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
<_ProjectFileVersion>10.0.40219.1
- ..\bin\
- obj\$(Configuration)\
- true
- ..\bin\
- obj\$(Configuration)\
- false
- ..\lib\
- obj\$(Configuration)\
- ..\lib\
- obj\$(Configuration)\
- ..\lib\
- obj\$(Configuration)\
- ..\lib\
- obj\$(Configuration)\
- PocoJSONd
- PocoJSONmdd
- PocoJSONmtd
- PocoJSON
- PocoJSONmd
- PocoJSONmt
+ ..\bin\
+ obj\$(Configuration)\
+ true
+ ..\bin\
+ obj\$(Configuration)\
+ false
+ ..\lib\
+ obj\$(Configuration)\
+ ..\lib\
+ obj\$(Configuration)\
+ ..\lib\
+ obj\$(Configuration)\
+ ..\lib\
+ obj\$(Configuration)\
+ PocoJSONd
+ PocoJSONmdd
+ PocoJSONmtd
+ PocoJSON
+ PocoJSONmd
+ PocoJSONmt
-
+
Disabled
.\include;..\Foundation\include;%(AdditionalIncludeDirectories)
@@ -120,7 +120,7 @@
true
true
true
-
+
Level3
EditAndContinue
Default
@@ -138,7 +138,7 @@
MachineX86
-
+
Disabled
OnlyExplicitInline
@@ -153,9 +153,9 @@
true
true
true
-
+
Level3
-
+
Default
%(DisableSpecificWarnings)
@@ -172,7 +172,7 @@
MachineX86
-
+
Disabled
.\include;..\Foundation\include;%(AdditionalIncludeDirectories)
@@ -185,7 +185,7 @@
true
true
true
-
+
..\lib\PocoJSONmtd.pdb
Level3
EditAndContinue
@@ -196,7 +196,7 @@
..\lib\PocoJSONmtd.lib
-
+
Disabled
OnlyExplicitInline
@@ -211,9 +211,9 @@
true
true
true
-
+
Level3
-
+
Default
%(DisableSpecificWarnings)
@@ -221,7 +221,7 @@
..\lib\PocoJSONmt.lib
-
+
Disabled
.\include;..\Foundation\include;%(AdditionalIncludeDirectories)
@@ -234,7 +234,7 @@
true
true
true
-
+
..\lib\PocoJSONmdd.pdb
Level3
EditAndContinue
@@ -245,7 +245,7 @@
..\lib\PocoJSONmdd.lib
-
+
Disabled
OnlyExplicitInline
@@ -260,10 +260,10 @@
true
true
true
-
+
..\lib\PocoJSONmd.pdb
Level3
-
+
Default
%(DisableSpecificWarnings)
@@ -273,33 +273,32 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
\ No newline at end of file
diff --git a/JSON/JSON_vs110.vcxproj.filters b/JSON/JSON_vs110.vcxproj.filters
index c722da3db..dcb49a539 100644
--- a/JSON/JSON_vs110.vcxproj.filters
+++ b/JSON/JSON_vs110.vcxproj.filters
@@ -47,9 +47,6 @@
Header Files
-
- Header Files
-
Header Files
diff --git a/JSON/JSON_vs71.vcproj b/JSON/JSON_vs71.vcproj
index c268e0007..0a656c045 100644
--- a/JSON/JSON_vs71.vcproj
+++ b/JSON/JSON_vs71.vcproj
@@ -389,8 +389,6 @@
Name="Header Files">
-
-
-
-
diff --git a/JSON/JSON_x64_vs100.vcxproj.filters b/JSON/JSON_x64_vs100.vcxproj.filters
index fc1a777c5..ff841ce16 100644
--- a/JSON/JSON_x64_vs100.vcxproj.filters
+++ b/JSON/JSON_x64_vs100.vcxproj.filters
@@ -47,9 +47,6 @@
Header Files
-
- Header Files
-
Header Files
diff --git a/JSON/JSON_x64_vs110.vcxproj b/JSON/JSON_x64_vs110.vcxproj
index 12d55e3ce..9fd84d660 100644
--- a/JSON/JSON_x64_vs110.vcxproj
+++ b/JSON/JSON_x64_vs110.vcxproj
@@ -285,7 +285,6 @@
-
diff --git a/JSON/JSON_x64_vs110.vcxproj.filters b/JSON/JSON_x64_vs110.vcxproj.filters
index fc1a777c5..ff841ce16 100644
--- a/JSON/JSON_x64_vs110.vcxproj.filters
+++ b/JSON/JSON_x64_vs110.vcxproj.filters
@@ -47,9 +47,6 @@
Header Files
-
- Header Files
-
Header Files
diff --git a/JSON/JSON_x64_vs90.vcproj b/JSON/JSON_x64_vs90.vcproj
index e37f5197b..18b85acf0 100644
--- a/JSON/JSON_x64_vs90.vcproj
+++ b/JSON/JSON_x64_vs90.vcproj
@@ -414,8 +414,6 @@
Name="Header Files">
-
Ptr;
+
Handler();
/// Constructor;
+
+ virtual ~Handler();
+ /// Destructor
virtual void startObject() = 0;
/// The parser has read a {, meaning a new object will be read
@@ -100,12 +106,9 @@ public:
virtual void comma();
/// A comma is read
-protected:
-
- virtual ~Handler();
- /// Destructor
-
-private:
+ virtual Dynamic::Var result() const;
+ /// Returns the result of the parser (an object, array or string),
+ /// empty Var if there is no result.
};
diff --git a/JSON/include/Poco/JSON/ParseHandler.h b/JSON/include/Poco/JSON/ParseHandler.h
index bd7835e31..2c3fdc6d5 100644
--- a/JSON/include/Poco/JSON/ParseHandler.h
+++ b/JSON/include/Poco/JSON/ParseHandler.h
@@ -54,7 +54,6 @@ class JSON_API ParseHandler : public Handler
/// on the handlers called by the parser.
{
public:
-
ParseHandler(bool preserveObjectOrder = false);
/// Creates the ParseHandler.
diff --git a/JSON/include/Poco/JSON/Parser.h b/JSON/include/Poco/JSON/Parser.h
index be908f10b..09f329920 100644
--- a/JSON/include/Poco/JSON/Parser.h
+++ b/JSON/include/Poco/JSON/Parser.h
@@ -43,7 +43,7 @@
#include "Poco/JSON/JSON.h"
#include "Poco/JSON/Object.h"
#include "Poco/JSON/Array.h"
-#include "Poco/JSON/Handler.h"
+#include "Poco/JSON/ParseHandler.h"
#include "Poco/Dynamic/Var.h"
#include "Poco/StreamTokenizer.h"
#include
@@ -59,24 +59,27 @@ class JSON_API Parser
{
public:
- Parser();
+ Parser(const Handler::Ptr& pHandler = new ParseHandler);
/// Constructor.
virtual ~Parser();
/// Destructor.
- void parse(const std::string& source);
+ Dynamic::Var parse(const std::string& source);
/// Parses a string.
- void parse(std::istream& in);
+ Dynamic::Var parse(std::istream& in);
/// Parses a JSON from the input stream.
- void setHandler(Handler* handler);
+ void setHandler(const Handler::Ptr& pHandler);
/// Set the handler.
- Handler* getHandler();
+ const Handler::Ptr& getHandler();
/// Returns the handler.
+ Dynamic::Var result() const;
+ /// Returns the result of parsing;
+
private:
const Token* nextToken();
/// Returns the next token.
@@ -97,26 +100,32 @@ private:
/// Read all elements of an array.
StreamTokenizer _tokenizer;
- Handler* _handler;
+ Handler::Ptr _pHandler;
};
-inline void Parser::parse(const std::string& source)
+inline Dynamic::Var Parser::parse(const std::string& source)
{
std::istringstream is(source);
- parse(is);
+ return parse(is);
}
-inline void Parser::setHandler(Handler* handler)
+inline void Parser::setHandler(const Handler::Ptr& pHandler)
{
- _handler = handler;
+ _pHandler = pHandler;
}
-inline Handler* Parser::getHandler()
+inline const Handler::Ptr& Parser::getHandler()
{
- return _handler;
+ return _pHandler;
+}
+
+
+inline Dynamic::Var Parser::result() const
+{
+ return _pHandler->result();
}
diff --git a/JSON/include/Poco/JSON/PrintHandler.h b/JSON/include/Poco/JSON/PrintHandler.h
index 3d85cce67..6e3fc1cde 100644
--- a/JSON/include/Poco/JSON/PrintHandler.h
+++ b/JSON/include/Poco/JSON/PrintHandler.h
@@ -55,6 +55,8 @@ class JSON_API PrintHandler : public Handler
/// otherwise, the proper indentation is applied to elements.
{
public:
+ typedef SharedPtr Ptr;
+
static const unsigned JSON_PRINT_FLAT = 0;
PrintHandler(unsigned indent = 0);
@@ -115,10 +117,8 @@ public:
void comma();
/// A comma is read; it will be written to the output as "true" or "false".
- void setIndent(unsigned indent)
- {
- _indent = indent;
- }
+ void setIndent(unsigned indent);
+ /// Sets indentation.
private:
@@ -133,6 +133,12 @@ private:
};
+inline void PrintHandler::setIndent(unsigned indent)
+{
+ _indent = indent;
+}
+
+
}} // namespace Poco::JSON
diff --git a/JSON/src/Handler.cpp b/JSON/src/Handler.cpp
index 502a841ce..9dc76bbcc 100644
--- a/JSON/src/Handler.cpp
+++ b/JSON/src/Handler.cpp
@@ -57,4 +57,10 @@ void Handler::comma()
}
+Dynamic::Var Handler::result() const
+{
+ return Dynamic::Var();
+}
+
+
} } // namespace Poco::JSON
diff --git a/JSON/src/Parser.cpp b/JSON/src/Parser.cpp
index ff40a602f..1917899e9 100644
--- a/JSON/src/Parser.cpp
+++ b/JSON/src/Parser.cpp
@@ -484,7 +484,7 @@ private:
};
-Parser::Parser() : _tokenizer(), _handler(NULL)
+Parser::Parser(const Handler::Ptr& pHandler) : _tokenizer(), _pHandler(pHandler)
{
_tokenizer.addToken(new WhitespaceToken());
_tokenizer.addToken(new InvalidToken());
@@ -512,7 +512,7 @@ const Token* Parser::nextToken()
}
-void Parser::parse(std::istream& in)
+Dynamic::Var Parser::parse(std::istream& in)
{
_tokenizer.attachToStream(in);
const Token* token = nextToken();
@@ -542,14 +542,16 @@ void Parser::parse(std::istream& in)
{
throw JSONException(format("Invalid token '%s' found. Expecting { or [", token->asString()));
}
+
+ return result();
}
void Parser::readObject()
{
- if (_handler != NULL)
+ if (!_pHandler.isNull())
{
- _handler->startObject();
+ _pHandler->startObject();
}
if ( readRow(true) ) // First call is special: check for empty object
@@ -557,9 +559,9 @@ void Parser::readObject()
while(readRow());
}
- if (_handler != NULL)
+ if (!_pHandler.isNull())
{
- _handler->endObject();
+ _pHandler->endObject();
}
}
@@ -576,9 +578,9 @@ bool Parser::readRow(bool firstCall)
if (token->tokenClass() == Token::STRING_LITERAL_TOKEN)
{
std::string propertyName = token->tokenString();
- if ( _handler != NULL )
+ if ( !_pHandler.isNull() )
{
- _handler->key(propertyName);
+ _pHandler->key(propertyName);
}
token = nextToken();
@@ -594,9 +596,9 @@ bool Parser::readRow(bool firstCall)
{
if (token->asChar() == ',')
{
- if (_handler != NULL)
+ if (!_pHandler.isNull())
{
- _handler->comma();
+ _pHandler->comma();
}
return true; // Read next row
}
@@ -637,7 +639,7 @@ void Parser::readValue(const Token* token)
break;
case Token::INTEGER_LITERAL_TOKEN:
- if (_handler != NULL)
+ if (!_pHandler.isNull())
{
#if defined(POCO_HAVE_INT64)
try
@@ -647,11 +649,11 @@ void Parser::readValue(const Token* token)
if ( value > std::numeric_limits::max()
|| value < std::numeric_limits::min() )
{
- _handler->value(value);
+ _pHandler->value(value);
}
else
{
- _handler->value(static_cast(value));
+ _pHandler->value(static_cast(value));
}
}
// try to handle error as unsigned in case of overflow
@@ -661,11 +663,11 @@ void Parser::readValue(const Token* token)
// if number is 32-bit, then handle as such
if ( value > std::numeric_limits::max() )
{
- _handler->value(value);
+ _pHandler->value(value);
}
else
{
- _handler->value(static_cast(value));
+ _pHandler->value(static_cast(value));
}
}
#else
@@ -687,23 +689,23 @@ void Parser::readValue(const Token* token)
{
if (token->tokenString().compare("null") == 0)
{
- if (_handler != NULL)
+ if (!_pHandler.isNull())
{
- _handler->null();
+ _pHandler->null();
}
}
else if (token->tokenString().compare("true") == 0)
{
- if (_handler != NULL)
+ if (!_pHandler.isNull())
{
- _handler->value(true);
+ _pHandler->value(true);
}
}
else if (token->tokenString().compare("false") == 0)
{
- if (_handler != NULL)
+ if (!_pHandler.isNull())
{
- _handler->value(false);
+ _pHandler->value(false);
}
}
else
@@ -715,15 +717,15 @@ void Parser::readValue(const Token* token)
case Token::FLOAT_LITERAL_TOKEN:
// Fall through
case Token::DOUBLE_LITERAL_TOKEN:
- if (_handler != NULL)
+ if (!_pHandler.isNull())
{
- _handler->value(token->asFloat());
+ _pHandler->value(token->asFloat());
}
break;
case Token::STRING_LITERAL_TOKEN:
- if (_handler != NULL)
+ if (!_pHandler.isNull())
{
- _handler->value(token->tokenString());
+ _pHandler->value(token->tokenString());
}
break;
case Token::SEPARATOR_TOKEN:
@@ -746,9 +748,9 @@ void Parser::readValue(const Token* token)
void Parser::readArray()
{
- if (_handler != NULL)
+ if (!_pHandler.isNull())
{
- _handler->startArray();
+ _pHandler->startArray();
}
if (readElements(true)) // First call is special: check for empty array
@@ -756,9 +758,9 @@ void Parser::readArray()
while(readElements());
}
- if (_handler != NULL)
+ if (!_pHandler.isNull())
{
- _handler->endArray();
+ _pHandler->endArray();
}
}
@@ -784,9 +786,9 @@ bool Parser::readElements(bool firstCall)
if (token->asChar() == ',')
{
- if (_handler != NULL)
+ if (!_pHandler.isNull())
{
- _handler->comma();
+ _pHandler->comma();
}
return true;
}
diff --git a/JSON/testsuite/src/JSONTest.cpp b/JSON/testsuite/src/JSONTest.cpp
index 6b42dfac3..e649baaef 100644
--- a/JSON/testsuite/src/JSONTest.cpp
+++ b/JSON/testsuite/src/JSONTest.cpp
@@ -88,10 +88,7 @@ void JSONTest::testNullProperty()
Var result;
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -115,10 +112,7 @@ void JSONTest::testTrueProperty()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -144,10 +138,7 @@ void JSONTest::testFalseProperty()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -173,10 +164,7 @@ void JSONTest::testNumberProperty()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -203,10 +191,7 @@ void JSONTest::testUnsignedNumberProperty()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -234,10 +219,7 @@ void JSONTest::testNumber64Property()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -264,10 +246,7 @@ void JSONTest::testUnsignedNumber64Property()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -295,10 +274,7 @@ void JSONTest::testStringProperty()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -324,10 +300,7 @@ void JSONTest::testEmptyObject()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -404,10 +377,7 @@ void JSONTest::testComplexObject()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -427,10 +397,7 @@ void JSONTest::testDoubleProperty()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -456,10 +423,7 @@ void JSONTest::testDouble2Property()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -485,10 +449,7 @@ void JSONTest::testDouble3Property()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -514,10 +475,7 @@ void JSONTest::testObjectProperty()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -550,10 +508,7 @@ void JSONTest::testObjectArray()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -580,10 +535,7 @@ void JSONTest::testArrayOfObjects()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -611,10 +563,7 @@ void JSONTest::testEmptyArray()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -637,10 +586,7 @@ void JSONTest::testNestedArray()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -663,10 +609,7 @@ void JSONTest::testNullElement()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -691,10 +634,7 @@ void JSONTest::testTrueElement()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -720,10 +660,7 @@ void JSONTest::testFalseElement()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -749,10 +686,7 @@ void JSONTest::testNumberElement()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -778,10 +712,7 @@ void JSONTest::testStringElement()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -807,10 +738,7 @@ void JSONTest::testEmptyObjectElement()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -834,10 +762,7 @@ void JSONTest::testDoubleElement()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -863,10 +788,7 @@ void JSONTest::testOptValue()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -890,10 +812,7 @@ void JSONTest::testQuery()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -915,12 +834,12 @@ void JSONTest::testPrintHandler()
std::string json = "{ \"name\" : \"Homer\", \"age\" : 38, \"wife\" : \"Marge\", \"age\" : 36, \"children\" : [ \"Bart\", \"Lisa\", \"Maggie\" ] }";
Parser parser;
std::ostringstream ostr;
- PrintHandler handler(ostr);
- parser.setHandler(&handler);
+ PrintHandler::Ptr pHandler = new PrintHandler(ostr);
+ parser.setHandler(pHandler);
parser.parse(json);
assert (ostr.str() == "{\"name\":\"Homer\",\"age\":38,\"wife\":\"Marge\",\"age\":36,\"children\":[\"Bart\",\"Lisa\",\"Maggie\"]}");
- handler.setIndent(1);
+ pHandler->setIndent(1);
ostr.str("");
parser.parse(json);
assert (ostr.str() == "{\n"
@@ -936,7 +855,7 @@ void JSONTest::testPrintHandler()
"}"
);
- handler.setIndent(2);
+ pHandler->setIndent(2);
ostr.str("");
parser.parse(json);
assert (ostr.str() == "{\n"
@@ -952,7 +871,7 @@ void JSONTest::testPrintHandler()
"}"
);
- handler.setIndent(4);
+ pHandler->setIndent(4);
ostr.str("");
parser.parse(json);
assert (ostr.str() == "{\n"
@@ -980,10 +899,7 @@ void JSONTest::testStringify()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -1104,15 +1020,14 @@ void JSONTest::testStringifyPreserveOrder()
std::string json = "{ \"Simpsons\" : { \"husband\" : { \"name\" : \"Homer\" , \"age\" : 38 }, \"wife\" : { \"name\" : \"Marge\", \"age\" : 36 }, "
"\"children\" : [ \"Bart\", \"Lisa\", \"Maggie\" ], "
"\"address\" : { \"number\" : 742, \"street\" : \"Evergreen Terrace\", \"town\" : \"Springfield\" } } }";
- Parser parser;
+
+ ParseHandler::Ptr pHandler = new ParseHandler(true);
+ Parser parser(pHandler);
Var result;
try
{
- ParseHandler handler(true);
- parser.setHandler(&handler);
- parser.parse(json);
- result = handler.result();
+ result = parser.parse(json);
}
catch(JSONException& jsone)
{
@@ -1124,6 +1039,7 @@ void JSONTest::testStringifyPreserveOrder()
std::ostringstream ostr;
Stringifier::condense(result, ostr);
+ std::cout << ostr.str() << std::endl;
assert (ostr.str() == "{\"Simpsons\":{\"husband\":{\"name\":\"Homer\",\"age\":38},\"wife\":{\"name\":\"Marge\",\"age\":36},"
"\"children\":[\"Bart\",\"Lisa\",\"Maggie\"],"
"\"address\":{\"number\":742,\"street\":\"Evergreen Terrace\",\"town\":\"Springfield\"}}}");
@@ -1235,10 +1151,8 @@ void JSONTest::testValidJanssonFiles()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
parser.parse(fis);
- result = handler.result();
+ result = parser.result();
std::cout << "Ok!" << std::endl;
}
catch(JSONException& jsone)
@@ -1283,10 +1197,8 @@ void JSONTest::testInvalidJanssonFiles()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
parser.parse(fis);
- result = handler.result();
+ result = parser.result();
// We shouldn't get here.
std::cout << "We didn't get an exception. This is the result: " << result.convert() << std::endl;
fail(result.convert());
@@ -1327,10 +1239,8 @@ void JSONTest::testInvalidUnicodeJanssonFiles()
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
parser.parse(fis);
- result = handler.result();
+ result = parser.result();
// We shouldn't get here.
std::cout << "We didn't get an exception. This is the result: " << result.convert() << std::endl;
fail(result.convert());
@@ -1375,10 +1285,8 @@ void JSONTest::testUnicode()
Var result;
try
{
- ParseHandler handler;
- parser.setHandler(&handler);
parser.parse(json);
- result = handler.result();
+ result = parser.result();
}
catch(JSONException& jsone)
{