11using System . IO ;
22using System . Collections . Generic ;
3- using System . Threading . Tasks ;
43using Microsoft . Android . Build . BaseTasks . Tests . Utilities ;
54using Microsoft . Android . Build . Tasks ;
65using NUnit . Framework ;
76using Microsoft . Build . Framework ;
8- using Xamarin . Build ;
7+ using NUnit . Framework . Internal ;
8+ using System . Linq ;
99
1010namespace Microsoft . Android . Build . BaseTasks . Tests
1111{
1212 [ TestFixture ]
1313 public class AndroidToolTaskTests
1414 {
15- public class MyAndroidTask : AndroidTask {
15+ List < BuildErrorEventArgs > errors ;
16+ List < BuildWarningEventArgs > warnings ;
17+ List < BuildMessageEventArgs > messages ;
18+ MockBuildEngine engine ;
19+
20+ public class MyAndroidTask : AndroidTask
21+ {
1622 public override string TaskPrefix { get ; } = "MAT" ;
1723 public string Key { get ; set ; }
1824 public string Value { get ; set ; }
@@ -25,7 +31,8 @@ public override bool RunTask ()
2531 }
2632 }
2733
28- public class MyOtherAndroidTask : AndroidTask {
34+ public class MyOtherAndroidTask : AndroidTask
35+ {
2936 public override string TaskPrefix { get ; } = "MOAT" ;
3037 public string Key { get ; set ; }
3138 public bool ProjectSpecific { get ; set ; } = false ;
@@ -40,15 +47,31 @@ public override bool RunTask ()
4047 }
4148 }
4249
50+ public class DotnetToolOutputTestTask : AndroidToolTask
51+ {
52+ public override string TaskPrefix { get ; } = "DTOT" ;
53+ protected override string ToolName => "dotnet" ;
54+ protected override string GenerateFullPathToTool ( ) => ToolExe ;
55+ public string CommandLineArgs { get ; set ; } = "--info" ;
56+ protected override string GenerateCommandLineCommands ( ) => CommandLineArgs ;
57+ }
58+
59+ [ SetUp ]
60+ public void TestSetup ( )
61+ {
62+ errors = new List < BuildErrorEventArgs > ( ) ;
63+ warnings = new List < BuildWarningEventArgs > ( ) ;
64+ messages = new List < BuildMessageEventArgs > ( ) ;
65+ engine = new MockBuildEngine ( TestContext . Out , errors , warnings , messages ) ;
66+ }
67+
4368 [ Test ]
4469 [ TestCase ( true , true , true ) ]
4570 [ TestCase ( false , false , true ) ]
4671 [ TestCase ( true , false , false ) ]
4772 [ TestCase ( false , true , false ) ]
4873 public void TestRegisterTaskObjectCanRetrieveCorrectItem ( bool projectSpecificA , bool projectSpecificB , bool expectedResult )
4974 {
50- var engine = new MockBuildEngine ( TestContext . Out ) {
51- } ;
5275 var task = new MyAndroidTask ( ) {
5376 BuildEngine = engine ,
5477 Key = "Foo" ,
@@ -72,8 +95,6 @@ public void TestRegisterTaskObjectCanRetrieveCorrectItem (bool projectSpecificA,
7295 [ TestCase ( false , true , false ) ]
7396 public void TestRegisterTaskObjectFailsWhenDirectoryChanges ( bool projectSpecificA , bool projectSpecificB , bool expectedResult )
7497 {
75- var engine = new MockBuildEngine ( TestContext . Out ) {
76- } ;
7798 MyAndroidTask task ;
7899 var currentDir = Directory . GetCurrentDirectory ( ) ;
79100 Directory . SetCurrentDirectory ( Path . Combine ( currentDir , ".." ) ) ;
@@ -96,5 +117,30 @@ public void TestRegisterTaskObjectFailsWhenDirectoryChanges (bool projectSpecifi
96117 task2 . Execute ( ) ;
97118 Assert . AreEqual ( expectedResult , string . Compare ( task2 . Value , task . Value , ignoreCase : true ) == 0 ) ;
98119 }
120+
121+ [ Test ]
122+ [ TestCase ( "invalidcommand" , false , "You intended to execute a .NET program, but dotnet-invalidcommand does not exist." ) ]
123+ [ TestCase ( "--info" , true , "" ) ]
124+ public void FailedAndroidToolTaskShouldLogOutputAsError ( string args , bool expectedResult , string expectedErrorText )
125+ {
126+ var task = new DotnetToolOutputTestTask ( ) {
127+ BuildEngine = engine ,
128+ CommandLineArgs = args ,
129+ } ;
130+ var taskSucceeded = task . Execute ( ) ;
131+ Assert . AreEqual ( expectedResult , taskSucceeded , "Task execution did not return expected value." ) ;
132+
133+ if ( taskSucceeded ) {
134+ Assert . IsEmpty ( errors , "Successful task should not have any errors." ) ;
135+ } else {
136+ Assert . IsNotEmpty ( errors , "Task expected to fail should have errors." ) ;
137+ Assert . AreEqual ( "MSB6006" , errors [ 0 ] . Code ,
138+ $ "Expected error code MSB6006 but got { errors [ 0 ] . Code } ") ;
139+ Assert . AreEqual ( "XADTOT0000" , errors [ 1 ] . Code ,
140+ $ "Expected error code XADTOT0000 but got { errors [ 1 ] . Code } ") ;
141+ Assert . IsTrue ( errors . Any ( e => e . Message . Contains ( expectedErrorText ) ) ,
142+ "Task expected to fail should contain expected error text." ) ;
143+ }
144+ }
99145 }
100146}
0 commit comments