Skip to content

Commit 1de52ae

Browse files
committed
[tests] Support running MSBuild tests against installer
1 parent cb6e961 commit 1de52ae

File tree

11 files changed

+163
-20
lines changed

11 files changed

+163
-20
lines changed

Configuration.props

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@
114114
<_TestsProfiledAotName Condition=" '$(AndroidEnableProfiledAot)' == 'true' ">-Profiled</_TestsProfiledAotName>
115115
<_TestsBundleName Condition=" '$(BundleAssemblies)' == 'true' ">-Bundle</_TestsBundleName>
116116
<TestsFlavor>$(_TestsProfiledAotName)$(_TestsAotName)$(_TestsBundleName)</TestsFlavor>
117+
<TestAgainstSystemInstall Condition=" '$(TestAgainstSystemInstall)' == '' ">False</TestAgainstSystemInstall>
118+
<DefineConstants Condition=" '$(TestAgainstSystemInstall)' == 'True' ">$(DefineConstants);TESTINSTALLER;</DefineConstants>
117119
</PropertyGroup>
118120
<PropertyGroup>
119121
<MingwCommandPrefix32>i686-w64-mingw32</MingwCommandPrefix32>

build-tools/automation/azure-pipelines.yaml

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,93 @@ stages:
493493
targetPath: $(Build.ArtifactStagingDirectory)
494494
condition: always()
495495

496+
# Check - "Xamarin.Android (Test XA Build Tasks)"
497+
- job: mac_msbuild_tests
498+
displayName: Build Tasks
499+
pool: $(XA.Build.Mac.Pool)
500+
timeoutInMinutes: 240
501+
cancelTimeoutInMinutes: 5
502+
workspace:
503+
clean: all
504+
variables:
505+
BuildTaskTestConfiguration: Release
506+
steps:
507+
- task: DownloadPipelineArtifact@1
508+
inputs:
509+
artifactName: $(InstallerArtifactName)
510+
itemPattern: "*.pkg"
511+
downloadPath: $(System.DefaultWorkingDirectory)
512+
513+
- template: yaml-templates/run-installer.yaml
514+
515+
- task: MSBuild@1
516+
displayName: build xaprepare
517+
inputs:
518+
solution: build-tools/xaprepare/xaprepare.sln
519+
configuration: $(BuildTaskTestConfiguration)
520+
msbuildArguments: /t:Restore,Build
521+
522+
- script: |
523+
mono build-tools/xaprepare/xaprepare/bin/$(BuildTaskTestConfiguration)/xaprepare.exe --s=UpdateMono --auto-provision=yes --auto-provision-uses-sudo=yes --no-emoji --run-mode=CI
524+
mono build-tools/xaprepare/xaprepare/bin/$(BuildTaskTestConfiguration)/xaprepare.exe --s=Required --auto-provision=yes --auto-provision-uses-sudo=yes --no-emoji --run-mode=CI
525+
mono build-tools/xaprepare/xaprepare/bin/$(BuildTaskTestConfiguration)/xaprepare.exe --s=AndroidToolchain --no-emoji --run-mode=CI
526+
displayName: provision dependencies
527+
528+
# Restore solutions for Xamarin.Android.Tools.sln, Xamarin.Android.sln, and Xamarin.Android-Tests.sln
529+
- task: NuGetCommand@2
530+
displayName: nuget restore Xamarin.Android solutions
531+
inputs:
532+
restoreSolution: '**/Xamarin.Android*.sln'
533+
534+
- task: MSBuild@1
535+
displayName: build Xamarin.Android.Tools.BootstrapTasks.csproj
536+
inputs:
537+
solution: build-tools/xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csproj
538+
configuration: $(BuildTaskTestConfiguration)
539+
msbuildArguments: /bl:$(System.DefaultWorkingDirectory)/bin/Test$(BuildTaskTestConfiguration)/BootstrapTasks.binlog
540+
541+
- task: MSBuild@1
542+
displayName: build Xamarin.Android.Build.Tests.csproj
543+
inputs:
544+
solution: src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Xamarin.Android.Build.Tests.csproj
545+
configuration: $(BuildTaskTestConfiguration)
546+
msbuildArguments: >
547+
/p:TestAgainstSystemInstall=true
548+
/bl:$(System.DefaultWorkingDirectory)/bin/Test$(BuildTaskTestConfiguration)/XABuild.Tests.binlog
549+
550+
- script: >
551+
mono packages/NUnit.ConsoleRunner.3.9.0/tools/nunit3-console.exe bin/Test$(BuildTaskTestConfiguration)/Xamarin.Android.Build.Tests.dll
552+
--where "test == Xamarin.Android.Build.Tests.BuildTest"
553+
--result TestResult-buildtests-$(BuildTaskTestConfiguration).xml
554+
555+
- script: >
556+
mono packages/NUnit.ConsoleRunner.3.9.0/tools/nunit3-console.exe bin/Test$(BuildTaskTestConfiguration)/Xamarin.Android.Build.Tests.dll
557+
--where "test != Xamarin.Android.Build.Tests.BuildTest"
558+
--result TestResult-otherbuildtests-$(BuildTaskTestConfiguration).xml
559+
560+
- task: PublishTestResults@2
561+
displayName: publish test results
562+
inputs:
563+
testResultsFormat: NUnit
564+
testResultsFiles: TestResult-*.xml
565+
testRunTitle: build-tasks
566+
condition: succeededOrFailed()
567+
568+
- task: MSBuild@1
569+
displayName: package results
570+
inputs:
571+
solution: build-tools/xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csproj
572+
configuration: $(BuildTaskTestConfiguration)
573+
msbuildArguments: /t:Build,ZipBuildStatus,ZipTestResults /p:BuildStatusZipOutputPath=$(Build.ArtifactStagingDirectory) /p:TestResultZipOutputPath=$(Build.ArtifactStagingDirectory)
574+
condition: always()
575+
576+
- task: PublishPipelineArtifact@0
577+
displayName: upload artifacts
578+
inputs:
579+
artifactName: mac-buildtask-test-results
580+
targetPath: $(Build.ArtifactStagingDirectory)
581+
condition: always()
582+
496583
# Check - "Xamarin.Android (Test Designer Mac)"
497584
- job: designer_integration_mac
498585
displayName: Designer Mac

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@
1515
using System.Xml.Linq;
1616
using System.Xml.XPath;
1717
using Xamarin.ProjectTools;
18+
19+
#if TESTINSTALLER
20+
using XABuildPaths = Xamarin.ProjectTools.DefaultXABuildPaths;
21+
#else
1822
using XABuildPaths = Xamarin.Android.Build.Paths;
23+
#endif
1924

