11using System ;
2+ using System . Collections . Generic ;
23using NUnit . Framework ;
34using Xamarin . ProjectTools ;
45using System . IO ;
1112namespace 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}
0 commit comments