From 19e53376dd62308e44ac8851d85dfbf9c23e6ecf Mon Sep 17 00:00:00 2001 From: Rolf Bjarne Kvinge Date: Mon, 10 Aug 2020 16:12:19 +0200 Subject: [PATCH] [dotnet] Port the fsharplibrary project to .NET (#9339) --- tests/dotnet/UnitTests/ProjectTest.cs | 38 +++++++++++++++++++ tests/fsharplibrary/dotnet/.gitignore | 3 ++ .../dotnet/iOS/fsharplibrary.fsproj | 4 ++ .../dotnet/macOS/fsharplibrary.fsproj | 4 ++ tests/fsharplibrary/dotnet/shared.targets | 21 ++++++++++ .../dotnet/tvOS/fsharplibrary.fsproj | 4 ++ .../dotnet/watchOS/fsharplibrary.fsproj | 4 ++ 7 files changed, 78 insertions(+) create mode 100644 tests/fsharplibrary/dotnet/.gitignore create mode 100644 tests/fsharplibrary/dotnet/iOS/fsharplibrary.fsproj create mode 100644 tests/fsharplibrary/dotnet/macOS/fsharplibrary.fsproj create mode 100644 tests/fsharplibrary/dotnet/shared.targets create mode 100644 tests/fsharplibrary/dotnet/tvOS/fsharplibrary.fsproj create mode 100644 tests/fsharplibrary/dotnet/watchOS/fsharplibrary.fsproj diff --git a/tests/dotnet/UnitTests/ProjectTest.cs b/tests/dotnet/UnitTests/ProjectTest.cs index abb573ee31..afc161306d 100644 --- a/tests/dotnet/UnitTests/ProjectTest.cs +++ b/tests/dotnet/UnitTests/ProjectTest.cs @@ -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"); diff --git a/tests/fsharplibrary/dotnet/.gitignore b/tests/fsharplibrary/dotnet/.gitignore new file mode 100644 index 0000000000..71d64b8653 --- /dev/null +++ b/tests/fsharplibrary/dotnet/.gitignore @@ -0,0 +1,3 @@ +global.json +NuGet.config + diff --git a/tests/fsharplibrary/dotnet/iOS/fsharplibrary.fsproj b/tests/fsharplibrary/dotnet/iOS/fsharplibrary.fsproj new file mode 100644 index 0000000000..b48c8a7ca9 --- /dev/null +++ b/tests/fsharplibrary/dotnet/iOS/fsharplibrary.fsproj @@ -0,0 +1,4 @@ + + + + diff --git a/tests/fsharplibrary/dotnet/macOS/fsharplibrary.fsproj b/tests/fsharplibrary/dotnet/macOS/fsharplibrary.fsproj new file mode 100644 index 0000000000..4f84f0f812 --- /dev/null +++ b/tests/fsharplibrary/dotnet/macOS/fsharplibrary.fsproj @@ -0,0 +1,4 @@ + + + + diff --git a/tests/fsharplibrary/dotnet/shared.targets b/tests/fsharplibrary/dotnet/shared.targets new file mode 100644 index 0000000000..43cd3de818 --- /dev/null +++ b/tests/fsharplibrary/dotnet/shared.targets @@ -0,0 +1,21 @@ + + + net5.0 + true + true + + $(MSBuildThisFileDirectory)\..\.. + $(RootTestsDirectory)\fsharplibrary + + $(RootTestsDirectory)\..\product.snk + + + + + + + + + + + diff --git a/tests/fsharplibrary/dotnet/tvOS/fsharplibrary.fsproj b/tests/fsharplibrary/dotnet/tvOS/fsharplibrary.fsproj new file mode 100644 index 0000000000..a3ccbd44d5 --- /dev/null +++ b/tests/fsharplibrary/dotnet/tvOS/fsharplibrary.fsproj @@ -0,0 +1,4 @@ + + + + diff --git a/tests/fsharplibrary/dotnet/watchOS/fsharplibrary.fsproj b/tests/fsharplibrary/dotnet/watchOS/fsharplibrary.fsproj new file mode 100644 index 0000000000..f17a00c39c --- /dev/null +++ b/tests/fsharplibrary/dotnet/watchOS/fsharplibrary.fsproj @@ -0,0 +1,4 @@ + + + +