Skip to content

Commit 042b1dd

Browse files
committed
ff
1 parent aac6c49 commit 042b1dd

File tree

2 files changed

+129
-4
lines changed

2 files changed

+129
-4
lines changed

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ResolveSdksTaskTests.cs

Lines changed: 123 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using NUnit.Framework;
34
using Xamarin.ProjectTools;
45
using System.IO;
@@ -11,8 +12,126 @@
1112
namespace Xamarin.Android.Build.Tests {
1213

1314
[TestFixture]
14-
[Parallelizable (ParallelScope.Children)]
1515
public class ResolveSdksTaskTests : BaseTest {
16+
#pragma warning disable 414
17+
static object [] UseLatestAndroidSdkTestCases = new object [] {
18+
new object[] {
19+
/* buildtools */ "26.0.3",
20+
/* jdk */ "1.8.0",
21+
/* apis*/ new ApiInfo[] {
22+
new ApiInfo () { Id = "26", Level = 26, Name = "Oreo", FrameworkVersion = "v8.0", Stable = true },
23+
new ApiInfo () { Id = "27", Level = 27, Name = "Oreo", FrameworkVersion = "v8.1", Stable = true },
24+
new ApiInfo () { Id = "P", Level = 28, Name = "P", FrameworkVersion = "v8.99", Stable = false },
25+
},
26+
/* useLatestAndroidSdk */ true,
27+
/* targetFrameworkVersion */ "v8.99",
28+
/* expectedTaskResult */ true,
29+
/* expectedTargetFramework */ "v8.99",
30+
/* expectedError */ "",
31+
/* expectedErrorMessage */ "",
32+
},
33+
new object[] {
34+
/* buildtools */ "26.0.3",
35+
/* jdk */ "1.8.0",
36+
/* apis*/ new ApiInfo[] {
37+
new ApiInfo () { Id = "26", Level = 26, Name = "Oreo", FrameworkVersion = "v8.0", Stable = true },
38+
new ApiInfo () { Id = "27", Level = 27, Name = "Oreo", FrameworkVersion = "v8.1", Stable = true },
39+
new ApiInfo () { Id = "P", Level = 28, Name = "P", FrameworkVersion = "v8.99", Stable = false },
40+
},
41+
/* useLatestAndroidSdk */ true,
42+
/* targetFrameworkVersion */ "v8.0",
43+
/* expectedTaskResult */ true,
44+
/* expectedTargetFramework */ "v8.1",
45+
/* expectedError */ "",
46+
/* expectedErrorMessage */ "",
47+
},
48+
new object[] {
49+
/* buildtools */ "26.0.3",
50+
/* jdk */ "1.8.0",
51+
/* apis*/ new ApiInfo[] {
52+
new ApiInfo () { Id = "26", Level = 26, Name = "Oreo", FrameworkVersion = "v8.0", Stable = true },
53+
new ApiInfo () { Id = "27", Level = 27, Name = "Oreo", FrameworkVersion = "v8.1", Stable = true },
54+
new ApiInfo () { Id = "P", Level = 28, Name = "P", FrameworkVersion = "v8.99", Stable = false },
55+
},
56+
/* useLatestAndroidSdk */ true,
57+
/* targetFrameworkVersion */ null,
58+
/* expectedTaskResult */ true,
59+
/* expectedTargetFramework */ "v8.1",
60+
/* expectedError */ "",
61+
/* expectedErrorMessage */ "",
62+
},
63+
new object[] {
64+
/* buildtools */ "26.0.3",
65+
/* jdk */ "1.8.0",
66+
/* apis*/ new ApiInfo[] {
67+
new ApiInfo () { Id = "26", Level = 26, Name = "Oreo", FrameworkVersion = "v8.0", Stable = true },
68+
new ApiInfo () { Id = "27", Level = 27, Name = "Oreo", FrameworkVersion = "v8.1", Stable = true },
69+
new ApiInfo () { Id = "P", Level = 28, Name = "P", FrameworkVersion = "v8.99", Stable = false },
70+
},
71+
/* useLatestAndroidSdk */ false,
72+
/* targetFrameworkVersion */ null,
73+
/* expectedTaskResult */ true,
74+
/* expectedTargetFramework */ "v8.1",
75+
/* expectedError */ "",
76+
/* expectedErrorMessage */ "",
77+
},
78+
new object[] {
79+
/* buildtools */ "26.0.3",
80+
/* jdk */ "1.8.0",
81+
/* apis*/ new ApiInfo[] {
82+
new ApiInfo () { Id = "26", Level = 26, Name = "Oreo", FrameworkVersion = "v8.0", Stable = true },
83+
new ApiInfo () { Id = "27", Level = 27, Name = "Oreo", FrameworkVersion = "v8.1", Stable = true },
84+
new ApiInfo () { Id = "P", Level = 28, Name = "P", FrameworkVersion = "v8.99", Stable = false },
85+
},
86+
/* useLatestAndroidSdk */ false,
87+
/* targetFrameworkVersion */ "v6.0",
88+
/* expectedTaskResult */ false,
89+
/* expectedTargetFramework */ "v6.0",
90+
/* expectedError */ "XA0001",
91+
/* expectedErrorMessage */ "Unsupported or invalid $(TargetFrameworkVersion) value of 'v6.0'. Please update your Project Options.",
92+
},
93+
};
94+
#pragma warning restore 414
95+
[Test]
96+
[TestCaseSource(nameof(UseLatestAndroidSdkTestCases))]
97+
public void UseLatestAndroidSdk (string buildtools, string jdk, ApiInfo[] apis, bool useLatestAndroidSdk, string targetFrameworkVersion, bool expectedTaskResult, string expectedTargetFramework, string expectedError = "", string expectedErrorMessage = "")
98+
{
99+
var path = Path.Combine ("temp", "UseLatestAndroidSdk");
100+
var androidSdkPath = CreateFauxAndroidSdkDirectory (Path.Combine (path, "android-sdk"), buildtools, minApiLevel: 26, maxApiLevel: 27, alphaApiLevel: "P");
101+
string javaExe = string.Empty;
102+
var javaPath = CreateFauxJavaSdkDirectory (Path.Combine (path, "jdk"), jdk, out javaExe);
103+
var referencePath = CreateFauxReferencesDirectory (Path.Combine (path, "references"), apis);
104+
var errors = new List<BuildErrorEventArgs> ();
105+
IBuildEngine engine = new MockBuildEngine (TestContext.Out, errors);
106+
var task = new ResolveSdks {
107+
BuildEngine = engine
108+
};
109+
task.AndroidSdkPath = androidSdkPath;
110+
task.AndroidNdkPath = androidSdkPath;
111+
task.JavaSdkPath = javaPath;
112+
task.TargetFrameworkVersion = targetFrameworkVersion;
113+
task.AndroidSdkBuildToolsVersion = buildtools;
114+
task.BuildingInsideVisualStudio = "true";
115+
task.UseLatestAndroidPlatformSdk = useLatestAndroidSdk;
116+
task.AotAssemblies = false;
117+
task.LatestSupportedJavaVersion = "1.8.0";
118+
task.MinimumSupportedJavaVersion = "1.7.0";
119+
task.ReferenceAssemblyPaths = new string [] {
120+
Path.Combine (referencePath, "MonoAndroid"),
121+
};
122+
task.CacheFile = Path.Combine (Root, path, "sdk.xml");
123+
task.SequencePointsMode = "None";
124+
task.JavaToolExe = javaExe;
125+
Assert.AreEqual (expectedTaskResult, task.Execute (), $"Task should have {(expectedTaskResult ? "succeeded" : "failed" )}.");
126+
Assert.AreEqual (expectedTargetFramework, task.TargetFrameworkVersion, $"TargetFrameworkVersion should be {expectedTargetFramework} but was {targetFrameworkVersion}");
127+
if (!string.IsNullOrWhiteSpace (expectedError)) {
128+
Assert.AreEqual (1, errors.Count (), "An error should have been raised.");
129+
Assert.AreEqual (expectedError, errors [0].Code, $"Expected error code {expectedError} but found {errors [0].Code}");
130+
Assert.AreEqual (expectedErrorMessage, errors [0].Message, $"Expected error code {expectedErrorMessage} but found {errors [0].Message}");
131+
}
132+
Directory.Delete (Path.Combine (Root, path), recursive: true);
133+
}
134+
16135
[Test]
17136
public void ResolveSdkTiming ()
18137
{
@@ -21,8 +140,8 @@ public void ResolveSdkTiming ()
21140
string javaExe = string.Empty;
22141
var javaPath = CreateFauxJavaSdkDirectory (Path.Combine (path, "jdk"), "1.8.0", out javaExe);
23142
var referencePath = CreateFauxReferencesDirectory (Path.Combine (path, "references"), new ApiInfo [] {
24-
new ApiInfo () { Id = 26, Level = 26, Name = "Oreo", FrameworkVersion = "v8.0", Stable = true },
25-
new ApiInfo () { Id = 27, Level = 27, Name = "Oreo", FrameworkVersion = "v8.1", Stable = true },
143+
new ApiInfo () { Id = "26", Level = 26, Name = "Oreo", FrameworkVersion = "v8.0", Stable = true },
144+
new ApiInfo () { Id = "27", Level = 27, Name = "Oreo", FrameworkVersion = "v8.1", Stable = true },
26145
});
27146
IBuildEngine engine = new MockBuildEngine (TestContext.Out);
28147
var task = new ResolveSdks {
@@ -75,6 +194,7 @@ public void ResolveSdkTiming ()
75194
Assert.AreEqual (task.AndroidUseApkSigner, false, "AndroidUseApkSigner should be false");
76195
Assert.AreEqual (task.JdkVersion, "1.8.0", "JdkVersion should be 1.8.0");
77196
Assert.AreEqual (task.MinimumRequiredJdkVersion, "1.8", "MinimumRequiredJdkVersion should be 1.8");
197+
Directory.Delete (Path.Combine (Root, path), recursive: true);
78198
}
79199
}
80200
}

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,16 @@
1010

1111
namespace Xamarin.Android.Build.Tests {
1212
public class MockBuildEngine : IBuildEngine, IBuildEngine2, IBuildEngine3, IBuildEngine4 {
13-
public MockBuildEngine (TextWriter output)
13+
public MockBuildEngine (TextWriter output, IList<BuildErrorEventArgs> errors = null)
1414
{
1515
this.Output = output;
16+
this.Errors = errors;
1617
}
1718

1819
private TextWriter Output { get; }
1920

21+
private IList<BuildErrorEventArgs> Errors { get; }
22+
2023
int IBuildEngine.ColumnNumberOfTaskNode => -1;
2124

2225
bool IBuildEngine.ContinueOnError => false;
@@ -37,6 +40,8 @@ void IBuildEngine.LogCustomEvent (CustomBuildEventArgs e)
3740
void IBuildEngine.LogErrorEvent (BuildErrorEventArgs e)
3841
{
3942
this.Output.WriteLine ($"Error: {e.Message}");
43+
if (Errors != null)
44+
Errors.Add (e);
4045
}
4146

4247
void IBuildEngine.LogMessageEvent (BuildMessageEventArgs e)

0 commit comments

Comments
 (0)