2025
namespace Xamarin.Android.Build.Tests
2126
{
@@ -484,18 +489,7 @@ protected virtual void CleanupTest ()
484489
Directory.Delete (output, recursive: true);
485490
} else {
486491
foreach (var file in Directory.GetFiles (Path.Combine (output), "build.log", SearchOption.AllDirectories)) {
487-
TestContext.Out.WriteLine ("*************************************************************************");
488-
TestContext.Out.WriteLine (file);
489-
TestContext.Out.WriteLine ();
490-
using (StreamReader reader = new StreamReader (file)) {
491-
string line;
492-
while ((line = reader.ReadLine ()) != null) {
493-
TestContext.Out.WriteLine (line);
494-
TestContext.Out.Flush ();
495-
}
496-
}
497-
TestContext.Out.WriteLine ("*************************************************************************");
498-
TestContext.Out.Flush ();
492+
TestContext.AddTestAttachment (file, Path.GetFileName (output));
499493
}
500494
}
501495
}

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BuildHelper.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44
using Xamarin.ProjectTools;
55
using NUnit.Framework;
66

7+
#if TESTINSTALLER
8+
using XABuildPaths = Xamarin.ProjectTools.DefaultXABuildPaths;
9+
#else
10+
using XABuildPaths = Xamarin.Android.Build.Paths;
11+
#endif
12+
713
namespace Xamarin.Android.Build.Tests
814
{
915
public static class BuildHelper
@@ -25,7 +31,7 @@ public static ProjectBuilder CreateDllBuilder (string directory, bool cleanupAft
2531
CleanupAfterSuccessfulBuild = cleanupAfterSuccessfulBuild,
2632
CleanupOnDispose = cleanupOnDispose,
2733
Verbosity = LoggerVerbosity.Diagnostic,
28-
Root = Xamarin.Android.Build.Paths.TestOutputDirectory,
34+
Root = XABuildPaths.TestOutputDirectory,
2935
};
3036
}
3137
}

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/DeviceTest.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,12 @@
1313
using System.Xml.Linq;
1414
using System.Xml.XPath;
1515
using Xamarin.ProjectTools;
16+
17+
#if TESTINSTALLER
18+
using XABuildPaths = Xamarin.ProjectTools.DefaultXABuildPaths;
19+
#else
1620
using XABuildPaths = Xamarin.Android.Build.Paths;
21+
#endif
1722

