188 lines
5.6 KiB
C++
188 lines
5.6 KiB
C++
#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();
|
|
}
|