diff --git a/src/mono/msbuild/apple/build/AppleBuild.targets b/src/mono/msbuild/apple/build/AppleBuild.targets index 1c3734f3d82655..d72b97832118a5 100644 --- a/src/mono/msbuild/apple/build/AppleBuild.targets +++ b/src/mono/msbuild/apple/build/AppleBuild.targets @@ -318,6 +318,7 @@ NativeAOT CoreCLR MonoVM + <_MergedWrapperMarker Include="$(TestBinDir)**\*.MergedTestAssembly" Exclude="$(TestBinDir)**\supportFiles\*.MergedTestAssembly" /> + <_MergedWrapperMarker Include="$(TestBinDir)**\*.MergedTestAssemblyForStress" Exclude="$(TestBinDir)**\supportFiles\*.MergedTestAssemblyForStress" /> - <_MergedWrapperMarker Update="@(_MergedWrapperMarker)"> + <_MergedWrapperMarker> $([System.IO.Path]::ChangeExtension('%(Identity)', '.$(TestScriptExtension)')) %(RootDir)%(Directory)$(MobileAppBundleDirName)/$(_AppBundleRunScriptName).$(TestScriptExtension) @@ -555,11 +556,11 @@ <_MergedWrapperDirectory>%(_MergedWrapperMarker.RootDir)%(Directory) - <_MergedWrapperName>%(_MergedWrapperMarker.FileName) + <_MergedWrapperName>$([System.Text.RegularExpressions.Regex]::Replace('%(_MergedWrapperMarker.FileName)', '\.MergedTestAssembly(ForStress)?\.\d+\.\d+$', '')) - iphone + iphoneos iphonesimulator appletvos appletvsimulator @@ -578,6 +579,8 @@ <_TestExclusionListPlaceholder Include="@(_MergedPayloadFiles)" Condition="$([System.String]::new('%(FileName)').EndsWith('TestExclusionList'))" /> + <_MergedPayloadFiles Include="$(_MergedWrapperDirectory)ExpectedExitCode.txt" Condition="Exists('$(_MergedWrapperDirectory)ExpectedExitCode.txt')" FileRelativeToPayloadsRootDirectory="ExpectedExitCode.txt" /> + <_MergedPayloadFiles Include="$(_MergedWrapperDirectory)$(_MergedWrapperName).XHarnessNoRunner" Condition="Exists('$(_MergedWrapperDirectory)$(_MergedWrapperName).XHarnessNoRunner')" FileRelativeToPayloadsRootDirectory="$(_MergedWrapperName).XHarnessNoRunner" /> <_MergedPayloadFiles Remove="@(_TestExclusionListPlaceholder)" /> @@ -595,7 +598,7 @@ <_MergedWrapperDirectory>%(_MergedWrapperMarker.RootDir)%(Directory) - <_MergedWrapperName>%(_MergedWrapperMarker.FileName) + <_MergedWrapperName>$([System.Text.RegularExpressions.Regex]::Replace('%(_MergedWrapperMarker.FileName)', '\.MergedTestAssembly(ForStress)?\.\d+\.\d+$', '')) @@ -606,6 +609,8 @@ MakeRelative function calls Escape function internally that replaces all the Unicode characters with %. --> $([System.IO.Path]::GetRelativePath('$(_MergedWrapperDirectory)$(MobileAppBundleDirName)/', %(FullPath))) + <_MergedPayloadFiles Include="$(_MergedWrapperDirectory)ExpectedExitCode.txt" Condition="Exists('$(_MergedWrapperDirectory)ExpectedExitCode.txt')" FileRelativeToPayloadsRootDirectory="ExpectedExitCode.txt" /> + <_MergedPayloadFiles Include="$(_MergedWrapperDirectory)$(_MergedWrapperName).XHarnessNoRunner" Condition="Exists('$(_MergedWrapperDirectory)$(_MergedWrapperName).XHarnessNoRunner')" FileRelativeToPayloadsRootDirectory="$(_MergedWrapperName).XHarnessNoRunner" /> <_TestExclusionListPlaceholder Include="@(_MergedPayloadFiles)" Condition="$([System.String]::new('%(FileName)').EndsWith('TestExclusionList'))" /> <_MergedPayloadFiles Remove="@(_TestExclusionListPlaceholder)" /> @@ -629,7 +634,7 @@ - + $([MSBuild]::MakeRelative($(LegacyPayloadsRootDirectory), %(FullPath))) %(FullPath) @@ -646,7 +651,7 @@ Condition="'$(TargetsBrowser)' == 'true' or ('$(TargetsAppleMobile)' == 'true' and '$(NeedsToBuildAppsOnHelix)' == 'true')"> - + $([MSBuild]::MakeRelative($(MergedPayloadsRootDirectory), %(FullPath))) %(FullPath) @@ -865,6 +870,13 @@ $(MergedPayloadsRootDirectory)%(FileName)%(Extension)/%(ApkFileName).apk $(MergedPayloadsRootDirectory)%(FileName)%(Extension)/%(FileName)%(Extension).app + + $([System.IO.File]::ReadAllText('$(MergedPayloadsRootDirectory)%(FileName)%(Extension)/ExpectedExitCode.txt').Trim()) + + + + false + @@ -998,7 +1010,7 @@ $([System.TimeSpan]::FromMinutes($(TimeoutPerTestCollectionInMinutes))) coreclr_tests.run.$(TargetOS).$(TargetArchitecture).$(Configuration).mch;coreclr_tests.run.$(TargetOS).$(TargetArchitecture).$(Configuration).log - + $([System.TimeSpan]::FromMinutes($(TimeoutPerTestCollectionInMinutes))) dotnet $(XUnitRunnerDll) %(XUnitWrapperDlls) $(XUnitRunnerArgs) @@ -1011,10 +1023,6 @@ $([System.TimeSpan]::FromMinutes($(TimeoutPerTestCollectionInMinutes))) - - $([System.IO.File]::ReadAllText('%(PayloadDirectory)/ExpectedExitCode.txt').Trim()) - - $(AppleTestTarget) $([System.TimeSpan]::FromMinutes($(TimeoutPerTestCollectionInMinutes))) diff --git a/src/tests/Common/mergedrunnermobile.targets b/src/tests/Common/mergedrunnermobile.targets index 2ae7a095d9fbbf..b0ee8ea42617e6 100644 --- a/src/tests/Common/mergedrunnermobile.targets +++ b/src/tests/Common/mergedrunnermobile.targets @@ -9,6 +9,17 @@ false + + + false + 100 + true + + diff --git a/src/tests/Directory.Build.targets b/src/tests/Directory.Build.targets index ca0c6b3bb4e082..74c89c69514ca5 100644 --- a/src/tests/Directory.Build.targets +++ b/src/tests/Directory.Build.targets @@ -424,6 +424,9 @@ MergedTestAssembly + + XHarnessNoRunner + NoMonoAot diff --git a/src/tests/build.proj b/src/tests/build.proj index 6869fcaa4a7698..207aeedaf6238c 100644 --- a/src/tests/build.proj +++ b/src/tests/build.proj @@ -381,6 +381,7 @@ + diff --git a/src/tests/nativeaot/Directory.Build.props b/src/tests/nativeaot/Directory.Build.props index 17342717f61c8e..1e08092b2bc7f1 100644 --- a/src/tests/nativeaot/Directory.Build.props +++ b/src/tests/nativeaot/Directory.Build.props @@ -5,5 +5,11 @@ true + + + true diff --git a/src/tests/nativeaot/Directory.Build.targets b/src/tests/nativeaot/Directory.Build.targets new file mode 100644 index 00000000000000..ba8535b823ebf5 --- /dev/null +++ b/src/tests/nativeaot/Directory.Build.targets @@ -0,0 +1,13 @@ + + + + + + + diff --git a/src/tests/nativeaot/GenerateUnmanagedEntryPoints/GenerateUnmanagedEntryPoints.cs b/src/tests/nativeaot/GenerateUnmanagedEntryPoints/GenerateUnmanagedEntryPoints.cs index b1251f9fc382a6..9ca6bd9a34f251 100644 --- a/src/tests/nativeaot/GenerateUnmanagedEntryPoints/GenerateUnmanagedEntryPoints.cs +++ b/src/tests/nativeaot/GenerateUnmanagedEntryPoints/GenerateUnmanagedEntryPoints.cs @@ -4,52 +4,56 @@ using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; +using Xunit; namespace GenerateUnmanagedEntryPoints { - unsafe class Program + unsafe class Tests : IDisposable { [UnmanagedCallersOnly(EntryPoint = "MainAssemblyMethod")] static void MainAssemblyMethod() => Console.WriteLine($"Hello from {nameof(MainAssemblyMethod)}"); - static int Main() + private IntPtr programHandle; + + public Tests() { - IntPtr methodAddress = IntPtr.Zero; - IntPtr programHandle = IntPtr.Zero; - programHandle = NativeLibrary.GetMainProgramHandle(); - if (programHandle == IntPtr.Zero) - { - return 1; - } - - if (NativeLibrary.TryGetExport(programHandle, "MainAssemblyMethod", out methodAddress)) - { - var MainAssemblyMethodPtr = (delegate* unmanaged ) methodAddress; - MainAssemblyMethodPtr(); - } - else - { - return 2; - } - - if (NativeLibrary.TryGetExport(programHandle, "ReferencedAssembly1Method", out methodAddress)) - { - var ReferencedAssembly1MethodPtr = (delegate* unmanaged ) methodAddress; - ReferencedAssembly1MethodPtr(); - } - else - { - return 3; - } - - if (NativeLibrary.TryGetExport(programHandle, "ReferencedAssembly2Method", out methodAddress)) - { - // must not be exposed from ReferencedAssembly2 assembly - return 4; - } - - return 100; + Assert.NotEqual(IntPtr.Zero, programHandle); + } + + [Fact] + public void ExportFromMainAssembly_IsExported() + { + IntPtr methodAddress = IntPtr.Zero; + bool found = NativeLibrary.TryGetExport(programHandle, "MainAssemblyMethod", out methodAddress); + Assert.True(found); + Assert.NotEqual(IntPtr.Zero, methodAddress); + var MainAssemblyMethodPtr = (delegate* unmanaged)methodAddress; + MainAssemblyMethodPtr(); + } + + [Fact] + public void ExportFromUnmanagedEntryPointsAssembly_IsExported() + { + IntPtr methodAddress = IntPtr.Zero; + bool found = NativeLibrary.TryGetExport(programHandle, "ReferencedAssembly1Method", out methodAddress); + Assert.True(found); + Assert.NotEqual(IntPtr.Zero, methodAddress); + var ReferencedAssembly1MethodPtr = (delegate* unmanaged)methodAddress; + ReferencedAssembly1MethodPtr(); + } + + [Fact] + public void ExportFromOtherAssembly_IsNotExported() + { + IntPtr methodAddress = IntPtr.Zero; + bool found = NativeLibrary.TryGetExport(programHandle, "ReferencedAssembly2Method", out methodAddress); + Assert.False(found); + Assert.Equal(IntPtr.Zero, methodAddress); + } + + public void Dispose() + { } } -} \ No newline at end of file +} diff --git a/src/tests/nativeaot/GenerateUnmanagedEntryPoints/GenerateUnmanagedEntryPoints.csproj b/src/tests/nativeaot/GenerateUnmanagedEntryPoints/GenerateUnmanagedEntryPoints.csproj index 25d573dfd83e72..230a4465ee75b2 100644 --- a/src/tests/nativeaot/GenerateUnmanagedEntryPoints/GenerateUnmanagedEntryPoints.csproj +++ b/src/tests/nativeaot/GenerateUnmanagedEntryPoints/GenerateUnmanagedEntryPoints.csproj @@ -8,8 +8,6 @@ Disable for now. --> true - true - false @@ -22,5 +20,4 @@ - diff --git a/src/tests/nativeaot/GenerateUnmanagedEntryPoints/ReferencedAssembly1/ReferencedAssembly1.csproj b/src/tests/nativeaot/GenerateUnmanagedEntryPoints/ReferencedAssembly1/ReferencedAssembly1.csproj index 174d5eb434bb78..fb117a611dcf8e 100644 --- a/src/tests/nativeaot/GenerateUnmanagedEntryPoints/ReferencedAssembly1/ReferencedAssembly1.csproj +++ b/src/tests/nativeaot/GenerateUnmanagedEntryPoints/ReferencedAssembly1/ReferencedAssembly1.csproj @@ -1,6 +1,7 @@  + SharedLibrary Library diff --git a/src/tests/nativeaot/GenerateUnmanagedEntryPoints/ReferencedAssembly2/ReferencedAssembly2.csproj b/src/tests/nativeaot/GenerateUnmanagedEntryPoints/ReferencedAssembly2/ReferencedAssembly2.csproj index 7cf16476f0940c..51b1eacbdce6f0 100644 --- a/src/tests/nativeaot/GenerateUnmanagedEntryPoints/ReferencedAssembly2/ReferencedAssembly2.csproj +++ b/src/tests/nativeaot/GenerateUnmanagedEntryPoints/ReferencedAssembly2/ReferencedAssembly2.csproj @@ -1,6 +1,7 @@  + SharedLibrary Library diff --git a/src/tests/nativeaot/SmokeTests/ComWrappers/CMakeLists.txt b/src/tests/nativeaot/SmokeTests/ComWrappers/CMakeLists.txt deleted file mode 100644 index a631acce2c89d0..00000000000000 --- a/src/tests/nativeaot/SmokeTests/ComWrappers/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -project (ComWrappersNative) -include_directories(${INC_PLATFORM_DIR}) - -add_library (ComWrappersNative SHARED ComWrappersNative.cpp) - -# add the install targets -install (TARGETS ComWrappersNative DESTINATION bin) diff --git a/src/tests/nativeaot/SmokeTests/ComWrappers/ComWrappers.cs b/src/tests/nativeaot/SmokeTests/ComWrappers/ComWrappers.cs deleted file mode 100644 index c4eb54cd880774..00000000000000 --- a/src/tests/nativeaot/SmokeTests/ComWrappers/ComWrappers.cs +++ /dev/null @@ -1,260 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Text; - -namespace ComWrappersTests -{ - internal class Program - { - static ComWrappers GlobalComWrappers; - - [DynamicDependency(DynamicallyAccessedMemberTypes.PublicMethods, typeof(IComInterface))] - public static int Main() - { - TestComInteropNullPointers(); - TestComInteropRegistrationRequired(); - GlobalComWrappers = new SimpleComWrapper(); - ComWrappers.RegisterForMarshalling(GlobalComWrappers); - TestComInteropReleaseProcess(); - TestRCWRoundTripRequireUnwrap(); - TestRCWCached(); - TestRCWRoundTrip(); - - TestComInteropCCWCreation(); - TestRCWNonRoundTripUnique(); - return 100; - } - - public static void ThrowIfNotEquals(T expected, T actual, string message) - { - if (!expected.Equals(actual)) - { - message += "\nExpected: " + expected.ToString() + "\n"; - message += "Actual: " + actual.ToString() + "\n"; - throw new Exception(message); - } - } - - public static void ThrowIfNotEquals(bool expected, bool actual, string message) - { - ThrowIfNotEquals(expected ? 1 : 0, actual ? 1 : 0, message); - } - - [DllImport("ComWrappersNative", CallingConvention = CallingConvention.StdCall)] - static extern bool IsNULL(IComInterface foo); - - [DllImport("ComWrappersNative", CallingConvention = CallingConvention.StdCall)] - static extern int CaptureComPointer(IComInterface foo); - - [DllImport("ComWrappersNative", CallingConvention = CallingConvention.StdCall)] - static extern int RetrieveCapturedComPointer(out IComInterface foo); - - [DllImport("ComWrappersNative", EntryPoint="RetrieveCapturedComPointer", CallingConvention = CallingConvention.StdCall)] - static extern int RetrieveCapturedComPointerRaw(out IntPtr foo); - - [DllImport("ComWrappersNative", CallingConvention = CallingConvention.StdCall)] - static extern void ReleaseComPointer(); - - [DllImport("ComWrappersNative", CallingConvention = CallingConvention.StdCall)] - static extern int BuildComPointer(out IComInterface foo); - - [DllImport("ComWrappersNative", CallingConvention = CallingConvention.StdCall, PreserveSig = false, EntryPoint="BuildComPointer")] - static extern IComInterface BuildComPointerNoPreserveSig(); - - public static void TestComInteropNullPointers() - { - Console.WriteLine("Testing Marshal APIs for COM interfaces"); - IComInterface comPointer = null; - var result = IsNULL(comPointer); - ThrowIfNotEquals(true, IsNULL(comPointer), "COM interface marshalling null check failed"); - } - - public static void TestComInteropRegistrationRequired() - { - Console.WriteLine("Testing COM Interop registration process"); - ComObject target = new ComObject(); - try - { - CaptureComPointer(target); - throw new Exception("Cannot work without ComWrappers.RegisterForMarshalling called"); - } - catch (NotSupportedException) - { - } - } - - public static void TestComInteropReleaseProcess() - { - Console.WriteLine("Testing RCW release process"); - WeakReference comPointerHolder = CreateComReference(); - - GC.Collect(); - ThrowIfNotEquals(true, comPointerHolder.IsAlive, ".NET object should be alive"); - - ReleaseComPointer(); - - GC.Collect(); - ThrowIfNotEquals(false, comPointerHolder.IsAlive, ".NET object should be disposed by then"); - } - - public static void TestRCWRoundTripRequireUnwrap() - { - Console.WriteLine("Testing RCW round-trip process"); - var target = new ComObject(); - int result = CaptureComPointer(target); - ThrowIfNotEquals(0, result, "Seems to be COM marshalling behave strange."); - result = RetrieveCapturedComPointerRaw(out var comPtr); - var roundTripObject = GlobalComWrappers.GetOrCreateObjectForComInstance(comPtr, CreateObjectFlags.Unwrap); - ThrowIfNotEquals(0, result, "Seems to be COM marshalling behave strange."); - if (roundTripObject != target) - { - throw new Exception("RCW should round-trip"); - } - } - - public static void TestRCWRoundTrip() - { - var target = new ComObject(); - int result = CaptureComPointer(target); - ThrowIfNotEquals(0, result, "Seems to be COM marshalling behave strange."); - result = RetrieveCapturedComPointer(out var capturedObject); - ThrowIfNotEquals(0, result, "Seems to be COM marshalling behave strange."); - if (capturedObject != target) - { - throw new Exception("Should round-trip"); - } - } - - public static void TestRCWCached() - { - Console.WriteLine("Testing RCW cache process"); - ComWrappers wrapper = new SimpleComWrapper(); - var target = new ComObject(); - var comPtr = wrapper.GetOrCreateComInterfaceForObject(target, CreateComInterfaceFlags.None); - var comPtr2 = wrapper.GetOrCreateComInterfaceForObject(target, CreateComInterfaceFlags.None); - if (comPtr != comPtr2) - { - throw new Exception("RCW should round-trip"); - } - } - - public static void TestRCWNonRoundTripUnique() - { - Console.WriteLine("Testing CCW uniqueness process"); - ComWrappers wrapper = new SimpleComWrapper(); - var target = new ComObject(); - var comPtr = wrapper.GetOrCreateComInterfaceForObject(target, CreateComInterfaceFlags.None); - var ifPtr = wrapper.GetOrCreateObjectForComInstance(comPtr, CreateObjectFlags.UniqueInstance); - if (ifPtr == target) - { - throw new Exception("RCW should not round-trip for unique instances"); - } - } - - public static void TestComInteropCCWCreation() - { - Console.WriteLine("Testing CCW release process"); - int result = BuildComPointer(out var comPointer); - ThrowIfNotEquals(0, result, "Seems to be COM marshalling behave strange."); - comPointer.DoWork(11); - - comPointer = BuildComPointerNoPreserveSig(); - comPointer.DoWork(22); - } - - [MethodImpl(MethodImplOptions.NoInlining)] - private static WeakReference CreateComReference() - { - ComObject target = new ComObject(); - WeakReference comPointerHolder = new WeakReference(target); - - int result = CaptureComPointer(target); - ThrowIfNotEquals(0, result, "Seems to be COM marshalling behave strange."); - ThrowIfNotEquals(11, target.TestResult, "Call to method should work"); - - return comPointerHolder; - } - } - - [ComImport] - [ComVisible(true)] - [Guid("111e91ef-1887-4afd-81e3-70cf08e715d8")] - [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - public interface IComInterface - { - int DoWork(int param); - } - - public class ComObject : IComInterface - { - public int TestResult; - public int DoWork(int param) - { - this.TestResult += param; - return 0; - } - } - - class NativeComObjectWrapper: IComInterface - { - private IntPtr externalComObject; - - public NativeComObjectWrapper(IntPtr externalComObject) => this.externalComObject = externalComObject; - - public unsafe int DoWork(int param) - { - IntPtr* comDispatch = (IntPtr*)externalComObject; - IntPtr* vtbl = (IntPtr*)comDispatch[0]; - return ((delegate* unmanaged)vtbl[3])(externalComObject, param); - } - } - - internal unsafe class SimpleComWrapper : ComWrappers - { - static ComInterfaceEntry* wrapperEntry; - - static SimpleComWrapper() - { - IntPtr* vtbl = (IntPtr*)RuntimeHelpers.AllocateTypeAssociatedMemory(typeof(IComInterface), 4 * sizeof(IntPtr)); - GetIUnknownImpl(out vtbl[0], out vtbl[1], out vtbl[2]); - vtbl[3] = (IntPtr)(delegate* unmanaged)&IComInterfaceProxy.DoWork; - - var comInterfaceEntryMemory = RuntimeHelpers.AllocateTypeAssociatedMemory(typeof(IComInterface), sizeof(ComInterfaceEntry)); - wrapperEntry = (ComInterfaceEntry*)comInterfaceEntryMemory; - wrapperEntry->IID = new Guid("111e91ef-1887-4afd-81e3-70cf08e715d8"); - wrapperEntry->Vtable = (IntPtr)vtbl; - } - - protected override unsafe ComInterfaceEntry* ComputeVtables(object obj, CreateComInterfaceFlags flags, out int count) - { - if (obj is not IComInterface) - throw new Exception(); - count = 1; - return wrapperEntry; - } - - protected override object CreateObject(IntPtr externalComObject, CreateObjectFlags flags) - { - return new NativeComObjectWrapper(externalComObject); - } - - protected override void ReleaseObjects(System.Collections.IEnumerable objects) - { - } - } - - internal unsafe class IComInterfaceProxy - { - [UnmanagedCallersOnly] - public static int DoWork(IntPtr thisPtr, int param) - { - var inst = ComWrappers.ComInterfaceDispatch.GetInstance((ComWrappers.ComInterfaceDispatch*)thisPtr); - return inst.DoWork(param); - } - } -} diff --git a/src/tests/nativeaot/SmokeTests/ComWrappers/ComWrappers.csproj b/src/tests/nativeaot/SmokeTests/ComWrappers/ComWrappers.csproj deleted file mode 100644 index 5e9547d9bc9379..00000000000000 --- a/src/tests/nativeaot/SmokeTests/ComWrappers/ComWrappers.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - Exe - true - true - - - $(NoWarn);IL2050 - true - false - - - - - - - - - - diff --git a/src/tests/nativeaot/SmokeTests/ComWrappers/ComWrappersNative.cpp b/src/tests/nativeaot/SmokeTests/ComWrappers/ComWrappersNative.cpp deleted file mode 100644 index 164d677fa94cb4..00000000000000 --- a/src/tests/nativeaot/SmokeTests/ComWrappers/ComWrappersNative.cpp +++ /dev/null @@ -1,97 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -#include -#include -#include -#ifdef TARGET_WINDOWS -#include -#define DLL_EXPORT extern "C" __declspec(dllexport) -#else -#include -#define DLL_EXPORT extern "C" __attribute((visibility("default"))) -#endif - -#ifndef TARGET_WINDOWS -#define __stdcall -#endif - -DLL_EXPORT bool __stdcall IsNULL(void *a) -{ - return a == NULL; -} - -#ifdef TARGET_WINDOWS -class IComInterface: public IUnknown -{ -public: - virtual HRESULT STDMETHODCALLTYPE DoWork(int param) = 0; -}; -GUID IID_IComInterface = { 0x111e91ef, 0x1887, 0x4afd, { 0x81, 0xe3, 0x70, 0xcf, 0x08, 0xe7, 0x15, 0xd8 } }; - -class NativeComInterface: public IComInterface -{ - int _counter = 1; - int _value = 45; -public: - HRESULT STDMETHODCALLTYPE DoWork(int param) override - { - _value += param; - return S_OK; - } - - ULONG STDMETHODCALLTYPE AddRef() override - { - _counter++; - return S_OK; - } - - ULONG STDMETHODCALLTYPE Release() override - { - _counter--; - return S_OK; - } - - HRESULT STDMETHODCALLTYPE QueryInterface( - REFIID InterfaceId, - PVOID* Interface) override - { - if (InterfaceId == IID_IUnknown || - InterfaceId == IID_IComInterface) - { - *Interface = (IComInterface*)this; - AddRef(); - return S_OK; - } - else - { - *Interface = nullptr; - return E_NOINTERFACE; - } - } -}; - -IComInterface* capturedComObject; -DLL_EXPORT int __stdcall CaptureComPointer(IComInterface* pUnk) -{ - capturedComObject = pUnk; - return capturedComObject->DoWork(11); -} - -DLL_EXPORT int __stdcall RetrieveCapturedComPointer(IComInterface** ppUnk) -{ - *ppUnk = capturedComObject; - return S_OK; -} - -DLL_EXPORT int __stdcall BuildComPointer(IComInterface** ppUnk) -{ - *ppUnk = new NativeComInterface(); - return S_OK; -} - -DLL_EXPORT void ReleaseComPointer() -{ - capturedComObject->Release(); -} -#endif diff --git a/src/tests/nativeaot/SmokeTests/ComWrappers/rd.xml b/src/tests/nativeaot/SmokeTests/ComWrappers/rd.xml deleted file mode 100644 index 352d58c52e9247..00000000000000 --- a/src/tests/nativeaot/SmokeTests/ComWrappers/rd.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/tests/nativeaot/StartupHook/StartupHook.csproj b/src/tests/nativeaot/StartupHook/StartupHook.csproj index ed6e89a9fc27db..046dce277364a3 100644 --- a/src/tests/nativeaot/StartupHook/StartupHook.csproj +++ b/src/tests/nativeaot/StartupHook/StartupHook.csproj @@ -5,8 +5,8 @@ true true $(NoWarn);IL2026 - true false + true diff --git a/src/tests/nativeaot/nativeaot.csproj b/src/tests/nativeaot/nativeaot.csproj deleted file mode 100644 index 9e307f7a15c0a2..00000000000000 --- a/src/tests/nativeaot/nativeaot.csproj +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/tests/xunit-wrappers.targets b/src/tests/xunit-wrappers.targets index 41ea1cd7d936f8..9be469d94e447f 100644 --- a/src/tests/xunit-wrappers.targets +++ b/src/tests/xunit-wrappers.targets @@ -1,5 +1,6 @@ +