1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678 |
- {
- This file is part of the Free Component Library
- Copyright (c) 2010-2014 by the Free Pascal development team
- SQL source lexical scanner test suite
- 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 tcsqlscanner;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes, SysUtils, fpcunit, testregistry, fpsqlscanner;
- type
- { TTestSQLScanner }
- TTestSQLScanner= class(TTestCase)
- Private
- FStream : TStream;
- FLineReader : TLineReader;
- FScanner : TSQLScanner;
- FErrorSource : String;
- FErrorOptions : TSQLScannerOptions;
- procedure AssertEquals(AMessage: String; AExpected, AActual : TSQLToken); overload;
- procedure CheckToken(AToken: TSQLToken; ASource: String);
- procedure CheckTokens(ASource: String; ATokens: array of TSQLToken);
- procedure DoTestFloat(F: Double);
- procedure DoTestFloat(F: Double; S: String);
- procedure DoTestString(S: String; DoubleDelim : Boolean = False);
- procedure TestErrorSource;
- protected
- Function CreateScanner(AInput : String; AOptions : TSQLScannerOptions = []) : TSQLScanner;
- procedure FreeScanner;
- procedure SetUp; override;
- procedure TearDown; override;
- Property Scanner : TSQLScanner Read FScanner;
- published
- procedure TestAction;
- procedure TestAdd;
- procedure TestAdmin;
- procedure TestAfter;
- procedure TestALTER;
- procedure TestAnd;
- procedure TestAny;
- procedure TestAs;
- procedure TestASC;
- procedure TestASCENDING;
- Procedure TestAt;
- procedure TestAuto;
- procedure TestAVG;
- procedure TestAssign;
- procedure TestBefore;
- Procedure TestBegin;
- procedure TestBetween;
- procedure TestBlob;
- procedure TestBraceClose;
- procedure TestBraceOpen;
- procedure TestBy;
- Procedure TestCache;
- procedure TestCascade;
- procedure TestChar;
- procedure TestCharacter;
- procedure TestCheck;
- procedure TestCollate;
- procedure TestColon;
- procedure TestColumn;
- procedure TestComma;
- procedure TestCommit;
- procedure TestComputed;
- procedure TestConcatenate;
- Procedure TestConditional;
- Procedure TestConnect;
- procedure TestConstraint;
- procedure TestContaining;
- procedure TestCount;
- procedure TestCreate;
- procedure TestCString;
- Procedure TestDatabase;
- Procedure TestDate;
- Procedure TestDecimal;
- procedure TestDeclare;
- procedure TestDefault;
- procedure TestDelete;
- procedure TestDesc;
- procedure TestDescending;
- procedure TestDistinct;
- procedure TestDiv;
- procedure TestDO;
- procedure TestDomain;
- procedure TestDot;
- procedure TestDrop;
- procedure TestElse;
- procedure TestEmpty;
- procedure TestEnd;
- Procedure TestEntryPoint;
- procedure TestEq;
- procedure TestEscape;
- procedure TestException;
- procedure TestExists;
- procedure TestExit;
- Procedure TestExternal;
- Procedure TestExtract;
- procedure TestFile;
- Procedure TestFloat;
- procedure TestFor;
- procedure TestForeign;
- procedure TestFreeIt;
- procedure TestFunction;
- Procedure TestGDSError;
- procedure TestGE;
- procedure TestGenerator;
- procedure TestGrant;
- procedure TestGreaterThan;
- procedure TestGroup;
- Procedure TestHaving;
- procedure TestIf;
- procedure TestIn;
- procedure TestIndex;
- procedure TestInner;
- procedure TestInsert;
- procedure TestInt;
- procedure TestInteger;
- procedure TestInto;
- procedure TestIs;
- procedure TestJoin;
- procedure TestKey;
- procedure TestLeft;
- Procedure TestLength;
- procedure TestLike;
- procedure TestLE;
- procedure TestLessThan;
- Procedure TestManual;
- Procedure TestModuleName;
- procedure TestMax;
- procedure TestMerge;
- procedure TestMin;
- procedure TestMinus;
- procedure TestMul;
- procedure TestNational;
- procedure TestNatural;
- procedure TestNE;
- procedure TestNo;
- procedure TestNot;
- procedure TestNull;
- procedure TestNumeric;
- Procedure TestOn;
- Procedure TestOption;
- Procedure TestOr;
- Procedure TestOrder;
- Procedure TestOuter;
- Procedure TestPage;
- Procedure TestPages;
- Procedure TestPageSize;
- Procedure TestPassword;
- procedure TestPlus;
- procedure TestPosition;
- Procedure TestPostEvent;
- procedure TestPrimary;
- procedure TestPrivileges;
- procedure TestProcedure;
- procedure TestPublic;
- Procedure TestReferences;
- Procedure TestRelease;
- Procedure TestReturningValues;
- Procedure TestReturns;
- Procedure TestRetain;
- Procedure TestRevoke;
- Procedure TestRight;
- Procedure TestRole;
- Procedure TestRollback;
- Procedure TestSegment;
- Procedure TestSelect;
- procedure TestSemicolon;
- Procedure TestSet;
- Procedure TestSchema;
- Procedure TestShadow;
- Procedure TestSingular;
- Procedure TestSize;
- Procedure TestSkip;
- Procedure TestSome;
- Procedure TestSort;
- Procedure TestSnapshot;
- Procedure TestSQLCode;
- procedure TestSquareBraceClose;
- procedure TestSquareBraceOpen;
- Procedure TestStarting;
- procedure TestString;
- procedure TestSubtype;
- procedure TestSum;
- procedure TestSuspend;
- Procedure TestTable;
- Procedure TestThen;
- Procedure TestTime;
- Procedure TestTimeStamp;
- Procedure TestTo;
- Procedure TestTransaction;
- Procedure TestTrigger;
- Procedure TestType;
- Procedure TestUnion;
- Procedure TestUnique;
- Procedure TestUpdate;
- Procedure TestUpper;
- Procedure TestUser;
- procedure TestValue;
- procedure TestValues;
- procedure TestVariable;
- procedure TestVarChar;
- Procedure TestVarying;
- Procedure TestView;
- Procedure TestWhen;
- Procedure TestWhere;
- procedure TestWhile;
- procedure TestWith;
- procedure TestWork;
- procedure TestTerm;
- procedure TestTermExclude;
- procedure TestRecreate;
- procedure TestRestart;
- procedure TestSequence;
- Procedure Test2Words;
- procedure Test3Words;
- procedure TestIdentifier;
- procedure TestIdentifier2;
- procedure TestIdentifier3;
- procedure TestIdentifier4;
- procedure TestIdentifier5;
- procedure TestIdentifier6;
- procedure TestIdentifierDotIdentifier;
- procedure TestEOLN;
- procedure TestEOLN2;
- procedure TestEOLN3;
- procedure TestEOLN4;
- procedure TestComment1;
- procedure TestComment2;
- procedure TestComment3;
- procedure TestComment4;
- procedure TestComment5;
- procedure TestComment6;
- procedure TestFloatLiteral;
- procedure TestStringLiteral1;
- procedure TestStringLiteral2;
- procedure TestSymbolLiteral1;
- procedure TestSymbolLiteral2;
- procedure TestStringError;
- procedure TestFloatError;
- Procedure TestOptionsoDoubleQuoteStringLiteral;
- Procedure TestOptionsoSingleQuoteIdentifier;
- procedure TestOptionsoBackQuoteIdentifier;
- procedure TestOptionNosoBackQuoteIdentifier;
- procedure TestOptionNosoBackslashEscapes;
- procedure TestOptionsoBackslashEscapesTab;
- procedure TestOptionsoBackslashEscapesNewLine;
- procedure TestOptionsoBackslashEscapesBackSlash;
- procedure TestOptionsoBackslashEscapesBackspace;
- procedure TestOptionsoBackslashEscapesLineFeed;
- procedure TestOptionsoBackslashEscapesNewPage;
- procedure TestOptionsoBackslashEscapesSlash;
- procedure TestOptionsoBackslashEscapesQuote;
- procedure TestOptionsoBackslashEscapesDoubleQuote;
- end;
- implementation
- uses typinfo;
- procedure TTestSQLScanner.AssertEquals(AMessage: String; AExpected,
- AActual: TSQLToken);
- Var
- S,EN1,EN2 : String;
- begin
- If (AActual<>AExpected) then
- begin
- EN1:=GetEnumName(TypeINfo(TSQLToken),Ord(AExpected));
- EN2:=GetEnumName(TypeINfo(TSQLToken),Ord(AActual));
- S:=Format('%s : %s <> %s',[AMessage,EN1,EN2]);
- Fail(S);
- end;
- end;
- procedure TTestSQLScanner.CheckToken(AToken: TSQLToken; ASource: String);
- Var
- J : TSqlToken;
- EN2 : String;
- begin
- CreateScanner(ASource);
- J:=Scanner.FetchToken;
- EN2:=GetEnumName(TypeInfo(TSQLToken),Ord(AToken));
- AssertEquals(Format('Source %s should result in %s.',[ASource,EN2]),AToken,J);
- end;
- procedure TTestSQLScanner.DoTestFloat(F: Double);
- Var
- S : String;
- begin
- Str(F,S);
- DoTestFloat(F,S);
- end;
- procedure TTestSQLScanner.DoTestFloat(F: Double; S: String);
- Var
- J : TSQLToken;
- C : Double;
- I : integer;
- V : String;
- begin
- CreateScanner(S);
- try
- J:=FScanner.FetchToken;
- AssertEquals(S+' is a number',tsqlFloatNumber,J);
- V:=FScanner.CurTokenString;
- Val(V,C,I);
- If (I<>0) then
- Fail(FScanner.CurTokenString+' does not contain a float value');
- AssertEquals('Parsed float equals original float',F,C);
- finally
- FreeScanner;
- end;
- end;
- procedure TTestSQLScanner.DoTestString(S: String; DoubleDelim : Boolean = False);
- Var
- J : TSQLToken;
- C : AnsiChar;
- begin
- CreateScanner(S);
- try
- J:=FScanner.FetchToken;
- AssertEquals(S+' is a string',tsqlString,J);
- If (Length(S)>0) and (S[1] in ['"','''']) then
- begin
- C:=S[1];
- S:=Copy(S,2,Length(S)-2);
- end;
- If DoubleDelim then
- S:=StringReplace(S,C+C,C,[rfReplaceAll]);
- AssertEquals('Correct string is returned',S,FScanner.CurTokenString);
- finally
- FreeScanner;
- end;
- end;
- procedure TTestSQLScanner.TestErrorSource;
- begin
- CreateScanner(FErrorSource,FErrorOptions);
- While (FScanner.FetchToken<>tsqlEOF) do ;
- end;
- function TTestSQLScanner.CreateScanner(AInput: String; AOptions : TSQLScannerOptions = []): TSQLScanner;
- begin
- FStream:=TStringStream.Create(AInput);
- FLineReader:=TStreamLineReader.Create(Fstream);
- FScanner:=TSQLScanner.Create(FLineReader);
- FScanner.Options:=AOptions;
- Result:=FScanner;
- end;
- procedure TTestSQLScanner.FreeScanner;
- begin
- FreeAndNil(FScanner);
- FreeAndNil(FLineReader);
- FreeAndNil(FStream);
- end;
- procedure TTestSQLScanner.SetUp;
- begin
- inherited SetUp;
- FErrorSource:='';
- FErrorOptions:=[];
- end;
- procedure TTestSQLScanner.TearDown;
- begin
- FreeScanner;
- iNHERITED;
- end;
- procedure TTestSQLScanner.TestAction;
- begin
- CheckToken(tsqlAction,'ACTION');
- end;
- procedure TTestSQLScanner.TestAdd;
- begin
- CheckToken(tsqlAdd,'ADD');
- end;
- procedure TTestSQLScanner.TestAdmin;
- begin
- CheckToken(tsqlAdmin,'ADMIN');
- end;
- procedure TTestSQLScanner.TestAfter;
- begin
- CheckToken(tsqlAfter,'AFTER');
- end;
- procedure TTestSQLScanner.TestEmpty;
- Var
- J : TSQLToken;
- begin
- CreateScanner('');
- J:=Scanner.FetchToken;
- If (J<>tsqlEOF) then
- Fail('Empty returns EOF');
- end;
- procedure TTestSQLScanner.TestEnd;
- begin
- CheckToken(tsqlEnd,'END');
- end;
- procedure TTestSQLScanner.TestEntryPoint;
- begin
- CheckToken(tsqlEntryPoint,'ENTRY_POINT');
- end;
- procedure TTestSQLScanner.TestEscape;
- begin
- CheckToken(tsqlEscape,'ESCAPE');
- end;
- procedure TTestSQLScanner.TestException;
- begin
- CheckToken(tsqlException,'EXCEPTION');
- end;
- procedure TTestSQLScanner.TestExists;
- begin
- CheckToken(tsqlExists,'EXISTS');
- end;
- procedure TTestSQLScanner.TestExit;
- begin
- CheckToken(tsqlExit,'EXIT');
- end;
- procedure TTestSQLScanner.TestExternal;
- begin
- CheckToken(tsqlExternal,'external');
- end;
- procedure TTestSQLScanner.TestExtract;
- begin
- CheckToken(tsqlExtract,'EXTRACT');
- end;
- procedure TTestSQLScanner.TestAnd;
- begin
- CheckToken(tsqlAnd,'and');
- end;
- procedure TTestSQLScanner.TestAny;
- begin
- CheckToken(tsqlAny,'any');
- end;
- procedure TTestSQLScanner.TestAs;
- begin
- CheckToken(tsqlAs,'as');
- end;
- procedure TTestSQLScanner.TestAt;
- begin
- CheckToken(tsqlAt,'at');
- end;
- procedure TTestSQLScanner.TestAuto;
- begin
- CheckToken(tsqlAUTO,'auto');
- end;
- procedure TTestSQLScanner.TestASC;
- begin
- CheckToken(tsqlASC,'asc');
- end;
- procedure TTestSQLScanner.TestASCENDING;
- begin
- CheckToken(tsqlASCENDING,'ascending');
- end;
- procedure TTestSQLScanner.TestAVG;
- begin
- CheckToken(tsqlAVG,'avg');
- end;
- procedure TTestSQLScanner.TestALTER;
- begin
- CheckToken(tsqlALTER,'alter');
- end;
- procedure TTestSQLScanner.TestBraceOpen;
- begin
- CheckToken(tsqlBraceOpen,'(');
- end;
- procedure TTestSQLScanner.TestBraceClose;
- begin
- CheckToken(tsqlBraceClose,')');
- end;
- procedure TTestSQLScanner.TestComma;
- begin
- CheckToken(tsqlComma,',');
- end;
- procedure TTestSQLScanner.TestCommit;
- begin
- CheckToken(tsqlCommit,'COMMIT');
- end;
- procedure TTestSQLScanner.TestComputed;
- begin
- CheckToken(tsqlComputed,'COMPUTED');
- end;
- procedure TTestSQLScanner.TestConditional;
- begin
- CheckToken(tsqlConditional,'CONDITIONAL');
- end;
- procedure TTestSQLScanner.TestConnect;
- begin
- CheckToken(tsqlConnect,'CONNECT');
- end;
- procedure TTestSQLScanner.TestConstraint;
- begin
- CheckToken(tsqlConstraint,'CONSTRAINT');
- end;
- procedure TTestSQLScanner.TestColon;
- begin
- CheckToken(tsqlColon,':');
- end;
- procedure TTestSQLScanner.TestColumn;
- begin
- CheckToken(tsqlColumn,'COLUMN');
- end;
- procedure TTestSQLScanner.TestDot;
- begin
- CheckToken(tsqlDot,'.');
- end;
- procedure TTestSQLScanner.TestDrop;
- begin
- CheckToken(tsqldrop,'DROP');
- end;
- procedure TTestSQLScanner.TestSemicolon;
- begin
- CheckToken(tsqlSemicolon,';');
- end;
- procedure TTestSQLScanner.TestSet;
- begin
- CheckToken(tsqlSet,'SET');
- end;
- procedure TTestSQLScanner.TestSchema;
- begin
- CheckToken(tsqlSchema,'SCHEMA');
- end;
- procedure TTestSQLScanner.TestShadow;
- begin
- CheckToken(tsqlShadow,'SHADOW');
- end;
- procedure TTestSQLScanner.TestSingular;
- begin
- CheckToken(tsqlSINGULAR,'SINGULAR');
- end;
- procedure TTestSQLScanner.TestSize;
- begin
- CheckToken(tsqlSize,'size');
- end;
- procedure TTestSQLScanner.TestSkip;
- begin
- CheckToken(tsqlSkip,'skip');
- end;
- procedure TTestSQLScanner.TestSome;
- begin
- CheckToken(tsqlSome,'some');
- end;
- procedure TTestSQLScanner.TestSort;
- begin
- CheckToken(tsqlSort,'sort');
- end;
- procedure TTestSQLScanner.TestSnapshot;
- begin
- CheckToken(tsqlSnapshot,'snapshot');
- end;
- procedure TTestSQLScanner.TestSQLCode;
- begin
- CheckToken(tsqlSQLCOde,'SQLCODE');
- end;
- procedure TTestSQLScanner.TestSquareBraceClose;
- begin
- CheckToken(tsqlSquareBraceClose,']');
- end;
- procedure TTestSQLScanner.TestSquareBraceOpen;
- begin
- CheckToken(tsqlSquareBraceOpen,'[');
- end;
- procedure TTestSQLScanner.TestSubtype;
- begin
- CheckToken(tsqlSubtype,'sub_type');
- end;
- procedure TTestSQLScanner.TestSuspend;
- begin
- CheckToken(tsqlSuspend,'Suspend');
- end;
- procedure TTestSQLScanner.TestSymbolLiteral1;
- begin
- CheckToken(tsqlSymbolString,'%');
- end;
- procedure TTestSQLScanner.TestSymbolLiteral2;
- begin
- CheckToken(tsqlSymbolString,'%^');
- end;
- procedure TTestSQLScanner.TestStarting;
- begin
- CheckToken(tsqlStarting,'starting');
- end;
- procedure TTestSQLScanner.TestSum;
- begin
- CheckToken(tsqlSum,'sum');
- end;
- procedure TTestSQLScanner.TestString;
- begin
- DoTestString('''A string''');
- DoTestString('''''');
- DoTestString(''' " ''');
- DoTestString('''A string''');
- DoTestString(''' '''' ''',True);
- DoTestString('''12345'#10'67890''');
- DoTestString('''12345'#13'67890''');
- DoTestString('''12345'#13#10'67890''');
- end;
- procedure TTestSQLScanner.TestTable;
- begin
- CheckToken(tsqltable,'TABLE');
- end;
- procedure TTestSQLScanner.TestThen;
- begin
- CheckToken(tsqlThen,'THEN');
- end;
- procedure TTestSQLScanner.TestTime;
- begin
- CheckToken(tsqlTime,'TIME');
- end;
- procedure TTestSQLScanner.TestTimeStamp;
- begin
- CheckToken(tsqlTimeStamp,'TIMESTAMP');
- end;
- procedure TTestSQLScanner.TestTo;
- begin
- CheckToken(tsqlTo,'TO');
- end;
- procedure TTestSQLScanner.TestTransaction;
- begin
- CheckToken(tsqlTransaction,'TRANSACTION');
- end;
- procedure TTestSQLScanner.TestTrigger;
- begin
- CheckToken(tsqlTrigger,'TRIGGER');
- end;
- procedure TTestSQLScanner.TestType;
- begin
- CheckToken(tsqltype,'TYPE');
- end;
- procedure TTestSQLScanner.TestUnion;
- begin
- CheckToken(tsqlUnion,'UNION');
- end;
- procedure TTestSQLScanner.TestUnique;
- begin
- CheckToken(tsqlUnique,'UNIQUE');
- end;
- procedure TTestSQLScanner.TestUpdate;
- begin
- CheckToken(tsqlUPDATE,'UPDATE');
- end;
- procedure TTestSQLScanner.TestUpper;
- begin
- CheckToken(tsqlUPPER,'UPPER');
- end;
- procedure TTestSQLScanner.TestUser;
- begin
- CheckToken(tsqlUSER,'USER');
- end;
- procedure TTestSQLScanner.TestValues;
- begin
- CheckToken(tsqlVALUES,'VALUES');
- end;
- procedure TTestSQLScanner.TestValue;
- begin
- CheckToken(tsqlVALUE,'VALUE');
- end;
- procedure TTestSQLScanner.TestAssign;
- begin
- CheckToken(tsqlEq,'=');
- end;
- procedure TTestSQLScanner.TestBefore;
- begin
- CheckToken(tsqlbefore,'BEFORE');
- end;
- procedure TTestSQLScanner.TestBegin;
- begin
- CheckToken(tsqlbegin,'BEGIN');
- end;
- procedure TTestSQLScanner.TestBetween;
- begin
- CheckToken(tsqlBetween,'BETWEEN');
- end;
- procedure TTestSQLScanner.TestGreaterThan;
- begin
- CheckToken(tsqlGT,'>');
- end;
- procedure TTestSQLScanner.TestGroup;
- begin
- CheckToken(tsqlGroup,'group');
- end;
- procedure TTestSQLScanner.TestHaving;
- begin
- CheckToken(tsqlHaving,'HAVING');
- end;
- procedure TTestSQLScanner.TestLessThan;
- begin
- CheckToken(tsqlLT,'<');
- end;
- procedure TTestSQLScanner.TestManual;
- begin
- Checktoken(tsqlManual,'manual');
- end;
- procedure TTestSQLScanner.TestModuleName;
- begin
- Checktoken(tsqlModuleName,'module_name');
- end;
- procedure TTestSQLScanner.TestMax;
- begin
- Checktoken(tsqlMax,'max');
- end;
- procedure TTestSQLScanner.TestMerge;
- begin
- Checktoken(tsqlMerge,'merge');
- end;
- procedure TTestSQLScanner.TestMin;
- begin
- Checktoken(tsqlMin,'min');
- end;
- procedure TTestSQLScanner.TestPlus;
- begin
- CheckToken(tsqlPlus,'+');
- end;
- procedure TTestSQLScanner.TestPosition;
- begin
- Checktoken(tsqlposition,'position');
- end;
- procedure TTestSQLScanner.TestPostEvent;
- begin
- Checktoken(tsqlpostevent,'post_event');
- end;
- procedure TTestSQLScanner.TestPrimary;
- begin
- Checktoken(tsqlprimary,'primary');
- end;
- procedure TTestSQLScanner.TestPrivileges;
- begin
- Checktoken(tsqlprivileges,'privileges');
- end;
- procedure TTestSQLScanner.TestProcedure;
- begin
- Checktoken(tsqlprocedure,'procedure');
- end;
- procedure TTestSQLScanner.TestPublic;
- begin
- CheckToken(tsqlPublic,'PUBLIC');
- end;
- procedure TTestSQLScanner.TestReferences;
- begin
- CheckToken(tsqlReferences,'REFERENCES');
- end;
- procedure TTestSQLScanner.TestRelease;
- begin
- CheckToken(tsqlrelease,'release');
- end;
- procedure TTestSQLScanner.TestReturningValues;
- begin
- CheckToken(tsqlreturningvalues,'returning_values');
- end;
- procedure TTestSQLScanner.TestReturns;
- begin
- CheckToken(tsqlreturns,'returns');
- end;
- procedure TTestSQLScanner.TestRetain;
- begin
- Checktoken(tsqlRetain,'retain');
- end;
- procedure TTestSQLScanner.TestRevoke;
- begin
- Checktoken(tsqlRevoke,'revoke');
- end;
- procedure TTestSQLScanner.TestRight;
- begin
- Checktoken(tsqlright,'right');
- end;
- procedure TTestSQLScanner.TestRole;
- begin
- Checktoken(tsqlrole,'role');
- end;
- procedure TTestSQLScanner.TestRollback;
- begin
- Checktoken(tsqlrollback,'rollback');
- end;
- procedure TTestSQLScanner.TestSegment;
- begin
- CheckToken(tsqlSegment,'SEGMENT');
- end;
- procedure TTestSQLScanner.TestSelect;
- begin
- CheckToken(tsqlSelect,'SELECT');
- end;
- procedure TTestSQLScanner.TestMinus;
- begin
- CheckToken(tsqlMinus,'-');
- end;
- procedure TTestSQLScanner.TestMul;
- begin
- CheckToken(tsqlMul,'*');
- end;
- procedure TTestSQLScanner.TestNational;
- begin
- CheckToken(tsqlNational,'NATIONAL');
- end;
- procedure TTestSQLScanner.TestNatural;
- begin
- CheckToken(tsqlNatural,'NATURAL');
- end;
- procedure TTestSQLScanner.TestDiv;
- begin
- CheckToken(tsqlDiv,'/');
- end;
- procedure TTestSQLScanner.TestEq;
- begin
- CheckToken(tsqlEq,'==');
- end;
- procedure TTestSQLScanner.TestFloat;
- begin
- CheckToken(tsqlFloat,'FLOAT');
- end;
- procedure TTestSQLScanner.TestGE;
- begin
- CheckToken(tsqlGE,'>=');
- end;
- procedure TTestSQLScanner.TestGenerator;
- begin
- CheckToken(tsqlGenerator,'generator');
- end;
- procedure TTestSQLScanner.TestGrant;
- begin
- CheckToken(tsqlGrant,'grant');
- end;
- procedure TTestSQLScanner.TestLE;
- begin
- CheckToken(tsqlLE,'<=');
- end;
- procedure TTestSQLScanner.TestNE;
- begin
- CheckToken(tsqlNE,'<>');
- end;
- procedure TTestSQLScanner.TestNo;
- begin
- CheckToken(tsqlNo,'no');
- end;
- procedure TTestSQLScanner.TestNot;
- begin
- CheckToken(tsqlNot,'not');
- end;
- procedure TTestSQLScanner.TestNull;
- begin
- CheckToken(tsqlnull,'null');
- end;
- procedure TTestSQLScanner.TestNumeric;
- begin
- CheckToken(tsqlNumeric,'NUMERIC');
- end;
- procedure TTestSQLScanner.TestOn;
- begin
- CheckToken(tsqlON,'on');
- end;
- procedure TTestSQLScanner.TestOption;
- begin
- CheckToken(tsqlOption,'option');
- end;
- procedure TTestSQLScanner.TestOr;
- begin
- CheckToken(tsqlOR,'or');
- end;
- procedure TTestSQLScanner.TestOrder;
- begin
- CheckToken(tsqlORDER,'order');
- end;
- procedure TTestSQLScanner.TestOuter;
- begin
- CheckToken(tsqlOUTER,'outer');
- end;
- procedure TTestSQLScanner.TestPage;
- begin
- CheckToken(tsqlPage,'PAGE');
- end;
- procedure TTestSQLScanner.TestPages;
- begin
- CheckToken(tsqlPages,'PAGES');
- end;
- procedure TTestSQLScanner.TestPageSize;
- begin
- CheckToken(tsqlPageSize,'PAGE_SIZE');
- end;
- procedure TTestSQLScanner.TestPassword;
- begin
- CheckToken(tsqlPassword,'PASSWORD');
- end;
- {
- procedure TTestSQLScanner.TestTrue;
- begin
- CheckToken(tsqlTrue,'true');
- end;
- procedure TTestSQLScanner.TestFalse;
- begin
- CheckToken(tsqlFalse,'false');
- end;
- }
- procedure TTestSQLScanner.TestBy;
- begin
- CheckToken(tsqlBy,'by');
- end;
- procedure TTestSQLScanner.TestCache;
- begin
- CheckToken(tsqlCache,'CACHE');
- end;
- procedure TTestSQLScanner.TestCascade;
- begin
- CheckToken(tsqlCascade,'cascade');
- end;
- procedure TTestSQLScanner.TestBlob;
- begin
- CheckToken(tsqlBlob,'blob');
- end;
- procedure TTestSQLScanner.TestChar;
- begin
- CheckToken(tsqlChar,'char');
- end;
- procedure TTestSQLScanner.TestCharacter;
- begin
- CheckToken(tsqlCharacter,'character');
- end;
- procedure TTestSQLScanner.TestCheck;
- begin
- CheckToken(tsqlCHECK,'check');
- end;
- procedure TTestSQLScanner.TestCollate;
- begin
- CheckToken(tsqlCollate,'collate');
- end;
- procedure TTestSQLScanner.TestConcatenate;
- begin
- CheckToken(tsqlConcatenate,'||');
- end;
- procedure TTestSQLScanner.TestContaining;
- begin
- CheckToken(tsqlContaining,'containing');
- end;
- procedure TTestSQLScanner.TestCount;
- begin
- CheckToken(tsqlCount,'count');
- end;
- procedure TTestSQLScanner.TestCreate;
- begin
- CheckToken(tsqlCreate,'create');
- end;
- procedure TTestSQLScanner.TestCString;
- begin
- CheckToken(tsqlCString,'CSTRING');
- end;
- procedure TTestSQLScanner.TestDatabase;
- begin
- CheckToken(tsqlDatabase,'database');
- end;
- procedure TTestSQLScanner.TestDate;
- begin
- CheckToken(tsqlDate,'date');
- end;
- procedure TTestSQLScanner.TestDecimal;
- begin
- CheckToken(tsqlDecimal,'decimal');
- end;
- procedure TTestSQLScanner.TestDefault;
- begin
- CheckToken(tsqldefault,'default');
- end;
- procedure TTestSQLScanner.TestDelete;
- begin
- CheckToken(tsqldelete,'delete');
- end;
- procedure TTestSQLScanner.TestDeclare;
- begin
- CheckToken(tsqlDeclare,'DECLARE');
- end;
- procedure TTestSQLScanner.TestDesc;
- begin
- CheckToken(tsqlDESC,'DESC');
- end;
- procedure TTestSQLScanner.TestDescending;
- begin
- CheckToken(tsqlDescending,'DESCENDING');
- end;
- procedure TTestSQLScanner.TestDistinct;
- begin
- CheckToken(tsqlDistinct,'DISTINCT');
- end;
- procedure TTestSQLScanner.TestDO;
- begin
- CheckToken(tsqldo,'do');
- end;
- procedure TTestSQLScanner.TestDomain;
- begin
- CheckToken(tsqlDomain,'domain');
- end;
- procedure TTestSQLScanner.TestElse;
- begin
- CheckToken(tsqlelse,'else');
- end;
- procedure TTestSQLScanner.TestFor;
- begin
- CheckToken(tsqlfor,'for');
- end;
- procedure TTestSQLScanner.TestForeign;
- begin
- CheckToken(tsqlForeign,'foreign');
- end;
- procedure TTestSQLScanner.TestFreeIt;
- begin
- CheckToken(tsqlFreeIt,'FREE_IT');
- end;
- procedure TTestSQLScanner.TestFile;
- begin
- CheckToken(tsqlFile,'FILE');
- end;
- procedure TTestSQLScanner.TestFunction;
- begin
- CheckToken(tsqlfunction,'function');
- end;
- procedure TTestSQLScanner.TestGDSError;
- begin
- CheckToken(tsqlGDSCODE,'GDSCODE');
- end;
- procedure TTestSQLScanner.TestIf;
- begin
- CheckToken(tsqlif,'if');
- end;
- procedure TTestSQLScanner.TestIn;
- begin
- CheckToken(tsqlin,'in');
- end;
- procedure TTestSQLScanner.TestInner;
- begin
- CheckToken(tsqlInner,'inner');
- end;
- procedure TTestSQLScanner.TestInsert;
- begin
- CheckToken(tsqlInsert,'insert');
- end;
- procedure TTestSQLScanner.TestInt;
- begin
- CheckToken(tsqlInt,'int');
- end;
- procedure TTestSQLScanner.TestInteger;
- begin
- CheckToken(tsqlInteger,'integer');
- end;
- procedure TTestSQLScanner.TestInto;
- begin
- CheckToken(tsqlInto,'into');
- end;
- procedure TTestSQLScanner.TestIs;
- begin
- CheckToken(tsqlis,'is');
- end;
- procedure TTestSQLScanner.TestJoin;
- begin
- CheckToken(tsqlJoin,'JOIN');
- end;
- procedure TTestSQLScanner.TestKey;
- begin
- CheckToken(tsqlKey,'KEY');
- end;
- procedure TTestSQLScanner.TestLeft;
- begin
- CheckToken(tsqlLEFT,'LEFT');
- end;
- procedure TTestSQLScanner.TestLength;
- begin
- CheckToken(tsqlLength,'LENGTH');
- end;
- procedure TTestSQLScanner.TestLike;
- begin
- CheckToken(tsqlLIKE,'LIKE');
- end;
- procedure TTestSQLScanner.TestIndex;
- begin
- CheckToken(tsqlindex,'index');
- end;
- procedure TTestSQLScanner.TestVariable;
- begin
- CheckToken(tsqlvariable,'variable');
- end;
- procedure TTestSQLScanner.TestVarChar;
- begin
- CheckToken(tsqlvarchar,'varchar');
- end;
- procedure TTestSQLScanner.TestVarying;
- begin
- CheckToken(tsqlvarying,'varying');
- end;
- procedure TTestSQLScanner.TestView;
- begin
- CheckToken(tsqlview,'view');
- end;
- procedure TTestSQLScanner.TestWhen;
- begin
- CheckToken(tsqlWhen,'when');
- end;
- procedure TTestSQLScanner.TestWhere;
- begin
- CheckToken(tsqlwhere,'where');
- end;
- procedure TTestSQLScanner.TestWhile;
- begin
- CheckToken(tsqlwhile,'while');
- end;
- procedure TTestSQLScanner.TestWith;
- begin
- CheckToken(tsqlwith,'with');
- end;
- procedure TTestSQLScanner.TestWork;
- begin
- CheckToken(tsqlWork,'work');
- end;
- procedure TTestSQLScanner.TestTerm;
- begin
- CheckToken(tsqlTerm,'term');
- end;
- procedure TTestSQLScanner.TestTermExclude;
- begin
- CreateScanner('term');
- FScanner.Excludekeywords.Add('term');
- AssertEquals('Term is identifier',tsqlIdentifier,FScanner.FetchToken);
- end;
- procedure TTestSQLScanner.TestRecreate;
- begin
- CheckToken(tsqlRecreate,'recreate');
- end;
- procedure TTestSQLScanner.TestRestart;
- begin
- CheckToken(tsqlRestart,'restart');
- end;
- procedure TTestSQLScanner.TestSequence;
- begin
- CheckToken(tsqlSequence,'sequence');
- end;
- procedure TTestSQLScanner.CheckTokens(ASource: String; ATokens: array of TSQLToken);
- Var
- I : Integer;
- J : TSQLToken;
- S : String;
- begin
- CreateScanner(ASource);
- For I:=Low(ATokens) to High(ATokens) do
- begin
- J:=FScanner.FetchToken;
- S:=GetEnumName(TypeINfo(TSQLToken),Ord(ATokens[i]));
- S:=Format('Source "%s", token %d (%s): expected %s',[ASource,I,FScanner.CurTokenString,S]);
- AssertEquals(S,ATokens[i],J);
- end;
- end;
- procedure TTestSQLScanner.Test2Words;
- begin
- CheckTokens('with do',[tsqlWith,tsqlDo]);
- end;
- procedure TTestSQLScanner.Test3Words;
- begin
- CheckTokens('with do for',[tsqlWith,tsqlDo,tsqlFor]);
- end;
- procedure TTestSQLScanner.TestIdentifier;
- begin
- CheckToken(tsqlIdentifier,'something');
- AssertEquals('Correct identifier','something',FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestIdentifier2;
- begin
- CheckToken(tsqlIdentifier,'"_something"');
- AssertEquals('Correct identifier','_something',FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestIdentifier3;
- begin
- CheckToken(tsqlIdentifier,'RDB$');
- AssertEquals('Correct identifier','RDB$',FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestIdentifier4;
- begin
- CheckToken(tsqlIdentifier,'A_0');
- AssertEquals('Correct identifier','A_0',FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestIdentifier5;
- begin
- // $0 should not be parsed as an identifier but as a symbol literal
- CheckToken(tsqlSymbolString,'$0');
- end;
- procedure TTestSQLScanner.TestIdentifier6;
- begin
- CreateScanner('[A]',[soSquareBracketsIdentifier]);
- AssertEquals('Identifier is returned',tsqlIdentifier,FScanner.FetchToken);
- AssertEquals('Correct identifier','A',FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestIdentifierDotIdentifier;
- begin
- CheckTokens('something.different',[tsqlIdentifier,tsqldot,tsqlIdentifier]);
- // AssertEquals('Correct identifier','something',FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestEOLN;
- begin
- CreateScanner('something');
- FScanner.FetchToken;
- AssertEquals('Got to end of line after reading single token at EOF',True,FScanner.IsEndOfLine);
- // AssertEquals('Correct identifier','something',FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestEOLN2;
- begin
- CreateScanner('something different');
- FScanner.FetchToken;
- AssertEquals('Not yet end of line after reading single token at EOF',False,FScanner.IsEndOfLine);
- end;
- procedure TTestSQLScanner.TestEOLN3;
- begin
- CreateScanner('something'#13#10'different');
- FScanner.FetchToken;
- AssertEquals('End of line after reading single token',True,FScanner.IsEndOfLine);
- end;
- procedure TTestSQLScanner.TestEOLN4;
- begin
- CreateScanner('something'#10'different');
- FScanner.FetchToken;
- AssertEquals('End of line after reading first token',True,FScanner.IsEndOfLine);
- FScanner.FetchToken;
- AssertEquals('End of line after reading second token',True,FScanner.IsEndOfLine);
- end;
- procedure TTestSQLScanner.TestComment1;
- begin
- CreateScanner('-- some comment string');
- AssertEquals('Comment line is skipped',tsqlEOF,FScanner.FetchToken);
- end;
- procedure TTestSQLScanner.TestComment2;
- begin
- CreateScanner('-- some comment string');
- FScanner.Options:=[soReturnComments];
- AssertEquals('Comment line is returned',tsqlComment,FScanner.FetchToken);
- AssertEquals('Comment contents is returned',' some comment string',FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestComment3;
- begin
- CreateScanner('/* some comment string */');
- AssertEquals('Comment line is skipped',tsqlEOF,FScanner.FetchToken);
- end;
- procedure TTestSQLScanner.TestComment4;
- begin
- CreateScanner('/* some comment string */');
- FScanner.Options:=[soReturnComments];
- AssertEquals('Comment line is returned',tsqlComment,FScanner.FetchToken);
- AssertEquals('Comment contents is returned',' some comment string ',FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestComment5;
- begin
- CreateScanner('/* some nested comment -- string */');
- FScanner.Options:=[soReturnComments];
- AssertEquals('Comment line is returned',tsqlComment,FScanner.FetchToken);
- AssertEquals('Comment contents is returned',' some nested comment -- string ',FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestComment6;
- begin
- CreateScanner('-- /* some nested comment string */');
- FScanner.Options:=[soReturnComments];
- AssertEquals('Comment line is returned',tsqlComment,FScanner.FetchToken);
- AssertEquals('Comment contents is returned','/* some nested comment string */',FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestFloatLiteral;
- begin
- DoTestFloat(1.2);
- DoTestFloat(-1.2);
- DoTestFloat(1.2e1);
- DoTestFloat(-1.2e1);
- DoTestFloat(1.2,'1.2');
- DoTestFloat(-1.2,'-1.2');
- DoTestFloat(0,'0.0');
- end;
- procedure TTestSQLScanner.TestStringLiteral1;
- begin
- CreateScanner('''A''');
- FScanner.Options:=[];
- AssertEquals('String is returned',tsqlString,FScanner.FetchToken);
- AssertEquals('Correct string','A',FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestStringLiteral2;
- begin
- CreateScanner('"A"',[soDoubleQuoteStringLiteral]);
- AssertEquals('String is returned',tsqlString,FScanner.FetchToken);
- AssertEquals('Correct string','A',FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestStringError;
- begin
- end;
- procedure TTestSQLScanner.TestFloatError;
- begin
- FErrorSource:='1xz';
- AssertException('Wrong float',ESQLScannerError,@TestErrorSource);
- end;
- procedure TTestSQLScanner.TestOptionsoDoubleQuoteStringLiteral;
- begin
- CreateScanner('"A"',[soDoubleQuoteStringLiteral]);
- AssertEquals('String is returned',tsqlString,FScanner.FetchToken);
- AssertEquals('Correct string','A',FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestOptionsoSingleQuoteIdentifier;
- begin
- CreateScanner('''A''',[soSingleQuoteIdentifier,soDoubleQuoteStringLiteral]);
- If (Scanner.Options<>[soSingleQuoteIdentifier,soDoubleQuoteStringLiteral]) then
- Fail('Options not correctly set');
- AssertEquals('Identifier is returned',tsqlIdentifier,FScanner.FetchToken);
- AssertEquals('Correct string','A',FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestOptionsoBackQuoteIdentifier;
- begin
- CreateScanner('`A`',[soBackQuoteIdentifier]);
- AssertEquals('String is returned',tsqlIdentifier,FScanner.FetchToken);
- AssertEquals('Correct string','A',FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestOptionNosoBackQuoteIdentifier;
- begin
- FErrorSource:='`A`';
- AssertException('Wrong token',ESQLScannerError,@TestErrorSource);
- end;
- procedure TTestSQLScanner.TestOptionsoBackslashEscapesTab;
- begin
- CreateScanner('''\t''',[soBackslashEscapes]);
- AssertEquals('String is returned',tsqlString,FScanner.FetchToken);
- AssertEquals('Correct string',#9,FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestOptionsoBackslashEscapesNewLine;
- begin
- CreateScanner('''\n''',[soBackslashEscapes]);
- AssertEquals('String is returned',tsqlString,FScanner.FetchToken);
- AssertEquals('Correct string',#10,FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestOptionsoBackslashEscapesLineFeed;
- begin
- CreateScanner('''\r''',[soBackslashEscapes]);
- AssertEquals('String is returned',tsqlString,FScanner.FetchToken);
- AssertEquals('Correct string',#13,FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestOptionsoBackslashEscapesBackSlash;
- begin
- CreateScanner('''\\''',[soBackslashEscapes]);
- AssertEquals('String is returned',tsqlString,FScanner.FetchToken);
- AssertEquals('Correct string','\',FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestOptionsoBackslashEscapesNewPage;
- begin
- CreateScanner('''\f''',[soBackslashEscapes]);
- AssertEquals('String is returned',tsqlString,FScanner.FetchToken);
- AssertEquals('Correct string',#12,FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestOptionsoBackslashEscapesSlash;
- begin
- CreateScanner('''\/''',[soBackslashEscapes]);
- AssertEquals('String is returned',tsqlString,FScanner.FetchToken);
- AssertEquals('Correct string','/',FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestOptionsoBackslashEscapesBackspace;
- begin
- CreateScanner('''\f''',[soBackslashEscapes]);
- AssertEquals('String is returned',tsqlString,FScanner.FetchToken);
- AssertEquals('Correct string',#12,FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestOptionsoBackslashEscapesQuote;
- begin
- CreateScanner('''\''''',[soBackslashEscapes]);
- AssertEquals('String is returned',tsqlString,FScanner.FetchToken);
- AssertEquals('Correct string','''',FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestOptionsoBackslashEscapesDoubleQuote;
- begin
- CreateScanner('''\"''',[soBackslashEscapes]);
- AssertEquals('String is returned',tsqlString,FScanner.FetchToken);
- AssertEquals('Correct string','"',FScanner.CurTokenString);
- end;
- procedure TTestSQLScanner.TestOptionNosoBackslashEscapes;
- begin
- CreateScanner('''\"''',[]);
- AssertEquals('String is returned',tsqlString,FScanner.FetchToken);
- AssertEquals('Correct string','\"',FScanner.CurTokenString);
- end;
- initialization
- RegisterTest(TTestSQLScanner);
- end.
|