diff --git a/source/Handlebars.Test/IssueTests.cs b/source/Handlebars.Test/IssueTests.cs index ae57657c..cb5b5531 100644 --- a/source/Handlebars.Test/IssueTests.cs +++ b/source/Handlebars.Test/IssueTests.cs @@ -726,6 +726,42 @@ public void UnrecognisedExpressionThrowsOutOfMemoryException() Assert.Throws(()=> Handlebars.Compile(source)); } + // Issue: https://github.com/Handlebars-Net/Handlebars.Net/issues/521 + // Hashtable with an uppercase key should be accessible using the same-cased expression. + // The IDictionary accessor was incorrectly lowercasing the lookup key. + [Fact] + public void HashtableUppercaseKeyResolvesWithMatchingExpression() + { + var template = Handlebars.Compile("Hello {{NAME}}"); + var result = template(new Hashtable { { "NAME", "alice" } }); + Assert.Equal("Hello alice", result); + } + + [Fact] + public void HashtableLowercaseKeyStillResolves() + { + var template = Handlebars.Compile("Hello {{name}}"); + var result = template(new Hashtable { { "name", "bob" } }); + Assert.Equal("Hello bob", result); + } + + [Fact] + public void GenericDictionaryUppercaseKeyUnchanged() + { + var template = Handlebars.Compile("Hello {{NAME}}"); + var result = template(new Dictionary { { "NAME", "charlie" } }); + Assert.Equal("Hello charlie", result); + } + + [Fact] + public void HashtableLookupIsCaseSensitive() + { + // {{name}} should NOT resolve a key "NAME" — JS objects are case-sensitive + var template = Handlebars.Compile("Hello {{name}}"); + var result = template(new Hashtable { { "NAME", "dave" } }); + Assert.Equal("Hello ", result); + } + // Issue: https://github.com/Handlebars-Net/Handlebars.Net/issues/605 // #if not evaluated when variable name contains invisible characters (BOM) [Fact]