summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.UITest.Validator
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.UITest.Validator')
-rw-r--r--Xamarin.Forms.UITest.Validator/App.config6
-rw-r--r--Xamarin.Forms.UITest.Validator/DomMemberModel.cs56
-rw-r--r--Xamarin.Forms.UITest.Validator/DomTypeModel.cs154
-rw-r--r--Xamarin.Forms.UITest.Validator/FormsUITest.cs15
-rw-r--r--Xamarin.Forms.UITest.Validator/LoaderActions.cs59
-rw-r--r--Xamarin.Forms.UITest.Validator/Properties/AssemblyInfo.cs39
-rw-r--r--Xamarin.Forms.UITest.Validator/UITestCoverage/Css/styles.css206
-rw-r--r--Xamarin.Forms.UITest.Validator/UITestCoverage/Js/script.js6
-rw-r--r--Xamarin.Forms.UITest.Validator/Validator.cs68
-rw-r--r--Xamarin.Forms.UITest.Validator/Xamarin.Forms.UITest.Validator.csproj126
-rw-r--r--Xamarin.Forms.UITest.Validator/packages.config5
11 files changed, 740 insertions, 0 deletions
diff --git a/Xamarin.Forms.UITest.Validator/App.config b/Xamarin.Forms.UITest.Validator/App.config
new file mode 100644
index 00000000..8e156463
--- /dev/null
+++ b/Xamarin.Forms.UITest.Validator/App.config
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+ <startup>
+ <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
+ </startup>
+</configuration> \ No newline at end of file
diff --git a/Xamarin.Forms.UITest.Validator/DomMemberModel.cs b/Xamarin.Forms.UITest.Validator/DomMemberModel.cs
new file mode 100644
index 00000000..7f005405
--- /dev/null
+++ b/Xamarin.Forms.UITest.Validator/DomMemberModel.cs
@@ -0,0 +1,56 @@
+using System.Collections.Generic;
+
+namespace Xamarin.Forms.UITest.Validator
+{
+ internal class DomMemberModel
+ {
+ readonly List<string> _androidtests;
+ readonly List<string> _iOStests;
+ readonly string _name;
+
+ public DomMemberModel(string memberName, List<string> iOsTestsForMember, List<string> androidTestsForMember)
+ {
+ _name = memberName;
+ _iOStests = iOsTestsForMember;
+ var isiOsTested = iOsTestsForMember.Count != 0;
+ NumberOfiOsTests = iOsTestsForMember.Count;
+
+ _androidtests = androidTestsForMember;
+ var isAndroidTested = androidTestsForMember.Count != 0;
+ NumberOfAndroidTests = androidTestsForMember.Count;
+
+ IsTested = isiOsTested && isAndroidTested;
+ }
+
+ public bool IsTested { get; }
+
+ public int NumberOfiOsTests { get; }
+
+ public int NumberOfAndroidTests { get; }
+
+ public string Html()
+ {
+ var html = "";
+
+ if (IsTested)
+ html += "<div class=\"testedMember\">" + _name + "</div>";
+ else
+ html += "<div class=\"unTestedMember\">" + _name + "</div>";
+
+ html += "<div class=\"platformTestContainer\">";
+ html += "<div class=\"iosColumn\">";
+ foreach (var test in _iOStests)
+ html += "<div class=\"test ios\">" + test + "</div>";
+ html += "</div>";
+
+ html += "<div class=\"androidColumn\">";
+ foreach (var test in _androidtests)
+ html += "<div class=\"test android\">" + test + "</div>";
+ html += "</div>";
+
+ html += "</div>";
+
+ return html;
+ }
+ }
+} \ No newline at end of file
diff --git a/Xamarin.Forms.UITest.Validator/DomTypeModel.cs b/Xamarin.Forms.UITest.Validator/DomTypeModel.cs
new file mode 100644
index 00000000..16d70bd9
--- /dev/null
+++ b/Xamarin.Forms.UITest.Validator/DomTypeModel.cs
@@ -0,0 +1,154 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Xamarin.Forms.Loader;
+
+namespace Xamarin.Forms.UITest.Validator
+{
+ internal class DomTypeModel
+ {
+ readonly List<string> _androidTypeTests;
+ readonly List<string> _iosTypeTests;
+ public string TypeName;
+
+ public DomTypeModel(FormsType formsType, Dictionary<Type, List<FormsUiTest>> typeiOsuiTestDictionary,
+ Dictionary<Type, List<FormsUiTest>> typeAndroidUiTestDictionary)
+ {
+ TypeName = formsType.Type.Name;
+
+ var iOsTests = new List<FormsUiTest>();
+ var androidTests = new List<FormsUiTest>();
+
+ _iosTypeTests = new List<string>();
+ _androidTypeTests = new List<string>();
+
+ 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<DomMemberModel>();
+
+ 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<DomMemberModel> Children { get; }
+
+ public int Rank { get; }
+
+ public string Html()
+ {
+ var html =
+ "<div class=\"type\" id=\"" + TypeName + "\">" +
+ "<div class=\"stats\">" +
+ "<h2>" + TypeName + "</h2>" +
+ "<h3>Number of tests: " + TotalTests() + "</h3>" +
+ string.Format("<h3>{0:N2}%</h3>", PercentageTested() * 100) +
+ "<div class=\"progressBar\">" +
+ "<div class=\"testedBox\" style=\"width:" + 290 * PercentageTested() + "px\"></div>" +
+ "</div>" +
+ "</div>" +
+ "<div class=\"platform\">" +
+ "<div class=\"ios\">iOS</div>" +
+ "<div class=\"android\">Android</div>" +
+ "</div>";
+
+ html +=
+ "<div class=\"testsForType\">" +
+ "<div class=\"platformTestContainer\">";
+ html += "<div class=\"iosColumn\">";
+ foreach (var iosTest in _iosTypeTests)
+ html += "<div class=\"test ios\">" + iosTest + "</div>";
+ html += "</div>";
+ html += "<div class=\"androidColumn\">";
+ foreach (var androidTest in _androidTypeTests)
+ html += "<div class=\"test android\">" + androidTest + "</div>";
+ html += "</div>" +
+ "</div>" +
+ "</div>";
+
+ html += "<div class=\"members\">";
+ foreach (var child in Children)
+ {
+ html += "<div class=\"member\">";
+ html += child.Html();
+ html += "</div>";
+ }
+
+ html += "</div>";
+
+ html += "</div>";
+ 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;
+ }
+ }
+} \ No newline at end of file
diff --git a/Xamarin.Forms.UITest.Validator/FormsUITest.cs b/Xamarin.Forms.UITest.Validator/FormsUITest.cs
new file mode 100644
index 00000000..508b1777
--- /dev/null
+++ b/Xamarin.Forms.UITest.Validator/FormsUITest.cs
@@ -0,0 +1,15 @@
+namespace Xamarin.Forms.UITest.Validator
+{
+ internal class FormsUiTest
+ {
+ public FormsUiTest(string memberName, string testName)
+ {
+ MemberName = memberName;
+ TestName = testName;
+ }
+
+ public string MemberName { get; private set; }
+
+ public string TestName { get; private set; }
+ }
+} \ No newline at end of file
diff --git a/Xamarin.Forms.UITest.Validator/LoaderActions.cs b/Xamarin.Forms.UITest.Validator/LoaderActions.cs
new file mode 100644
index 00000000..9de39f21
--- /dev/null
+++ b/Xamarin.Forms.UITest.Validator/LoaderActions.cs
@@ -0,0 +1,59 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using Xamarin.Forms.CustomAttributes;
+using Xamarin.Forms.Loader;
+
+namespace Xamarin.Forms.UITest.Validator
+{
+ internal class LoaderActions
+ {
+ readonly IEnumerable<TestType> _androidTestTypes;
+ readonly IEnumerable<TestType> _iOsTestTypes;
+
+ public LoaderActions()
+ {
+ var formsLoader = new FormsLoader();
+ FormsTypes = formsLoader.FormsTypes();
+ _iOsTestTypes = formsLoader.IOSTestTypes();
+ _androidTestTypes = formsLoader.AndroidTestTypes();
+
+ TypeiOsuiTestDictionary = BuildTypeUiTestDictionary(_iOsTestTypes);
+ TypeAndroidUiTestDictionary = BuildTypeUiTestDictionary(_androidTestTypes);
+
+ Debug.WriteLine("HI");
+ }
+
+ internal IEnumerable<FormsType> FormsTypes { get; }
+
+ internal Dictionary<Type, List<FormsUiTest>> TypeiOsuiTestDictionary { get; }
+
+ internal Dictionary<Type, List<FormsUiTest>> TypeAndroidUiTestDictionary { get; }
+
+ Dictionary<Type, List<FormsUiTest>> BuildTypeUiTestDictionary(IEnumerable<TestType> testTypes)
+ {
+ var result = new Dictionary<Type, List<FormsUiTest>>();
+
+ foreach (TestType testType in testTypes)
+ {
+ foreach (TestMember testMember in testType.Members())
+ {
+ IEnumerable<UiTestAttribute> testAttrs = testMember.UiTestAttributes();
+ foreach (UiTestAttribute testAttr in testAttrs)
+ {
+ Type type = testAttr.Type;
+ string memberName = testAttr.MemberName;
+ string testName = testMember.MemberInfo.Name;
+
+ if (!result.ContainsKey(type))
+ result.Add(type, new List<FormsUiTest> { new FormsUiTest(memberName, testName) });
+ else
+ result[type].Add(new FormsUiTest(memberName, testName));
+ }
+ }
+ }
+
+ return result;
+ }
+ }
+} \ No newline at end of file
diff --git a/Xamarin.Forms.UITest.Validator/Properties/AssemblyInfo.cs b/Xamarin.Forms.UITest.Validator/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..00442570
--- /dev/null
+++ b/Xamarin.Forms.UITest.Validator/Properties/AssemblyInfo.cs
@@ -0,0 +1,39 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+
+[assembly: AssemblyTitle("Xamarin.Forms.UITest.Validator")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Xamarin.Forms.UITest.Validator")]
+[assembly: AssemblyCopyright("Copyright © 2016")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+
+[assembly: Guid("e1948442-ac28-49be-ac46-8ceeff28e183")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file
diff --git a/Xamarin.Forms.UITest.Validator/UITestCoverage/Css/styles.css b/Xamarin.Forms.UITest.Validator/UITestCoverage/Css/styles.css
new file mode 100644
index 00000000..d04f971b
--- /dev/null
+++ b/Xamarin.Forms.UITest.Validator/UITestCoverage/Css/styles.css
@@ -0,0 +1,206 @@
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed,
+figure, figcaption, footer, header, hgroup,
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+/* HTML5 display-role reset for older browsers */
+article, aside, details, figcaption, figure,
+footer, header, hgroup, menu, nav, section {
+ display: block;
+}
+body {
+ line-height: 1;
+ font-family: sans-serif;
+ font-size: 14px;
+}
+ol, ul {
+ list-style: none;
+}
+blockquote, q {
+ quotes: none;
+}
+blockquote:before, blockquote:after,
+q:before, q:after {
+ content: '';
+ content: none;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+html {
+ padding: 50px;
+}
+
+#totalStats {
+ width: 1000px;
+ padding: 20px;
+}
+
+#totalStats #coverage {
+ float: left;
+ font-size:225%;
+ padding: 10px;
+}
+
+.totalStatsLarge {
+ padding : 15px 10px;
+ text-align: start;
+ width: 200px;
+ float: right;
+ color: #808080;
+ font-size: 18px;
+}
+
+.totalStatsSmall {
+ padding : 5px 10px;
+ text-align: start;
+ width: 200px;
+ float: right;
+ color: #808080;
+ font-size: 18px;
+}
+
+#totalStats .coverageDetail {
+ float: left;
+ font-size:150%;
+ padding: 20px;
+}
+
+.cell {
+ width: 200px;
+ border: 1px solid green;
+ float: left;
+}
+
+.test {
+ color: blue;
+}
+
+.type {
+ clear: both;
+ width: 1000px;
+ overflow: hidden;
+ border: 1px solid #bbb;
+ margin: 5px;
+}
+
+.stats {
+ height: 37px;
+ border-bottom: 1px solid #ddd;
+}
+
+.stats h2 {
+ cursor: pointer;
+ font-size: 115%;
+ float: left;
+ width: 300px;
+ padding: 7px 0px 10px 10px;
+}
+
+.stats h3 {
+ float: left;
+ width: 200px;
+ padding: 11px 0px 10px 0px;
+}
+
+.platform {
+ width: 500px;
+ padding: 20px 0px 20px 10px;
+ margin: 0px 0px 0px 300px;
+
+}
+
+.platform .ios {
+ font-size: 18px;
+ width: 200px;
+ float: left;
+}
+
+.platform .android {
+ font-size: 18px;
+}
+
+.type .testsForType, .type .members, .type .platform {
+ display: none;
+}
+
+.type.expanded .testsForType, .type.expanded .members, .type.expanded .platform {
+ display: block;
+}
+
+.testsForType {
+ padding: 0px 0px 20px 20px;
+}
+
+.members {
+ padding: 0px 0px 20px 20px;
+}
+
+.member {
+ clear: both;
+ padding: 3px;
+}
+
+.testedMember {
+ font-size: 100%;
+ color: green;
+}
+
+.unTestedMember {
+ height: 28px;
+ font-size: 100%;
+ color: red;
+}
+
+.test {
+ color: blue;
+ text-decoration: underline;
+}
+
+.platformTestContainer {
+ width: 400px;
+ margin-left: 290px;
+}
+
+.iosColumn {
+ float: left;
+ width: 180px;
+ margin-right: 20px;
+ overflow: hidden;
+}
+
+.androidColumn {
+ float: left;
+ width: 180px;
+ margin-right: 20px;
+ overflow: hidden;
+}
+
+.progressBar {
+ float: right;
+ background-color: #ee8888;
+ width: 290px;
+ height: 37px;
+}
+
+.testedBox {
+ background-color: #88cc88;
+ height: 37px;
+} \ No newline at end of file
diff --git a/Xamarin.Forms.UITest.Validator/UITestCoverage/Js/script.js b/Xamarin.Forms.UITest.Validator/UITestCoverage/Js/script.js
new file mode 100644
index 00000000..d204495f
--- /dev/null
+++ b/Xamarin.Forms.UITest.Validator/UITestCoverage/Js/script.js
@@ -0,0 +1,6 @@
+$(function () {
+ $('body').on('click', '.stats', function (e) {
+ e.preventDefault();
+ $(this).parents('.type').toggleClass('expanded');
+ });
+}); \ No newline at end of file
diff --git a/Xamarin.Forms.UITest.Validator/Validator.cs b/Xamarin.Forms.UITest.Validator/Validator.cs
new file mode 100644
index 00000000..d384940f
--- /dev/null
+++ b/Xamarin.Forms.UITest.Validator/Validator.cs
@@ -0,0 +1,68 @@
+using System;
+using System.IO;
+using System.Linq;
+
+namespace Xamarin.Forms.UITest.Validator
+{
+ //[UITest (typeof(Button), "Clicked")]
+ internal class Validator
+ {
+ // TODO - Add support for muliple attributes (i.e. Fonts or Image.Aspect)
+ // TODO - Add analysis of test duplication using duplicated tags
+ // TODO - Support Single class analysis by passing a class name into the program
+ // TODO - Stats of public surface area coverage
+
+ static int Main(string[] args)
+ {
+ Console.WriteLine("Generating UITest code coverage");
+
+ // Currently scanning for public events, public properties and public methods.
+
+ var loaderActions = new LoaderActions();
+
+ var domTypes =
+ (from formsType in loaderActions.FormsTypes
+ where formsType.Members().Count() > 1
+ select
+ new DomTypeModel(formsType, loaderActions.TypeiOsuiTestDictionary, loaderActions.TypeAndroidUiTestDictionary))
+ .OrderByDescending(domType => domType.Rank);
+
+ var typeMemberHtml = "";
+ int numberOfTestedMembers = 0;
+ int numberOfMembers = 0;
+
+ foreach (var domType in domTypes)
+ {
+ numberOfTestedMembers += (from member in domType.Children where member.IsTested select member).Count();
+ numberOfMembers += domType.Children.Count;
+ typeMemberHtml += domType.Html();
+ }
+
+ var html =
+ "<html>" +
+ "<head>" +
+ "<link rel=\"stylesheet\" type=\"text/css\" href=\"Css/styles.css\">" +
+ "<script type=\"text/javascript\" src=\"https://code.jquery.com/jquery-2.1.3.min.js\"></script>" +
+ "<script type=\"text/javascript\" src=\"Js/script.js\"></script>" +
+ "</head>" +
+ "<body>" +
+ "<div id=\"totalStats\">" +
+ string.Format("<div id=\"coverage\">{0:N2}%<span class=\"totalStatsLarge\"> Covered!!</span></div>",
+ (numberOfTestedMembers / (double)numberOfMembers) * 100) +
+ string.Format("<div class=\"coverageDetail\">{0}<span class=\"totalStatsSmall\"> Members</span></div>",
+ numberOfMembers) +
+ string.Format("<div class=\"coverageDetail\">{0}<span class=\"totalStatsSmall\"> Tested Members</span></div>",
+ numberOfTestedMembers) +
+ "</div>" +
+ "<div id=\"container\">" +
+ typeMemberHtml +
+ "</div>" +
+ "</body>" +
+ "</html>";
+
+ File.WriteAllText("../../UITestCoverage/index.html", html);
+
+ return 0;
+ }
+ }
+} \ No newline at end of file
diff --git a/Xamarin.Forms.UITest.Validator/Xamarin.Forms.UITest.Validator.csproj b/Xamarin.Forms.UITest.Validator/Xamarin.Forms.UITest.Validator.csproj
new file mode 100644
index 00000000..e41a33bb
--- /dev/null
+++ b/Xamarin.Forms.UITest.Validator/Xamarin.Forms.UITest.Validator.csproj
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{115C31B9-C1B2-4B00-BB0E-EA36F105903E}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Xamarin.Forms.UITest.Validator</RootNamespace>
+ <AssemblyName>Xamarin.Forms.UITest.Validator</AssemblyName>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
+ <RestorePackages>true</RestorePackages>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Turkey|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\Turkey\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ <Prefer32Bit>true</Prefer32Bit>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="nunit.framework, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
+ <Private>True</Private>
+ <HintPath>..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Web" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ <Reference Include="nunit.framework">
+ <HintPath>..\packages\NUnit.2.6.3\lib\nunit.framework.dll</HintPath>
+ </Reference>
+ <Reference Include="Xamarin.UITest, Version=1.3.3.0, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\packages\Xamarin.UITest.1.3.3\lib\Xamarin.UITest.dll</HintPath>
+ <Private>True</Private>
+ </Reference>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="DomMemberModel.cs" />
+ <Compile Include="DomTypeModel.cs" />
+ <Compile Include="FormsUITest.cs" />
+ <Compile Include="LoaderActions.cs" />
+ <Compile Include="Validator.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="App.config" />
+ <None Include="Logs\Xamarin.Forms.UITest.Validator.log" />
+ <None Include="packages.config" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Xamarin.Forms.Core\Xamarin.Forms.Core.csproj">
+ <Project>{57b8b73d-c3b5-4c42-869e-7b2f17d354ac}</Project>
+ <Name>Xamarin.Forms.Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Xamarin.Forms.CustomAttributes\Xamarin.Forms.CustomAttributes.csproj">
+ <Project>{4dcd0420-1168-4b77-86db-6196ee4bd491}</Project>
+ <Name>Xamarin.Forms.CustomAttributes</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Xamarin.Forms.Loader\Xamarin.Forms.Loader.csproj">
+ <Project>{00211725-2f89-4e2c-ac5a-38e5ff61be67}</Project>
+ <Name>Xamarin.Forms.Loader</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Xamarin.Forms.Core.iOS.UITests\Xamarin.Forms.Core.iOS.UITests.csproj">
+ <Project>{EADD8100-B3AE-4A31-92C4-267A64A1C6EB}</Project>
+ <Name>Xamarin.Forms.Core.iOS.UITests</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Xamarin.Forms.Core.Android.UITests\Xamarin.Forms.Core.Android.UITests.csproj">
+ <Project>{A34EBE01-25BF-4E69-A2DC-2288DC625541}</Project>
+ <Name>Xamarin.Forms.Core.Android.UITests</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Xamarin.Forms.Platform\Xamarin.Forms.Platform.csproj">
+ <Project>{67f9d3a8-f71e-4428-913f-c37ae82cdb24}</Project>
+ <Name>Xamarin.Forms.Platform</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup />
+ <ItemGroup>
+ <Content Include="UITestCoverage\Css\styles.css" />
+ <Content Include="UITestCoverage\Js\script.js" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
+ <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+ <PropertyGroup>
+ <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+ </PropertyGroup>
+ <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
+ </Target>
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project> \ No newline at end of file
diff --git a/Xamarin.Forms.UITest.Validator/packages.config b/Xamarin.Forms.UITest.Validator/packages.config
new file mode 100644
index 00000000..031fa54c
--- /dev/null
+++ b/Xamarin.Forms.UITest.Validator/packages.config
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="NUnit" version="2.6.4" targetFramework="net45" />
+ <package id="Xamarin.UITest" version="1.3.3" targetFramework="net45" />
+</packages> \ No newline at end of file