--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests.cpp Sat Oct 06 21:08:55 2012 -0400
@@ -0,0 +1,138 @@
+#include "jsonsax.hpp"
+
+#include <iostream>
+#include <assert.h>
+
+// #define DEBUGTEST
+class JSLXTester : public IJSLXBackend
+{
+public:
+ explicit JSLXTester(const char* json)
+ : m_json(json)
+ {}
+
+ void debug(const char* data)
+ {
+#ifdef DEBUGTEST
+ std::cerr << std::endl << "-*- " << data << " -*-" << std::endl;
+#endif
+ }
+
+ virtual bool Eof()
+ {
+ return *m_json == '\0';
+ }
+
+ virtual char GetChar()
+ {
+ assert(!Eof());
+#ifdef DEBUGTEST
+ std::cerr.put(*m_json == ' ' ? '_' : *m_json);
+#endif
+ return *m_json++;
+ }
+
+ virtual bool OnStartObject()
+ {
+ assert(m_json[-1] == '{');
+ debug("OnStartObject");
+ return true;
+ }
+
+ virtual bool OnStopObject()
+ {
+ assert(m_json[-1] == '}');
+ debug("OnStopObject");
+ return true;
+ }
+
+ virtual bool OnStartArray()
+ {
+ assert(m_json[-1] == '[');
+ debug("OnStartArray");
+ return true;
+ }
+
+ virtual bool OnStopArray()
+ {
+ assert(m_json[-1] == ']');
+ debug("OnStopArray");
+ return true;
+ }
+
+ virtual bool OnStartNumber()
+ {
+ // assert(m_json[-1] == ']');
+ debug("OnStartNumber");
+ return true;
+ }
+
+ virtual bool OnStopNumber()
+ {
+ // assert(m_json[-1] == ']');
+ debug("OnStopNumber");
+ return true;
+ }
+
+ virtual bool OnStartString()
+ {
+ assert(m_json[-1] == '"');
+ debug("OnStartString");
+ return true;
+ }
+
+ virtual bool OnStopString()
+ {
+ assert(m_json[-1] == '"');
+ debug("OnStopString");
+ return true;
+ }
+
+ virtual bool OnNull()
+ {
+ // assert(m_json[-1] == ']');
+ debug("OnNull");
+ return true;
+ }
+
+ virtual bool OnTrue()
+ {
+ // assert(m_json[-1] == ']');
+ debug("OnTrue");
+ return true;
+ }
+
+ virtual bool OnFalse()
+ {
+ // assert(m_json[-1] == ']');
+ debug("OnFalse");
+ return true;
+ }
+
+ virtual void OnError(const char* err)
+ {
+ debug("Error");
+ debug(err);
+ }
+
+ bool Check()
+ {
+ return Eof();
+ }
+
+private:
+ const char* m_json;
+};
+
+int main()
+{
+ const char json[] =
+ "{ \"hello\" : [ 11, 12 ,1"
+ "3 ], \n \"world\" : -3.45e2 }";
+ JSLXTester tester(json);
+ JSLXParser parser(&tester);
+ assert(parser.Parse());
+ assert(tester.Check());
+
+ return 0;
+}