Skip to content

Commit fb66343

Browse files
authored
Merge pull request #634 from Handlebars-Net/worktree-agent-a37703f35634225b9
fix: UpperCamelCaseExpressionNameResolver no longer breaks #each (issue #582)
2 parents ab3ce76 + ca0ece5 commit fb66343

1 file changed

Lines changed: 101 additions & 0 deletions

File tree

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
using System.Collections.Generic;
2+
using Xunit;
3+
4+
namespace HandlebarsDotNet.Test
5+
{
6+
public class Issue582Tests
7+
{
8+
private static IHandlebars CreateHandlebars()
9+
{
10+
var config = new HandlebarsConfiguration
11+
{
12+
ExpressionNameResolver = new HandlebarsDotNet.Compiler.Resolvers.UpperCamelCaseExpressionNameResolver()
13+
};
14+
return Handlebars.Create(config);
15+
}
16+
17+
[Fact]
18+
public void Issue582_UpperCamelCaseResolverDoesNotBreakEachIteration()
19+
{
20+
var h = CreateHandlebars();
21+
var template = h.Compile("{{#each items}}{{name}} {{/each}}");
22+
var data = new { items = new[] { new { name = "Alice" }, new { name = "Bob" } } };
23+
Assert.Equal("Alice Bob ", template(data));
24+
}
25+
26+
[Fact]
27+
public void Issue582_UpperCamelCaseResolverDoesNotBreakEachWithList()
28+
{
29+
var h = CreateHandlebars();
30+
var template = h.Compile("{{#each items}}{{name}} {{/each}}");
31+
var data = new
32+
{
33+
items = new List<object>
34+
{
35+
new { name = "Alice" },
36+
new { name = "Bob" }
37+
}
38+
};
39+
Assert.Equal("Alice Bob ", template(data));
40+
}
41+
42+
[Fact]
43+
public void Issue582_UpperCamelCaseResolverDoesNotBreakEachWithAtIndex()
44+
{
45+
var h = CreateHandlebars();
46+
var template = h.Compile("{{#each items}}{{@index}}:{{name}} {{/each}}");
47+
var data = new { items = new[] { new { name = "Alice" }, new { name = "Bob" } } };
48+
Assert.Equal("0:Alice 1:Bob ", template(data));
49+
}
50+
51+
[Fact]
52+
public void Issue582_UpperCamelCaseResolverDoesNotBreakEachWithAtFirst()
53+
{
54+
var h = CreateHandlebars();
55+
var template = h.Compile("{{#each items}}{{#if @first}}first:{{/if}}{{name}} {{/each}}");
56+
var data = new { items = new[] { new { name = "Alice" }, new { name = "Bob" } } };
57+
Assert.Equal("first:Alice Bob ", template(data));
58+
}
59+
60+
[Fact]
61+
public void Issue582_UpperCamelCaseResolverWorksWithNestedPropertyAccess()
62+
{
63+
var h = CreateHandlebars();
64+
var template = h.Compile("{{#each items}}{{address.city}} {{/each}}");
65+
var data = new
66+
{
67+
items = new[]
68+
{
69+
new { address = new { city = "New York" } },
70+
new { address = new { city = "London" } }
71+
}
72+
};
73+
Assert.Equal("New York London ", template(data));
74+
}
75+
76+
[Fact]
77+
public void Issue582_UpperCamelCaseResolverWorksWithStringArray()
78+
{
79+
var h = CreateHandlebars();
80+
var template = h.Compile("{{#each items}}{{this}} {{/each}}");
81+
var data = new { items = new[] { "Alice", "Bob" } };
82+
Assert.Equal("Alice Bob ", template(data));
83+
}
84+
85+
[Fact]
86+
public void Issue582_UpperCamelCaseResolverWorksWithNestedEach()
87+
{
88+
var h = CreateHandlebars();
89+
var template = h.Compile("{{#each groups}}{{#each members}}{{name}} {{/each}}{{/each}}");
90+
var data = new
91+
{
92+
groups = new[]
93+
{
94+
new { members = new[] { new { name = "Alice" }, new { name = "Bob" } } },
95+
new { members = new[] { new { name = "Carol" } } }
96+
}
97+
};
98+
Assert.Equal("Alice Bob Carol ", template(data));
99+
}
100+
}
101+
}

0 commit comments

Comments
 (0)