1823
namespace Xamarin.Android.Build.Tests
1924
{

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Xamarin.Android.Build.Tests.csproj

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@
6767
<Project>{2DD1EE75-6D8D-4653-A800-0A24367F7F38}</Project>
6868
<Name>Xamarin.ProjectTools</Name>
6969
</ProjectReference>
70+
</ItemGroup>
71+
<ItemGroup Condition=" '$(TestAgainstSystemInstall)' != 'True'">
7072
<ProjectReference Include="..\..\..\..\external\LibZipSharp\libZipSharp.csproj">
7173
<Project>{E248B2CA-303B-4645-ADDC-9D4459D550FD}</Project>
7274
<Name>libZipSharp</Name>
@@ -84,6 +86,20 @@
8486
<Name>Xamarin.Android.Tools.AndroidSdk</Name>
8587
</ProjectReference>
8688
</ItemGroup>
89+
<ItemGroup Condition=" '$(TestAgainstSystemInstall)' == 'True'">
90+
<Reference Include="libZipSharp">
91+
<HintPath>$(MSBuildExtensionsPath)\Xamarin\Android\libZipSharp.dll</HintPath>
92+
</Reference>
93+
<Reference Include="Xamarin.Android.Build.Tasks">
94+
<HintPath>$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.Build.Tasks.dll</HintPath>
95+
</Reference>
96+
<Reference Include="Xamarin.Android.Cecil">
97+
<HintPath>$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.Cecil.dll</HintPath>
98+
</Reference>
99+
<Reference Include="Xamarin.Android.Tools.AndroidSdk">
100+
<HintPath>$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.Tools.AndroidSdk.dll</HintPath>
101+
</Reference>
102+
</ItemGroup>
87103
<ItemGroup>
88104
<None Include="packages.config" />
89105
</ItemGroup>

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/Builder.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@
1111
using System.Xml.Linq;
1212
using Xamarin.Android.Tools.VSWhere;
1313

14+
#if TESTINSTALLER
15+
using XABuildPaths = Xamarin.ProjectTools.DefaultXABuildPaths;
16+
#else
1417
using XABuildPaths = Xamarin.Android.Build.Paths;
18+
#endif
19+
1520

1621
namespace Xamarin.ProjectTools
1722
{
@@ -507,12 +512,8 @@ protected bool BuildInternal (string projectOrSolution, string target, string []
507512
}
508513
if (!result && ThrowOnBuildFailure) {
509514
string message = "Build failure: " + Path.GetFileName (projectOrSolution) + (BuildLogFile != null && File.Exists (buildLogFullPath) ? "Build log recorded at " + buildLogFullPath : null);
510-
//NOTE: enormous logs will lock up IDE's UI
511-
if (IsRunningInIDE) {
512-
throw new FailedBuildException (message);
513-
} else {
514-
throw new FailedBuildException (message, null, File.ReadAllText (buildLogFullPath));
515-
}
515+
//NOTE: enormous logs will lock up IDE's UI. Build result files should be appended to the TestResult on failure.
516+
throw new FailedBuildException (message);
516517
}
517518

518519
return result;

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/ProjectBuilder.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@
55
using System.Diagnostics;
66
using Microsoft.Build.Framework;
77

8+
#if TESTINSTALLER
9+
using XABuildPaths = Xamarin.ProjectTools.DefaultXABuildPaths;
10+
#else
811
using XABuildPaths = Xamarin.Android.Build.Paths;
12+
#endif
913

1014
namespace Xamarin.ProjectTools
1115
{

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/XamarinProject.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@
77
using System.Diagnostics;
88
using System.Text;
99

10+
#if TESTINSTALLER
11+
using XABuildPaths = Xamarin.ProjectTools.DefaultXABuildPaths;
12+
#else
1013
using XABuildPaths = Xamarin.Android.Build.Paths;
14+
#endif
1115

1216
namespace Xamarin.ProjectTools
1317
{
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System;
2+
using System.IO;
3+
4+
namespace Xamarin.ProjectTools
5+
{
6+
public class DefaultXABuildPaths
7+
{
8+
#if DEBUG
9+
public static string Configuration = Environment.GetEnvironmentVariable ("CONFIGURATION") ?? "Debug";
10+
#else
11+
public static string Configuration = Environment.GetEnvironmentVariable ("CONFIGURATION") ?? "Release";
12+
#endif
13+
14+
public static string TopDirectory = Path.GetFullPath (Path.Combine (
15+
Path.GetDirectoryName (new Uri (typeof (XamarinProject).Assembly.CodeBase).LocalPath), "..", ".."));
16+
17+
public static readonly string PrefixDirectory = Path.Combine (TopDirectory, "bin", Configuration);
18+
public static readonly string BinDirectory = Path.Combine (PrefixDirectory, "bin");
19+
public static readonly string XABuildScript = Path.Combine (BinDirectory, "xabuild");
20+
public static readonly string XABuildExe = Path.Combine (BinDirectory, "xabuild.exe");
21+
public static readonly string TestOutputDirectory = Path.Combine (TopDirectory, "bin", "TestRelease");
22+
}
23+
}

0 commit comments

Comments
 (0)