[tests] Port bindings-test2 to .NET.

This commit is contained in:
Rolf Bjarne Kvinge 2020-08-10 13:40:15 +02:00
Родитель d883eb4725
Коммит 8814e8ca24
7 изменённых файлов: 132 добавлений и 0 удалений

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

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

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

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

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

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

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

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<RootNamespace>bindingstest2</RootNamespace>
<SignAssembly>true</SignAssembly>
<AssemblyOriginatorKeyFile>..\..\..\..\product.snk</AssemblyOriginatorKeyFile>
<LangVersion>latest</LangVersion>
<IsBindingProject>true</IsBindingProject>
<RootTestsDirectory>$(MSBuildThisFileDirectory)\..\..</RootTestsDirectory>
<BindingsTest2Directory>$(RootTestsDirectory)\bindings-test2</BindingsTest2Directory>
<TestLibrariesDirectory>$(RootTestsDirectory)\test-libraries</TestLibrariesDirectory>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NUnitLite" Version="3.12.0" />
<ProjectReference Include="$(RootTestsDirectory)\bindings-test\dotnet\$(PlatformName)\bindings-test.csproj" />
</ItemGroup>
<ItemGroup>
<ObjcBindingApiDefinition Include="$(BindingsTest2Directory)\ApiDefinition.cs" />
<ObjcBindingApiDefinition Include="$(BindingsTest2Directory)\ApiProtocol.cs" />
<ObjcBindingCoreSource Include="$(BindingsTest2Directory)\StructsAndEnums.cs" />
<ObjcBindingNativeLibrary Include="$(TestLibrariesDirectory)\.libs\$(NativeLibName)\libtest2.a">
<Link>libtest2.a</Link>
</ObjcBindingNativeLibrary>
</ItemGroup>
<ItemGroup>
<Compile Include="$(BindingsTest2Directory)\libtest2.linkwith.cs">
<DependentUpon>libtest2.a</DependentUpon>
</Compile>
<Compile Include="$(BindingsTest2Directory)\BindingTest.cs" />
</ItemGroup>
<ItemGroup>
<None Include="$(TestLibrariesDirectory)\libtest2.m">
<Link>libtest2.m</Link>
</None>
<None Include="$(TestLibrariesDirectory)\libtest2.h">
<Link>libtest2.h</Link>
</None>
</ItemGroup>
<ItemGroup>
<GeneratedTestInput Include="$(TestLibrariesDirectory)\*.m" />
<GeneratedTestInput Include="$(TestLibrariesDirectory)\*.h" />
<GeneratedTestInput Include="$(TestLibrariesDirectory)\*.cs" />
<GeneratedTestInput Include="$(TestLibrariesDirectory)\Makefile" />
<GeneratedTestOutput Include="$(TestLibrariesDirectory)\.libs\$(NativeLibName)\libtest2.a" />
</ItemGroup>
<Target Name="BuildTestLibraries" Inputs="@(GeneratedTestInput)" Outputs="@(GeneratedTestOutput)" BeforeTargets="BeforeBuild">
<Exec Command="make -j8 -C $(TestLibrariesDirectory)" />
</Target>
</Project>

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

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

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

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

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

@ -217,6 +217,47 @@ namespace Xamarin.Tests {
Assert.That (ad.MainModule.Resources [0].Name, Is.EqualTo ("libtest.a"), "libtest.a");
}
[TestCase ("iOS")]
[TestCase ("tvOS")]
[TestCase ("watchOS")]
[TestCase ("macOS")]
public void BuildBindingsTest2 (string platform)
{
var assemblyName = "bindings-test2";
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}.csproj");
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 one resource in the binding assembly, and its name
var ad = AssemblyDefinition.ReadAssembly (asm, new ReaderParameters { ReadingMode = ReadingMode.Deferred });
Assert.That (ad.MainModule.Resources.Count, Is.EqualTo (1), "1 resource");
Assert.That (ad.MainModule.Resources [0].Name, Is.EqualTo ("libtest2.a"), "libtest2.a");
}
void CopyDotNetSupportingFiles (string targetDirectory)
{
var srcDirectory = Path.Combine (Configuration.SourceRoot, "tests", "dotnet");