Skip to content

Commit 459c2dd

Browse files
authored
Merge pull request #562 from Handlebars-Net/stef-LiteralConverter
Fix LiteralConverter to support long
2 parents 50614fd + 0838af8 commit 459c2dd

5 files changed

Lines changed: 69 additions & 32 deletions

File tree

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@ jobs:
6060
uses: actions/setup-dotnet@v1
6161
with:
6262
dotnet-version: 3.1.x
63-
- uses: actions/setup-java@v1
63+
- uses: actions/setup-java@v4
6464
with:
65-
java-version: '13' # The JDK version to make available on the path.
65+
java-version: '17' # The JDK version to make available on the path.
6666
- name: Clean package cache as a temporary workaround for https://github.com/actions/setup-dotnet/issues/155
6767
working-directory: ./source
6868
run: dotnet clean -c Release && dotnet nuget locals all --clear

.github/workflows/pull_request.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ jobs:
6262
dotnet-version: 3.1.x
6363
- uses: actions/setup-java@v1
6464
with:
65-
java-version: '13' # The JDK version to make available on the path.
65+
java-version: '17' # The JDK version to make available on the path.
6666
- name: Clean package cache as a temporary workaround for https://github.com/actions/setup-dotnet/issues/155
6767
working-directory: ./source
6868
run: dotnet clean -c Release && dotnet nuget locals all --clear

source/Handlebars.Test/NumericLiteralTests.cs

Lines changed: 40 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using System;
2-
using System.Linq;
3-
using HandlebarsDotNet.Compiler;
1+
using System.Linq;
42
using Xunit;
53

64
namespace HandlebarsDotNet.Test
@@ -14,10 +12,37 @@ public NumericLiteralTests()
1412
var arr = args.AsEnumerable().Select(a => (object)int.Parse(a.ToString()));
1513
writer.Write(arr.Aggregate(0, (a, i) => a + (int)i));
1614
});
15+
16+
Handlebars.RegisterHelper("longAdd", (writer, context, args) =>
17+
{
18+
var arr = args.AsEnumerable().Select(a => long.Parse(a.ToString()));
19+
var sum = arr.Sum();
20+
writer.Write(sum);
21+
});
22+
}
23+
24+
[Theory]
25+
[InlineData("{{longAdd 1000000000 9999999999}}")]
26+
[InlineData("{{longAdd 1000000000 9999999999}}")]
27+
[InlineData("{{longAdd 1000000000 9999999999 }}")]
28+
[InlineData("{{longAdd 1000000000 9999999999}}")]
29+
[InlineData("{{longAdd 1000000000 9999999999}}")]
30+
[InlineData("{{longAdd 1000000000 \"9999999999\"}}")]
31+
[InlineData("{{longAdd 1000000000 \"9999999999\" }}")]
32+
[InlineData("{{longAdd 1000000000 \"9999999999\"}}")]
33+
[InlineData("{{longAdd 1000000000 \"9999999999\" }}")]
34+
[InlineData("{{longAdd \"1000000000\" 9999999999}}")]
35+
[InlineData("{{longAdd \"1000000000\" \"9999999999\"}}")]
36+
public void NumericLiteralLongTests(string source)
37+
{
38+
var template = Handlebars.Compile(source);
39+
var data = new { };
40+
var result = template(data);
41+
Assert.Equal("10999999999", result);
1742
}
1843

1944
[Fact]
20-
public void NumericLiteralTest1()
45+
public void NumericLiteralIntegerTest1()
2146
{
2247
var source = "{{numericLiteralAdd 3 4}}";
2348
var template = Handlebars.Compile(source);
@@ -27,7 +52,7 @@ public void NumericLiteralTest1()
2752
}
2853

2954
[Fact]
30-
public void NumericLiteralTest2()
55+
public void NumericLiteralIntegerTest2()
3156
{
3257
var source = "{{numericLiteralAdd 3 4}}";
3358
var template = Handlebars.Compile(source);
@@ -37,7 +62,7 @@ public void NumericLiteralTest2()
3762
}
3863

3964
[Fact]
40-
public void NumericLiteralTest3()
65+
public void NumericLiteralIntegerTest3()
4166
{
4267
var source = "{{numericLiteralAdd 3 4 }}";
4368
var template = Handlebars.Compile(source);
@@ -47,7 +72,7 @@ public void NumericLiteralTest3()
4772
}
4873

4974
[Fact]
50-
public void NumericLiteralTest4()
75+
public void NumericLiteralIntegerTest4()
5176
{
5277
var source = "{{numericLiteralAdd 3 4 }}";
5378
var template = Handlebars.Compile(source);
@@ -57,7 +82,7 @@ public void NumericLiteralTest4()
5782
}
5883

5984
[Fact]
60-
public void NumericLiteralTest5()
85+
public void NumericLiteralIntegerTest5()
6186
{
6287
var source = "{{numericLiteralAdd 3 4 }}";
6388
var template = Handlebars.Compile(source);
@@ -67,7 +92,7 @@ public void NumericLiteralTest5()
6792
}
6893

6994
[Fact]
70-
public void NumericLiteralTest6()
95+
public void NumericLiteralIntegerTest6()
7196
{
7297
var source = "{{numericLiteralAdd 3 \"4\"}}";
7398
var template = Handlebars.Compile(source);
@@ -77,7 +102,7 @@ public void NumericLiteralTest6()
77102
}
78103

