using System; using System.Collections.Generic; using System.Linq; using Xamarin.Forms.Loader; namespace Xamarin.Forms.UITest.Validator { internal class DomTypeModel { readonly List _androidTypeTests; readonly List _iosTypeTests; public string TypeName; public DomTypeModel(FormsType formsType, Dictionary> typeiOsuiTestDictionary, Dictionary> typeAndroidUiTestDictionary) { TypeName = formsType.Type.Name; var iOsTests = new List(); var androidTests = new List(); _iosTypeTests = new List(); _androidTypeTests = new List(); Rank = 0; if (typeiOsuiTestDictionary.ContainsKey(formsType.Type)) { iOsTests = (from test in typeiOsuiTestDictionary[formsType.Type] select test).ToList(); } if (typeAndroidUiTestDictionary.ContainsKey(formsType.Type)) { androidTests = (from test in typeAndroidUiTestDictionary[formsType.Type] select test).ToList(); } _iosTypeTests = (from test in iOsTests where test.MemberName == "" select test.TestName).ToList(); _androidTypeTests = (from test in androidTests where test.MemberName == "" select test.TestName).ToList(); Rank -= _iosTypeTests.Count; Rank -= _androidTypeTests.Count; Children = new List(); foreach (var formsMember in formsType.Members()) { var iOsMemberTests = (from test in iOsTests where test.MemberName == formsMember.MemberInfo.Name select test.TestName).ToList(); Rank -= iOsMemberTests.Count; var androidMemberTests = (from test in androidTests where test.MemberName == formsMember.MemberInfo.Name select test.TestName).ToList(); Rank -= androidMemberTests.Count; Children.Add(new DomMemberModel(formsMember.MemberInfo.Name, iOsMemberTests, androidMemberTests)); } Rank += Children.Count; } public List Children { get; } public int Rank { get; } public string Html() { var html = "
" + "
" + "

" + TypeName + "

" + "

Number of tests: " + TotalTests() + "

" + string.Format("

{0:N2}%

", PercentageTested() * 100) + "
" + "
" + "
" + "
" + "
" + "
iOS
" + "
Android
" + "
"; html += "
" + "
"; html += "
"; foreach (var iosTest in _iosTypeTests) html += "
" + iosTest + "
"; html += "
"; html += "
"; foreach (var androidTest in _androidTypeTests) html += "
" + androidTest + "
"; html += "
" + "
" + "
"; html += "
"; foreach (var child in Children) { html += "
"; html += child.Html(); html += "
"; } html += "
"; html += "
"; return html; } int TotalTests() { int result = _iosTypeTests.Count + _androidTypeTests.Count; foreach (var child in Children) result += child.NumberOfiOsTests + child.NumberOfAndroidTests; return result; } int NumberOfTestedMembers() { int result = 0; foreach (var child in Children) { if (child.IsTested) result += 1; } return result; } double PercentageTested() { if (Children.Count > 0) return (NumberOfTestedMembers() / (double)Children.Count); return 0.0; } } }