Skip to content

Commit f4645e1

Browse files
authored
Merge pull request #204 from sempare/test-error-msg
improved error messages #202
2 parents 8852553 + c803a6d commit f4645e1

File tree

4 files changed

+34
-23
lines changed

4 files changed

+34
-23
lines changed

src/Sempare.Template.Context.pas

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ interface
9999
procedure Unmanage(const AObject: TObject);
100100
end;
101101

102-
TGetRttiContext = reference to function : PRttiContext;
102+
TGetRttiContext = reference to function: PRttiContext;
103103

104104
ITemplateContext = interface
105105
['{979D955C-B4BD-46BB-9430-1E74CBB999D4}']
@@ -428,7 +428,10 @@ procedure TTemplateContext.ClearTemplates;
428428

429429
constructor TTemplateContext.Create(const AOptions: TTemplateEvaluationOptions);
430430
begin
431-
FRttiContext := function : PRttiContext begin exit(@GRttiContext) end;
431+
FRttiContext := function: PRttiContext
432+
begin
433+
exit(@GRttiContext)
434+
end;
432435
FOptions := AOptions + [eoFlattenTemplate, eoOptimiseTemplate];
433436
FMaxRuntimeMs := GDefaultRuntimeMS;
434437
FPrettyPrintOutput := GPrettyPrintOutput;

src/Sempare.Template.Evaluate.pas

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1169,6 +1169,8 @@ procedure TEvaluationTemplateVisitor.Visit(const AExpr: IMethodCallExpr);
11691169
LResult := '';
11701170
FEvalStack.push(LResult);
11711171
except
1172+
on ETemplateEvaluationError do
1173+
raise;
11721174
on e: exception do
11731175
RaiseError(AExpr, AExpr.Method + ':' + e.Message);
11741176
end;

tests/Sempare.Template.Test.pas

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,9 @@ TTestTemplate = class
130130

131131
[Test]
132132
procedure TestVariableResolver;
133+
134+
[Test]
135+
procedure TestErrorClosingScript;
133136
end;
134137

135138
type
@@ -713,19 +716,21 @@ procedure TTestTemplate.TestDecimalEncodingErrorWithLists;
713716
ctx.DecimalSeparator := ',';
714717
ctx.ValueSeparator := ';';
715718
Assert.AreEqual('', Template.Eval(ctx, '<% a := ["a"; "b"] %>'));
716-
Assert.WillRaise(
719+
Assert.WillRaiseWithMessage(
717720
procedure
718721
begin // expecting ;
722+
719723
Assert.AreEqual('', Template.Eval(ctx, '<% a := ["a", "b"] %>'));
720-
end);
724+
725+
end, ETemplateEvaluationError, ' (Line 1, Column 14) Parsing error. Expecting: ;');
721726
ctx.DecimalSeparator := '.';
722727
ctx.ValueSeparator := ',';
723728
Assert.AreEqual('', Template.Eval(ctx, '<% a := ["a", "b"] %>'));
724729
Assert.WillRaise(
725730
procedure
726731
begin // expecting ,
727732
Assert.AreEqual('', Template.Eval(ctx, '<% a := ["a"; "b"] %>'));
728-
end);
733+
end, ETemplateEvaluationError, ' (Line 1, Column 14) Parsing error. Expecting: ,');
729734
end;
730735

731736
procedure TTestTemplate.TestDecimalEncodingErrorWithListsDefaultValueSeparator;
@@ -790,6 +795,15 @@ procedure TTestTemplate.TestEmpty;
790795
Assert.AreEqual('', Template.Eval(''));
791796
end;
792797

798+
procedure TTestTemplate.TestErrorClosingScript;
799+
begin
800+
Assert.WillRaiseWithMessage(
801+
procedure
802+
begin
803+
Template.Parse('<% %');
804+
end, ETemplateEvaluationError, ' (Line 1, Column 4) Parsing error. Expecting: %>');
805+
end;
806+
793807
procedure TTestTemplate.TestException;
794808
var
795809
LContext: ITemplateContext;
@@ -866,11 +880,13 @@ procedure TTestTemplate.TestVariableNotFoundException;
866880
begin
867881
LCtx := Template.Context();
868882
LCtx.Options := LCtx.Options + [eoRaiseErrorWhenVariableNotFound];
869-
Assert.WillRaise(
883+
Assert.WillRaiseWithMessage(
870884
procedure
871885
begin // expects abc
886+
872887
Assert.AreEqual('', Template.Eval(LCtx, '<% abc %>'));
873-
end);
888+
889+
end, ETemplateEvaluationError, ' (Line 1, Column 4) Cannot find variable ''abc''');
874890
end;
875891

876892
procedure TTestTemplate.TestVariableResolver;

tests/Sempare.Template.TestFunctions.pas

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -726,32 +726,22 @@ procedure TFunctionTest.TestCallingNonExistingMethod;
726726
var
727727
LRec1: TMyId1;
728728
begin
729-
Assert.WillRaise(
729+
Assert.WillRaiseWithMessage(
730730
procedure
731731
begin
732-
try
733-
Template.Eval('<% _.nonexisting() %>', LRec1);
734-
except
735-
on e: exception do
736-
raise;
737-
end;
738-
end);
732+
Template.Eval('<% _.nonexisting() %>', LRec1);
733+
end, ETemplateEvaluationError, ' (Line 1, Column 18) Method TMyId1.nonexisting does not exist.');
739734
end;
740735

741736
procedure TFunctionTest.TestCallingNonExistingFunction;
742737
var
743738
LRec1: TMyId1;
744739
begin
745-
Assert.WillRaise(
740+
Assert.WillRaiseWithMessage(
746741
procedure
747742
begin
748-
try
749-
Template.Eval('<% nonexisting() %>', LRec1);
750-
except
751-
on e: exception do
752-
raise;
753-
end;
754-
end);
743+
Template.Eval('<% nonexisting() %>', LRec1);
744+
end, ETemplateEvaluationError, ' (Line 1, Column 16) Function nonexisting not registered in context.');
755745
end;
756746

757747
initialization

0 commit comments

Comments
 (0)