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 issue #1844
  • Loading branch information
jstedfast committed Dec 10, 2024
1 parent 94d9283 commit 018d7a6
Show file tree
Hide file tree
Showing 3 changed files with 129 additions and 0 deletions.
31 changes: 31 additions & 0 deletions AotCompatibility/AotCompatibility.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<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>
<UseMailKitLite Condition=" '$(UseMailKitLite)' == '' ">false</UseMailKitLite>
</PropertyGroup>

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

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

<ProjectReference Include="..\MailKit\MailKitLite.csproj" Condition=" '$(UseMailKitLite)' == 'true' " />
<ProjectReference Include="..\submodules\MimeKit\MimeKitLite.csproj" Condition=" '$(UseMailKitLite)' == 'true' " />
<TrimmerRootAssembly Include="MailKit" Path="..\MailKit\MailKitLite.csproj" Condition=" '$(UseMailKitLite)' == 'true' " />
<TrimmerRootAssembly Include="MimeKitLite" Path="..\submodules\MimeKit\MimeKitLite.csproj" Condition=" '$(UseMailKitLite)' == '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 <[email protected]>
//
// 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;
using MailKit;
using MailKit.Net;
using MailKit.Net.Imap;
using MailKit.Net.Pop3;
using MailKit.Net.Smtp;

namespace AotCompatibility {
class Program
{
static int Main (string[] args)
{
try {
Encoding.RegisterProvider (CodePagesEncodingProvider.Instance);

var message = new MimeMessage ();

using (var imap = new ImapClient ()) {}
using (var pop3 = new Pop3Client ()) {}
using (var smtp = new SmtpClient ()) {}

return 0;
} catch (Exception ex) {
Console.WriteLine (ex);
return -1;
}
}
}
}
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]$useMailKitLite)

$rootDirectory = Split-Path $PSScriptRoot -Parent
$publishOutput = dotnet publish $rootDirectory/AotCompatibility/AotCompatibility.csproj -nodeReuse:false /p:UseSharedCompilation=false /p:ExposeExperimentalFeatures=true /p:UseMailKitLite=$useMailKitLite

$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 018d7a6

Please sign in to comment.