Skip to content

Commit

Permalink
Added AOT compatibility test
Browse files Browse the repository at this point in the history
Part of the ongoing work for jstedfast/MailKit#1844
  • Loading branch information
jstedfast committed Nov 30, 2024
1 parent c25bd8e commit 8244504
Show file tree
Hide file tree
Showing 4 changed files with 127 additions and 2 deletions.
27 changes: 27 additions & 0 deletions AotCompatibility/AotCompatibility.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<PublishAot>true</PublishAot>
<TrimmerSingleWarn>false</TrimmerSingleWarn>
<SelfContained>true</SelfContained>
<InvariantGlobalization>true</InvariantGlobalization>
<UseMimeKitLite Condition=" '$(UseMimeKitLite)' == '' ">false</UseMimeKitLite>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="System.Text.Encoding.CodePages" Version="8.0.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\MimeKit\MimeKit.csproj" Condition=" '$(UseMimeKitLite)' == 'false' " />
<TrimmerRootAssembly Include="MimeKit" Path="..\MimeKit\MimeKit.csproj" Condition=" '$(UseMimeKitLite)' == 'false' " />

<ProjectReference Include="..\MimeKit\MimeKitLite.csproj" Condition=" '$(UseMimeKitLite)' == 'true' " />
<TrimmerRootAssembly Include="MimeKitLite" Path="..\MimeKit\MimeKitLite.csproj" Condition=" '$(UseMimeKitLite)' == 'true' " />
</ItemGroup>

</Project>
57 changes: 57 additions & 0 deletions AotCompatibility/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
//
// Program.cs
//
// Author: Jeffrey Stedfast <jestedfa@microsoft.com>
//
// 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;
}
}
}
}
4 changes: 2 additions & 2 deletions MimeKit/MimeKit.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,9 @@
<DefineConstants>$(DefineConstants);SERIALIZABLE</DefineConstants>
</PropertyGroup>

<!--<PropertyGroup>
<PropertyGroup>
<IsAotCompatible Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net7.0'))">true</IsAotCompatible>
</PropertyGroup>-->
</PropertyGroup>

<ItemGroup Condition=" $(TargetFramework.StartsWith('net4')) ">
<Reference Include="System.Data" />
Expand Down
41 changes: 41 additions & 0 deletions scripts/test-aot-compatibility.ps1
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 8244504

Please sign in to comment.