123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466 |
- {
- This file is part of the Free Component Library (FCL)
- Copyright (c) 2025 Michael Van Canneyt ([email protected])
- Test WIT scanner
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- unit utcwitscanner;
- interface
- uses
- TestUtils, FPCUnit, Classes, SysUtils, testregistry, streamex, WIT.Scanner;
- type
- { TWITScannerTests }
- TWITScannerTests = class(TTestCase)
- Private
- FToken: TToken;
- protected
- Procedure TestToken(aSource: string; aToken: TTokenType);
- public
- Procedure SetUp; override;
- class procedure AssertEquals(Msg : string; aExpected,aActual : TTokenType); overload;
- published
- procedure TestUnknown;
- procedure TestWhitespace;
- procedure TestEOF;
- procedure TestOpenRoundBrace;
- procedure TestCloseRoundBrace;
- procedure TestOpenCurlyBrace;
- procedure TestCloseCurlyBrace;
- procedure TestOpenSquareBrace;
- procedure TestCloseSquareBrace;
- procedure TestColon;
- procedure TestSemicolon;
- procedure TestComma;
- procedure TestEqual;
- procedure TestDot;
- procedure TestPlus;
- procedure TestMinus;
- procedure TestStar;
- procedure TestDiv;
- procedure TestLessThan;
- procedure TestGreaterThan;
- procedure TestAt;
- procedure TestArrow;
- procedure TestNumber;
- procedure TestString;
- procedure TestInterface;
- procedure TestRecord;
- procedure TestFlags;
- procedure TestEnum;
- procedure TestType;
- procedure TestResource;
- procedure TestImport;
- procedure TestExport;
- procedure TestUse;
- procedure TestWorld;
- procedure TestPackage;
- procedure TestAs;
- procedure TestAsync;
- procedure TestBool;
- procedure TestBorrow;
- procedure TestChar;
- procedure TestConstructor;
- procedure TestFrom;
- procedure TestFunc;
- procedure TestFuture;
- procedure TestInclude;
- procedure TestList;
- procedure TestOption;
- procedure TestOwn;
- procedure TestResult;
- procedure TestStatic;
- procedure TestStream;
- procedure TestStringKW;
- procedure TestTuple;
- procedure TestVariant;
- procedure TestWith;
- procedure TestIdentifier;
- procedure TestIdentifierEscapedKeyword;
- procedure TestIdentifierDash;
- Procedure TestSingleComment;
- Procedure TestMultiComment;
- Procedure TestMultiComment2;
- Procedure TestMultiCommentNested;
- end;
- implementation
- uses TypInfo;
- { TWITScannerTests }
- procedure TWITScannerTests.TestToken(aSource: string; aToken: TTokenType);
- var
- Scanner: TWITScanner;
- Reader: TTextReader;
- lToken : TToken;
- begin
- Reader := TStringReader.Create(aSource);
- try
- Scanner := TWITScanner.Create(Reader);
- try
- Reader:=nil;
- FToken := Scanner.GetToken;
- AssertEquals('Token type mismatch', aToken, FToken.TokenType);
- if FToken.TokenType<>ttEOF then
- begin
- LToken := Scanner.GetToken;
- AssertEquals('EOF reached',ttEOF,lToken.TokenType);
- end;
- finally
- Scanner.Free;
- end;
- finally
- Reader.Free;
- end;
- end;
- procedure TWITScannerTests.SetUp;
- begin
- inherited SetUp;
- FToken:=Default(TToken);
- end;
- class procedure TWITScannerTests.AssertEquals(Msg: string; aExpected,
- aActual: TTokenType);
- begin
- AssertEquals(Msg,GetEnumName(TypeInfo(TTokenType),ord(aExpected)),
- GetEnumName(TypeInfo(TTokenType),ord(aActual)));
- end;
- procedure TWITScannerTests.TestUnknown;
- begin
- TestToken('?', ttUnknown);
- end;
- procedure TWITScannerTests.TestWhitespace;
- begin
- TestToken(' ', ttWhitespace);
- end;
- procedure TWITScannerTests.TestEOF;
- begin
- TestToken('', ttEOF);
- end;
- procedure TWITScannerTests.TestOpenRoundBrace;
- begin
- TestToken('(', ttOpenRoundBrace);
- end;
- procedure TWITScannerTests.TestCloseRoundBrace;
- begin
- TestToken(')', ttCloseRoundBrace);
- end;
- procedure TWITScannerTests.TestOpenCurlyBrace;
- begin
- TestToken('{', ttOpenCurlyBrace);
- end;
- procedure TWITScannerTests.TestCloseCurlyBrace;
- begin
- TestToken('}', ttCloseCurlyBrace);
- end;
- procedure TWITScannerTests.TestOpenSquareBrace;
- begin
- TestToken('[', ttOpenSquareBrace);
- end;
- procedure TWITScannerTests.TestCloseSquareBrace;
- begin
- TestToken(']', ttCLoseSquareBrace);
- end;
- procedure TWITScannerTests.TestColon;
- begin
- TestToken(':', ttColon);
- end;
- procedure TWITScannerTests.TestSemicolon;
- begin
- TestToken(';', ttSemicolon);
- end;
- procedure TWITScannerTests.TestComma;
- begin
- TestToken(',', ttComma);
- end;
- procedure TWITScannerTests.TestEqual;
- begin
- TestToken('=', ttEqual);
- end;
- procedure TWITScannerTests.TestDot;
- begin
- TestToken('.', ttDot);
- end;
- procedure TWITScannerTests.TestPlus;
- begin
- TestToken('+', ttPlus);
- end;
- procedure TWITScannerTests.TestMinus;
- begin
- TestToken('-', ttMinus);
- end;
- procedure TWITScannerTests.TestStar;
- begin
- TestToken('*', ttStar);
- end;
- procedure TWITScannerTests.TestDiv;
- begin
- TestToken('/', ttDiv);
- end;
- procedure TWITScannerTests.TestLessThan;
- begin
- TestToken('<', ttLessThan);
- end;
- procedure TWITScannerTests.TestGreaterThan;
- begin
- TestToken('>', ttGreaterThan);
- end;
- procedure TWITScannerTests.TestAt;
- begin
- TestToken('@', ttAt);
- end;
- procedure TWITScannerTests.TestArrow;
- begin
- TestToken('->', ttArrow);
- end;
- procedure TWITScannerTests.TestNumber;
- begin
- TestToken('123', ttNumber);
- end;
- procedure TWITScannerTests.TestString;
- begin
- TestToken('"test"', ttStringLiteral);
- end;
- procedure TWITScannerTests.TestInterface;
- begin
- TestToken('interface', ttInterface);
- end;
- procedure TWITScannerTests.TestRecord;
- begin
- TestToken('record', ttRecord);
- end;
- procedure TWITScannerTests.TestFlags;
- begin
- TestToken('flags', ttFlags);
- end;
- procedure TWITScannerTests.TestEnum;
- begin
- TestToken('enum', ttEnum);
- end;
- procedure TWITScannerTests.TestType;
- begin
- TestToken('type', ttType);
- end;
- procedure TWITScannerTests.TestResource;
- begin
- TestToken('resource', ttResource);
- end;
- procedure TWITScannerTests.TestImport;
- begin
- TestToken('import', ttImport);
- end;
- procedure TWITScannerTests.TestExport;
- begin
- TestToken('export', ttExport);
- end;
- procedure TWITScannerTests.TestUse;
- begin
- TestToken('use', ttUse);
- end;
- procedure TWITScannerTests.TestWorld;
- begin
- TestToken('world', ttWorld);
- end;
- procedure TWITScannerTests.TestPackage;
- begin
- TestToken('package', ttPackage);
- end;
- procedure TWITScannerTests.TestAs;
- begin
- TestToken('as', ttAs);
- end;
- procedure TWITScannerTests.TestAsync;
- begin
- TestToken('async', ttAsync);
- end;
- procedure TWITScannerTests.TestBool;
- begin
- TestToken('bool', ttBool);
- end;
- procedure TWITScannerTests.TestBorrow;
- begin
- TestToken('borrow', ttBorrow);
- end;
- procedure TWITScannerTests.TestChar;
- begin
- TestToken('char', ttChar);
- end;
- procedure TWITScannerTests.TestConstructor;
- begin
- TestToken('constructor', ttConstructor);
- end;
- procedure TWITScannerTests.TestFrom;
- begin
- TestToken('from', ttFrom);
- end;
- procedure TWITScannerTests.TestFunc;
- begin
- TestToken('func', ttFunc);
- end;
- procedure TWITScannerTests.TestFuture;
- begin
- TestToken('future', ttFuture);
- end;
- procedure TWITScannerTests.TestInclude;
- begin
- TestToken('include', ttInclude);
- end;
- procedure TWITScannerTests.TestList;
- begin
- TestToken('list', ttList);
- end;
- procedure TWITScannerTests.TestOption;
- begin
- TestToken('option', ttOption);
- end;
- procedure TWITScannerTests.TestOwn;
- begin
- TestToken('own', ttOwn);
- end;
- procedure TWITScannerTests.TestResult;
- begin
- TestToken('result', ttResult);
- end;
- procedure TWITScannerTests.TestStatic;
- begin
- TestToken('static', ttStatic);
- end;
- procedure TWITScannerTests.TestStream;
- begin
- TestToken('stream', ttStream);
- end;
- procedure TWITScannerTests.TestStringKW;
- begin
- TestToken('string', ttStringType);
- end;
- procedure TWITScannerTests.TestTuple;
- begin
- TestToken('tuple', ttTuple);
- end;
- procedure TWITScannerTests.TestVariant;
- begin
- TestToken('variant', ttVariant);
- end;
- procedure TWITScannerTests.TestWith;
- begin
- TestToken('with', ttWith);
- end;
- procedure TWITScannerTests.TestIdentifier;
- begin
- TestToken('myIdentifier', ttIdentifier);
- end;
- procedure TWITScannerTests.TestIdentifierEscapedKeyword;
- begin
- TestToken('%with', ttIdentifier);
- AssertEquals('Escape not part of token','with',FToken.Value);
- end;
- procedure TWITScannerTests.TestIdentifierDash;
- begin
- TestToken('ali-baba', ttIdentifier);
- AssertEquals('dash part of token','ali-baba',FToken.Value);
- end;
- procedure TWITScannerTests.TestSingleComment;
- begin
- TestToken('// A comment', ttComment);
- AssertEquals('Comment',' A comment',FToken.Value);
- end;
- procedure TWITScannerTests.TestMultiComment;
- begin
- TestToken('/* A comment*/', ttComment);
- AssertEquals('Comment',' A comment',FToken.Value);
- end;
- procedure TWITScannerTests.TestMultiComment2;
- begin
- TestToken('/* A'#10'comment*/', ttComment);
- AssertEquals('Comment',' A'#10'comment',FToken.Value);
- end;
- procedure TWITScannerTests.TestMultiCommentNested;
- begin
- TestToken('/* A /* second */ comment*/', ttComment);
- AssertEquals('Comment',' A /* second */ comment',FToken.Value);
- end;
- initialization
- RegisterTest(TWITScannerTests);
- end.
|