pas2js/demo/regexp/demoregex.lpr
2024-08-30 23:16:43 +02:00

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.