blob: fe9d0c9ef7e5df01c3cf5b9cb00f122786a28c4d [file] [log] [blame]
#include "UserTestTraits.hpp"
#include "t012lexerXMLLexer.hpp"
#include <sys/types.h>
#include <iostream>
#include <sstream>
#include <fstream>
using namespace Antlr3Test;
using namespace std;
int testValid(string const& in, string const& out);
int testMalformedInput1(string const& data);
int testMalformedInput2(string const& data);
int testMalformedInput3(string const& data);
string slurp(string const& fileName);
static t012lexerXMLLexer *lxr;
int main (int argc, char *argv[])
{
testValid("t012lexerXML.input", "t012lexerXML.output");
testMalformedInput1("<?xml version='1.0'?>\n<document d>\n</document>\n");
testMalformedInput2("<?tml version='1.0'?>\n<document>\n</document>\n");
testMalformedInput3("<?xml version='1.0'?>\n<docu ment attr=\"foo\">\n</document>\n");
return 0;
}
int testValid(string const& inFilename, string const& outFilename)
{
string data = slurp(inFilename);
t012lexerXMLLexerTraits::InputStreamType* input = new t012lexerXMLLexerTraits::InputStreamType((const ANTLR_UINT8 *)data.c_str(),
ANTLR_ENC_8BIT,
data.length(), //strlen(data.c_str()),
(ANTLR_UINT8*)inFilename.c_str());
if (lxr == NULL)
lxr = new t012lexerXMLLexer(input);
else
lxr->setCharStream(input);
std::cout << "testValid: \"" << inFilename << '"' <<std::endl;
for(;;)
{
t012lexerXMLLexerTraits::CommonTokenType *token = lxr->nextToken();
if( token->getType() == t012lexerXMLLexerTokens::EOF_TOKEN)
break;
}
string expOutput = slurp(outFilename);
string lxrOutput = lxr->outbuf.str();
ofstream out("t012.lxr.output");
out << lxrOutput;
std::cout << inFilename << '\t' << (expOutput == lxrOutput ? "OK" : "Fail") << std::endl;
delete lxr; lxr = NULL;
delete input;
return 0;
}
int testMalformedInput1(string const& data)
{
t012lexerXMLLexerTraits::InputStreamType* input = new t012lexerXMLLexerTraits::InputStreamType((const ANTLR_UINT8 *)data.c_str(),
ANTLR_ENC_8BIT,
data.length(), //strlen(data.c_str()),
(ANTLR_UINT8*)"t012");
if (lxr == NULL)
lxr = new t012lexerXMLLexer(input);
else
lxr->setCharStream(input);
std::cout << "testMalformedInput1: \"" << data << '"' <<std::endl;
t012lexerXMLLexerTraits::CommonTokenType *token;
token = lxr->nextToken();
std::cout << token->getText() << std::endl;
token = lxr->nextToken();
std::cout << token->getText() << std::endl;
token = lxr->nextToken();
std::cout << token->getText() << std::endl;
// try:
// while True:
// token = lexer.nextToken()
// # Should raise NoViableAltException before hitting EOF
// if token.type == antlr3.EOF:
// self.fail()
//
// except antlr3.NoViableAltException as exc:
// self.assertEqual(exc.unexpectedType, '>')
// self.assertEqual(exc.charPositionInLine, 11)
// self.assertEqual(exc.line, 2)
delete lxr; lxr = NULL;
delete input;
return 0;
}
int testMalformedInput2(string const& data)
{
t012lexerXMLLexerTraits::InputStreamType* input = new t012lexerXMLLexerTraits::InputStreamType((const ANTLR_UINT8 *)data.c_str(),
ANTLR_ENC_8BIT,
data.length(), //strlen(data.c_str()),
(ANTLR_UINT8*)"t012");
if (lxr == NULL)
lxr = new t012lexerXMLLexer(input);
else
lxr->setCharStream(input);
std::cout << "testMalformedInput2: \"" << data << '"' <<std::endl;
t012lexerXMLLexerTraits::CommonTokenType *token;
token = lxr->nextToken();
std::cout << token->getText() << std::endl;
token = lxr->nextToken();
std::cout << token->getText() << std::endl;
token = lxr->nextToken();
std::cout << token->getText() << std::endl;
// try:
// while True:
// token = lexer.nextToken()
// # Should raise NoViableAltException before hitting EOF
// if token.type == antlr3.EOF:
// self.fail()
//
// except antlr3.MismatchedSetException as exc:
// self.assertEqual(exc.unexpectedType, 't')
// self.assertEqual(exc.charPositionInLine, 2)
// self.assertEqual(exc.line, 1)
delete lxr; lxr = NULL;
delete input;
return 0;
}
int testMalformedInput3(string const& data)
{
t012lexerXMLLexerTraits::InputStreamType* input = new t012lexerXMLLexerTraits::InputStreamType((const ANTLR_UINT8 *)data.c_str(),
ANTLR_ENC_8BIT,
data.length(), //strlen(data.c_str()),
(ANTLR_UINT8*)"t012");
if (lxr == NULL)
lxr = new t012lexerXMLLexer(input);
else
lxr->setCharStream(input);
std::cout << "testMalformedInput3: \"" << data << '"' <<std::endl;
t012lexerXMLLexerTraits::CommonTokenType *token;
token = lxr->nextToken();
std::cout << token->getText() << std::endl;
token = lxr->nextToken();
std::cout << token->getText() << std::endl;
token = lxr->nextToken();
std::cout << token->getText() << std::endl;
// try:
// while True:
// token = lexer.nextToken()
// # Should raise NoViableAltException before hitting EOF
// if token.type == antlr3.EOF:
// self.fail()
//
// except antlr3.NoViableAltException as exc:
// self.assertEqual(exc.unexpectedType, 'a')
// self.assertEqual(exc.charPositionInLine, 11)
// self.assertEqual(exc.line, 2)
delete lxr; lxr = NULL;
delete input;
return 0;
}
string slurp(string const& fileName)
{
ifstream ifs(fileName.c_str(), ios::in | ios::binary | ios::ate);
ifstream::pos_type fileSize = ifs.tellg();
ifs.seekg(0, ios::beg);
stringstream sstr;
sstr << ifs.rdbuf();
return sstr.str();
}