[dotnet] Port the fsharplibrary project to .NET (#9339)
This commit is contained in:
Родитель
d96827cd89
Коммит
19e53376dd
|
@ -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");
|
||||
|
|
|
@ -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>
|
Загрузка…
Ссылка в новой задаче