From fb283194e3b74da5d22882e0fc1e56fe88ad7b12 Mon Sep 17 00:00:00 2001 From: Jon Date: Thu, 8 Oct 2015 23:56:59 -0400 Subject: [PATCH 01/11] Add tests and update build script --- FakeDemo/Droid/Resources/Resource.designer.cs | 21 +++++++++ .../FakeDemo.UnitTests.csproj | 43 +++++++++++++++++++ FakeDemo/FakeDemo.UnitTests/Test.cs | 14 ++++++ FakeDemo/FakeDemo.UnitTests/packages.config | 4 ++ FakeDemo/FakeDemo.sln | 14 ++++++ FakeDemo/build.fsx | 4 +- 6 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 FakeDemo/FakeDemo.UnitTests/FakeDemo.UnitTests.csproj create mode 100644 FakeDemo/FakeDemo.UnitTests/Test.cs create mode 100644 FakeDemo/FakeDemo.UnitTests/packages.config diff --git a/FakeDemo/Droid/Resources/Resource.designer.cs b/FakeDemo/Droid/Resources/Resource.designer.cs index c2ec09e..0816145 100644 --- a/FakeDemo/Droid/Resources/Resource.designer.cs +++ b/FakeDemo/Droid/Resources/Resource.designer.cs @@ -26,6 +26,8 @@ static Resource() public static void UpdateIdValues() { + global::Xamarin.Forms.Platform.Resource.String.ApplicationName = global::FakeDemo.Droid.Resource.String.ApplicationName; + global::Xamarin.Forms.Platform.Resource.String.Hello = global::FakeDemo.Droid.Resource.String.Hello; } public partial class Attribute @@ -56,6 +58,25 @@ 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/FakeDemo/FakeDemo.UnitTests/FakeDemo.UnitTests.csproj b/FakeDemo/FakeDemo.UnitTests/FakeDemo.UnitTests.csproj new file mode 100644 index 0000000..68ff875 --- /dev/null +++ b/FakeDemo/FakeDemo.UnitTests/FakeDemo.UnitTests.csproj @@ -0,0 +1,43 @@ + + + + Debug + AnyCPU + {48F4ABD7-EFC6-4640-BE36-29ECC13892FA} + Library + FakeDemo.UnitTests + FakeDemo.UnitTests + v4.5 + + + true + full + false + bin\Debug + DEBUG; + prompt + 4 + false + + + full + true + bin\Release + prompt + 4 + false + + + + + ..\packages\NUnit.2.6.3\lib\nunit.framework.dll + + + + + + + + + + \ No newline at end of file diff --git a/FakeDemo/FakeDemo.UnitTests/Test.cs b/FakeDemo/FakeDemo.UnitTests/Test.cs new file mode 100644 index 0000000..d308cdb --- /dev/null +++ b/FakeDemo/FakeDemo.UnitTests/Test.cs @@ -0,0 +1,14 @@ +using NUnit.Framework; + +namespace FakeDemo.UnitTests +{ + [TestFixture()] + public class Test + { + [Test()] + public void TestCase() + { + Assert.Fail(); + } + } +} diff --git a/FakeDemo/FakeDemo.UnitTests/packages.config b/FakeDemo/FakeDemo.UnitTests/packages.config new file mode 100644 index 0000000..d4e241a --- /dev/null +++ b/FakeDemo/FakeDemo.UnitTests/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/FakeDemo/FakeDemo.sln b/FakeDemo/FakeDemo.sln index e726a95..ac9a451 100644 --- a/FakeDemo/FakeDemo.sln +++ b/FakeDemo/FakeDemo.sln @@ -9,6 +9,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FakeDemo.Droid", "Droid\Fak EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FakeDemo.UITests", "UITests\FakeDemo.UITests.csproj", "{559CFEA0-A995-4A1B-8013-B14DB9B9738F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FakeDemo.UnitTests", "FakeDemo.UnitTests\FakeDemo.UnitTests.csproj", "{48F4ABD7-EFC6-4640-BE36-29ECC13892FA}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -43,6 +45,18 @@ Global {28420794-0CA6-49D2-AFBB-4F62CF2E8C2E}.Release|iPhone.Build.0 = Release|Any CPU {28420794-0CA6-49D2-AFBB-4F62CF2E8C2E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU {28420794-0CA6-49D2-AFBB-4F62CF2E8C2E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {48F4ABD7-EFC6-4640-BE36-29ECC13892FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {48F4ABD7-EFC6-4640-BE36-29ECC13892FA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {48F4ABD7-EFC6-4640-BE36-29ECC13892FA}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {48F4ABD7-EFC6-4640-BE36-29ECC13892FA}.Debug|iPhone.Build.0 = Debug|Any CPU + {48F4ABD7-EFC6-4640-BE36-29ECC13892FA}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {48F4ABD7-EFC6-4640-BE36-29ECC13892FA}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {48F4ABD7-EFC6-4640-BE36-29ECC13892FA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {48F4ABD7-EFC6-4640-BE36-29ECC13892FA}.Release|Any CPU.Build.0 = Release|Any CPU + {48F4ABD7-EFC6-4640-BE36-29ECC13892FA}.Release|iPhone.ActiveCfg = Release|Any CPU + {48F4ABD7-EFC6-4640-BE36-29ECC13892FA}.Release|iPhone.Build.0 = Release|Any CPU + {48F4ABD7-EFC6-4640-BE36-29ECC13892FA}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {48F4ABD7-EFC6-4640-BE36-29ECC13892FA}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {559CFEA0-A995-4A1B-8013-B14DB9B9738F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {559CFEA0-A995-4A1B-8013-B14DB9B9738F}.Debug|Any CPU.Build.0 = Debug|Any CPU {559CFEA0-A995-4A1B-8013-B14DB9B9738F}.Debug|iPhone.ActiveCfg = Debug|Any CPU diff --git a/FakeDemo/build.fsx b/FakeDemo/build.fsx index 42d5f4a..0865910 100644 --- a/FakeDemo/build.fsx +++ b/FakeDemo/build.fsx @@ -9,7 +9,9 @@ Target "Clean" (fun _ -> ) Target "Test" (fun _ -> - trace "Testing stuff..." + let testDll = !! "FakeDemo.UnitTests/FakeDemo.UnitTests.csproj" + + testDll |> NUnit ( fun defaults -> defaults) ) Target "Build-Pcl" (fun _ -> From 03969425d26487f379fd7b6148f6ca88a6d75d79 Mon Sep 17 00:00:00 2001 From: Jon Date: Fri, 9 Oct 2015 10:53:52 -0400 Subject: [PATCH 02/11] Update Unit --- .../nunit.framework.dll" | Bin 0 -> 151552 bytes .../FakeDemo.UnitTests.csproj | 2 +- FakeDemo/FakeDemo.UnitTests/packages.config | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 "FakeDemo/FakeDemo.UnitTests\bin\\Debug/nunit.framework.dll" diff --git "a/FakeDemo/FakeDemo.UnitTests\bin\\Debug/nunit.framework.dll" "b/FakeDemo/FakeDemo.UnitTests\bin\\Debug/nunit.framework.dll" new file mode 100644 index 0000000000000000000000000000000000000000..ed6550bb0556d716de525cd64e1a6cefb8a945bf GIT binary patch literal 151552 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 - ..\packages\NUnit.2.6.3\lib\nunit.framework.dll + ..\packages\NUnit.2.6.4\lib\nunit.framework.dll diff --git a/FakeDemo/FakeDemo.UnitTests/packages.config b/FakeDemo/FakeDemo.UnitTests/packages.config index d4e241a..09300da 100644 --- a/FakeDemo/FakeDemo.UnitTests/packages.config +++ b/FakeDemo/FakeDemo.UnitTests/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file From 603939c324101a04401bd156a8d6a169ff9d962e Mon Sep 17 00:00:00 2001 From: Jon Date: Fri, 9 Oct 2015 10:54:03 -0400 Subject: [PATCH 03/11] Add built and run test build targets --- FakeDemo/build.fsx | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/FakeDemo/build.fsx b/FakeDemo/build.fsx index 0865910..c0662e7 100644 --- a/FakeDemo/build.fsx +++ b/FakeDemo/build.fsx @@ -8,10 +8,25 @@ Target "Clean" (fun _ -> CleanDir buildDir ) -Target "Test" (fun _ -> +Target "Build-UnitTests" (fun _ -> + !! "FakeDemo.UnitTests/FakeDemo.UnitTests.csproj" + |> MSBuild "FakeDemo.UnitTests\bin\Debug" "Build" [ ("Configuration", "Debug"); ("Platform", "Any CPU") ] + |> Log "---Unit Test build output----" +) + +Target "Run-UnitTests" (fun _ -> let testDll = !! "FakeDemo.UnitTests/FakeDemo.UnitTests.csproj" - testDll |> NUnit ( fun defaults -> defaults) + testDll |> NUnit ( fun defaults -> + { + defaults with ToolPath = "/Library/Frameworks/Mono.framework/Commands/" + ToolName = "nunit-console4" + WorkingDir = "FakeDemo.UnitTests\bin\Debug" + }) +) + +Target "Run-UITests" (fun _ -> + trace "UI Tests" ) Target "Build-Pcl" (fun _ -> @@ -39,12 +54,12 @@ Target "Build-Droid" (fun _ -> ) "Clean" - ==> "Build-Pcl" - ==> "Test" + ==> "Build-UnitTests" + ==> "Run-UnitTests" "Clean" ==> "Build-Pcl" ==> "Build-iOS" ==> "Build-Droid" -RunTargetOrDefault "Test" \ No newline at end of file +RunTargetOrDefault "Run-UnitTests" \ No newline at end of file From 526ea650bafe58a01ca3f6de32afea64d4faf63c Mon Sep 17 00:00:00 2001 From: Jon Date: Fri, 9 Oct 2015 14:59:47 -0400 Subject: [PATCH 04/11] Fix unit test run build target --- FakeDemo/FakeDemo.UnitTests/Test.cs | 6 +++--- FakeDemo/build.fsx | 7 ++++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/FakeDemo/FakeDemo.UnitTests/Test.cs b/FakeDemo/FakeDemo.UnitTests/Test.cs index d308cdb..0693872 100644 --- a/FakeDemo/FakeDemo.UnitTests/Test.cs +++ b/FakeDemo/FakeDemo.UnitTests/Test.cs @@ -2,13 +2,13 @@ namespace FakeDemo.UnitTests { - [TestFixture()] + [TestFixture] public class Test { - [Test()] + [Test] public void TestCase() { - Assert.Fail(); + Assert.IsTrue(true); } } } diff --git a/FakeDemo/build.fsx b/FakeDemo/build.fsx index c0662e7..7376b47 100644 --- a/FakeDemo/build.fsx +++ b/FakeDemo/build.fsx @@ -3,25 +3,26 @@ open Fake open Fake.XamarinHelper let buildDir = "FakeDemo/bin/Debug" +let testProj = !! "FakeDemo.UnitTests/FakeDemo.UnitTests.csproj" +let testDll = !! "FakeDemo.UnitTests/bin/Debug/FakeDemo.UnitTests.dll" Target "Clean" (fun _ -> CleanDir buildDir ) Target "Build-UnitTests" (fun _ -> - !! "FakeDemo.UnitTests/FakeDemo.UnitTests.csproj" + testProj |> MSBuild "FakeDemo.UnitTests\bin\Debug" "Build" [ ("Configuration", "Debug"); ("Platform", "Any CPU") ] |> Log "---Unit Test build output----" ) Target "Run-UnitTests" (fun _ -> - let testDll = !! "FakeDemo.UnitTests/FakeDemo.UnitTests.csproj" - testDll |> NUnit ( fun defaults -> { defaults with ToolPath = "/Library/Frameworks/Mono.framework/Commands/" ToolName = "nunit-console4" WorkingDir = "FakeDemo.UnitTests\bin\Debug" + DisableShadowCopy = true }) ) From edd08092762c0559b375dc90d44ffebd7c98bf40 Mon Sep 17 00:00:00 2001 From: Jon Date: Fri, 9 Oct 2015 18:12:51 -0400 Subject: [PATCH 05/11] Update UI test package --- FakeDemo/UITests/FakeDemo.UITests.csproj | 6 +++--- FakeDemo/UITests/packages.config | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/FakeDemo/UITests/FakeDemo.UITests.csproj b/FakeDemo/UITests/FakeDemo.UITests.csproj index 759fe5f..3a83495 100644 --- a/FakeDemo/UITests/FakeDemo.UITests.csproj +++ b/FakeDemo/UITests/FakeDemo.UITests.csproj @@ -29,12 +29,12 @@ - - ..\packages\Xamarin.UITest.1.0.0\lib\Xamarin.UITest.dll - ..\packages\NUnit.2.6.4\lib\nunit.framework.dll + + ..\packages\Xamarin.UITest.1.1.1\lib\Xamarin.UITest.dll + diff --git a/FakeDemo/UITests/packages.config b/FakeDemo/UITests/packages.config index 4962ca5..2d9e3ac 100644 --- a/FakeDemo/UITests/packages.config +++ b/FakeDemo/UITests/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file From c62b8c6e01c60978dbb1fddbc396ccb4d4fa3660 Mon Sep 17 00:00:00 2001 From: Jon Date: Fri, 9 Oct 2015 18:13:03 -0400 Subject: [PATCH 06/11] Add UI Test build targets --- FakeDemo/UITests/Tests.cs | 1 - FakeDemo/build.fsx | 15 ++++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/FakeDemo/UITests/Tests.cs b/FakeDemo/UITests/Tests.cs index 4358dc3..58542fb 100644 --- a/FakeDemo/UITests/Tests.cs +++ b/FakeDemo/UITests/Tests.cs @@ -29,7 +29,6 @@ public void BeforeEachTest() public void WelcomeTextIsDisplayed() { AppResult[] results = app.WaitForElement(c => c.Marked("Welcome to Xamarin Forms!")); - app.Screenshot("Welcome screen."); Assert.IsTrue(results.Any()); } diff --git a/FakeDemo/build.fsx b/FakeDemo/build.fsx index 7376b47..17f9871 100644 --- a/FakeDemo/build.fsx +++ b/FakeDemo/build.fsx @@ -5,6 +5,8 @@ open Fake.XamarinHelper let buildDir = "FakeDemo/bin/Debug" let testProj = !! "FakeDemo.UnitTests/FakeDemo.UnitTests.csproj" let testDll = !! "FakeDemo.UnitTests/bin/Debug/FakeDemo.UnitTests.dll" +let uiTestProj = !! "UITests/FakeDemo.UITests.csproj" +let uiTestDll = !! "UITests/bin/Debug/FakeDemo.UITests.dll" Target "Clean" (fun _ -> CleanDir buildDir @@ -16,6 +18,12 @@ Target "Build-UnitTests" (fun _ -> |> Log "---Unit Test build output----" ) +Target "Build-UITests" (fun _ -> + uiTestProj + |> MSBuild "UITests\bin\Debug" "Build" [ ("Configuration", "Debug"); ("Platform", "Any CPU") ] + |> Log "---UI Test build output----" +) + Target "Run-UnitTests" (fun _ -> testDll |> NUnit ( fun defaults -> { @@ -27,7 +35,12 @@ Target "Run-UnitTests" (fun _ -> ) Target "Run-UITests" (fun _ -> - trace "UI Tests" + uiTestDll |> NUnit ( fun defaults -> + { + defaults with ToolPath = "/Library/Frameworks/Mono.framework/Commands/" + ToolName = "nunit-console4" + DisableShadowCopy = true + }) ) Target "Build-Pcl" (fun _ -> From d47772fecc4ad3e19b59443e70da44d3aa3d1652 Mon Sep 17 00:00:00 2001 From: Jon Date: Sat, 10 Oct 2015 13:58:46 -0400 Subject: [PATCH 07/11] Update packages again --- FakeDemo/Droid/FakeDemo.Droid.csproj | 18 +++++++++--------- FakeDemo/Droid/packages.config | 4 ++-- FakeDemo/FakeDemo.csproj | 18 +++++++++--------- FakeDemo/iOS/FakeDemo.iOS.csproj | 18 ++++++++++++------ FakeDemo/iOS/packages.config | 4 ++-- FakeDemo/packages.config | 2 +- 6 files changed, 35 insertions(+), 29 deletions(-) diff --git a/FakeDemo/Droid/FakeDemo.Droid.csproj b/FakeDemo/Droid/FakeDemo.Droid.csproj index 876027a..e0eee7e 100644 --- a/FakeDemo/Droid/FakeDemo.Droid.csproj +++ b/FakeDemo/Droid/FakeDemo.Droid.csproj @@ -42,23 +42,23 @@ - - ..\packages\Xamarin.Android.Support.v4.22.2.1.0\lib\MonoAndroid403\Xamarin.Android.Support.v4.dll - - ..\packages\Xamarin.Forms.1.5.0.6446\lib\MonoAndroid10\Xamarin.Forms.Platform.Android.dll + ..\packages\Xamarin.Forms.1.5.0.6447\lib\MonoAndroid10\Xamarin.Forms.Platform.Android.dll - ..\packages\Xamarin.Forms.1.5.0.6446\lib\MonoAndroid10\FormsViewGroup.dll + ..\packages\Xamarin.Forms.1.5.0.6447\lib\MonoAndroid10\FormsViewGroup.dll - ..\packages\Xamarin.Forms.1.5.0.6446\lib\MonoAndroid10\Xamarin.Forms.Core.dll + ..\packages\Xamarin.Forms.1.5.0.6447\lib\MonoAndroid10\Xamarin.Forms.Core.dll - ..\packages\Xamarin.Forms.1.5.0.6446\lib\MonoAndroid10\Xamarin.Forms.Xaml.dll + ..\packages\Xamarin.Forms.1.5.0.6447\lib\MonoAndroid10\Xamarin.Forms.Xaml.dll - ..\packages\Xamarin.Forms.1.5.0.6446\lib\MonoAndroid10\Xamarin.Forms.Platform.dll + ..\packages\Xamarin.Forms.1.5.0.6447\lib\MonoAndroid10\Xamarin.Forms.Platform.dll + + + ..\packages\Xamarin.Android.Support.v4.23.0.1.1\lib\MonoAndroid403\Xamarin.Android.Support.v4.dll @@ -89,5 +89,5 @@ - + \ No newline at end of file diff --git a/FakeDemo/Droid/packages.config b/FakeDemo/Droid/packages.config index a8cf6f0..4299a73 100644 --- a/FakeDemo/Droid/packages.config +++ b/FakeDemo/Droid/packages.config @@ -1,5 +1,5 @@  - - + + \ No newline at end of file diff --git a/FakeDemo/FakeDemo.csproj b/FakeDemo/FakeDemo.csproj index 4ebd1aa..dcbea29 100644 --- a/FakeDemo/FakeDemo.csproj +++ b/FakeDemo/FakeDemo.csproj @@ -37,24 +37,24 @@ - + + + + MSBuild:UpdateDesignTimeXaml + + - packages\Xamarin.Forms.1.5.0.6446\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.Core.dll + packages\Xamarin.Forms.1.5.0.6447\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.Core.dll - packages\Xamarin.Forms.1.5.0.6446\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.Xaml.dll + packages\Xamarin.Forms.1.5.0.6447\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.Xaml.dll - packages\Xamarin.Forms.1.5.0.6446\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.Platform.dll + packages\Xamarin.Forms.1.5.0.6447\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.Platform.dll - - - MSBuild:UpdateDesignTimeXaml - - \ No newline at end of file diff --git a/FakeDemo/iOS/FakeDemo.iOS.csproj b/FakeDemo/iOS/FakeDemo.iOS.csproj index c8f9e04..0a43242 100644 --- a/FakeDemo/iOS/FakeDemo.iOS.csproj +++ b/FakeDemo/iOS/FakeDemo.iOS.csproj @@ -23,6 +23,10 @@ None true true + iPhone Developer + true + + full @@ -59,6 +63,8 @@ true iPhone Developer true + true + FakeDemo @@ -66,19 +72,19 @@ - ..\packages\Xamarin.TestCloud.Agent.0.16.1\lib\Xamarin.iOS10\Calabash.dll + ..\packages\Xamarin.TestCloud.Agent.0.16.2\lib\Xamarin.iOS10\Calabash.dll - ..\packages\Xamarin.Forms.1.5.0.6446\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll + ..\packages\Xamarin.Forms.1.5.0.6447\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll - ..\packages\Xamarin.Forms.1.5.0.6446\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll + ..\packages\Xamarin.Forms.1.5.0.6447\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll - ..\packages\Xamarin.Forms.1.5.0.6446\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll + ..\packages\Xamarin.Forms.1.5.0.6447\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll - ..\packages\Xamarin.Forms.1.5.0.6446\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll + ..\packages\Xamarin.Forms.1.5.0.6447\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll @@ -121,5 +127,5 @@ - + \ No newline at end of file diff --git a/FakeDemo/iOS/packages.config b/FakeDemo/iOS/packages.config index 14e9a6b..37121cf 100644 --- a/FakeDemo/iOS/packages.config +++ b/FakeDemo/iOS/packages.config @@ -1,5 +1,5 @@  - - + + \ No newline at end of file diff --git a/FakeDemo/packages.config b/FakeDemo/packages.config index d6824ed..4072e9f 100644 --- a/FakeDemo/packages.config +++ b/FakeDemo/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file From 42f535ae40d2ca9292fcdd209ee69cb26ef16382 Mon Sep 17 00:00:00 2001 From: Jon Date: Sat, 10 Oct 2015 13:58:58 -0400 Subject: [PATCH 08/11] Fix UI test --- FakeDemo/UITests/Tests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FakeDemo/UITests/Tests.cs b/FakeDemo/UITests/Tests.cs index 58542fb..5fed299 100644 --- a/FakeDemo/UITests/Tests.cs +++ b/FakeDemo/UITests/Tests.cs @@ -28,7 +28,7 @@ public void BeforeEachTest() [Test] public void WelcomeTextIsDisplayed() { - AppResult[] results = app.WaitForElement(c => c.Marked("Welcome to Xamarin Forms!")); + AppResult[] results = app.WaitForElement(c => c.Marked("Built using FAKE!")); Assert.IsTrue(results.Any()); } From 66208a62680b35d908794e58da20aa2705bb773c Mon Sep 17 00:00:00 2001 From: Jon Date: Tue, 27 Oct 2015 10:15:16 -0400 Subject: [PATCH 09/11] Add packaging for UI tests --- FakeDemo/build.fsx | 26 +++++++++++++++++++++++--- FakeDemo/packageHelpers.fsx | 17 +++++++++++++++++ 2 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 FakeDemo/packageHelpers.fsx diff --git a/FakeDemo/build.fsx b/FakeDemo/build.fsx index 17f9871..cdd9a66 100644 --- a/FakeDemo/build.fsx +++ b/FakeDemo/build.fsx @@ -1,4 +1,5 @@ #r "packages/FAKE/tools/FakeLib.dll" +#load "packageHelpers.fsx" open Fake open Fake.XamarinHelper @@ -34,12 +35,29 @@ Target "Run-UnitTests" (fun _ -> }) ) -Target "Run-UITests" (fun _ -> +Target "Run-AndroidUITests" (fun _ -> + let source = PackageHelpers.androidPackage() + + let dest = + filename source.FullName + |> sprintf "./RebuyApp.Android.UITests/%s" + |> fileInfo + |> PackageHelpers.moveAndroidApk source + + !! @"./**/RebuyApp.Android.UITests/bin/Release/RebuyApp.Android.UITests.dll" + |> NUnit (fun defaults -> { defaults with ErrorLevel = DontFailBuild }) + + Shell.Exec("adb", "uninstall de.rebuy.android") + |> ignore + + DeleteFile dest.FullName +) + +Target "Run-iOSUITests" (fun _ -> uiTestDll |> NUnit ( fun defaults -> { defaults with ToolPath = "/Library/Frameworks/Mono.framework/Commands/" ToolName = "nunit-console4" - DisableShadowCopy = true }) ) @@ -56,7 +74,7 @@ Target "Build-iOS" (fun _ -> { defaults with ProjectPath = "iOS/FakeDemo.iOS.csproj" OutputPath = "iOS/iPhoneSimulator/Debug" - Configuration = "Debug|iPhoneSimulator" + Configuration = "Ad-Hoc|iPhone" Target = "Build" }) ) @@ -75,5 +93,7 @@ Target "Build-Droid" (fun _ -> ==> "Build-Pcl" ==> "Build-iOS" ==> "Build-Droid" + ==> "Build-UITests" + ==> "Run-AndroidUITests" RunTargetOrDefault "Run-UnitTests" \ No newline at end of file diff --git a/FakeDemo/packageHelpers.fsx b/FakeDemo/packageHelpers.fsx new file mode 100644 index 0000000..0366ba1 --- /dev/null +++ b/FakeDemo/packageHelpers.fsx @@ -0,0 +1,17 @@ +#r "packages/FAKE/tools/FakeLib.dll" +open System.IO +open Fake +open Fake.XamarinHelper + +let androidPackage() = + AndroidPackage (fun defaults -> + { + defaults with + ProjectPath = "Droid/FakeDemo.Droid.csproj" + }) + +let moveAndroidApk (source : FileInfo) (dest : FileInfo) = + DeleteFile dest.FullName + Rename dest.FullName source.FullName + + dest From 60194250b9021cce5195a1d1ed70b864803c6398 Mon Sep 17 00:00:00 2001 From: Jon Date: Mon, 2 Nov 2015 13:25:15 -0500 Subject: [PATCH 10/11] Reverting for part 3 --- FakeDemo/build.fsx | 37 +------------------------------------ FakeDemo/packageHelpers.fsx | 17 ----------------- 2 files changed, 1 insertion(+), 53 deletions(-) delete mode 100644 FakeDemo/packageHelpers.fsx diff --git a/FakeDemo/build.fsx b/FakeDemo/build.fsx index cdd9a66..8c18e29 100644 --- a/FakeDemo/build.fsx +++ b/FakeDemo/build.fsx @@ -6,8 +6,6 @@ open Fake.XamarinHelper let buildDir = "FakeDemo/bin/Debug" let testProj = !! "FakeDemo.UnitTests/FakeDemo.UnitTests.csproj" let testDll = !! "FakeDemo.UnitTests/bin/Debug/FakeDemo.UnitTests.dll" -let uiTestProj = !! "UITests/FakeDemo.UITests.csproj" -let uiTestDll = !! "UITests/bin/Debug/FakeDemo.UITests.dll" Target "Clean" (fun _ -> CleanDir buildDir @@ -19,12 +17,6 @@ Target "Build-UnitTests" (fun _ -> |> Log "---Unit Test build output----" ) -Target "Build-UITests" (fun _ -> - uiTestProj - |> MSBuild "UITests\bin\Debug" "Build" [ ("Configuration", "Debug"); ("Platform", "Any CPU") ] - |> Log "---UI Test build output----" -) - Target "Run-UnitTests" (fun _ -> testDll |> NUnit ( fun defaults -> { @@ -35,32 +27,6 @@ Target "Run-UnitTests" (fun _ -> }) ) -Target "Run-AndroidUITests" (fun _ -> - let source = PackageHelpers.androidPackage() - - let dest = - filename source.FullName - |> sprintf "./RebuyApp.Android.UITests/%s" - |> fileInfo - |> PackageHelpers.moveAndroidApk source - - !! @"./**/RebuyApp.Android.UITests/bin/Release/RebuyApp.Android.UITests.dll" - |> NUnit (fun defaults -> { defaults with ErrorLevel = DontFailBuild }) - - Shell.Exec("adb", "uninstall de.rebuy.android") - |> ignore - - DeleteFile dest.FullName -) - -Target "Run-iOSUITests" (fun _ -> - uiTestDll |> NUnit ( fun defaults -> - { - defaults with ToolPath = "/Library/Frameworks/Mono.framework/Commands/" - ToolName = "nunit-console4" - }) -) - Target "Build-Pcl" (fun _ -> RestorePackages() @@ -93,7 +59,6 @@ Target "Build-Droid" (fun _ -> ==> "Build-Pcl" ==> "Build-iOS" ==> "Build-Droid" - ==> "Build-UITests" - ==> "Run-AndroidUITests" + ==> "Run-UnitTests" RunTargetOrDefault "Run-UnitTests" \ No newline at end of file diff --git a/FakeDemo/packageHelpers.fsx b/FakeDemo/packageHelpers.fsx deleted file mode 100644 index 0366ba1..0000000 --- a/FakeDemo/packageHelpers.fsx +++ /dev/null @@ -1,17 +0,0 @@ -#r "packages/FAKE/tools/FakeLib.dll" -open System.IO -open Fake -open Fake.XamarinHelper - -let androidPackage() = - AndroidPackage (fun defaults -> - { - defaults with - ProjectPath = "Droid/FakeDemo.Droid.csproj" - }) - -let moveAndroidApk (source : FileInfo) (dest : FileInfo) = - DeleteFile dest.FullName - Rename dest.FullName source.FullName - - dest From bbde025c4182267bef94001d6426295cbb16fc0e Mon Sep 17 00:00:00 2001 From: Jon Date: Mon, 2 Nov 2015 13:29:33 -0500 Subject: [PATCH 11/11] Can't load a nonexistent file --- FakeDemo/build.fsx | 1 - 1 file changed, 1 deletion(-) diff --git a/FakeDemo/build.fsx b/FakeDemo/build.fsx index 8c18e29..7ea97c4 100644 --- a/FakeDemo/build.fsx +++ b/FakeDemo/build.fsx @@ -1,5 +1,4 @@ #r "packages/FAKE/tools/FakeLib.dll" -#load "packageHelpers.fsx" open Fake open Fake.XamarinHelper