Add better check for EnabledXrTargets metadata validation; simplify reportwriter logic when handling IEnumberable types

This commit is contained in:
Sean Stolberg 2018-08-20 10:15:57 -07:00
Родитель ca21363f1a
Коммит e020355238
2 изменённых файлов: 70 добавлений и 54 удалений

Просмотреть файл

@ -115,14 +115,28 @@ namespace UnityPerformanceBenchmarkReporter
testRun1.PlayerSettings.AndroidTargetSdkVersion,
testRun2.PlayerSettings.AndroidTargetSdkVersion);
}
// TODO Refactor this to match all strings, not one by one
foreach (var enabledXrTarget in testRun1.PlayerSettings.EnabledXrTargets)
var srcEnabledXrTargetsString =
testRun1.PlayerSettings.EnabledXrTargets != null && testRun1.PlayerSettings.EnabledXrTargets.Any() ?
string.Join(',', testRun1.PlayerSettings.EnabledXrTargets.ToArray()) :
string.Empty;
var targetEnabledXrTargetsString =
testRun2.PlayerSettings.EnabledXrTargets != null && testRun2.PlayerSettings.EnabledXrTargets.Any() ?
string.Join(',', testRun2.PlayerSettings.EnabledXrTargets.ToArray()) :
string.Empty;
if (srcEnabledXrTargetsString != targetEnabledXrTargetsString)
{
if (!testRun2.PlayerSettings.EnabledXrTargets.Contains(enabledXrTarget))
{
WriteWarningMessage("Test results with mismatching PlayerSettings.EnabledXrTargets");
}
AddMismatchPlayerMetadata(
ref PlayerSettingsResultFiles,
MismatchedPlayerSettingsValues,
firstTestRunResultPath,
xmlFileNamePath,
nameof(testRun1.PlayerSettings.EnabledXrTargets),
srcEnabledXrTargetsString,
targetEnabledXrTargetsString);
}
if (testRun1.PlayerSettings.GpuSkinning != testRun2.PlayerSettings.GpuSkinning)
{
AddMismatchPlayerMetadata(

Просмотреть файл

@ -695,67 +695,69 @@ rw.WriteLine(" document.getElementById(\"toggleconfig\").innerHTML=\"Show Test C
}
sb.Append("<div class=\"fieldgroup\">");
// if field is an IEnumberable, enumerate and append each value to the sb
if (typeof(IEnumerable).IsAssignableFrom(field.FieldType) && field.FieldType != typeof(string))
sb.Append(string.Format("<div class=\"fieldname\">{0}</div>", field.Name));
if (mismatchedValues.Count > 0 && mismatchedValues.ContainsKey(field.Name))
{
sb.Append(string.Format("<div><div class=\"fieldname\"><pre>{0}</pre></div><div class=\"fieldvalue\"><pre>", field.Name));
var mismatchedValue = mismatchedValues[field.Name];
//if (mismatchedValues.Count > 0 && mismatchedValues.ContainsKey(field.Name))
//{
foreach (var enumerable in (IEnumerable)field.GetValue(thisObject))
{
sb.Append(enumerable + ",");
}
sb.Append("<div class=\"fieldvaluewarning\">");
sb.Append("<table class=\"warningtable\">");
sb.Append("<tr><th>Value</th><th>Result File</th><th>Path</th></tr>");
if (sb.ToString().EndsWith(','))
{
// trim trailing comma
sb.Length--;
}
//}
sb.Append("</pre></div></div>");
for (int i = 0; i < resultFiles.Length; i++)
{
var resultFile = resultFiles[i];
var value = mismatchedValue.Any(kv => kv.Key.Equals(resultFile)) ?
mismatchedValue.First(kv => kv.Key.Equals(resultFile)).Value :
mismatchedValue.First(kv => kv.Key.Equals(resultFiles[0])).Value;
var pathParts = resultFile.Split('\\');
var path = string.Join('\\', pathParts.Take(pathParts.Length - 1));
sb.Append(string.Format("<tr><td>{0}</td><td>{1}</td><td>{2}</td></tr>", value, pathParts[pathParts.Length - 1], path));
}
sb.Append("</table></div>");
}
else
{
sb.Append(string.Format("<div class=\"fieldname\">{0}</div>", field.Name));
if (mismatchedValues.Count > 0 && mismatchedValues.ContainsKey(field.Name))
{
var mismatchedValue = mismatchedValues[field.Name];
sb.Append("<div class=\"fieldvaluewarning\">");
sb.Append("<table class=\"warningtable\">");
sb.Append("<tr><th>Value</th><th>Result File</th><th>Path</th></tr>");
for (int i = 0; i < resultFiles.Length; i++)
{
var resultFile = resultFiles[i];
var value = mismatchedValue.Any(kv => kv.Key.Equals(resultFile)) ?
mismatchedValue.First(kv => kv.Key.Equals(resultFile)).Value :
mismatchedValue.First(kv => kv.Key.Equals(resultFiles[0])).Value;
var pathParts = resultFile.Split('\\');
var path = string.Join('\\', pathParts.Take(pathParts.Length - 1));
sb.Append(string.Format("<tr><td>{0}</td><td>{1}</td><td>{2}</td></tr>", value, pathParts[pathParts.Length - 1], path));
}
sb.Append("</table></div>");
}
else
{
sb.Append(string.Format("<div class=\"fieldvalue\">{0}</div>", field.GetValue(thisObject)));
}
sb.Append(string.Format("<div class=\"fieldvalue\">{0}</div>", GetFieldValues(field, thisObject)));
}
sb.Append("</div>");
}
rw.WriteLine(sb.ToString());
rw.WriteLine("</pre></div>");
}
private object GetFieldValues<T>(FieldInfo field, T thisObject)
{
return IsIEnumerableFieldType<T>(field) ? ConvertIEnumberableToString(field, thisObject) : field.GetValue(thisObject);
}
private static bool IsIEnumerableFieldType<T>(FieldInfo field)
{
return typeof(IEnumerable).IsAssignableFrom(field.FieldType) && field.FieldType != typeof(string);
}
private string ConvertIEnumberableToString<T>(FieldInfo field, T thisObject)
{
StringBuilder sb = new StringBuilder();
foreach (var enumerable in (IEnumerable) field.GetValue(thisObject))
{
sb.Append(enumerable + ",");
}
if (sb.ToString().EndsWith(','))
{
// trim trailing comma
sb.Length--;
}
return sb.ToString();
}
private List<TestResult> GetResultsForThisTest(string distinctTestName)
{
var resultsForThisTest = new List<TestResult>();