79104
[Fact]
80-
public void NumericLiteralTest7()
105+
public void NumericLiteralIntegerTest7()
81106
{
82107
var source = "{{numericLiteralAdd 3 \"4\" }}";
83108
var template = Handlebars.Compile(source);
@@ -87,7 +112,7 @@ public void NumericLiteralTest7()
87112
}
88113

89114
[Fact]
90-
public void NumericLiteralTest8()
115+
public void NumericLiteralIntegerTest8()
91116
{
92117
var source = "{{numericLiteralAdd 3 \"4\" }}";
93118
var template = Handlebars.Compile(source);
@@ -97,7 +122,7 @@ public void NumericLiteralTest8()
97122
}
98123

99124
[Fact]
100-
public void NumericLiteralTest9()
125+
public void NumericLiteralIntegerTest9()
101126
{
102127
var source = "{{numericLiteralAdd 3 \"4\" }}";
103128
var template = Handlebars.Compile(source);
@@ -107,7 +132,7 @@ public void NumericLiteralTest9()
107132
}
108133

109134
[Fact]
110-
public void NumericLiteralTest10()
135+
public void NumericLiteralIntegerTest10()
111136
{
112137
var source = "{{numericLiteralAdd \"3\" 4}}";
113138
var template = Handlebars.Compile(source);
@@ -117,7 +142,7 @@ public void NumericLiteralTest10()
117142
}
118143

119144
[Fact]
120-
public void NumericLiteralTest11()
145+
public void NumericLiteralIntegerTest11()
121146
{
122147
var source = "{{numericLiteralAdd \"3\" 4 }}";
123148
var template = Handlebars.Compile(source);
@@ -126,5 +151,4 @@ public void NumericLiteralTest11()
126151
Assert.Equal("7", result);
127152
}
128153
}
129-
}
130-
154+
}

source/Handlebars.sln

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,19 @@ EndProject
99
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{E9AC0BCD-C060-4634-BBBB-636167C809B4}"
1010
ProjectSection(SolutionItems) = preProject
1111
Directory.Build.props = Directory.Build.props
12+
..\.github\workflows\pull_request.yml = ..\.github\workflows\pull_request.yml
1213
..\README.md = ..\README.md
1314
EndProjectSection
1415
EndProject
1516
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Handlebars.Benchmark", "Handlebars.Benchmark\Handlebars.Benchmark.csproj", "{417E2E51-2DD2-4045-84E5-BA66484E957B}"
1617
EndProject
18+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Github Actions", "Github Actions", "{0683EE49-625C-473D-B600-079FDB9AF55B}"
19+
ProjectSection(SolutionItems) = preProject
20+
..\.github\workflows\ci.yml = ..\.github\workflows\ci.yml
21+
..\.github\workflows\pull_request.yml = ..\.github\workflows\pull_request.yml
22+
..\.github\workflows\release.yml = ..\.github\workflows\release.yml
23+
EndProjectSection
24+
EndProject
1725
Global
1826
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1927
Debug|Any CPU = Debug|Any CPU

source/Handlebars/Compiler/Lexer/Converter/LiteralConverter.cs

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
1-
using System;
21
using System.Collections.Generic;
3-
using HandlebarsDotNet.Compiler.Lexer;
4-
using System.Linq.Expressions;
52
using System.Linq;
3+
using System.Linq.Expressions;
4+
using HandlebarsDotNet.Compiler.Lexer;
65

76
namespace HandlebarsDotNet.Compiler
87
{
98
internal class LiteralConverter : TokenConverter
109
{
1110
private static readonly LiteralConverter Converter = new LiteralConverter();
12-
11+
1312
public static IEnumerable<object> Convert(IEnumerable<object> sequence)
1413
{
1514
return Converter.ConvertTokens(sequence).ToList();
@@ -28,15 +27,22 @@ public override IEnumerable<object> ConvertTokens(IEnumerable<object> sequence)
2827
switch (item)
2928
{
3029
case LiteralExpressionToken literalExpression:
31-
{
32-
result = Expression.Convert(Expression.Constant(literalExpression.Value), typeof(object));
33-
if (!literalExpression.IsDelimitedLiteral && int.TryParse(literalExpression.Value, out var intValue))
3430
{
35-
result = Expression.Convert(Expression.Constant(intValue), typeof(object));
31+
result = Expression.Convert(Expression.Constant(literalExpression.Value), typeof(object));
32+
if (!literalExpression.IsDelimitedLiteral)
33+
{
34+
if (int.TryParse(literalExpression.Value, out var intValue))
35+
{
36+
result = Expression.Convert(Expression.Constant(intValue), typeof(object));
37+
}
38+
else if (long.TryParse(literalExpression.Value, out var longValue))
39+
{
40+
result = Expression.Convert(Expression.Constant(longValue), typeof(object));
41+
}
42+
}
43+
44+
break;
3645
}
37-
38-
break;
39-
}
4046

4147
case WordExpressionToken wordExpression when bool.TryParse(wordExpression.Value, out var boolValue):
4248
result = Expression.Convert(Expression.Constant(boolValue), typeof(object));
@@ -47,5 +53,4 @@ public override IEnumerable<object> ConvertTokens(IEnumerable<object> sequence)
4753
}
4854
}
4955
}
50-
}
51-
56+
}

0 commit comments

Comments
 (0)