package Ġlexer Ċ Ċ import Ġcom . lu zon . lexer . Token . Keyword Ċ import Ġcom . lu zon . lexer . Token . Literal Ċ import Ġcom . lu zon . lexer . Token . Symbol Ċ import Ġcom . lu zon . lexer . Token . Token Enum Ċ import Ġcom . lu zon . lexer . Tokenizer Ċ import Ġorg . am sh ove . k lu ent . should Equal Ċ import Ġorg . spe k framework . spe k 2 . Spe k Ċ import Ġorg . spe k framework . spe k 2 . style . specification . describe Ċ Ċ object ĠLex er Test Ġ: ĠSpe k ({ ĊĠĠĠ Ġdescribe (" a Ġlexer ") Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext (" examples ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexamples . forEach Ġ{ Ġ( code , Ġoutput ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġmatch Ġthe Ġexpected Ġoutput ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtokenizer String Ġ= ĠToken izer ( code ). tokens AsString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput String Ġ= Ġoutput . join ToString (" Ġ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠPair < *, Ġ* >) Ġ"${ it . first } (${ it . second })" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ"${ it Ġas ĠToken Enum }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokenizer String Ġshould Equal Ġoutput String ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ Ċ private Ġval Ġexamples Ġ= ĠarrayOf ( ĊĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( var Ġi Ġin Ġ 1 .. 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( i Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġ" test " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMulti ĠLine ĠComment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Single ĠLine ĠComment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġto ĊĠĠĠĠĠĠĠ ĠarrayOf < Any >( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeyword . FOR , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSymbol . L _ PAREN , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeyword . VAR , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLiteral . IDENTIFIER Ġto Ġ" i ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeyword . IN , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLiteral . INT Ġto Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSymbol . RANGE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLiteral . INT Ġto Ġ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSymbol . R _ PAREN , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSymbol . L _ BRACE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeyword . IF , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSymbol . L _ PAREN , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLiteral . IDENTIFIER Ġto Ġ" i ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSymbol . EQUAL _ EQUAL , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLiteral . INT Ġto Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSymbol . R _ PAREN , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSymbol . L _ BRACE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeyword . VAL , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLiteral . IDENTIFIER Ġto Ġ" c ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSymbol . EQUAL , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLiteral . STRING Ġto Ġ" test ", Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComment . COMMENT _ MULTI , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComment . COMMENT _ SINGLE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSymbol . R _ BRACE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSymbol . R _ BRACE ĊĠĠĠĠĠĠĠ Ġ) Ċ ) Ċ