Skip to content

Commit fce561c

Browse files
committed
Added Unit Tests
1 parent d536c72 commit fce561c

File tree

5 files changed

+161
-1
lines changed

5 files changed

+161
-1
lines changed

src/Xamarin.Android.Build.Tasks/Tasks/CalculateProjectDependencies.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ public class CalculateProjectDependencies : Task
2323

2424
public string ToolsVersion { get; set; }
2525

26+
public string NdkVersion { get; set; }
27+
2628
[Output]
2729
public ITaskItem [] Dependencies { get; set; }
2830

@@ -50,6 +52,9 @@ public override bool Execute ()
5052
if (!string.IsNullOrEmpty (ToolsVersion)) {
5153
dependencies.Add (CreateAndroidDependency ("tool", ToolsVersion));
5254
}
55+
if (!string.IsNullOrEmpty (NdkVersion)) {
56+
dependencies.Add (CreateAndroidDependency ("ndk-bundle", NdkVersion));
57+
}
5358
Dependencies = dependencies.ToArray ();
5459
return !Log.HasLoggedErrors;
5560
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
using System;
2+
using NUnit.Framework;
3+
using Xamarin.ProjectTools;
4+
using System.IO;
5+
using System.Linq;
6+
using Microsoft.Build.Framework;
7+
using System.Text;
8+
using Xamarin.Android.Tasks;
9+
using Microsoft.Build.Utilities;
10+
11+
namespace Xamarin.Android.Build.Tests {
12+
13+
[TestFixture]
14+
[Parallelizable (ParallelScope.Children)]
15+
public class GetDependenciesTest : BaseTest {
16+
17+
[Test]
18+
public void ManifestFileDoesNotExist ()
19+
{
20+
IBuildEngine engine = new MockBuildEngine (TestContext.Out);
21+
var task = new CalculateProjectDependencies {
22+
BuildEngine = engine
23+
};
24+
25+
task.BuildToolsVersion = "26.0.1";
26+
task.TargetFrameworkVersion = "v8.0";
27+
task.ManifestFile = new TaskItem ("AndroidManifest.xml");
28+
task.Execute ();
29+
Assert.IsNotNull (task.Dependencies);
30+
Assert.AreEqual (4, task.Dependencies.Length);
31+
Assert.IsNotNull (task.Dependencies.FirstOrDefault (x => x.ItemSpec == "build-tool" && x.GetMetadata ("Version") == "26.0.1"),
32+
"Dependencies should contains a build-tool version 26.0.1");
33+
Assert.IsNotNull (task.Dependencies.FirstOrDefault (x => x.ItemSpec == "platform" && x.GetMetadata ("Version") == "26"),
34+
"Dependencies should contains a platform version 26");
35+
}
36+
37+
[Test]
38+
public void ManifestFileExists ()
39+
{
40+
IBuildEngine engine = new MockBuildEngine (TestContext.Out);
41+
var task = new CalculateProjectDependencies {
42+
BuildEngine = engine
43+
};
44+
45+
var path = Path.Combine (Root, "temp", TestName);
46+
Directory.CreateDirectory (path);
47+
var manifestFile = Path.Combine (path, "AndroidManifest.xml");
48+
File.WriteAllText (manifestFile, @"<?xml version='1.0' ?>
49+
<manifest xmlns:android='http://schemas.android.com/apk/res/android' android:versionCode='1' android:versionName='1.0' package='Mono.Android_Tests'>
50+
<uses-sdk android:minSdkVersion='10' />
51+
</manifest>");
52+
53+
task.BuildToolsVersion = "26.0.1";
54+
task.TargetFrameworkVersion = "v8.0";
55+
task.ManifestFile = new TaskItem (manifestFile);
56+
Assert.IsTrue(task.Execute ());
57+
Assert.IsNotNull (task.Dependencies);
58+
Assert.AreEqual (5, task.Dependencies.Length);
59+
Assert.IsNotNull (task.Dependencies.FirstOrDefault (x => x.ItemSpec == "build-tool" && x.GetMetadata ("Version") == "26.0.1"),
60+
"Dependencies should contain a build-tool version 26.0.1");
61+
Assert.IsNotNull (task.Dependencies.FirstOrDefault (x => x.ItemSpec == "platform" && x.GetMetadata ("Version") == "26"),
62+
"Dependencies should contain a platform version 26");
63+
Assert.IsNotNull (task.Dependencies.FirstOrDefault (x => x.ItemSpec == "platform" && x.GetMetadata ("Version") == "10"),
64+
"Dependencies should contain a platform version 10");
65+
66+
Directory.Delete (path, recursive: true);
67+
}
68+
}
69+
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
using System;
2+
using System.Collections;
3+
using System.Collections.Generic;
4+
using System.IO;
5+
using System.Linq;
6+
using System.Reflection;
7+
using System.Text;
8+
using System.Threading.Tasks;
9+
using Microsoft.Build.Framework;
10+
11+
namespace Xamarin.Android.Build.Tests {
12+
public class MockBuildEngine : IBuildEngine, IBuildEngine2, IBuildEngine3, IBuildEngine4 {
13+
public MockBuildEngine (TextWriter output)
14+
{
15+
this.Output = output;
16+
}
17+
18+
private TextWriter Output { get; }
19+
20+
int IBuildEngine.ColumnNumberOfTaskNode => -1;
21+
22+
bool IBuildEngine.ContinueOnError => false;
23+
24+
int IBuildEngine.LineNumberOfTaskNode => -1;
25+
26+
string IBuildEngine.ProjectFileOfTaskNode => "this.xml";
27+
28+
bool IBuildEngine2.IsRunningMultipleNodes => false;
29+
30+
bool IBuildEngine.BuildProjectFile (string projectFileName, string [] targetNames, IDictionary globalProperties, IDictionary targetOutputs) => true;
31+
32+
void IBuildEngine.LogCustomEvent (CustomBuildEventArgs e)
33+
{
34+
this.Output.WriteLine ($"Custom: {e.Message}");
35+
}
36+
37+
void IBuildEngine.LogErrorEvent (BuildErrorEventArgs e)
38+
{
39+
this.Output.WriteLine ($"Error: {e.Message}");
40+
}
41+
42+
void IBuildEngine.LogMessageEvent (BuildMessageEventArgs e)
43+
{
44+
this.Output.WriteLine ($"Message: {e.Message}");
45+
}
46+
47+
void IBuildEngine.LogWarningEvent (BuildWarningEventArgs e)
48+
{
49+
this.Output.WriteLine ($"Warning: {e.Message}");
50+
}
51+
52+
private Dictionary<object, object> Tasks = new Dictionary<object, object> ();
53+
54+
void IBuildEngine4.RegisterTaskObject (object key, object obj, RegisteredTaskObjectLifetime lifetime, bool allowEarlyCollection)
55+
{
56+
Tasks.Add (key, obj);
57+
}
58+
59+
object IBuildEngine4.GetRegisteredTaskObject (object key, RegisteredTaskObjectLifetime lifetime)
60+
{
61+
return null;
62+
}
63+
64+
object IBuildEngine4.UnregisterTaskObject (object key, RegisteredTaskObjectLifetime lifetime)
65+
{
66+
var obj = Tasks [key];
67+
Tasks.Remove (key);
68+
return obj;
69+
}
70+
71+
BuildEngineResult IBuildEngine3.BuildProjectFilesInParallel (string [] projectFileNames, string [] targetNames, IDictionary [] globalProperties, IList<string> [] removeGlobalProperties, string [] toolsVersion, bool returnTargetOutputs)
72+
{
73+
throw new NotImplementedException ();
74+
}
75+
76+
void IBuildEngine3.Yield () { }
77+
78+
void IBuildEngine3.Reacquire () { }
79+
80+
bool IBuildEngine2.BuildProjectFile (string projectFileName, string [] targetNames, IDictionary globalProperties, IDictionary targetOutputs, string toolsVersion) => true;
81+
82+
bool IBuildEngine2.BuildProjectFilesInParallel (string [] projectFileNames, string [] targetNames, IDictionary [] globalProperties, IDictionary [] targetOutputsPerProject, string [] toolsVersion, bool useResultsCache, bool unloadProjectsOnCompletion) => true;
83+
}
84+
}

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Xamarin.Android.Build.Tests.Shared.projitems

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@
1919
<Compile Include="$(MSBuildThisFileDirectory)PackagingTest.cs" />
2020
<Compile Include="$(MSBuildThisFileDirectory)Utilities\BaseTest.cs" />
2121
<Compile Include="$(MSBuildThisFileDirectory)Utilities\BuildHelper.cs" />
22+
<Compile Include="$(MSBuildThisFileDirectory)Utilities\MockBuildEngine.cs" />
2223
</ItemGroup>
2324
<ItemGroup>
2425
<Folder Include="$(MSBuildThisFileDirectory)Utilities\" />
2526
</ItemGroup>
26-
</Project>
27+
</Project>

src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2781,6 +2781,7 @@ because xbuild doesn't support framework reference assemblies.
27812781
BuildToolsVersion="$(AndroidSdkBuildToolsVersion)"
27822782
PlatformToolsVersion="$(AndroidSdkPlatformToolsVersion)"
27832783
ToolsVersion="$(AndroidSdkToolsVersion)"
2784+
NdkVersion="$(AndroidNdkVersion)"
27842785
>
27852786
<Output TaskParameter="Dependencies" ItemName="AndroidDependency" />
27862787
</CalculateProjectDependencies>

0 commit comments

Comments
 (0)