xref: /aosp_15_r20/external/antlr/runtime/Cpp/tests/t039.cpp (revision 16467b971bd3e2009fad32dd79016f2c7e421deb)
1*16467b97STreehugger Robot #include "UserTestTraits.hpp"
2*16467b97STreehugger Robot #include "t039labelsLexer.hpp"
3*16467b97STreehugger Robot #include "t039labelsParser.hpp"
4*16467b97STreehugger Robot 
5*16467b97STreehugger Robot #include <sys/types.h>
6*16467b97STreehugger Robot 
7*16467b97STreehugger Robot #include <iostream>
8*16467b97STreehugger Robot #include <sstream>
9*16467b97STreehugger Robot #include <fstream>
10*16467b97STreehugger Robot 
11*16467b97STreehugger Robot using namespace Antlr3Test;
12*16467b97STreehugger Robot using namespace std;
13*16467b97STreehugger Robot 
14*16467b97STreehugger Robot int testValid(string const& data);
15*16467b97STreehugger Robot int testMalformedInput(string const& data);
16*16467b97STreehugger Robot 
17*16467b97STreehugger Robot static t039labelsLexer *lxr;
18*16467b97STreehugger Robot 
19*16467b97STreehugger Robot 
20*16467b97STreehugger Robot struct TokenData
21*16467b97STreehugger Robot {
22*16467b97STreehugger Robot 	//t039labelsLexerTokens::Tokens type;
23*16467b97STreehugger Robot 	//unsigned start;
24*16467b97STreehugger Robot 	//unsigned stop;
25*16467b97STreehugger Robot 	const char* text;
26*16467b97STreehugger Robot };
27*16467b97STreehugger Robot 
28*16467b97STreehugger Robot static TokenData ExpectedTokens[] =
29*16467b97STreehugger Robot {
30*16467b97STreehugger Robot   /*
31*16467b97STreehugger Robot         lexer = self.getLexer(cStream)
32*16467b97STreehugger Robot         tStream = antlr3.CommonTokenStream(lexer)
33*16467b97STreehugger Robot         parser = self.getParser(tStream)
34*16467b97STreehugger Robot         ids, w = parser.a()
35*16467b97STreehugger Robot 
36*16467b97STreehugger Robot         self.assertEqual(len(ids), 6, ids)
37*16467b97STreehugger Robot         self.assertEqual(ids[0].text, 'a', ids[0])
38*16467b97STreehugger Robot         self.assertEqual(ids[1].text, 'b', ids[1])
39*16467b97STreehugger Robot         self.assertEqual(ids[2].text, 'c', ids[2])
40*16467b97STreehugger Robot         self.assertEqual(ids[3].text, '1', ids[3])
41*16467b97STreehugger Robot         self.assertEqual(ids[4].text, '2', ids[4])
42*16467b97STreehugger Robot         self.assertEqual(ids[5].text, 'A', ids[5])
43*16467b97STreehugger Robot 
44*16467b97STreehugger Robot         self.assertEqual(w.text, 'GNU1', w)
45*16467b97STreehugger Robot   */
46*16467b97STreehugger Robot 	// "a, b, c, 1, 2 A FOOBAR GNU1 A BLARZ"
47*16467b97STreehugger Robot 	{ "a"},
48*16467b97STreehugger Robot 	{ "b"},
49*16467b97STreehugger Robot 	{ "c"},
50*16467b97STreehugger Robot 	{ "1"},
51*16467b97STreehugger Robot 	{ "2"},
52*16467b97STreehugger Robot 	{ "A"},
53*16467b97STreehugger Robot };
54*16467b97STreehugger Robot 
55*16467b97STreehugger Robot 
main(int argc,char * argv[])56*16467b97STreehugger Robot int main (int argc, char *argv[])
57*16467b97STreehugger Robot {
58*16467b97STreehugger Robot 	testValid("a, b, c, 1, 2 A FOOBAR GNU1 A BLARZ");
59*16467b97STreehugger Robot 	return 0;
60*16467b97STreehugger Robot }
61*16467b97STreehugger Robot 
testValid(string const & data)62*16467b97STreehugger Robot int testValid(string const& data)
63*16467b97STreehugger Robot {
64*16467b97STreehugger Robot 	t039labelsLexerTraits::InputStreamType* input	= new t039labelsLexerTraits::InputStreamType((const ANTLR_UINT8 *)data.c_str(),
65*16467b97STreehugger Robot 										       ANTLR_ENC_8BIT,
66*16467b97STreehugger Robot 										       data.length(), //strlen(data.c_str()),
67*16467b97STreehugger Robot 										       (ANTLR_UINT8*)"t039");
68*16467b97STreehugger Robot 	if (lxr == NULL)
69*16467b97STreehugger Robot 		lxr = new t039labelsLexer(input);
70*16467b97STreehugger Robot 	else
71*16467b97STreehugger Robot 		lxr->setCharStream(input);
72*16467b97STreehugger Robot 
73*16467b97STreehugger Robot 	std::cout << "testValid: \"" << data << '"' <<std::endl;
74*16467b97STreehugger Robot 
75*16467b97STreehugger Robot 	t039labelsLexerTraits::TokenStreamType *tstream = new t039labelsLexerTraits::TokenStreamType(ANTLR_SIZE_HINT, lxr->get_tokSource());
76*16467b97STreehugger Robot 	t039labelsParser *psr = new t039labelsParser(tstream);
77*16467b97STreehugger Robot 	t039labelsParser::TokenList r = psr->a();
78*16467b97STreehugger Robot 
79*16467b97STreehugger Robot 	for(unsigned i = 0; i < r.tokens.size() ; i++)
80*16467b97STreehugger Robot 	{
81*16467b97STreehugger Robot 		t039labelsLexerTraits::CommonTokenType *token = r.tokens.at(i);
82*16467b97STreehugger Robot 
83*16467b97STreehugger Robot 		size_t startIndex = ((const char*)token->get_startIndex()) - data.c_str();
84*16467b97STreehugger Robot 		size_t stopIndex = ((const char*)token->get_stopIndex()) - data.c_str();
85*16467b97STreehugger Robot 
86*16467b97STreehugger Robot 		std::cout << token->getText()
87*16467b97STreehugger Robot 			  << '\t' << (token->getText()       == ExpectedTokens[i].text ?  "OK" : "Fail")
88*16467b97STreehugger Robot 			  << std::endl;
89*16467b97STreehugger Robot 
90*16467b97STreehugger Robot 	}
91*16467b97STreehugger Robot 	delete lxr; lxr = NULL;
92*16467b97STreehugger Robot 	delete input;
93*16467b97STreehugger Robot 	return 0;
94*16467b97STreehugger Robot }
95*16467b97STreehugger Robot 
96*16467b97STreehugger Robot /*
97*16467b97STreehugger Robot     def testValid1(self):
98*16467b97STreehugger Robot         cStream = antlr3.StringStream(
99*16467b97STreehugger Robot             'a, b, c, 1, 2 A FOOBAR GNU1 A BLARZ'
100*16467b97STreehugger Robot             )
101*16467b97STreehugger Robot 
102*16467b97STreehugger Robot         lexer = self.getLexer(cStream)
103*16467b97STreehugger Robot         tStream = antlr3.CommonTokenStream(lexer)
104*16467b97STreehugger Robot         parser = self.getParser(tStream)
105*16467b97STreehugger Robot         ids, w = parser.a()
106*16467b97STreehugger Robot 
107*16467b97STreehugger Robot         self.assertEqual(len(ids), 6, ids)
108*16467b97STreehugger Robot         self.assertEqual(ids[0].text, 'a', ids[0])
109*16467b97STreehugger Robot         self.assertEqual(ids[1].text, 'b', ids[1])
110*16467b97STreehugger Robot         self.assertEqual(ids[2].text, 'c', ids[2])
111*16467b97STreehugger Robot         self.assertEqual(ids[3].text, '1', ids[3])
112*16467b97STreehugger Robot         self.assertEqual(ids[4].text, '2', ids[4])
113*16467b97STreehugger Robot         self.assertEqual(ids[5].text, 'A', ids[5])
114*16467b97STreehugger Robot 
115*16467b97STreehugger Robot         self.assertEqual(w.text, 'GNU1', w)
116*16467b97STreehugger Robot 
117*16467b97STreehugger Robot 
118*16467b97STreehugger Robot if __name__ == '__main__':
119*16467b97STreehugger Robot     unittest.main()
120*16467b97STreehugger Robot 
121*16467b97STreehugger Robot 
122*16467b97STreehugger Robot */
123