123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577 |
- unit tcidlscanner;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes, SysUtils, fpcunit, testutils, testregistry, webidlscanner;
- type
- { TTestScanner }
- TTestScanner= class(TTestCase)
- private
- FScanner: TWebIDLScanner;
- FVersion: TWEbIDLversion;
- procedure SetVersion(AValue: TWEbIDLversion);
- protected
- procedure Init(Const aSource : string);
- Class Procedure AssertEquals(Msg : String; AExpected,AActual : TIDLToken); overload;
- Procedure TestSingle(Const aSource : String; AToken : TIDLToken);
- Procedure TestMulti(Const aSource : String; AToken : Array of TIDLToken);
- Procedure TestSingle(Const aSource : String; AToken : TIDLToken; AValue : String);
- Procedure TestMulti(Const aSource : String; AToken : Array of TIDLToken; AValues : Array of String);
- procedure SetUp; override;
- procedure TearDown; override;
- Property Scanner : TWebIDLScanner Read FScanner;
- Property Version : TWEbIDLversion Read FVersion Write SetVersion;
- published
- procedure TestHookUp;
- Procedure TestComment;
- Procedure TestWhitespace;
- Procedure TestString;
- Procedure TestNumberInteger;
- Procedure TestNumberFloat;
- Procedure TestNumberHex;
- Procedure TestNumberHex2;
- // Simple (one-character) tokens
- Procedure TestComma; // ','
- Procedure TestColon; // ':'
- Procedure TestBracketOpen; // '('
- Procedure TestBracketClose; // ')'
- Procedure TestCurlyBraceOpen; // '{'
- Procedure TestCurlyBraceClose; // '}'
- Procedure TestSquaredBraceOpen; // '['
- Procedure TestSquaredBraceClose; // ']'
- Procedure TestIdentifier; // Any identifier
- Procedure TestDot; // '.',
- Procedure TestSemicolon;// ';',
- Procedure TestLess;// '<',
- Procedure TestEqual;// '=',
- Procedure TestLarger;// '=',
- Procedure TestQuestionMark;// '?',
- Procedure TestMinus;// '-',
- Procedure TestOther;// 'other',
- Procedure Testshort;// 'other',
- Procedure TestTrue;
- Procedure TestFalse;
- Procedure TestNull;
- Procedure TestAny;
- Procedure TestAttribute;
- Procedure TestCallback;
- Procedure TestConst;
- Procedure TestDeleter;
- Procedure TestDictionary;
- Procedure TestEllipsis;
- Procedure TestEnum;
- Procedure TestGetter;
- Procedure TestImplements;
- Procedure TestMapLike;
- Procedure TestSetLike;
- Procedure TestRecord;
- Procedure TestInfinity;
- Procedure TestInherit;
- Procedure TestInterface;
- Procedure TestIterable;
- Procedure TestLegacyCaller;
- Procedure TestNan;
- Procedure TestNegInfinity;
- Procedure TestOptional;
- Procedure TestOr;
- Procedure TestPartial;
- Procedure TestReadOnly;
- Procedure TestRequired;
- Procedure TestSetter;
- Procedure TestStatic;
- Procedure TestStringifier;
- Procedure TestTypedef;
- Procedure TestUnrestricted;
- Procedure TestPromise;
- Procedure TestByteString;
- Procedure TestDOMString;
- Procedure TestUSVString;
- Procedure Testboolean;
- Procedure Testbyte;
- Procedure Testdouble;
- Procedure Testfloat;
- Procedure Testlong;
- Procedure Testobject;
- Procedure Testoctet;
- Procedure Testunsigned;
- Procedure Testvoid;
- end;
- implementation
- uses typinfo;
- procedure TTestScanner.TestHookUp;
- begin
- Init('');
- AssertNotNull('Have scanner',Scanner);
- end;
- procedure TTestScanner.TestComment;
- begin
- TestSingle('// me',tkComment);
- end;
- procedure TTestScanner.TestWhitespace;
- begin
- TestSingle('',tkWhitespace);
- end;
- procedure TTestScanner.TestString;
- begin
- TestSingle('"abcd"',webidlscanner.tkString,'abcd');
- end;
- procedure TTestScanner.TestNumberInteger;
- begin
- TestSingle('123',tkNumberInteger,'123');
- end;
- procedure TTestScanner.TestNumberFloat;
- begin
- TestSingle('1.23',tkNumberFloat,'1.23');
- end;
- procedure TTestScanner.TestNumberHex;
- begin
- TestSingle('0xABCDEF',tkNumberInteger,'0xABCDEF');
- end;
- procedure TTestScanner.TestNumberHex2;
- begin
- // E is special
- TestSingle('0xABCDE',tkNumberInteger,'0xABCDE');
- end;
- procedure TTestScanner.TestComma;
- begin
- TestSingle(',',tkComma);
- end;
- procedure TTestScanner.TestColon;
- begin
- TestSingle(':',tkColon);
- end;
- procedure TTestScanner.TestBracketOpen;
- begin
- TestSingle('(',tkBracketOpen);
- end;
- procedure TTestScanner.TestBracketClose;
- begin
- TestSingle(')',tkBracketClose);
- end;
- procedure TTestScanner.TestCurlyBraceOpen;
- begin
- TestSingle('{',tkCurlyBraceOpen);
- end;
- procedure TTestScanner.TestCurlyBraceClose;
- begin
- TestSingle('}',tkCurlyBraceClose);
- end;
- procedure TTestScanner.TestSquaredBraceOpen;
- begin
- TestSingle('[',tkSquaredBraceOpen);
- end;
- procedure TTestScanner.TestSquaredBraceClose;
- begin
- TestSingle(']',tkSquaredBraceClose);
- end;
- procedure TTestScanner.TestIdentifier;
- begin
- TestSingle('A',tkIdentifier,'A');
- end;
- procedure TTestScanner.TestDot;
- begin
- TestSingle('.',tkDot);
- end;
- procedure TTestScanner.TestSemicolon;
- begin
- TestSingle(';',tkSemiColon);
- end;
- procedure TTestScanner.TestLess;
- begin
- TestSingle('<',tkLess);
- end;
- procedure TTestScanner.TestEqual;
- begin
- TestSingle('=',tkEqual);
- end;
- procedure TTestScanner.TestLarger;
- begin
- TestSingle('>',tkLarger);
- end;
- procedure TTestScanner.TestQuestionMark;
- begin
- TestSingle('?',tkQuestionMark);
- end;
- procedure TTestScanner.TestMinus;
- begin
- TestSingle('-',tkMinus);
- end;
- procedure TTestScanner.TestOther;
- begin
- TestSingle('other',tkOther);
- end;
- procedure TTestScanner.Testshort;
- begin
- TestSingle('short',tkShort);
- end;
- procedure TTestScanner.TestTrue;
- begin
- TestSingle('true',tkTrue);
- end;
- procedure TTestScanner.TestFalse;
- begin
- TestSingle('false',tkFalse);
- end;
- procedure TTestScanner.TestNull;
- begin
- TestSingle('null',tkNull);
- end;
- procedure TTestScanner.TestAny;
- begin
- TestSingle('any',webidlscanner.tkAny);
- end;
- procedure TTestScanner.TestAttribute;
- begin
- TestSingle('attribute',tkAttribute);
- end;
- procedure TTestScanner.TestCallback;
- begin
- TestSingle('callback',tkCallBack);
- end;
- procedure TTestScanner.TestConst;
- begin
- TestSingle('const',tkConst);
- end;
- procedure TTestScanner.TestDeleter;
- begin
- TestSingle('deleter',tkDeleter);
- end;
- procedure TTestScanner.TestDictionary;
- begin
- TestSingle('dictionary',tkDictionary);
- end;
- procedure TTestScanner.TestEllipsis;
- begin
- TestSingle('ellipsis',tkellipsis);
- end;
- procedure TTestScanner.TestEnum;
- begin
- TestSingle('enum',tkenum);
- end;
- procedure TTestScanner.TestGetter;
- begin
- TestSingle('getter',tkgetter);
- end;
- procedure TTestScanner.TestImplements;
- begin
- TestSingle('implements',tkimplements);
- Version:=v2;
- TestSingle('implements',tkIdentifier);
- end;
- procedure TTestScanner.TestMapLike;
- begin
- Version:=v2;
- TestSingle('maplike',tkmaplike);
- Version:=v1;
- TestSingle('maplike',tkIdentifier);
- end;
- procedure TTestScanner.TestSetLike;
- begin
- Version:=v2;
- TestSingle('setlike',tkSetlike);
- Version:=v1;
- TestSingle('setlike',tkIdentifier);
- end;
- procedure TTestScanner.TestRecord;
- begin
- Version:=v2;
- TestSingle('record',webidlscanner.tkRecord);
- Version:=v1;
- TestSingle('record',tkIdentifier);
- end;
- procedure TTestScanner.TestInfinity;
- begin
- TestSingle('Infinity',tkinfinity);
- end;
- procedure TTestScanner.TestInherit;
- begin
- TestSingle('inherit',tkinherit);
- end;
- procedure TTestScanner.TestInterface;
- begin
- TestSingle('interface',webidlscanner.tkinterface);
- end;
- procedure TTestScanner.TestIterable;
- begin
- TestSingle('iterable',tkiterable);
- end;
- procedure TTestScanner.TestLegacyCaller;
- begin
- TestSingle('legacycaller',tklegacycaller);
- end;
- procedure TTestScanner.TestNan;
- begin
- TestSingle('NaN',tkNan);
- end;
- procedure TTestScanner.TestNegInfinity;
- begin
- TestSingle('-Infinity',tkneginfinity);
- end;
- procedure TTestScanner.TestOptional;
- begin
- TestSingle('optional',tkoptional);
- end;
- procedure TTestScanner.TestOr;
- begin
- TestSingle('or',tkOR);
- end;
- procedure TTestScanner.TestPartial;
- begin
- TestSingle('partial',tkPartial);
- end;
- procedure TTestScanner.TestReadOnly;
- begin
- TestSingle('readonly',tkreadonly);
- end;
- procedure TTestScanner.TestRequired;
- begin
- TestSingle('required',tkrequired);
- end;
- procedure TTestScanner.TestSetter;
- begin
- TestSingle('setter',tksetter);
- end;
- procedure TTestScanner.TestStatic;
- begin
- TestSingle('static',tkstatic);
- end;
- procedure TTestScanner.TestStringifier;
- begin
- TestSingle('stringifier',tkstringifier);
- end;
- procedure TTestScanner.TestTypedef;
- begin
- TestSingle('typedef',tktypeDef);
- end;
- procedure TTestScanner.TestUnrestricted;
- begin
- TestSingle('unrestricted',tkunrestricted);
- end;
- procedure TTestScanner.TestPromise;
- begin
- TestSingle('Promise',tkpromise);
- end;
- procedure TTestScanner.TestByteString;
- begin
- TestSingle('ByteString',tkBytestring);
- end;
- procedure TTestScanner.TestDOMString;
- begin
- TestSingle('DOMString',tkDOMstring);
- end;
- procedure TTestScanner.TestUSVString;
- begin
- TestSingle('USVString',tkUSVString);
- end;
- procedure TTestScanner.Testboolean;
- begin
- TestSingle('boolean',tkBoolean);
- end;
- procedure TTestScanner.Testbyte;
- begin
- TestSingle('byte',tkByte);
- end;
- procedure TTestScanner.Testdouble;
- begin
- TestSingle('double',webidlscanner.tkDouble);
- end;
- procedure TTestScanner.Testfloat;
- begin
- TestSingle('float',webidlscanner.tkfloat);
- end;
- procedure TTestScanner.Testlong;
- begin
- TestSingle('long',tklong);
- end;
- procedure TTestScanner.Testobject;
- begin
- TestSingle('object',webidlscanner.tkObject);
- end;
- procedure TTestScanner.Testoctet;
- begin
- TestSingle('octet',tkOctet);
- end;
- procedure TTestScanner.Testunsigned;
- begin
- TestSingle('unsigned',tkUnsigned);
- end;
- procedure TTestScanner.Testvoid;
- begin
- TestSingle('void',tkVoid);
- end;
- procedure TTestScanner.SetVersion(AValue: TWEbIDLversion);
- begin
- if FVersion=AValue then Exit;
- FVersion:=AValue;
- if Assigned(FScanner) then
- FScanner.Version:=FVersion;
- end;
- procedure TTestScanner.Init(const aSource: string);
- begin
- FreeAndNil(FScanner);
- FScanner:=TWebIDLScanner.Create(aSource);
- FScanner.Version:=FVersion;
- end;
- class procedure TTestScanner.AssertEquals(Msg: String; AExpected,AActual: TIDLToken);
- begin
- AssertEQuals(Msg,GetEnumName(TypeInfo(TIDLToken),Ord(AExpected)),GetEnumName(TypeInfo(TIDLToken),Ord(AActual)));
- end;
- procedure TTestScanner.TestSingle(const aSource: String; AToken: TIDLToken);
- begin
- TestMulti(aSource,[aToken]);
- end;
- procedure TTestScanner.TestMulti(const aSource: String;
- AToken: array of TIDLToken);
- Var
- I : Integer;
- t : TIDLToken;
- begin
- Init(ASource);
- I:=0;
- Repeat
- t:=Scanner.FetchToken;
- If T<>tkEOF then
- begin
- If I>High(AToken) then
- Fail(Format('"%s": Too many tokens in source (got: %d, expected: %d)',[aSource,I+1,High(aToken)+1]));
- AssertEquals('"'+ASource+'": token '+IntToStr(I),AToken[I],T);
- Inc(I);
- end
- Until (t=tkEOF);
- If I<High(AToken) then
- Fail('"'+ASource+'": Too little tokens in source');
- end;
- procedure TTestScanner.TestSingle(const aSource: String; AToken: TIDLToken;
- AValue: String);
- begin
- TestMulti(aSource,[aToken],[aValue]);
- end;
- procedure TTestScanner.TestMulti(const aSource: String;
- AToken: array of TIDLToken; AValues: array of String);
- Var
- I : Integer;
- t : TIDLToken;
- begin
- Init(ASource);
- I:=0;
- Repeat
- t:=Scanner.FetchToken;
- If T<>tkEOF then
- begin
- If I>High(AToken) then
- Fail(Format('"%s": Too many tokens in source (got: %d, expected: %d)',[aSource,I+1,High(aToken)+1]));
- AssertEquals('"'+ASource+'": token '+IntToStr(I),AToken[I],T);
- AssertEquals('"'+ASource+'": String '+IntToStr(I),AValues[I],FScanner.CurTokenString);
- Inc(I);
- end
- Until (t=tkEOF);
- If I<High(AToken) then
- Fail('"'+ASource+'": Too little tokens in source');
- end;
- procedure TTestScanner.SetUp;
- begin
- Version:=v1;
- end;
- procedure TTestScanner.TearDown;
- begin
- FreeAndNil(FScanner);
- end;
- initialization
- RegisterTest(TTestScanner);
- end.
|