diff --git a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Adb.cs b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Adb.cs index 3ab75e2e185..d5a0d269135 100644 --- a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Adb.cs +++ b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Adb.cs @@ -43,6 +43,7 @@ protected class CommandInfo public bool IgnoreExitCode { get; set; } public int Timeout { get; set; } = -1; public string[] EnvironmentVariables { get; set; } + public bool WriteOutputAsMessage { get; set; } = false; [Required] public string ToolPath { get; set; } @@ -147,7 +148,7 @@ void OnOutput (string line, bool isStdout, CommandInfo info) lock (linesLock) lines.Add (line); if (!info.SuppressMSbuildLog) { - if (isStdout) + if (isStdout || WriteOutputAsMessage) Log.LogMessage (MessageImportance.Low, line); else Log.LogWarning (line); diff --git a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/RenameTestCases.cs b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/RenameTestCases.cs index e7dce791cb0..b6cc673db12 100644 --- a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/RenameTestCases.cs +++ b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/RenameTestCases.cs @@ -74,6 +74,7 @@ string GetFixedUpPath (string source, string testNameSuffix) { var destFilename = Path.GetFileNameWithoutExtension (source) + (string.IsNullOrWhiteSpace (Configuration) ? "" : "-" + Configuration) + + (string.IsNullOrWhiteSpace (TestsFlavor) ? "" : TestsFlavor) + Path.GetExtension (source); var dest = Path.Combine (DestinationFolder, destFilename); return dest; diff --git a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/RunInstrumentationTests.cs b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/RunInstrumentationTests.cs index ad70bd1bf7e..cc0176307a6 100644 --- a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/RunInstrumentationTests.cs +++ b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/RunInstrumentationTests.cs @@ -14,6 +14,7 @@ public class RunInstrumentationTests : Adb const string TestResultsPathResult = "INSTRUMENTATION_RESULT: nunit2-results-path="; internal const string AdbRestartText = "daemon not running; starting now at tcp:"; internal const string AdbCrashErrorText = "The adb might have crashed and was restarted. "; + const string InstrumentationExitCodeName = "INSTRUMENTATION_CODE: "; const int StateRunInstrumentation = 0; const int StateGetLogcat = 1; const int StateClearLogcat = 2; @@ -41,6 +42,7 @@ public class RunInstrumentationTests : Adb public string LogLevel { get; set; } int currentState = -1; + int instrumentationExitCode = 99; string targetTestResultsPath; bool adbRestarted; @@ -68,6 +70,14 @@ public override bool Execute () return false; } + if (instrumentationExitCode != -1) { + FailedToRun = Component; + Log.LogError ( + $"Instrumentation for component `{Component}` did not exit successfully. " + + "Process crashed or test failures occurred!"); + return false; + } + return !Log.HasLoggedErrors; } @@ -134,11 +144,15 @@ protected override void ProcessStdout (string line) if (currentState != StateRunInstrumentation || String.IsNullOrEmpty (line)) return; - int i = line.IndexOf (TestResultsPathResult, StringComparison.OrdinalIgnoreCase); - if (i < 0) - return; + int testResultIndex = line.IndexOf (TestResultsPathResult, StringComparison.OrdinalIgnoreCase); + int exitCodeIndex = line.IndexOf (InstrumentationExitCodeName, StringComparison.OrdinalIgnoreCase); - targetTestResultsPath = line.Substring (i + TestResultsPathResult.Length).Trim (); + if (testResultIndex < 0 && exitCodeIndex < 0) + return; + else if (testResultIndex >= 0) + targetTestResultsPath = line.Substring (testResultIndex + TestResultsPathResult.Length).Trim (); + else if (exitCodeIndex >= 0) + instrumentationExitCode = int.Parse (line.Substring (exitCodeIndex + InstrumentationExitCodeName.Length).Trim ()); } } } diff --git a/build-tools/Xamarin.Android.Tools.BootstrapTasks/result-packaging.targets b/build-tools/Xamarin.Android.Tools.BootstrapTasks/result-packaging.targets index 8d4dbc00a65..04349e967c8 100644 --- a/build-tools/Xamarin.Android.Tools.BootstrapTasks/result-packaging.targets +++ b/build-tools/Xamarin.Android.Tools.BootstrapTasks/result-packaging.targets @@ -6,8 +6,7 @@ <_BuildStatusFiles Include="$(XamarinAndroidSourcePath)Configuration.OperatingSystem.props" Condition="Exists('$(XamarinAndroidSourcePath)Configuration.OperatingSystem.props')" /> <_BuildStatusFiles Include="$(XamarinAndroidSourcePath)Configuration.Override.props" Condition="Exists('$(XamarinAndroidSourcePath)Configuration.Override.props')" /> <_BuildStatusFiles Include="$(XamarinAndroidSourcePath)bin\Build$(Configuration)\XABuildConfig.cs" Condition="Exists('$(XamarinAndroidSourcePath)bin\Build$(Configuration)\XABuildConfig.cs')" /> - <_BuildStatusFiles Include="$(XamarinAndroidSourcePath)bin\Build$(Configuration)\msbuild*.binlog" /> - <_BuildStatusFiles Include="$(XamarinAndroidSourcePath)bin\Build$(Configuration)\bootstrap*.binlog" /> + <_BuildStatusFiles Include="$(XamarinAndroidSourcePath)bin\Build$(Configuration)\*.binlog" /> <_BuildStatusFiles Include="$(XamarinAndroidSourcePath)bin\Build$(Configuration)\prepare*.log" /> <_BuildStatusFiles Include="$(XamarinAndroidSourcePath)bin\Build$(Configuration)\*.mk" /> <_BuildStatusFiles Include="$(XamarinAndroidSourcePath)bin\Build$(Configuration)\*.projitems" /> @@ -27,7 +26,7 @@ <_TestResultFiles Include="$(XamarinAndroidSourcePath)bin\Test$(Configuration)\*.log" /> <_TestResultFiles Include="$(XamarinAndroidSourcePath)bin\Test$(Configuration)\compatibility\*" /> <_TestResultFiles Include="$(XamarinAndroidSourcePath)bin\Test$(Configuration)\logcat*" /> - <_TestResultFiles Include="$(XamarinAndroidSourcePath)bin\Test$(Configuration)\msbuild*.binlog*" /> + <_TestResultFiles Include="$(XamarinAndroidSourcePath)bin\Test$(Configuration)\*.binlog" /> <_TestResultFiles Include="$(XamarinAndroidSourcePath)bin\Test$(Configuration)\temp\**\*.binlog" /> <_TestResultFiles Include="$(XamarinAndroidSourcePath)bin\Test$(Configuration)\temp\**\*.log" /> <_TestResultFiles Include="$(XamarinAndroidSourcePath)bin\Test$(Configuration)\EmbeddedDSO\EmbeddedDSO.build\**\*" /> diff --git a/build-tools/automation/azure-pipelines.yaml b/build-tools/automation/azure-pipelines.yaml index 9e0eae7be1c..e308ded0fbc 100644 --- a/build-tools/automation/azure-pipelines.yaml +++ b/build-tools/automation/azure-pipelines.yaml @@ -9,6 +9,7 @@ trigger: # Global variables variables: BundleArtifactName: bundle + InstallerArtifactName: unsigned-installers AutoProvisionArgs: /p:AutoProvision=True /p:AutoProvisionUsesSudo=True /p:IgnoreMaxMonoVersion=False AndroidTargetAbiArgs: >- /p:AndroidSupportedTargetJitAbis=armeabi-v7a:arm64-v8a:x86:x86_64 @@ -122,7 +123,7 @@ stages: - task: PublishPipelineArtifact@0 displayName: upload unsigned installers inputs: - artifactName: unsigned + artifactName: $(InstallerArtifactName) targetPath: bin/Build$(XA.Build.Configuration)/unsigned-installers - task: MSBuild@1 @@ -215,7 +216,6 @@ stages: testResultsFormat: NUnit testResultsFiles: TestResult-*.xml testRunTitle: xamarin-android - failTaskOnFailedTests: true condition: succeededOrFailed() - task: MSBuild@1 @@ -232,3 +232,206 @@ stages: artifactName: win-build-test-results targetPath: $(Build.ArtifactStagingDirectory) condition: always() + +- stage: test + displayName: Test + dependsOn: mac_build + jobs: + - job: mac_apk_tests + displayName: APK Instrumentation + pool: $(XA.Build.Mac.Pool) + timeoutInMinutes: 240 + cancelTimeoutInMinutes: 5 + workspace: + clean: all + variables: + ApkTestConfiguration: Release + steps: + - task: DownloadPipelineArtifact@1 + inputs: + artifactName: $(InstallerArtifactName) + itemPattern: "*.pkg" + downloadPath: $(System.DefaultWorkingDirectory) + + - template: yaml-templates/run-installer.yaml + + - task: MSBuild@1 + displayName: build xaprepare + inputs: + solution: build-tools/xaprepare/xaprepare.sln + configuration: $(ApkTestConfiguration) + msbuildArguments: /t:Restore,Build + + - script: | + mono build-tools/xaprepare/xaprepare/bin/$(ApkTestConfiguration)/xaprepare.exe --s=UpdateMono --auto-provision=yes --auto-provision-uses-sudo=yes --no-emoji --run-mode=CI + mono build-tools/xaprepare/xaprepare/bin/$(ApkTestConfiguration)/xaprepare.exe --s=Required --auto-provision=yes --auto-provision-uses-sudo=yes --no-emoji --run-mode=CI + mono build-tools/xaprepare/xaprepare/bin/$(ApkTestConfiguration)/xaprepare.exe --s=AndroidToolchain --no-emoji --run-mode=CI + displayName: provision dependencies + + - task: NuGetCommand@2 + displayName: nuget restore Xamarin.Android.Tools.sln + inputs: + restoreSolution: external/xamarin-android-tools/Xamarin.Android.Tools.sln + + - task: MSBuild@1 + displayName: build Xamarin.Android.Tools.BootstrapTasks.csproj + inputs: + solution: build-tools/xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csproj + configuration: $(ApkTestConfiguration) + msbuildArguments: /bl:$(System.DefaultWorkingDirectory)/bin/Test$(ApkTestConfiguration)/BootstrapTasks.binlog + + - task: NuGetCommand@2 + displayName: nuget restore Xamarin.Android-Tests.sln + inputs: + restoreSolution: Xamarin.Android-Tests.sln + + - template: yaml-templates/apk-instrumentation.yaml + parameters: + configuration: $(ApkTestConfiguration) + testName: Mono.Android_Tests + project: src/Mono.Android/Test/Mono.Android-Tests.csproj + testResultsFiles: TestResult-Mono.Android_Tests-$(ApkTestConfiguration).xml + + - template: yaml-templates/apk-instrumentation.yaml + parameters: + configuration: $(ApkTestConfiguration) + testName: Mono.Android_Tests-Aot + project: src/Mono.Android/Test/Mono.Android-Tests.csproj + testResultsFiles: TestResult-Mono.Android_Tests-$(ApkTestConfiguration)-Aot.xml + extraBuildArgs: /p:AotAssemblies=True /p:EnableLlvm=True + + - template: yaml-templates/apk-instrumentation.yaml + parameters: + configuration: $(ApkTestConfiguration) + testName: Mono.Android_Tests-Profiled + project: src/Mono.Android/Test/Mono.Android-Tests.csproj + testResultsFiles: TestResult-Mono.Android_Tests-$(ApkTestConfiguration)-Profiled.xml + extraBuildArgs: /p:AndroidEnableProfiledAot=true + + - template: yaml-templates/apk-instrumentation.yaml + parameters: + configuration: $(ApkTestConfiguration) + testName: Mono.Android_Tests-Bundle + project: src/Mono.Android/Test/Mono.Android-Tests.csproj + testResultsFiles: TestResult-Mono.Android_Tests-$(ApkTestConfiguration)-Bundle.xml + extraBuildArgs: /p:BundleAssemblies=true + + - template: yaml-templates/apk-instrumentation.yaml + parameters: + configuration: $(ApkTestConfiguration) + testName: Mono.Android_TestsAppBundle + project: tests/Runtime-AppBundle/Mono.Android-TestsAppBundle.csproj + testResultsFiles: TestResult-Mono.Android_TestsAppBundle-$(ApkTestConfiguration).xml + packageType: Aab + + - template: yaml-templates/apk-instrumentation.yaml + parameters: + configuration: $(ApkTestConfiguration) + testName: Mono.Android_TestsMultiDex + project: tests/Runtime-MultiDex/Mono.Android-TestsMultiDex.csproj + testResultsFiles: TestResult-Mono.Android_TestsMultiDex-$(ApkTestConfiguration).xml + + - template: yaml-templates/apk-instrumentation.yaml + parameters: + configuration: $(ApkTestConfiguration) + testName: Xamarin.Android.JcwGen_Tests + project: tests/CodeGen-Binding/Xamarin.Android.JcwGen-Tests/Xamarin.Android.JcwGen-Tests.csproj + testResultsFiles: TestResult-Xamarin.Android.JcwGen_Tests-$(ApkTestConfiguration).xml + + - template: yaml-templates/apk-instrumentation.yaml + parameters: + configuration: $(ApkTestConfiguration) + testName: Xamarin.Android.Locale_Tests + project: tests/locales/Xamarin.Android.Locale-Tests/Xamarin.Android.Locale-Tests.csproj + testResultsFiles: TestResult-Xamarin.Android.Locale_Tests-$(ApkTestConfiguration).xml + + - template: yaml-templates/apk-instrumentation.yaml + parameters: + configuration: $(ApkTestConfiguration) + testName: Xamarin.Android.Locale_Tests-Aot + project: tests/locales/Xamarin.Android.Locale-Tests/Xamarin.Android.Locale-Tests.csproj + testResultsFiles: TestResult-Xamarin.Android.Locale_Tests-$(ApkTestConfiguration)-Aot.xml + extraBuildArgs: /p:AotAssemblies=True + + - template: yaml-templates/apk-instrumentation.yaml + parameters: + configuration: $(ApkTestConfiguration) + testName: Xamarin.Android.Locale_Tests-Profiled + project: tests/locales/Xamarin.Android.Locale-Tests/Xamarin.Android.Locale-Tests.csproj + testResultsFiles: TestResult-Xamarin.Android.Locale_Tests-$(ApkTestConfiguration)-Profiled.xml + extraBuildArgs: /p:AndroidEnableProfiledAot=true + + - template: yaml-templates/apk-instrumentation.yaml + parameters: + configuration: $(ApkTestConfiguration) + testName: Xamarin.Android.EmbeddedDSO_Test + project: tests/EmbeddedDSOs/EmbeddedDSO/EmbeddedDSO.csproj + testResultsFiles: TestResult-Xamarin.Android.EmbeddedDSO_Test.nunit-$(ApkTestConfiguration).xml + + - task: MSBuild@1 + displayName: run Xamarin.Forms-Performance-Integration + inputs: + solution: tests/Xamarin.Forms-Performance-Integration/Droid/Xamarin.Forms.Performance.Integration.Droid.csproj + configuration: $(ApkTestConfiguration) + msbuildArguments: > + /t:AcquireAndroidTarget,SignAndroidPackage,UndeployTestApks,DeployTestApks,RunTestApks,ReportComponentFailures + /bl:$(System.DefaultWorkingDirectory)/bin/Test$(ApkTestConfiguration)/XamarinFormsPerf.binlog + condition: succeededOrFailed() + + - task: MSBuild@1 + displayName: run Xamarin.Forms-Performance-Integration-Aot + inputs: + solution: tests/Xamarin.Forms-Performance-Integration/Droid/Xamarin.Forms.Performance.Integration.Droid.csproj + configuration: $(ApkTestConfiguration) + msbuildArguments: > + /t:AcquireAndroidTarget,SignAndroidPackage,UndeployTestApks,DeployTestApks,RunTestApks,ReportComponentFailures + /bl:$(System.DefaultWorkingDirectory)/bin/Test$(ApkTestConfiguration)/XamarinFormsPerf-Aot.binlog + /p:AotAssemblies=true + condition: succeededOrFailed() + + - task: MSBuild@1 + displayName: run Xamarin.Forms-Performance-Integration-Profiled + inputs: + solution: tests/Xamarin.Forms-Performance-Integration/Droid/Xamarin.Forms.Performance.Integration.Droid.csproj + configuration: $(ApkTestConfiguration) + msbuildArguments: > + /t:AcquireAndroidTarget,SignAndroidPackage,UndeployTestApks,DeployTestApks,RunTestApks,ReportComponentFailures + /bl:$(System.DefaultWorkingDirectory)/bin/Test$(ApkTestConfiguration)/XamarinFormsPerf-Profiled.binlog + /p:AndroidEnableProfiledAot=true + condition: succeededOrFailed() + + - task: MSBuild@1 + displayName: run Xamarin.Forms-Performance-Integration-Bundle + inputs: + solution: tests/Xamarin.Forms-Performance-Integration/Droid/Xamarin.Forms.Performance.Integration.Droid.csproj + configuration: $(ApkTestConfiguration) + msbuildArguments: > + /t:AcquireAndroidTarget,SignAndroidPackage,UndeployTestApks,DeployTestApks,RunTestApks,ReportComponentFailures + /bl:$(System.DefaultWorkingDirectory)/bin/Test$(ApkTestConfiguration)/XamarinFormsPerf-Bundle.binlog + /p:BundleAssemblies=true + condition: succeededOrFailed() + + - task: MSBuild@1 + displayName: shut down emulator + inputs: + solution: src/Mono.Android/Test/Mono.Android-Tests.csproj + configuration: $(ApkTestConfiguration) + msbuildArguments: > + /t:AcquireAndroidTarget,ReleaseAndroidTarget + /bl:$(System.DefaultWorkingDirectory)/bin/Test$(ApkTestConfiguration)/shutdown-emulator.binlog + condition: always() + + - task: MSBuild@1 + displayName: package results + inputs: + solution: build-tools/xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csproj + configuration: $(ApkTestConfiguration) + msbuildArguments: /t:ZipBuildStatus;ZipTestResults /p:BuildStatusZipOutputPath=$(Build.ArtifactStagingDirectory) /p:TestResultZipOutputPath=$(Build.ArtifactStagingDirectory) + condition: always() + + - task: PublishPipelineArtifact@0 + displayName: upload artifacts + inputs: + artifactName: mac-apk-test-results + targetPath: $(Build.ArtifactStagingDirectory) + condition: always() diff --git a/build-tools/automation/yaml-templates/apk-instrumentation.yaml b/build-tools/automation/yaml-templates/apk-instrumentation.yaml new file mode 100644 index 00000000000..b7f44ebc14a --- /dev/null +++ b/build-tools/automation/yaml-templates/apk-instrumentation.yaml @@ -0,0 +1,28 @@ +parameters: + configuration: [] + testName: [] + project: [] + testResultsFiles: [] + extraBuildArgs: "" + testResultsFormat: NUnit + packageType: Apk + +steps: +- task: MSBuild@1 + displayName: run ${{ parameters.testName }} + inputs: + solution: ${{ parameters.project }} + configuration: ${{ parameters.configuration }} + msbuildArguments: > + /t:AcquireAndroidTarget,SignAndroidPackage,UndeployTestApks,DeployTest${{ parameters.packageType }}s,RunTestApks,RenameApkTestCases,ReportComponentFailures + /bl:$(System.DefaultWorkingDirectory)/bin/Test${{ parameters.configuration }}/run${{ parameters.testName }}.binlog + ${{ parameters.extraBuildArgs }} + condition: succeededOrFailed() + +- task: PublishTestResults@2 + displayName: publish ${{ parameters.testName }} results + inputs: + testResultsFormat: ${{ parameters.testResultsFormat }} + testResultsFiles: ${{ parameters.testResultsFiles }} + testRunTitle: ${{ parameters.testName }} + condition: succeededOrFailed() diff --git a/build-tools/automation/yaml-templates/run-installer.yaml b/build-tools/automation/yaml-templates/run-installer.yaml new file mode 100644 index 00000000000..c95c170b9e9 --- /dev/null +++ b/build-tools/automation/yaml-templates/run-installer.yaml @@ -0,0 +1,22 @@ +parameters: + artifactDirectory: $(System.DefaultWorkingDirectory) + +steps: +- powershell: | + if ([Environment]::OSVersion.Platform -eq "Unix") { + $installer = Get-ChildItem -Path "${{ parameters.artifactDirectory }}/*" -Include *.pkg -File + } else { + $installer = Get-ChildItem -Path "${{ parameters.artifactDirectory }}\*" -Include *.vsix -File + } + if (![System.IO.File]::Exists($installer)) { + throw [System.IO.FileNotFoundException] "Installer not found in $artifactDirectory." + } + Write-Host "##vso[task.setvariable variable=XA.Provisionator.Args]$installer" + displayName: find installer and set provisionator variable + +- task: provisionator@2 + inputs: + provisionator_uri: $(provisionator-uri) + github_token: $(GitHub.Token) + provisioning_script: $(XA.Provisionator.Args) + provisioning_extra_args: -vv diff --git a/build-tools/scripts/Jar.targets b/build-tools/scripts/Jar.targets index d381a96a2c6..327013349b9 100644 --- a/build-tools/scripts/Jar.targets +++ b/build-tools/scripts/Jar.targets @@ -7,6 +7,8 @@ <_JavacSourceVersion Condition=" '$(_JavacSourceVersion)' == '' ">1.5 <_JavacTargetVersion Condition="$(_JdkVersion.StartsWith ('9'))">1.8 <_JavacTargetVersion Condition=" '$(_JavacTargetVersion)' == '' ">1.6 + $(JavaSdkDirectory)\bin\jar + $(JavaSdkDirectory)\bin\javac - <_KeyStore>..\src\Xamarin.Android.Build.Tasks\Tests\Xamarin.ProjectTools\Resources\Base\test.keystore + <_KeyStore>$(XamarinAndroidSourcePath)\src\Xamarin.Android.Build.Tasks\Tests\Xamarin.ProjectTools\Resources\Base\test.keystore <_KeyAlias>mykey <_KeyPass>android <_StorePass>android + + $(AndroidBundleToolJarPath) + $(JavaSdkDirectory)\bin\java + Condition=" '@(TestApk)' != '' Or '@(TestAab)' != '' "> \d+-\d+\s+[\d:\.]+)\s+{PID}\s+(?.*)$"); started = true; } else { + if (line.Contains ($"Process {ApplicationPackageName} (pid {PID}) has died")) { + Log.LogError ("Application crash detected. Could not collect performance data."); + return false; + } + var match = timingRegex.Match (line); if (!match.Success) { if (!string.IsNullOrEmpty (Activity)) { @@ -91,10 +96,10 @@ public override bool Execute () Log.LogMessage (MessageImportance.Normal, $"Last timing message: {(last - start).TotalMilliseconds}ms"); WriteResults (); - } else - Log.LogWarning ("Wasn't able to collect the performance data"); - - reader.Close (); + } else { + Log.LogError ("Application start wasn't detected. Could not collect performance data."); + return false; + } } return true; diff --git a/src/Mono.Android/Test/Mono.Android-Tests.targets b/src/Mono.Android/Test/Mono.Android-Tests.targets index 107163fab3a..579de855832 100644 --- a/src/Mono.Android/Test/Mono.Android-Tests.targets +++ b/src/Mono.Android/Test/Mono.Android-Tests.targets @@ -17,7 +17,9 @@ + diff --git a/tests/CodeGen-Binding/Xamarin.Android.LibraryProjectZip-LibBinding/Xamarin.Android.LibraryProjectZip-LibBinding.targets b/tests/CodeGen-Binding/Xamarin.Android.LibraryProjectZip-LibBinding/Xamarin.Android.LibraryProjectZip-LibBinding.targets index 4575e09bd04..12ee7a54908 100644 --- a/tests/CodeGen-Binding/Xamarin.Android.LibraryProjectZip-LibBinding/Xamarin.Android.LibraryProjectZip-LibBinding.targets +++ b/tests/CodeGen-Binding/Xamarin.Android.LibraryProjectZip-LibBinding/Xamarin.Android.LibraryProjectZip-LibBinding.targets @@ -1,8 +1,9 @@ - + + - + + +