tests.cpp
changeset 0 d187e7fc9970
equal deleted inserted replaced
-1:000000000000 0:d187e7fc9970
       
     1 #include "jsonsax.hpp"
       
     2 
       
     3 #include <iostream>
       
     4 #include <assert.h>
       
     5 
       
     6 // #define DEBUGTEST
       
     7 class JSLXTester : public IJSLXBackend
       
     8 {
       
     9 public:
       
    10 	explicit JSLXTester(const char* json)
       
    11 	: m_json(json)
       
    12 	{}
       
    13 
       
    14 	void debug(const char* data)
       
    15 	{
       
    16 #ifdef DEBUGTEST
       
    17 		std::cerr << std::endl << "-*- " << data << " -*-" << std::endl;
       
    18 #endif
       
    19 	}
       
    20 
       
    21 	virtual bool Eof()
       
    22 	{
       
    23 		return *m_json == '\0';
       
    24 	}
       
    25 
       
    26 	virtual char GetChar()
       
    27 	{
       
    28 		assert(!Eof());
       
    29 #ifdef DEBUGTEST
       
    30 		std::cerr.put(*m_json == ' ' ? '_' : *m_json);
       
    31 #endif
       
    32 		return *m_json++;
       
    33 	}
       
    34 
       
    35 	virtual bool OnStartObject()
       
    36 	{
       
    37 		assert(m_json[-1] == '{');
       
    38 		debug("OnStartObject");
       
    39 		return true;
       
    40 	}
       
    41 
       
    42 	virtual bool OnStopObject()
       
    43 	{
       
    44 		assert(m_json[-1] == '}');
       
    45 		debug("OnStopObject");
       
    46 		return true;
       
    47 	}
       
    48 
       
    49 	virtual bool OnStartArray()
       
    50 	{
       
    51 		assert(m_json[-1] == '[');
       
    52 		debug("OnStartArray");
       
    53 		return true;
       
    54 	}
       
    55 
       
    56 	virtual bool OnStopArray()
       
    57 	{
       
    58 		assert(m_json[-1] == ']');
       
    59 		debug("OnStopArray");
       
    60 		return true;
       
    61 	}
       
    62 
       
    63 	virtual bool OnStartNumber()
       
    64 	{
       
    65 		// assert(m_json[-1] == ']');
       
    66 		debug("OnStartNumber");
       
    67 		return true;
       
    68 	}
       
    69 
       
    70 	virtual bool OnStopNumber()
       
    71 	{
       
    72 		// assert(m_json[-1] == ']');
       
    73 		debug("OnStopNumber");
       
    74 		return true;
       
    75 	}
       
    76 
       
    77 	virtual bool OnStartString()
       
    78 	{
       
    79 		assert(m_json[-1] == '"');
       
    80 		debug("OnStartString");
       
    81 		return true;
       
    82 	}
       
    83 
       
    84 	virtual bool OnStopString()
       
    85 	{
       
    86 		assert(m_json[-1] == '"');
       
    87 		debug("OnStopString");
       
    88 		return true;
       
    89 	}
       
    90 
       
    91 	virtual bool OnNull()
       
    92 	{
       
    93 		// assert(m_json[-1] == ']');
       
    94 		debug("OnNull");
       
    95 		return true;
       
    96 	}
       
    97 
       
    98 	virtual bool OnTrue()
       
    99 	{
       
   100 		// assert(m_json[-1] == ']');
       
   101 		debug("OnTrue");
       
   102 		return true;
       
   103 	}
       
   104 
       
   105 	virtual bool OnFalse()
       
   106 	{
       
   107 		// assert(m_json[-1] == ']');
       
   108 		debug("OnFalse");
       
   109 		return true;
       
   110 	}
       
   111 
       
   112 	virtual void OnError(const char* err)
       
   113 	{
       
   114 		debug("Error");
       
   115 		debug(err);
       
   116 	}
       
   117 
       
   118 	bool Check()
       
   119 	{
       
   120 		return Eof();
       
   121 	}
       
   122 
       
   123 private:
       
   124 	const char* m_json;
       
   125 };
       
   126 
       
   127 int main()
       
   128 {
       
   129 	const char json[] =
       
   130 		"{ \"hello\" : [ 11, 12 ,1"
       
   131 		"3 ], \n  \"world\" : -3.45e2 }";
       
   132 	JSLXTester tester(json);
       
   133 	JSLXParser parser(&tester);
       
   134 	assert(parser.Parse());
       
   135 	assert(tester.Check());
       
   136 
       
   137 	return 0;
       
   138 }