diff options
author | Jesse Plamondon-Willard <github@jplamondonw.com> | 2017-05-28 17:34:53 -0400 |
---|---|---|
committer | Jesse Plamondon-Willard <github@jplamondonw.com> | 2017-05-28 17:34:53 -0400 |
commit | e20db6e8e4279dc95371e6f98c0e73dd19020c0f (patch) | |
tree | b97d6f4650f4dead44f323e2230cdda27df918c4 | |
parent | 423a2f501249e237fe907cbe5e8568852b0710c5 (diff) | |
download | SMAPI-e20db6e8e4279dc95371e6f98c0e73dd19020c0f.tar.gz SMAPI-e20db6e8e4279dc95371e6f98c0e73dd19020c0f.tar.bz2 SMAPI-e20db6e8e4279dc95371e6f98c0e73dd19020c0f.zip |
add token support for instance fields, expand unit test (#296)
-rw-r--r-- | src/StardewModdingAPI.Tests/TranslationTests.cs | 23 | ||||
-rw-r--r-- | src/StardewModdingAPI/Translation.cs | 5 |
2 files changed, 26 insertions, 2 deletions
diff --git a/src/StardewModdingAPI.Tests/TranslationTests.cs b/src/StardewModdingAPI.Tests/TranslationTests.cs index a2fef2b7..6a430aa7 100644 --- a/src/StardewModdingAPI.Tests/TranslationTests.cs +++ b/src/StardewModdingAPI.Tests/TranslationTests.cs @@ -180,7 +180,7 @@ namespace StardewModdingAPI.Tests ** Translation tokens ****/ [Test(Description = "Assert that multiple translation tokens are replaced correctly regardless of the token structure.")] - public void Translation_Tokens([Values("anonymous object", "IDictionary<string, object>", "IDictionary<string, string>")] string structure) + public void Translation_Tokens([Values("anonymous object", "class", "IDictionary<string, object>", "IDictionary<string, string>")] string structure) { // arrange string start = Guid.NewGuid().ToString("N"); @@ -197,6 +197,10 @@ namespace StardewModdingAPI.Tests translation = translation.Tokens(new { start, middle, end }); break; + case "class": + translation = translation.Tokens(new TokenModel { Start = start, Middle = middle, End = end }); + break; + case "IDictionary<string, object>": translation = translation.Tokens(new Dictionary<string, object> { ["start"] = start, ["middle"] = middle, ["end"] = end }); break; @@ -323,5 +327,22 @@ namespace StardewModdingAPI.Tests { return string.Format(Translation.PlaceholderText, key); } + + + /********* + ** Test models + *********/ + /// <summary>A model used to test token support.</summary> + private class TokenModel + { + /// <summary>A sample token property.</summary> + public string Start { get; set; } + + /// <summary>A sample token property.</summary> + public string Middle { get; set; } + + /// <summary>A sample token field.</summary> + public string End; + } } } diff --git a/src/StardewModdingAPI/Translation.cs b/src/StardewModdingAPI/Translation.cs index 8dcaee0f..31a1b7e1 100644 --- a/src/StardewModdingAPI/Translation.cs +++ b/src/StardewModdingAPI/Translation.cs @@ -107,8 +107,11 @@ namespace StardewModdingAPI // from object properties else { - foreach (PropertyInfo prop in tokens.GetType().GetProperties()) + Type type = tokens.GetType(); + foreach (PropertyInfo prop in type.GetProperties()) tokenLookup[prop.Name] = prop.GetValue(tokens)?.ToString(); + foreach (FieldInfo field in type.GetFields()) + tokenLookup[field.Name] = field.GetValue(tokens)?.ToString(); } } |