demoregex.lpr 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. program demoregex;
  2. {$mode objfpc}
  3. uses
  4. browserconsole, JS, Classes, SysUtils, Web, fpexprpars, db,jsondataset;
  5. Procedure AssertTrue(Msg : String; B : Boolean);
  6. begin
  7. if not B then
  8. Writeln('Failed: '+Msg)
  9. else
  10. Writeln('OK: '+Msg);
  11. end;
  12. Procedure TestEx;
  13. var
  14. Ex : TFPExpressionParser;
  15. begin
  16. Ex:=TFPExpressionParser.Create(Nil);
  17. Ex.AllowLike:=True;
  18. Ex.Identifiers.AddStringVariable('aField','Michael');
  19. Ex.Expression:='aField like ''M%''';
  20. AssertTrue('M% on match',Ex.AsBoolean);
  21. Ex.IdentifierByName('aField').AsString:='Aimee';
  22. AssertTrue('M% on no match (not beginning)',not Ex.AsBoolean);
  23. Ex.IdentifierByName('aField').AsString:='Liesbet';
  24. AssertTrue('M% on not match',Not Ex.AsBoolean);
  25. Ex.IdentifierByName('aField').AsString:='Liam';
  26. Ex.Expression:='aField like ''%M''';
  27. AssertTrue('%M on match',Ex.AsBoolean);
  28. Ex.IdentifierByName('aField').AsString:='Aimee';
  29. AssertTrue('%M on no match (not end)',not Ex.AsBoolean);
  30. end;
  31. Procedure TestEx2;
  32. var
  33. Ex : TFPExpressionParser;
  34. begin
  35. Ex:=TFPExpressionParser.Create(Nil);
  36. Ex.AllowLike:=True;
  37. Ex.Identifiers.AddStringVariable('aField','Michael');
  38. Ex.Expression:='aField like ''%e%''';
  39. AssertTrue('%e% on match',Ex.AsBoolean);
  40. Ex.IdentifierByName('aField').AsString:='Sara';
  41. AssertTrue('%e% on not match',Not Ex.AsBoolean);
  42. Ex.IdentifierByName('aField').AsString:='Liesbet';
  43. AssertTrue('%e% on match 2',Ex.AsBoolean);
  44. end;
  45. Procedure TestDotted;
  46. var
  47. Ex : TFPExpressionParser;
  48. begin
  49. Ex:=TFPExpressionParser.Create(Nil);
  50. Ex.AllowLike:=True;
  51. Ex.Identifiers.AddStringVariable('aField','12.14.2023');
  52. Ex.Expression:='aField like ''%.%.%''';
  53. AssertTrue('%.%.% on match',Ex.AsBoolean);
  54. Ex.IdentifierByName('aField').AsString:='Liesbet';
  55. AssertTrue('%.%.% on not match',Not Ex.AsBoolean);
  56. end;
  57. Procedure TestUnderscore;
  58. var
  59. Ex : TFPExpressionParser;
  60. begin
  61. Ex:=TFPExpressionParser.Create(Nil);
  62. Ex.AllowLike:=True;
  63. Ex.Identifiers.AddStringVariable('aField','man');
  64. Ex.Expression:='aField like ''M_n''';
  65. AssertTrue('M_n on match',Ex.AsBoolean);
  66. Ex.IdentifierByName('aField').AsString:='moon';
  67. AssertTrue('M_n on not match',Not Ex.AsBoolean);
  68. Ex.IdentifierByName('aField').AsString:='mon';
  69. AssertTrue('M_n on match 2',Ex.AsBoolean);
  70. end;
  71. Procedure TestDatasetFilter;
  72. var
  73. DS : TJSONDataset;
  74. begin
  75. DS:=TJSONDataset.Create(Nil);
  76. DS.FieldDefs.Add('name',ftString,50);
  77. DS.Open;
  78. DS.AppendRecord(['Michael']);
  79. DS.AppendRecord(['mattias']);
  80. DS.AppendRecord(['Bruno']);
  81. DS.AppendRecord(['Detlef']);
  82. DS.AppendRecord(['Aimee']);
  83. AssertTrue('RecordCount',5=DS.RecordCount);
  84. DS.First;
  85. DS.Filter:='(name like ''M%'')';
  86. DS.Filtered:=True;
  87. AssertTrue('First',DS.Fields[0].AsString='Michael');
  88. DS.Next;
  89. AssertTrue('Second',DS.Fields[0].AsString='mattias');
  90. DS.Next;
  91. AssertTrue('EOf',DS.EOF);
  92. DS.Free;
  93. end;
  94. begin
  95. testex;
  96. testex2;
  97. TestDotted;
  98. TestUnderscore;
  99. TestDatasetFilter;
  100. end.