Skip to content

Commit 47752b7

Browse files
committed
Improve case tests
1 parent 20fb0c5 commit 47752b7

File tree

2 files changed

+49
-26
lines changed

2 files changed

+49
-26
lines changed

Fluid.Tests/TemplateTests.cs

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1145,49 +1145,61 @@ public async Task RawStatementShouldOutputSameText()
11451145
}
11461146

11471147
[Fact]
1148-
public async Task DefaultMemberStrategyShouldSupportCamelCase()
1148+
public void DictionaryShouldWorkWithComparers_SnakeCase()
1149+
{
1150+
var comparer = StringComparers.SnakeCase;
1151+
var dict = new Dictionary<string, string>(comparer);
1152+
dict["FirstName"] = "Sebastien";
1153+
Assert.True(dict.ContainsKey("first_name"));
1154+
Assert.Equal("Sebastien", dict["first_name"]);
1155+
}
1156+
1157+
[Fact]
1158+
public async Task DefaultMemberStrategyShouldSupportSnakeCase()
11491159
{
11501160
var model = new { FirstName = "Sebastien" };
1151-
var source = "{{ firstName }}";
1152-
var expected = "Sebastien";
1161+
var source = "{{ first_name }} {{ last_name }}";
11531162

11541163
_parser.TryParse(source, out var template, out var error);
11551164

1156-
var options = new TemplateOptions();
1157-
options.ModelNamesComparer = StringComparers.CamelCase;
1165+
var options = new TemplateOptions() { ModelNamesComparer = StringComparers.SnakeCase };
11581166
var context = new TemplateContext(model, options);
1167+
context.SetValue("LastName", "Ros");
11591168

11601169
var result = await template.RenderAsync(context);
1161-
Assert.Equal(expected, result);
1170+
Assert.Equal("Sebastien Ros", result);
11621171
}
11631172

11641173
[Fact]
1165-
public async Task DefaultMemberStrategyShouldSupportSnakeCase()
1174+
public async Task DefaultMemberStrategyShouldSupportCamelCase()
11661175
{
11671176
var model = new { FirstName = "Sebastien" };
1168-
var source = "{{ first_name }}";
1169-
var expected = "Sebastien";
1177+
var source = "{{ firstName }} {{ lastName}}";
11701178

11711179
_parser.TryParse(source, out var template, out var error);
11721180

1173-
var options = new TemplateOptions() { ModelNamesComparer = StringComparers.SnakeCase };
1181+
var options = new TemplateOptions() { ModelNamesComparer = StringComparers.CamelCase };
11741182
var context = new TemplateContext(model, options);
1183+
context.SetValue("LastName", "Ros");
11751184

11761185
var result = await template.RenderAsync(context);
1177-
Assert.Equal(expected, result);
1186+
Assert.Equal("Sebastien Ros", result);
11781187
}
11791188

1180-
[Fact(Skip = "Refactoring")]
1181-
public void MemberNameStrategiesHandleSuccessiveUppercase()
1189+
[Fact]
1190+
public async Task DefaultMemberStrategyShouldSupportAnyCase()
11821191
{
1183-
var model = new { UVIndex = "" };
1184-
var memberInfo = model.GetType().GetProperty("UVIndex");
1192+
var model = new { FirstName = "Sebastien" };
1193+
var source = "{{ fIrSTnAme }} {{ lAsTnAme}}";
11851194

1186-
//var camelCase = MemberNameStrategies.CamelCase(memberInfo);
1187-
//var snakeCase = MemberNameStrategies.SnakeCase(memberInfo);
1195+
_parser.TryParse(source, out var template, out var error);
11881196

1189-
//Assert.Equal("uvIndex", camelCase);
1190-
//Assert.Equal("uv_index", snakeCase);
1197+
var options = new TemplateOptions() { ModelNamesComparer = StringComparer.OrdinalIgnoreCase };
1198+
var context = new TemplateContext(model, options);
1199+
context.SetValue("LastName", "Ros");
1200+
1201+
var result = await template.RenderAsync(context);
1202+
Assert.Equal("Sebastien Ros", result);
11911203
}
11921204

11931205
[Fact]

Fluid/MemberNameStrategies.cs

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
using System.Text;
21
using System.Text.Json;
32

43
namespace Fluid
@@ -13,31 +12,43 @@ public sealed class CamelCaseStringComparer : StringComparer
1312
{
1413
public override int Compare(string x, string y)
1514
{
16-
return JsonNamingPolicy.CamelCase.ConvertName(x).CompareTo(y);
15+
var cx = JsonNamingPolicy.CamelCase.ConvertName(x);
16+
var cy = JsonNamingPolicy.CamelCase.ConvertName(y);
17+
return string.Compare(cx, cy, StringComparison.Ordinal);
1718
}
19+
1820
public override bool Equals(string x, string y)
1921
{
20-
return JsonNamingPolicy.CamelCase.ConvertName(x).Equals(y, StringComparison.OrdinalIgnoreCase);
22+
var cx = JsonNamingPolicy.CamelCase.ConvertName(x);
23+
var cy = JsonNamingPolicy.CamelCase.ConvertName(y);
24+
return string.Equals(cx, cy, StringComparison.Ordinal);
2125
}
26+
2227
public override int GetHashCode(string obj)
2328
{
24-
return StringComparer.OrdinalIgnoreCase.GetHashCode(obj);
29+
return JsonNamingPolicy.CamelCase.ConvertName(obj).GetHashCode();
2530
}
2631
}
2732

2833
public sealed class SnakeCaseStringComparer : StringComparer
2934
{
3035
public override int Compare(string x, string y)
3136
{
32-
return JsonNamingPolicy.SnakeCaseLower.ConvertName(x).CompareTo(y);
37+
var cx = JsonNamingPolicy.SnakeCaseLower.ConvertName(x);
38+
var cy = JsonNamingPolicy.SnakeCaseLower.ConvertName(y);
39+
return string.Compare(cx, cy, StringComparison.Ordinal);
3340
}
41+
3442
public override bool Equals(string x, string y)
3543
{
36-
return JsonNamingPolicy.SnakeCaseLower.ConvertName(x).Equals(y, StringComparison.OrdinalIgnoreCase);
44+
var cx = JsonNamingPolicy.SnakeCaseLower.ConvertName(x);
45+
var cy = JsonNamingPolicy.SnakeCaseLower.ConvertName(y);
46+
return string.Equals(cx, cy, StringComparison.Ordinal);
3747
}
48+
3849
public override int GetHashCode(string obj)
3950
{
40-
return StringComparer.OrdinalIgnoreCase.GetHashCode(obj);
51+
return JsonNamingPolicy.SnakeCaseLower.ConvertName(obj).GetHashCode();
4152
}
4253
}
4354
}

0 commit comments

Comments
 (0)