package Ġit . uni bo . tup ro log . parser Ċ Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠTest Pro log Lexer Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Initial isation () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals (" Pro log Lexer . g 4 ", ĠPro log Lexer . grammar FileName ) ĊĠĠĠĠĠĠĠ Ġval Ġmode Names Ġ= ĠarrayOf (" DEFAULT _ MODE ") ĊĠĠĠĠĠĠĠ ĠPro log Lexer . mode Names . forEach Indexed Ġ{ Ġindex , Ġmode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( mode Names [ index ], Ġmode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġchannel Names Ġ= ĠarrayOf (" DEFAULT _ TOKEN _ CHANNEL ", Ġ" HIDDEN ") ĊĠĠĠĠĠĠĠ ĠPro log Lexer . channel Names . forEach Indexed Ġ{ Ġindex , Ġchannel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( channel Names [ index ], Ġchannel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrule Names Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" INTEGER ", Ġ" HEX ", Ġ" OCT ", Ġ" BINARY ", Ġ" SIGN ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" FLOAT ", Ġ" CHAR ", Ġ" BOOL ", Ġ" L PAR ", Ġ" R PAR ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" LS QUARE ", Ġ" RS QUARE ", Ġ" EMPTY _ LIST ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" L BRACE ", Ġ" R BRACE ", Ġ" EMPTY _ SET ", Ġ" VARIABLE ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SQ _ STRING ", Ġ" DQ _ STRING ", Ġ" COMMA ", Ġ" PIPE ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" CUT ", Ġ" FULL _ STOP ", Ġ" Full Stop Termin ator ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" WHITE _ SP ACES ", Ġ" COMMENT ", Ġ" LINE _ COMMENT ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" OPERATOR ", Ġ" ATOM ", Ġ" Symbols ", Ġ" Esc ap able ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Double SQ ", Ġ" Double DQ ", Ġ" Op Symbol ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Atom ", Ġ" Ws ", Ġ" Oct Digit ", Ġ" Bin Digit ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Hex Digit ", Ġ" Digit ", Ġ" Zero " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠPro log Lexer . rule Names . forEach Indexed Ġ{ Ġindex , Ġrule Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( rule Names [ index ], Ġrule ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Lexer Recognize Operators () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlexer Ġ= ĠPro log Lexer (" a Ġ; Ġb Ġ:- Ġc ") ĊĠĠĠĠĠĠĠ Ġval Ġops Ġ= ĠlistOf (" ;", Ġ" :- ", Ġ"+ ") ĊĠĠĠĠĠĠĠ Ġlexer . add Operators (" ;", Ġ" :- ", Ġ"+ ") ĊĠĠĠĠĠĠĠ Ġlexer . get Operators (). forEach Indexed Ġ{ Ġindex , Ġop Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ops [ index ], Ġop ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue ( lexer . is Operator ("; ")) ĊĠĠĠĠĠĠĠ ĠassertFalse ( lexer . is Operator (" jj ")) ĊĠĠĠĠĠĠĠ ĠassertTrue ( lexer . is Operator (" :- ")) ĊĠĠĠĠĠĠĠ ĠassertFalse ( lexer . is Operator ("+ a ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Lexer Un quote () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlexer Ġ= ĠPro log Lexer ( null ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" String ", Ġlexer . un quote ("' String ' ")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" sec '' sds ", Ġlexer . un quote ("' sec '' sds ' ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Lexer Escape () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlexer Ġ= ĠPro log Lexer ( null ) ĊĠĠĠĠĠĠĠ Ġlexer . escape (" first \\ nsec \\ r third ", ĠString Type . SINGLE _ QUOT ED ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" first \ nsec \ r third ", Ġlexer . escape (" first \\ nsec \\ r third ", ĠString Type . SINGLE _ QUOT ED )) ĊĠĠĠ Ġ} Ċ } Ċ