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++.

#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;
}