mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-07-09 00:15:50 +02:00
125 lines
2.9 KiB
ObjectPascal
125 lines
2.9 KiB
ObjectPascal
program demoregex;
|
|
|
|
{$mode objfpc}
|
|
|
|
uses
|
|
browserconsole, JS, Classes, SysUtils, Web, fpexprpars, db,jsondataset;
|
|
|
|
Procedure AssertTrue(Msg : String; B : Boolean);
|
|
|
|
begin
|
|
if not B then
|
|
Writeln('Failed: '+Msg)
|
|
else
|
|
Writeln('OK: '+Msg);
|
|
end;
|
|
|
|
Procedure TestEx;
|
|
|
|
var
|
|
Ex : TFPExpressionParser;
|
|
|
|
begin
|
|
Ex:=TFPExpressionParser.Create(Nil);
|
|
Ex.AllowLike:=True;
|
|
Ex.Identifiers.AddStringVariable('aField','Michael');
|
|
Ex.Expression:='aField like ''M%''';
|
|
AssertTrue('M% on match',Ex.AsBoolean);
|
|
Ex.IdentifierByName('aField').AsString:='Aimee';
|
|
AssertTrue('M% on no match (not beginning)',not Ex.AsBoolean);
|
|
Ex.IdentifierByName('aField').AsString:='Liesbet';
|
|
AssertTrue('M% on not match',Not Ex.AsBoolean);
|
|
Ex.IdentifierByName('aField').AsString:='Liam';
|
|
Ex.Expression:='aField like ''%M''';
|
|
AssertTrue('%M on match',Ex.AsBoolean);
|
|
Ex.IdentifierByName('aField').AsString:='Aimee';
|
|
AssertTrue('%M on no match (not end)',not Ex.AsBoolean);
|
|
end;
|
|
|
|
Procedure TestEx2;
|
|
|
|
var
|
|
Ex : TFPExpressionParser;
|
|
|
|
begin
|
|
Ex:=TFPExpressionParser.Create(Nil);
|
|
Ex.AllowLike:=True;
|
|
Ex.Identifiers.AddStringVariable('aField','Michael');
|
|
Ex.Expression:='aField like ''%e%''';
|
|
AssertTrue('%e% on match',Ex.AsBoolean);
|
|
Ex.IdentifierByName('aField').AsString:='Sara';
|
|
AssertTrue('%e% on not match',Not Ex.AsBoolean);
|
|
Ex.IdentifierByName('aField').AsString:='Liesbet';
|
|
AssertTrue('%e% on match 2',Ex.AsBoolean);
|
|
end;
|
|
|
|
|
|
Procedure TestDotted;
|
|
|
|
var
|
|
Ex : TFPExpressionParser;
|
|
|
|
begin
|
|
Ex:=TFPExpressionParser.Create(Nil);
|
|
Ex.AllowLike:=True;
|
|
Ex.Identifiers.AddStringVariable('aField','12.14.2023');
|
|
Ex.Expression:='aField like ''%.%.%''';
|
|
AssertTrue('%.%.% on match',Ex.AsBoolean);
|
|
Ex.IdentifierByName('aField').AsString:='Liesbet';
|
|
AssertTrue('%.%.% on not match',Not Ex.AsBoolean);
|
|
end;
|
|
|
|
Procedure TestUnderscore;
|
|
|
|
var
|
|
Ex : TFPExpressionParser;
|
|
|
|
begin
|
|
Ex:=TFPExpressionParser.Create(Nil);
|
|
Ex.AllowLike:=True;
|
|
Ex.Identifiers.AddStringVariable('aField','man');
|
|
Ex.Expression:='aField like ''M_n''';
|
|
AssertTrue('M_n on match',Ex.AsBoolean);
|
|
Ex.IdentifierByName('aField').AsString:='moon';
|
|
AssertTrue('M_n on not match',Not Ex.AsBoolean);
|
|
Ex.IdentifierByName('aField').AsString:='mon';
|
|
AssertTrue('M_n on match 2',Ex.AsBoolean);
|
|
end;
|
|
|
|
Procedure TestDatasetFilter;
|
|
|
|
var
|
|
DS : TJSONDataset;
|
|
|
|
begin
|
|
DS:=TJSONDataset.Create(Nil);
|
|
DS.FieldDefs.Add('name',ftString,50);
|
|
DS.Open;
|
|
DS.AppendRecord(['Michael']);
|
|
DS.AppendRecord(['mattias']);
|
|
DS.AppendRecord(['Bruno']);
|
|
DS.AppendRecord(['Detlef']);
|
|
DS.AppendRecord(['Aimee']);
|
|
AssertTrue('RecordCount',5=DS.RecordCount);
|
|
DS.First;
|
|
DS.Filter:='(name like ''M%'')';
|
|
DS.Filtered:=True;
|
|
AssertTrue('First',DS.Fields[0].AsString='Michael');
|
|
DS.Next;
|
|
AssertTrue('Second',DS.Fields[0].AsString='mattias');
|
|
DS.Next;
|
|
AssertTrue('EOf',DS.EOF);
|
|
DS.Free;
|
|
end;
|
|
|
|
|
|
|
|
|
|
begin
|
|
testex;
|
|
testex2;
|
|
TestDotted;
|
|
TestUnderscore;
|
|
TestDatasetFilter;
|
|
end.
|