From 82445045b33a32f8feb2b159999b3ae81ed1b0c3 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Sat, 30 Nov 2024 12:03:15 -0500 Subject: [PATCH] Added AOT compatibility test Part of the ongoing work for https://github.com/jstedfast/MailKit/issues/1844 --- AotCompatibility/AotCompatibility.csproj | 27 +++++++++++ AotCompatibility/Program.cs | 57 ++++++++++++++++++++++++ MimeKit/MimeKit.csproj | 4 +- scripts/test-aot-compatibility.ps1 | 41 +++++++++++++++++ 4 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 AotCompatibility/AotCompatibility.csproj create mode 100644 AotCompatibility/Program.cs create mode 100644 scripts/test-aot-compatibility.ps1 diff --git a/AotCompatibility/AotCompatibility.csproj b/AotCompatibility/AotCompatibility.csproj new file mode 100644 index 0000000000..07f6a4bd8d --- /dev/null +++ b/AotCompatibility/AotCompatibility.csproj @@ -0,0 +1,27 @@ + + + + Exe + net8.0 + enable + enable + true + false + true + true + false + + + + + + + + + + + + + + + diff --git a/AotCompatibility/Program.cs b/AotCompatibility/Program.cs new file mode 100644 index 0000000000..1630bf4799 --- /dev/null +++ b/AotCompatibility/Program.cs @@ -0,0 +1,57 @@ +// +// Program.cs +// +// Author: Jeffrey Stedfast +// +// Copyright (c) 2013-2024 .NET Foundation and Contributors +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +using System.Text; + +using MimeKit; + +namespace AotCompatibility { + class Program + { + static int Main (string[] args) + { + var location = System.AppContext.BaseDirectory; + var dir = Path.GetDirectoryName (location); + + while (Path.GetFileName (dir) != "AotCompatibility") + dir = Path.GetFullPath (Path.Combine (dir!, "..")); + + dir = Path.Combine (dir!, "..", "UnitTests", "TestData"); + + try { + Encoding.RegisterProvider (CodePagesEncodingProvider.Instance); + + var path = Path.Combine (dir, "smime", "thunderbird-signed.txt"); + var message = MimeMessage.Load (path); + + return 0; + } catch (Exception ex) { + Console.WriteLine (ex); + return -1; + } + } + } +} \ No newline at end of file diff --git a/MimeKit/MimeKit.csproj b/MimeKit/MimeKit.csproj index 30fc7143c3..1887873224 100644 --- a/MimeKit/MimeKit.csproj +++ b/MimeKit/MimeKit.csproj @@ -52,9 +52,9 @@ $(DefineConstants);SERIALIZABLE - + diff --git a/scripts/test-aot-compatibility.ps1 b/scripts/test-aot-compatibility.ps1 new file mode 100644 index 0000000000..3b1ae564df --- /dev/null +++ b/scripts/test-aot-compatibility.ps1 @@ -0,0 +1,41 @@ +param([string]$useMimeKitLite) + +$rootDirectory = Split-Path $PSScriptRoot -Parent +$publishOutput = dotnet publish $rootDirectory/AotCompatibility/AotCompatibility.csproj -nodeReuse:false /p:UseSharedCompilation=false /p:ExposeExperimentalFeatures=true /p:UseMimeKitLite=$useMimeKitLite + +$actualWarningCount = 0 + +foreach ($line in $($publishOutput -split "`r`n")) +{ + if ($line -like "*warning IL*") + { + Write-Host $line + + $actualWarningCount += 1 + } +} + +pushd $rootDirectory/AotCompatibility/bin/Release/net8.0/win-x64/publish + +Write-Host "Executing test App..." +./AotCompatibility.exe +Write-Host "Finished executing test App" + +if ($LastExitCode -ne 0) +{ + Write-Host "There was an error while executing AotCompatibility Test App. LastExitCode is:", $LastExitCode +} + +popd + +Write-Host "Actual warning count is:", $actualWarningCount +$expectedWarningCount = 0 + +$testPassed = 0 +if ($actualWarningCount -ne $expectedWarningCount) +{ + $testPassed = 1 + Write-Host "Actual warning count:", actualWarningCount, "is not as expected. Expected warning count is:", $expectedWarningCount +} + +Exit $testPassed