add token support for instance fields, expand unit test (#296)

This commit is contained in:
Jesse Plamondon-Willard 2017-05-28 17:34:53 -04:00
parent 423a2f5012
commit e20db6e8e4
2 changed files with 26 additions and 2 deletions

View File

@ -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;
}
}
}

View File

@ -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();
}
}