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