[dotnet] Port the fsharplibrary project to .NET (#9339)

This commit is contained in:
Rolf Bjarne Kvinge 2020-08-10 16:12:19 +02:00 коммит произвёл GitHub
Родитель d96827cd89
Коммит 19e53376dd
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
7 изменённых файлов: 78 добавлений и 0 удалений

Просмотреть файл

@ -138,6 +138,44 @@ namespace Xamarin.Tests {
Assert.That (Path.Combine (asm_dir, "es", "EmbeddedResources.resources.dll"), Does.Exist, "es");
}
[TestCase ("iOS")]
[TestCase ("tvOS")]
[TestCase ("watchOS")]
[TestCase ("macOS")]
public void BuildFSharpLibraryTest (string platform)
{
var assemblyName = "fsharplibrary";
var dotnet_bindings_dir = Path.Combine (Configuration.SourceRoot, "tests", assemblyName, "dotnet");
var project_dir = Path.Combine (dotnet_bindings_dir, platform);
var project_path = Path.Combine (project_dir, $"{assemblyName}.fsproj");
Clean (project_path);
CopyDotNetSupportingFiles (dotnet_bindings_dir);
var result = DotNet.AssertBuild (project_path, verbosity);
var lines = result.StandardOutput.ToString ().Split ('\n');
// Find the resulting binding assembly from the build log
var assemblies = lines.
Select (v => v.Trim ()).
Where (v => {
if (v.Length < 10)
return false;
if (v [0] != '/')
return false;
if (!v.EndsWith ($"{assemblyName}.dll", StringComparison.Ordinal))
return false;
if (!v.Contains ("/bin/", StringComparison.Ordinal))
return false;
return true;
});
Assert.That (assemblies, Is.Not.Empty, "Assemblies");
// Make sure there's no other assembly confusing our logic
Assert.That (assemblies.Distinct ().Count (), Is.EqualTo (1), "Unique assemblies");
var asm = assemblies.First ();
Assert.That (asm, Does.Exist, "Assembly existence");
// Verify that there's no resources in the assembly
var ad = AssemblyDefinition.ReadAssembly (asm, new ReaderParameters { ReadingMode = ReadingMode.Deferred });
Assert.That (ad.MainModule.Resources.Count (), Is.EqualTo (2), "2 resources"); // There are 2 embedded resources by default by the F# compiler.
}
void CopyDotNetSupportingFiles (string targetDirectory)
{
var srcDirectory = Path.Combine (Configuration.SourceRoot, "tests", "dotnet");

3
tests/fsharplibrary/dotnet/.gitignore поставляемый Normal file
Просмотреть файл

@ -0,0 +1,3 @@
global.json
NuGet.config

Просмотреть файл

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.iOS.Sdk">
<Import Project="..\shared.targets" />
</Project>

Просмотреть файл

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.macOS.Sdk">
<Import Project="..\shared.targets" />
</Project>

Просмотреть файл

@ -0,0 +1,21 @@
<Project>
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<SignAssembly>true</SignAssembly>
<GenerateTailCalls>true</GenerateTailCalls>
<RootTestsDirectory>$(MSBuildThisFileDirectory)\..\..</RootTestsDirectory>
<FSharpLibraryDirectory>$(RootTestsDirectory)\fsharplibrary</FSharpLibraryDirectory>
<AssemblyOriginatorKeyFile>$(RootTestsDirectory)\..\product.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NUnitLite" Version="3.12.0" />
</ItemGroup>
<ItemGroup>
<Compile Include="$(FSharpLibraryDirectory)\AssemblyInfo.fs" />
<Compile Include="$(FSharpLibraryDirectory)\ObjCRuntime\RegistrarTest.fs" />
</ItemGroup>
</Project>

Просмотреть файл

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.tvOS.Sdk">
<Import Project="..\shared.targets" />
</Project>

Просмотреть файл

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.watchOS.Sdk">
<Import Project="..\shared.targets" />
</Project>