From d003aa570e3691903bfec77044fae823d174ddc6 Mon Sep 17 00:00:00 2001 From: Jon Date: Thu, 13 Aug 2015 11:32:13 -0400 Subject: [PATCH] Add solution for using F# for unit testing a PCL --- .../PhoneWordFSharp.Droid.fsproj | 19 +-- .../Properties/AndroidManifest.xml | 7 +- UITestDemo/Add.cs | 12 ++ UITestDemo/App.cs | 49 +++++++ UITestDemo/DetailPage.xaml | 8 ++ UITestDemo/DetailPage.xaml.cs | 12 ++ UITestDemo/Droid/Assets/AboutAssets.txt | 19 +++ UITestDemo/Droid/MainActivity.cs | 26 ++++ .../Droid/Properties/AndroidManifest.xml | 6 + UITestDemo/Droid/Properties/AssemblyInfo.cs | 28 ++++ UITestDemo/Droid/Resources/AboutResources.txt | 44 ++++++ .../Droid/Resources/Resource.designer.cs | 82 ++++++++++++ .../Droid/Resources/drawable-hdpi/icon.png | Bin 0 -> 1431 bytes .../Droid/Resources/drawable-xhdpi/icon.png | Bin 0 -> 1789 bytes .../Droid/Resources/drawable-xxhdpi/icon.png | Bin 0 -> 2353 bytes UITestDemo/Droid/Resources/drawable/icon.png | Bin 0 -> 1431 bytes UITestDemo/Droid/UITestDemo.Droid.csproj | 93 +++++++++++++ UITestDemo/Droid/packages.config | 5 + UITestDemo/MainPage.xaml | 19 +++ UITestDemo/MainPage.xaml.cs | 23 ++++ UITestDemo/Properties/AssemblyInfo.cs | 27 ++++ UITestDemo/UITestDemo.UnitTests/Test.fs | 26 ++++ .../UITestDemo.UnitTests.fsproj | 66 +++++++++ UITestDemo/UITestDemo.UnitTests/app.config | 15 +++ .../UITestDemo.UnitTests/packages.config | 5 + UITestDemo/UITestDemo.csproj | 67 ++++++++++ UITestDemo/UITestDemo.sln | 85 ++++++++++++ UITestDemo/UITests/AppInitializer.cs | 22 +++ UITestDemo/UITests/Tests.cs | 38 ++++++ UITestDemo/UITests/UITestDemo.UITests.csproj | 65 +++++++++ UITestDemo/UITests/packages.config | 5 + UITestDemo/iOS/AppDelegate.cs | 28 ++++ UITestDemo/iOS/Entitlements.plist | 7 + UITestDemo/iOS/ITunesArtwork | Bin 0 -> 33843 bytes UITestDemo/iOS/ITunesArtwork@2x | Bin 0 -> 20666 bytes UITestDemo/iOS/Info.plist | 64 +++++++++ UITestDemo/iOS/Main.cs | 21 +++ UITestDemo/iOS/Resources/Default-568h@2x.png | Bin 0 -> 8884 bytes UITestDemo/iOS/Resources/Default-Portrait.png | Bin 0 -> 10710 bytes .../iOS/Resources/Default-Portrait@2x.png | Bin 0 -> 34540 bytes UITestDemo/iOS/Resources/Default.png | Bin 0 -> 7243 bytes UITestDemo/iOS/Resources/Default@2x.png | Bin 0 -> 8368 bytes UITestDemo/iOS/Resources/Icon-60@2x.png | Bin 0 -> 1712 bytes UITestDemo/iOS/Resources/Icon-60@3x.png | Bin 0 -> 21641 bytes UITestDemo/iOS/Resources/Icon-76.png | Bin 0 -> 1200 bytes UITestDemo/iOS/Resources/Icon-76@2x.png | Bin 0 -> 2262 bytes UITestDemo/iOS/Resources/Icon-Small-40.png | Bin 0 -> 729 bytes UITestDemo/iOS/Resources/Icon-Small-40@2x.png | Bin 0 -> 1245 bytes UITestDemo/iOS/Resources/Icon-Small-40@3x.png | Bin 0 -> 12610 bytes UITestDemo/iOS/Resources/Icon-Small.png | Bin 0 -> 1144 bytes UITestDemo/iOS/Resources/Icon-Small@2x.png | Bin 0 -> 955 bytes UITestDemo/iOS/Resources/Icon-Small@3x.png | Bin 0 -> 7309 bytes .../iOS/Resources/LaunchScreen.storyboard | 39 ++++++ UITestDemo/iOS/UITestDemo.iOS.csproj | 125 ++++++++++++++++++ UITestDemo/iOS/packages.config | 5 + UITestDemo/packages.config | 4 + 56 files changed, 1148 insertions(+), 18 deletions(-) create mode 100644 UITestDemo/Add.cs create mode 100644 UITestDemo/App.cs create mode 100644 UITestDemo/DetailPage.xaml create mode 100644 UITestDemo/DetailPage.xaml.cs create mode 100644 UITestDemo/Droid/Assets/AboutAssets.txt create mode 100644 UITestDemo/Droid/MainActivity.cs create mode 100644 UITestDemo/Droid/Properties/AndroidManifest.xml create mode 100644 UITestDemo/Droid/Properties/AssemblyInfo.cs create mode 100644 UITestDemo/Droid/Resources/AboutResources.txt create mode 100644 UITestDemo/Droid/Resources/Resource.designer.cs create mode 100644 UITestDemo/Droid/Resources/drawable-hdpi/icon.png create mode 100644 UITestDemo/Droid/Resources/drawable-xhdpi/icon.png create mode 100644 UITestDemo/Droid/Resources/drawable-xxhdpi/icon.png create mode 100644 UITestDemo/Droid/Resources/drawable/icon.png create mode 100644 UITestDemo/Droid/UITestDemo.Droid.csproj create mode 100644 UITestDemo/Droid/packages.config create mode 100644 UITestDemo/MainPage.xaml create mode 100644 UITestDemo/MainPage.xaml.cs create mode 100644 UITestDemo/Properties/AssemblyInfo.cs create mode 100644 UITestDemo/UITestDemo.UnitTests/Test.fs create mode 100644 UITestDemo/UITestDemo.UnitTests/UITestDemo.UnitTests.fsproj create mode 100644 UITestDemo/UITestDemo.UnitTests/app.config create mode 100644 UITestDemo/UITestDemo.UnitTests/packages.config create mode 100644 UITestDemo/UITestDemo.csproj create mode 100644 UITestDemo/UITestDemo.sln create mode 100644 UITestDemo/UITests/AppInitializer.cs create mode 100644 UITestDemo/UITests/Tests.cs create mode 100644 UITestDemo/UITests/UITestDemo.UITests.csproj create mode 100644 UITestDemo/UITests/packages.config create mode 100644 UITestDemo/iOS/AppDelegate.cs create mode 100644 UITestDemo/iOS/Entitlements.plist create mode 100644 UITestDemo/iOS/ITunesArtwork create mode 100644 UITestDemo/iOS/ITunesArtwork@2x create mode 100644 UITestDemo/iOS/Info.plist create mode 100644 UITestDemo/iOS/Main.cs create mode 100644 UITestDemo/iOS/Resources/Default-568h@2x.png create mode 100644 UITestDemo/iOS/Resources/Default-Portrait.png create mode 100644 UITestDemo/iOS/Resources/Default-Portrait@2x.png create mode 100644 UITestDemo/iOS/Resources/Default.png create mode 100644 UITestDemo/iOS/Resources/Default@2x.png create mode 100644 UITestDemo/iOS/Resources/Icon-60@2x.png create mode 100644 UITestDemo/iOS/Resources/Icon-60@3x.png create mode 100644 UITestDemo/iOS/Resources/Icon-76.png create mode 100644 UITestDemo/iOS/Resources/Icon-76@2x.png create mode 100644 UITestDemo/iOS/Resources/Icon-Small-40.png create mode 100644 UITestDemo/iOS/Resources/Icon-Small-40@2x.png create mode 100644 UITestDemo/iOS/Resources/Icon-Small-40@3x.png create mode 100644 UITestDemo/iOS/Resources/Icon-Small.png create mode 100644 UITestDemo/iOS/Resources/Icon-Small@2x.png create mode 100644 UITestDemo/iOS/Resources/Icon-Small@3x.png create mode 100644 UITestDemo/iOS/Resources/LaunchScreen.storyboard create mode 100644 UITestDemo/iOS/UITestDemo.iOS.csproj create mode 100644 UITestDemo/iOS/packages.config create mode 100644 UITestDemo/packages.config diff --git a/PhoneWordFSharp/PhoneWordFSharp.Droid/PhoneWordFSharp.Droid.fsproj b/PhoneWordFSharp/PhoneWordFSharp.Droid/PhoneWordFSharp.Droid.fsproj index 34cf4fe..90dbc34 100644 --- a/PhoneWordFSharp/PhoneWordFSharp.Droid/PhoneWordFSharp.Droid.fsproj +++ b/PhoneWordFSharp/PhoneWordFSharp.Droid/PhoneWordFSharp.Droid.fsproj @@ -5,7 +5,7 @@ Debug AnyCPU {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{F2A71F9B-5D33-465A-A702-920D77279786} - de4ae3a4-bd59-4e63-8b3b-d2f44ed80386 + {DE4AE3A4-BD59-4E63-8B3B-D2F44ED80386} Library PhoneWordFSharp.Droid Assets @@ -22,10 +22,10 @@ PhoneWordFSharp.Droid db602b22 XAP - Nexus 4 (KitKat) - API 19 + Properties\AndroidManifest.xml true - full false bin\Debug DEBUG @@ -47,6 +47,8 @@ false false true + + @@ -66,7 +68,6 @@ ..\packages\Xamarin.Forms.1.4.2.6359\lib\MonoAndroid10\FormsViewGroup.dll - True @@ -78,32 +79,20 @@ ..\packages\Xamarin.Android.Support.v4.21.0.3.0\lib\MonoAndroid10\Xamarin.Android.Support.v4.dll - True ..\packages\Xamarin.Forms.1.4.2.6359\lib\MonoAndroid10\Xamarin.Forms.Core.dll - True ..\packages\Xamarin.Forms.1.4.2.6359\lib\MonoAndroid10\Xamarin.Forms.Platform.dll - True ..\packages\Xamarin.Forms.1.4.2.6359\lib\MonoAndroid10\Xamarin.Forms.Platform.Android.dll - True ..\packages\Xamarin.Forms.1.4.2.6359\lib\MonoAndroid10\Xamarin.Forms.Xaml.dll - True - - - PhoneWordFSharp.Core - {c748221e-7d7d-46b1-a50d-98a8ce92c0b6} - True - - diff --git a/PhoneWordFSharp/PhoneWordFSharp.Droid/Properties/AndroidManifest.xml b/PhoneWordFSharp/PhoneWordFSharp.Droid/Properties/AndroidManifest.xml index 4fd10a8..8d0c901 100644 --- a/PhoneWordFSharp/PhoneWordFSharp.Droid/Properties/AndroidManifest.xml +++ b/PhoneWordFSharp/PhoneWordFSharp.Droid/Properties/AndroidManifest.xml @@ -1,5 +1,6 @@  - - - + + + + \ No newline at end of file diff --git a/UITestDemo/Add.cs b/UITestDemo/Add.cs new file mode 100644 index 0000000..537f8a4 --- /dev/null +++ b/UITestDemo/Add.cs @@ -0,0 +1,12 @@ +using System; + +namespace UITestDemo +{ + public static class Add + { + public static int AddItems(int a, int b) + { + return a + b; + } + } +} diff --git a/UITestDemo/App.cs b/UITestDemo/App.cs new file mode 100644 index 0000000..59b47d1 --- /dev/null +++ b/UITestDemo/App.cs @@ -0,0 +1,49 @@ +using Xamarin.Forms; +using System.Threading.Tasks; + +namespace UITestDemo +{ + public class App : Application + { + INavigation _navigation; + + new public static App Current { + get { + return (App)Application.Current; + } + } + + public App() + { + var navRoot = new NavigationPage(new MainPage() { Title = "Main Page" }); + + _navigation = navRoot.Navigation; + + MainPage = navRoot; + } + + public async Task NavigateToDetailPage() + { + var page = new DetailPage(); + + page.SetValue(NavigationPage.BackButtonTitleProperty, "Back"); + + await _navigation.PushAsync(page); + } + + protected override void OnStart() + { + // Handle when your app starts + } + + protected override void OnSleep() + { + // Handle when your app sleeps + } + + protected override void OnResume() + { + // Handle when your app resumes + } + } +} diff --git a/UITestDemo/DetailPage.xaml b/UITestDemo/DetailPage.xaml new file mode 100644 index 0000000..596d38c --- /dev/null +++ b/UITestDemo/DetailPage.xaml @@ -0,0 +1,8 @@ + + + + diff --git a/UITestDemo/DetailPage.xaml.cs b/UITestDemo/DetailPage.xaml.cs new file mode 100644 index 0000000..0b93c67 --- /dev/null +++ b/UITestDemo/DetailPage.xaml.cs @@ -0,0 +1,12 @@ +using Xamarin.Forms; + +namespace UITestDemo +{ + public partial class DetailPage : ContentPage + { + public DetailPage() + { + InitializeComponent(); + } + } +} diff --git a/UITestDemo/Droid/Assets/AboutAssets.txt b/UITestDemo/Droid/Assets/AboutAssets.txt new file mode 100644 index 0000000..a9b0638 --- /dev/null +++ b/UITestDemo/Droid/Assets/AboutAssets.txt @@ -0,0 +1,19 @@ +Any raw assets you want to be deployed with your application can be placed in +this directory (and child directories) and given a Build Action of "AndroidAsset". + +These files will be deployed with your package and will be accessible using Android's +AssetManager, like this: + +public class ReadAsset : Activity +{ + protected override void OnCreate (Bundle bundle) + { + base.OnCreate (bundle); + + InputStream input = Assets.Open ("my_asset.txt"); + } +} + +Additionally, some Android functions will automatically load asset files: + +Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); diff --git a/UITestDemo/Droid/MainActivity.cs b/UITestDemo/Droid/MainActivity.cs new file mode 100644 index 0000000..830dff3 --- /dev/null +++ b/UITestDemo/Droid/MainActivity.cs @@ -0,0 +1,26 @@ +using System; + +using Android.App; +using Android.Content; +using Android.Content.PM; +using Android.Runtime; +using Android.Views; +using Android.Widget; +using Android.OS; + +namespace UITestDemo.Droid +{ + [Activity(Label = "UITestDemo.Droid", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] + public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity + { + protected override void OnCreate(Bundle bundle) + { + base.OnCreate(bundle); + + global::Xamarin.Forms.Forms.Init(this, bundle); + + LoadApplication(new App()); + } + } +} + diff --git a/UITestDemo/Droid/Properties/AndroidManifest.xml b/UITestDemo/Droid/Properties/AndroidManifest.xml new file mode 100644 index 0000000..fea936e --- /dev/null +++ b/UITestDemo/Droid/Properties/AndroidManifest.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/UITestDemo/Droid/Properties/AssemblyInfo.cs b/UITestDemo/Droid/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..4660eac --- /dev/null +++ b/UITestDemo/Droid/Properties/AssemblyInfo.cs @@ -0,0 +1,28 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using Android.App; + +// Information about this assembly is defined by the following attributes. +// Change them to the values specific to your project. + +[assembly: AssemblyTitle("UITestDemo.Droid")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("jonwood")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". +// The form "{Major}.{Minor}.*" will automatically update the build and revision, +// and "{Major}.{Minor}.{Build}.*" will update just the revision. + +[assembly: AssemblyVersion("1.0.0")] + +// The following attributes are used to specify the signing key for the assembly, +// if desired. See the Mono documentation for more information about signing. + +//[assembly: AssemblyDelaySign(false)] +//[assembly: AssemblyKeyFile("")] + diff --git a/UITestDemo/Droid/Resources/AboutResources.txt b/UITestDemo/Droid/Resources/AboutResources.txt new file mode 100644 index 0000000..10f52d4 --- /dev/null +++ b/UITestDemo/Droid/Resources/AboutResources.txt @@ -0,0 +1,44 @@ +Images, layout descriptions, binary blobs and string dictionaries can be included +in your application as resource files. Various Android APIs are designed to +operate on the resource IDs instead of dealing with images, strings or binary blobs +directly. + +For example, a sample Android app that contains a user interface layout (main.axml), +an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) +would keep its resources in the "Resources" directory of the application: + +Resources/ + drawable/ + icon.png + + layout/ + main.axml + + values/ + strings.xml + +In order to get the build system to recognize Android resources, set the build action to +"AndroidResource". The native Android APIs do not operate directly with filenames, but +instead operate on resource IDs. When you compile an Android application that uses resources, +the build system will package the resources for distribution and generate a class called "R" +(this is an Android convention) that contains the tokens for each one of the resources +included. For example, for the above Resources layout, this is what the R class would expose: + +public class R { + public class drawable { + public const int icon = 0x123; + } + + public class layout { + public const int main = 0x456; + } + + public class strings { + public const int first_string = 0xabc; + public const int second_string = 0xbcd; + } +} + +You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main +to reference the layout/main.axml file, or R.strings.first_string to reference the first +string in the dictionary file values/strings.xml. diff --git a/UITestDemo/Droid/Resources/Resource.designer.cs b/UITestDemo/Droid/Resources/Resource.designer.cs new file mode 100644 index 0000000..92a74d9 --- /dev/null +++ b/UITestDemo/Droid/Resources/Resource.designer.cs @@ -0,0 +1,82 @@ +#pragma warning disable 1591 +// ------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Mono Runtime Version: 4.0.30319.17020 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ + +[assembly: Android.Runtime.ResourceDesignerAttribute("UITestDemo.Droid.Resource", IsApplication=true)] + +namespace UITestDemo.Droid +{ + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")] + public partial class Resource + { + + static Resource() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + public static void UpdateIdValues() + { + global::Xamarin.Forms.Platform.Resource.String.ApplicationName = global::UITestDemo.Droid.Resource.String.ApplicationName; + global::Xamarin.Forms.Platform.Resource.String.Hello = global::UITestDemo.Droid.Resource.String.Hello; + } + + public partial class Attribute + { + + static Attribute() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Attribute() + { + } + } + + public partial class Drawable + { + + // aapt resource value: 0x7f020000 + public const int icon = 2130837504; + + static Drawable() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Drawable() + { + } + } + + public partial class String + { + + // aapt resource value: 0x7f030001 + public const int ApplicationName = 2130903041; + + // aapt resource value: 0x7f030000 + public const int Hello = 2130903040; + + static String() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private String() + { + } + } + } +} +#pragma warning restore 1591 diff --git a/UITestDemo/Droid/Resources/drawable-hdpi/icon.png b/UITestDemo/Droid/Resources/drawable-hdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..964f110abb68f1663c4fd164a0079ae9034ef96d GIT binary patch literal 1431 zcmV;I1!($-P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;Eegmrwuz1qew*K~!i%?ON$?8$}f7kD?7FKsj0g5<=n- zM+Gf>0Ez%1ZXtwFr9!15B;W%|Ow*Rq5|WUX1lm&QL8?|MJ!wPRC_dsiwiDY)9N*X4 z;Wd6TGvnRanRRx8SNqfN+w9Dn-|ozt_ulMnw|99RNmp3A(G}KibcMAWU19A;SC|3s z+U47JD%Ll)ICy*oMIyDaNQcEedfJVXyrfL95I{Ip{;zMWP^cKbJ7`_g&Cbe*qQc(! zEsDeI0W^~jLu4!%Z7t+A2+hd8Cj%L5)59kxXUT^-6cPsBb~?rT2=J0$JVdP%m;ttN zvEy`{>;*@|G`FC^^ib8|SbF|N)Q)(~A_&D@9=vCRN*9(Ht72h?cDaJ4tE z`|<+W#fav@9^4nmm8&=^7a#sXg$OSXg|Wc^Zyt$|&%be4D4;26wMP#G$&R`-7dAYe z!XeGj93pTw%sF~n!l(1iiv~0&0vWQeE=`0zKNyno@L!EmA;PUBKyTAPV(?7=6#3+5 zBQb0f!z;sKvU@Xm!eGz*JyXDu#E>afH_+MPfvZVuBXEdLwAT0d=ksy_&BR=BE!Xw) zgne{e$g?qk=!6{P{yqN10ySyav9NE+XTTp|n+zC_%Fs|4oJF%4E17?#T6^+GYMFgb z$IVPc`^f&uqVb{3L9(FTx5v=+8w&GWoW}v=aXOeKhq}Y#3nuXxoXJ!=cTo=J$V9r{ zWC1^1OOiv8)E8#?EjIA#FVyCK`zQu3AD^H?hs_74TQSqTIvUg$wqI|@OJO|0Zte?_ z{PlQ|I>fuYSE70BU==^#)Gzqx3xhBM`?Y{=r()!on+8HJ4N;%*y<;=@XbXVwg&ea% zb;6$eDa0H;@2eMP$5Ol$&EHHEnY`n&;-%QS^Vmu|k9Uuu^I-Ch&61G~18L_0TtRog z&f{yOo{*=(2}!mpb@#wl4(KQ7xA?``1hy@s>%u(Qs``KiS_`TA#;A~Lxv)iLJ^6C= zp?y@zsppcykP2ua2u?Qz!M)dX{Ls)iwc{Zvp35l=f`PJW%a@}Gvisw`L0FmCMxgn& zVY|w-rA~OeIG7p2sq#8H(frf+?&5ryx^3v__Igz&nm|Y~vSOtH=JsIgut{m)t)o%$ z`PaqnI*Kb*8UTtEb6_`;U0?&i8I5fQm`s*BJk%FHtFo8_gau|&eyc4pSH=)eVH+1a z&rqK2slF-xbz(eQxqAi6Z$N&*l&Q>s?RZY;41}}jUbcSLB6<=B1iMmkMl)Ly2JE!q*V#{3{ny$5GhJcrMpsz7 l(G}KibcMAW9V)EL`!DSo$rUNEF*X1I002ovPDHLkV1lslsTBYK literal 0 HcmV?d00001 diff --git a/UITestDemo/Droid/Resources/drawable-xhdpi/icon.png b/UITestDemo/Droid/Resources/drawable-xhdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3c01e60ced0cd4ca7d47f6d4061603c5d0a4af95 GIT binary patch literal 1789 zcmeHH_g9k#6#Xb71c;|9U=LWV6)<2+O%MeK6$mn9grR^$A!q`XiUDH9QKVFMWS?jN z!wN%+VW}95kRU^uLJ1&*5fB0ykQg9j5E}jsPw%<+z4PAt?VfXAD#FtltZk?b007w4 z1@5EjA=}bYS5@Y@Hxys&*|8ci4#QD ziF}rAKI>E=>vSQ@?&;*Oq)B_yq+`*PQ^}Nb>D2kM>GR}ick;AH`3$0B#*lW2&7tc*Uw<)wrw)J=^mNCip+(8?l7z|K_{86s;7eHo>EyC>W<|yp%I3ewIAZytSk7Nl2-X!si9)!c z5KA{#Rg`T?k=3P0DExTQk%jYh*d4W z!#M@ud~afKw^7k(0E_x95@#8S#{F>2@~EX1e&I1f6{1jAxV>MvqktIXzZa^PsM+n2 zm7ov*Hm^Vr?sV20ZfT&Mf-sNPS4-dAYGvfSt#rra5Xlkq9oEx2jRWWqQ(|uJOgUMF zSmN(q-+a<_G-7+Ry{xm{>WkPTcq5uJ!;J(Ytom;xTuUN`b{RKIH(c;Mt-PzDNUvKZ-#UorE8;n)%0m)rQ_88m z;S4i8HHdqU)Yj-=ZgV3MN(kJ!H-i_}eUev~yb!T_#Kss2BVduI9{A=KM29mg*oD85)MD=yVzXTs?55TxPQVMTN6A*6+k z({6IJsa0YM@eSv8Y@FqOw{8zD5Y)9Pt29C5>4k(-1lO z1s5Re!MfRlCZi)5YzG(N8O=|f)9ZO5tx}HBVb&WT+sBdg7*=vpik8eLDn5P}R5*GW zv0m;F%qKAh2t&aLg!hY%eqM8^i`H@HGjZudnwyC*xI5Kz468lNyu9ei13NdO;~rXJ zxp&lhPM5>^gr!F?iQ$LpOgKD_8CqaY^@ypKSS4 zl25kij0_YpceNb?KO0no+c}7e^`7=}51w9khDegnO1c6#no$ye(4)&qG<3smN^J}) z*u}QhM{L~OqKAunzN8Etkun?PJyDWTdH(^Tu|3`|Y?odBQ0UAqoEhY3{(4 literal 0 HcmV?d00001 diff --git a/UITestDemo/Droid/Resources/drawable-xxhdpi/icon.png b/UITestDemo/Droid/Resources/drawable-xxhdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0d8c1c57dc5ca6268f2d5edae12f41a1a1dc3435 GIT binary patch literal 2353 zcmeHI`#Td18(yds%8X?LD*?0078A951+U zYwB-GOK$g`Y=y*a*@1F*umzC2)Tg%xsbKIWFaYp2MP@x=MLHBvF-BN_W5iFBHNM3h7gCH3x=Tu!!D$ee-)0n7LLG* zwlV5aH0oV4dZl#Cr)=zM*_a=BJb*k7uN)70I}uzpalLvXq-HX-X7X0;WOywHRmVZs zac+N@imacyOPPwMa_>{Qu^+h)KXD&@ntn{1e$qJov}p#@H1mwkd)~}TZsDc2^3vO8 zUod7f+h?=d=d!=dz3iAHbZ%olw`)GXd!E=cPx|_+@Y}DV-i4CBh4TId^7qBcfyHX( zQq7O0cY{k5)-rWyxq-d>kjS4VzrLp-`5o>&x5E{QoyYux3v8U7kius$nTpI=#D z5UwwZ)|W&Z{M8MCctg0hDO%fHUEf^a*xcOQ+Rp#~^*@-vy;*|Z_F8+w9j~AO00s1K z?qDOeqP9&Hw7oYPb_c4Tb7QI5>S=@)9QlBSf+7#AcLJZdzkL{H{OpESEu!uFh^0G3#pmL?T{mB2NY{3K z_31dA`4GDgFJQ*|#)Rd2<91GjR3B^{RJW_t-``W(8G#pwl_K_JgR7K3pDfbNH%h*) z5fTOu3e)y^Ts&}{6kt%b$O4}L?oWNr(Y9rn#fKj)KgK(a)hp8e*QR7Ols z?NS;$)1i}|VS#a|)WFi!ZLA2C7Mw??T$S$~JT*Fpd-lb<6~w6#ybZ%-v&d16I* z>)2(e+}84@BdY^c^dXT!v((2gXCF0iP>~&%=yj&*=cc7)F?Y#FbGe6V6~;bIc5}_E zzhHtVWT2A1Envi5m-j~MP3ow%AKi6+En7`}t?fwl46!`S`i|;;8otDe4o1}TOyCqT zuop0josB{6TT<1;M`t@(4$_L;*Urc(5ZW|@iE+X9fmB5p_Oa~DO|djCPDT_3;+rl* zed!QH-Pc&SBT4~>rCnH2=uIlS)$CkcUQu}fYE;mN3^vxxXmhEDdA>4n^;*l^amijn zGrf%+nEaf0-Hb1*Sk}<}&>eALPn3-gCFO({9TXv7m6O%<3WBXrd?L7%$&BVCskI8FXpveL8;+5R(hQQPcq zXWl`^XC=K(P3Xtz#LJUiaH4~8X^kH7%;M0fHzi|J z+J*|&_&f1LP@0^hXR}L2zQBnhJKeLB4@|T3fAc3Ctm<;A>o(H{Lce z{h!lN5F({W*7EenM}C?67u^v1=VdWb-L$Nz)x-5WQSfLPo*ia^X5$U|Ou zS6FHF#G*fC({`M)nktfszgmUr_|~!2zPr=y=|;GJ74xM}@Iu~#n<5&PcP%}K*&6#Q zgE`ySm~iI&RxDZ*TrZ3tuAd?dmxy!!)OdvdVE7{6+h8?ILpAy<6mgocwdb zipf77giuWfaL{mh%~+}f!#>04eSwVieaV_z;RAf-3N6FyE{GD^F&o(B@JJnU!|@MF z;#eWk-=L*bOK`61kXr=spCr3%Ur}VKuZe_we4k`?J*NDpYtvlo`#hn`ZKCK5Sv;8G zq^~3V8OKO|&{_?8v8n2C$=~aQlgTimN})%Q>~rH8K4?qsywuZF1yN*TCF-0b;Xwh%3<$an72)4H5DH9Z6J6WxLbEaWVtDo; zRh_{*{kJ8awWrtBh#T)ld`8Sqs98(6P73=PX zF3~)OaX&GwBY#q4!Ip1;#&d>=A*%cI`d*uR-iGZRg^i?@)ZZ9PtKeuP-ekRPx8Kg>*U5GY(igp;;-EBZmUC@o=G+g{zckmKk_=n4~ zpH~TmL}Jq0jpyS{NyxFwuYb@@<)MD4O!{9`QJx=u7Sv85?npXg@}JX*V^DWyh><3Q|PE|6`nJ^D8!9`HQ? literal 0 HcmV?d00001 diff --git a/UITestDemo/Droid/Resources/drawable/icon.png b/UITestDemo/Droid/Resources/drawable/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b0ba7150f4d6c3bd6d95e68b7c89e39f1ef22bca GIT binary patch literal 1431 zcmV;I1!($-P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGe?*IS_?*V;wibwze02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;Eegmrwuz1qew*K~!i%?ON$?8$}f7kD?7FKsj0g5<=n- zM+Gf>0Ez%1ZXtwFr9!15B;W%|Ow*Rq5|WUX1lm&QL8?|MJ!wPRC_dsiwiDY)9N*X4 z;Wd6TGvnRanRRx8SNqfN+w9Dn-|ozt_ulMnw|99RNmp3A(G}KibcMAWU19A;SC|3s z+U47JD%Ll)ICy*oMIyDaNQcEedfJVXyrfL95I{Ip{;zMWP^cKbJ7`_g&Cbe*qQc(! zEsDeI0W^~jLu4!%Z7t+A2+hd8Cj%L5)59kxXUT^-6cPsBb~?rT2=J0$JVdP%m;ttN zvEy`{>;*@|G`FC^^ib8|SbF|N)Q)(~A_&D@9=vCRN*9(Ht72h?cDaJ4tE z`|<+W#fav@9^4nmm8&=^7a#sXg$OSXg|Wc^Zyt$|&%be4D4;26wMP#G$&R`-7dAYe z!XeGj93pTw%sF~n!l(1iiv~0&0vWQeE=`0zKNyno@L!EmA;PUBKyTAPV(?7=6#3+5 zBQb0f!z;sKvU@Xm!eGz*JyXDu#E>afH_+MPfvZVuBXEdLwAT0d=ksy_&BR=BE!Xw) zgne{e$g?qk=!6{P{yqN10ySyav9NE+XTTp|n+zC_%Fs|4oJF%4E17?#T6^+GYMFgb z$IVPc`^f&uqVb{3L9(FTx5v=+8w&GWoW}v=aXOeKhq}Y#3nuXxoXJ!=cTo=J$V9r{ zWC1^1OOiv8)E8#?EjIA#FVyCK`zQu3AD^H?hs_74TQSqTIvUg$wqI|@OJO|0Zte?_ z{PlQ|I>fuYSE70BU==^#)Gzqx3xhBM`?Y{=r()!on+8HJ4N;%*y<;=@XbXVwg&ea% zb;6$eDa0H;@2eMP$5Ol$&EHHEnY`n&;-%QS^Vmu|k9Uuu^I-Ch&61G~18L_0TtRog z&f{yOo{*=(2}!mpb@#wl4(KQ7xA?``1hy@s>%u(Qs``KiS_`TA#;A~Lxv)iLJ^6C= zp?y@zsppcykP2ua2u?Qz!M)dX{Ls)iwc{Zvp35l=f`PJW%a@}Gvisw`L0FmCMxgn& zVY|w-rA~OeIG7p2sq#8H(frf+?&5ryx^3v__Igz&nm|Y~vSOtH=JsIgut{m)t)o%$ z`PaqnI*Kb*8UTtEb6_`;U0?&i8I5fQm`s*BJk%FHtFo8_gau|&eyc4pSH=)eVH+1a z&rqK2slF-xbz(eQxqAi6Z$N&*l&Q>s?RZY;41}}jUbcSLB6<=B1iMmkMl)Ly2JE!q*V#{3{ny$5GhJcrMpsz7 l(G}KibcMAW9V)EL`!DSo$rUNEF*X1I002ovPDHLkV1oYMspS9w literal 0 HcmV?d00001 diff --git a/UITestDemo/Droid/UITestDemo.Droid.csproj b/UITestDemo/Droid/UITestDemo.Droid.csproj new file mode 100644 index 0000000..2a91acb --- /dev/null +++ b/UITestDemo/Droid/UITestDemo.Droid.csproj @@ -0,0 +1,93 @@ + + + + Debug + AnyCPU + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {BB495BF3-D710-4C75-BD32-AC07CA6431E3} + Library + UITestDemo.Droid + Assets + Resources + Properties\AndroidManifest.xml + Resource + Resources\Resource.designer.cs + True + True + UITestDemo.Droid + v5.0 + + + true + full + false + bin\Debug + DEBUG; + prompt + 4 + None + false + + + full + true + bin\Release + prompt + 4 + false + false + + + + + + + + ..\packages\Xamarin.Forms.1.4.3.6376\lib\MonoAndroid10\Xamarin.Forms.Platform.Android.dll + + + ..\packages\Xamarin.Forms.1.4.3.6376\lib\MonoAndroid10\FormsViewGroup.dll + + + ..\packages\Xamarin.Forms.1.4.3.6376\lib\MonoAndroid10\Xamarin.Forms.Core.dll + + + ..\packages\Xamarin.Forms.1.4.3.6376\lib\MonoAndroid10\Xamarin.Forms.Xaml.dll + + + ..\packages\Xamarin.Forms.1.4.3.6376\lib\MonoAndroid10\Xamarin.Forms.Platform.dll + + + ..\packages\Xamarin.Android.Support.v4.22.2.1.0\lib\MonoAndroid403\Xamarin.Android.Support.v4.dll + + + + + {CBBB0981-6DAE-4C8F-973C-12C4614F41DF} + UITestDemo + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/UITestDemo/Droid/packages.config b/UITestDemo/Droid/packages.config new file mode 100644 index 0000000..401f130 --- /dev/null +++ b/UITestDemo/Droid/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/UITestDemo/MainPage.xaml b/UITestDemo/MainPage.xaml new file mode 100644 index 0000000..0bc5658 --- /dev/null +++ b/UITestDemo/MainPage.xaml @@ -0,0 +1,19 @@ + + + + +