diff --git a/eng/Subsets.props b/eng/Subsets.props
index c66fbd778f175a..5033fa1bb0f124 100644
--- a/eng/Subsets.props
+++ b/eng/Subsets.props
@@ -524,11 +524,12 @@
+ $(SharedNativeRoot)managed\cdac\Microsoft.Diagnostics.DataContractReader.Contracts\Microsoft.Diagnostics.DataContractReader.Contracts.csproj;
+ $(SharedNativeRoot)managed\cdac\tests\TestInfrastructure\Microsoft.Diagnostics.DataContractReader.TestInfrastructure.csproj" Category="tools" Condition="'$(DotNetBuildSourceOnly)' != 'true'" />
-
+
diff --git a/src/native/managed/cdac/README.md b/src/native/managed/cdac/README.md
index e4759d127270bc..94f3e4aa861fd1 100644
--- a/src/native/managed/cdac/README.md
+++ b/src/native/managed/cdac/README.md
@@ -119,7 +119,7 @@ Use the `dotnet.sh` (or `dotnet.cmd`) script in the repo root:
```bash
./dotnet.sh build /t:Test \
- src/native/managed/cdac/tests/Microsoft.Diagnostics.DataContractReader.Tests.csproj \
+ src/native/managed/cdac/tests/UnitTests/Microsoft.Diagnostics.DataContractReader.Tests.csproj \
-c Debug -p:RuntimeConfiguration=Debug -p:LibrariesConfiguration=Release
```
diff --git a/src/native/managed/cdac/cdac.slnx b/src/native/managed/cdac/cdac.slnx
index 2e2020b40a6393..9828e862cc3cb6 100644
--- a/src/native/managed/cdac/cdac.slnx
+++ b/src/native/managed/cdac/cdac.slnx
@@ -13,7 +13,8 @@
-
+
+
diff --git a/src/native/managed/cdac/tests/DumpTests/AsyncContinuationDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/AsyncContinuationDumpTests.cs
index 762fa88293b002..14731f6418bf92 100644
--- a/src/native/managed/cdac/tests/DumpTests/AsyncContinuationDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/AsyncContinuationDumpTests.cs
@@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/CCWDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/CCWDumpTests.cs
index 6e08d149c42639..bfa5069716f41a 100644
--- a/src/native/managed/cdac/tests/DumpTests/CCWDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/CCWDumpTests.cs
@@ -4,6 +4,7 @@
using System.Collections.Generic;
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/CodeHeapListDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/CodeHeapListDumpTests.cs
index 45dac6e66a07ed..5d50e7fc619d96 100644
--- a/src/native/managed/cdac/tests/DumpTests/CodeHeapListDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/CodeHeapListDumpTests.cs
@@ -4,6 +4,7 @@
using System.Collections.Generic;
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/ComWrappersDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/ComWrappersDumpTests.cs
index 51475936a7468d..0e53c68d1f7056 100644
--- a/src/native/managed/cdac/tests/DumpTests/ComWrappersDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/ComWrappersDumpTests.cs
@@ -3,6 +3,7 @@
using System.Collections.Generic;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiAppDomainDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiAppDomainDumpTests.cs
index 3e98dfc0308c49..376c60525c102d 100644
--- a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiAppDomainDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiAppDomainDumpTests.cs
@@ -3,6 +3,7 @@
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiCCWDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiCCWDumpTests.cs
index 82ac243be2518f..af14669cd4e5e3 100644
--- a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiCCWDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiCCWDumpTests.cs
@@ -5,6 +5,7 @@
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Microsoft.DotNet.XUnitExtensions;
using Xunit;
diff --git a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiComWrappersDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiComWrappersDumpTests.cs
index 02e1ade17bfca9..18ca20946ff679 100644
--- a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiComWrappersDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiComWrappersDumpTests.cs
@@ -4,6 +4,7 @@
using System.Collections.Generic;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Microsoft.DotNet.XUnitExtensions;
using Xunit;
diff --git a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiDebuggerDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiDebuggerDumpTests.cs
index c6f43f88fe2f34..380fc93d04ec20 100644
--- a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiDebuggerDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiDebuggerDumpTests.cs
@@ -3,6 +3,7 @@
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiExactTypeHandleDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiExactTypeHandleDumpTests.cs
index a11f6e6ca54563..ee1e39bf5e03eb 100644
--- a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiExactTypeHandleDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiExactTypeHandleDumpTests.cs
@@ -4,6 +4,7 @@
using System;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Microsoft.DotNet.XUnitExtensions;
using Xunit;
diff --git a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiGCDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiGCDumpTests.cs
index 6ce8b3c91f69bc..5665d0c4cd22ef 100644
--- a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiGCDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiGCDumpTests.cs
@@ -3,6 +3,7 @@
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiHeapWalkDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiHeapWalkDumpTests.cs
index 80820c6a2b5113..ae010f8b8f55df 100644
--- a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiHeapWalkDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiHeapWalkDumpTests.cs
@@ -4,6 +4,7 @@
using System.Collections.Generic;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiLoaderDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiLoaderDumpTests.cs
index 2e0be2ffbefd91..5f4313d4d1d8f2 100644
--- a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiLoaderDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiLoaderDumpTests.cs
@@ -4,6 +4,7 @@
using System.Collections.Generic;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiMultiModuleDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiMultiModuleDumpTests.cs
index 3fda2f72d21b0c..6067e6bd60604d 100644
--- a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiMultiModuleDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiMultiModuleDumpTests.cs
@@ -4,6 +4,7 @@
using System.Collections.Generic;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiObjectDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiObjectDumpTests.cs
index 1ca6f2a9ec1154..2234831a29e1e2 100644
--- a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiObjectDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiObjectDumpTests.cs
@@ -2,8 +2,9 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System.Linq;
-using Microsoft.Diagnostics.DataContractReader.Legacy;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Microsoft.DotNet.XUnitExtensions;
using Xunit;
diff --git a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiRCWDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiRCWDumpTests.cs
index c3958e5318f49c..8b553d971d8ca5 100644
--- a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiRCWDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiRCWDumpTests.cs
@@ -3,6 +3,7 @@
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Microsoft.DotNet.XUnitExtensions;
using Xunit;
diff --git a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiStackWalkDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiStackWalkDumpTests.cs
index 5c4da0ac1aada4..bc6661cde0f49e 100644
--- a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiStackWalkDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiStackWalkDumpTests.cs
@@ -5,6 +5,7 @@
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Contracts.StackWalkHelpers;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
@@ -114,8 +115,7 @@ public unsafe void IsLeafFrame_FalseForNonLeafContext(TestConfiguration config)
IStackWalk sw = Target.Contracts.StackWalk;
// Find a frame whose SP+IP differs from the leaf context
- byte[]? nonLeafContext = sw.CreateStackWalk(crashingThread)
- .Where(ClrDataStackWalk.IsLegacyVisible)
+ byte[]? nonLeafContext = DumpTestStackWalker.LegacyVisibleFrames(sw, crashingThread)
.Select(sw.GetRawContext)
.FirstOrDefault(ctx =>
{
diff --git a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiThreadDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiThreadDumpTests.cs
index 0d6fe70b6a29b0..a583ce67a22d8c 100644
--- a/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiThreadDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiThreadDumpTests.cs
@@ -5,6 +5,7 @@
using System.Runtime.InteropServices;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Microsoft.DotNet.XUnitExtensions;
using Xunit;
diff --git a/src/native/managed/cdac/tests/DumpTests/EcmaMetadataDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/EcmaMetadataDumpTests.cs
index 189c697a04d4ad..278c58aeb53da4 100644
--- a/src/native/managed/cdac/tests/DumpTests/EcmaMetadataDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/EcmaMetadataDumpTests.cs
@@ -3,6 +3,7 @@
using System.Reflection.Metadata;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/ExceptionHandlingInfoDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/ExceptionHandlingInfoDumpTests.cs
index a8645b488bbc98..4827b972534b0a 100644
--- a/src/native/managed/cdac/tests/DumpTests/ExceptionHandlingInfoDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/ExceptionHandlingInfoDumpTests.cs
@@ -5,6 +5,7 @@
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
@@ -35,7 +36,7 @@ private CodeBlockHandle FindCrashMethodCodeBlock()
ThreadData crashingThread = DumpTestHelpers.FindFailFastThread(Target);
- foreach (IStackDataFrameHandle frame in stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible))
+ foreach (IStackDataFrameHandle frame in DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread))
{
TargetPointer methodDescPtr = stackWalk.GetMethodDescPtr(frame);
string? name = DumpTestHelpers.GetMethodName(Target, methodDescPtr);
diff --git a/src/native/managed/cdac/tests/DumpTests/ISOSDacInterface13Tests.cs b/src/native/managed/cdac/tests/DumpTests/ISOSDacInterface13Tests.cs
index d4022249f04eb2..997d5d2d73e21f 100644
--- a/src/native/managed/cdac/tests/DumpTests/ISOSDacInterface13Tests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/ISOSDacInterface13Tests.cs
@@ -3,8 +3,9 @@
using System.Runtime.InteropServices;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
-using static Microsoft.Diagnostics.DataContractReader.Tests.TestHelpers;
+using static Microsoft.Diagnostics.DataContractReader.TestInfrastructure.TestHelpers;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/ISOSDacInterfaceTests.cs b/src/native/managed/cdac/tests/DumpTests/ISOSDacInterfaceTests.cs
index 06d09ee6f991e5..832bf838f99f69 100644
--- a/src/native/managed/cdac/tests/DumpTests/ISOSDacInterfaceTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/ISOSDacInterfaceTests.cs
@@ -4,8 +4,9 @@
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
-using static Microsoft.Diagnostics.DataContractReader.Tests.TestHelpers;
+using static Microsoft.Diagnostics.DataContractReader.TestInfrastructure.TestHelpers;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/IXCLRDataAppDomainDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/IXCLRDataAppDomainDumpTests.cs
index 5dce50875d3a5d..5293d210eaaa36 100644
--- a/src/native/managed/cdac/tests/DumpTests/IXCLRDataAppDomainDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/IXCLRDataAppDomainDumpTests.cs
@@ -5,8 +5,9 @@
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
-using static Microsoft.Diagnostics.DataContractReader.Tests.TestHelpers;
+using static Microsoft.Diagnostics.DataContractReader.TestInfrastructure.TestHelpers;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
@@ -194,7 +195,7 @@ private IXCLRDataAppDomain GetAppDomain()
ThreadData crashingThread = DumpTestHelpers.FindFailFastThread(Target);
IStackDataFrameHandle? managedFrame = null;
- foreach (IStackDataFrameHandle dataFrame in stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible))
+ foreach (IStackDataFrameHandle dataFrame in DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread))
{
TargetPointer md = stackWalk.GetMethodDescPtr(dataFrame);
if (md != TargetPointer.Null)
diff --git a/src/native/managed/cdac/tests/DumpTests/IXCLRDataFrameDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/IXCLRDataFrameDumpTests.cs
index e77d6a68e32cd2..96fe2bad676ee1 100644
--- a/src/native/managed/cdac/tests/DumpTests/IXCLRDataFrameDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/IXCLRDataFrameDumpTests.cs
@@ -5,8 +5,9 @@
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
-using static Microsoft.Diagnostics.DataContractReader.Tests.TestHelpers;
+using static Microsoft.Diagnostics.DataContractReader.TestInfrastructure.TestHelpers;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
@@ -185,7 +186,7 @@ public void GetNumArguments_ReturnsCountMatchingMetadata(TestConfiguration confi
IStackWalk stackWalk = Target.Contracts.StackWalk;
ThreadData crashingThread = DumpTestHelpers.FindFailFastThread(Target);
- foreach (IStackDataFrameHandle dataFrame in stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible))
+ foreach (IStackDataFrameHandle dataFrame in DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread))
{
TargetPointer md = stackWalk.GetMethodDescPtr(dataFrame);
if (md == TargetPointer.Null)
@@ -221,7 +222,7 @@ public void GetNumLocalVariables_ReturnsCountForILMethod(TestConfiguration confi
IStackWalk stackWalk = Target.Contracts.StackWalk;
ThreadData crashingThread = DumpTestHelpers.FindFailFastThread(Target);
- foreach (IStackDataFrameHandle dataFrame in stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible))
+ foreach (IStackDataFrameHandle dataFrame in DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread))
{
TargetPointer md = stackWalk.GetMethodDescPtr(dataFrame);
if (md == TargetPointer.Null)
@@ -260,7 +261,7 @@ public void GetMethodInstance_ReturnsNonNullForManagedFrame(TestConfiguration co
IStackWalk stackWalk = Target.Contracts.StackWalk;
ThreadData crashingThread = DumpTestHelpers.FindFailFastThread(Target);
- foreach (IStackDataFrameHandle dataFrame in stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible))
+ foreach (IStackDataFrameHandle dataFrame in DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread))
{
TargetPointer md = stackWalk.GetMethodDescPtr(dataFrame);
if (md == TargetPointer.Null)
@@ -292,7 +293,7 @@ public void GetArgumentByIndex_ReturnsValueForMethodADepthArg(TestConfiguration
IStackWalk stackWalk = Target.Contracts.StackWalk;
ThreadData crashingThread = DumpTestHelpers.FindFailFastThread(Target);
- foreach (IStackDataFrameHandle dataFrame in stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible))
+ foreach (IStackDataFrameHandle dataFrame in DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread))
{
TargetPointer md = stackWalk.GetMethodDescPtr(dataFrame);
if (md == TargetPointer.Null)
@@ -327,7 +328,7 @@ public void GetArgumentByIndex_ReturnsParameterName(TestConfiguration config)
IStackWalk stackWalk = Target.Contracts.StackWalk;
ThreadData crashingThread = DumpTestHelpers.FindFailFastThread(Target);
- foreach (IStackDataFrameHandle dataFrame in stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible))
+ foreach (IStackDataFrameHandle dataFrame in DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread))
{
TargetPointer md = stackWalk.GetMethodDescPtr(dataFrame);
if (md == TargetPointer.Null)
@@ -365,7 +366,7 @@ public void GetArgumentByIndex_InvalidIndex_ReturnsError(TestConfiguration confi
IStackWalk stackWalk = Target.Contracts.StackWalk;
ThreadData crashingThread = DumpTestHelpers.FindFailFastThread(Target);
- foreach (IStackDataFrameHandle dataFrame in stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible))
+ foreach (IStackDataFrameHandle dataFrame in DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread))
{
TargetPointer md = stackWalk.GetMethodDescPtr(dataFrame);
if (md == TargetPointer.Null)
@@ -401,7 +402,7 @@ public void GetLocalVariableByIndex_ReturnsValueForMethodBLocal(TestConfiguratio
IStackWalk stackWalk = Target.Contracts.StackWalk;
ThreadData crashingThread = DumpTestHelpers.FindFailFastThread(Target);
- foreach (IStackDataFrameHandle dataFrame in stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible))
+ foreach (IStackDataFrameHandle dataFrame in DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread))
{
TargetPointer md = stackWalk.GetMethodDescPtr(dataFrame);
if (md == TargetPointer.Null)
@@ -436,7 +437,7 @@ public void GetLocalVariableByIndex_InvalidIndex_ReturnsError(TestConfiguration
IStackWalk stackWalk = Target.Contracts.StackWalk;
ThreadData crashingThread = DumpTestHelpers.FindFailFastThread(Target);
- foreach (IStackDataFrameHandle dataFrame in stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible))
+ foreach (IStackDataFrameHandle dataFrame in DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread))
{
TargetPointer md = stackWalk.GetMethodDescPtr(dataFrame);
if (md == TargetPointer.Null)
@@ -474,7 +475,7 @@ public void GetLocalVariableByIndex_LocalNameIsEmpty(TestConfiguration config)
IStackWalk stackWalk = Target.Contracts.StackWalk;
ThreadData crashingThread = DumpTestHelpers.FindFailFastThread(Target);
- foreach (IStackDataFrameHandle dataFrame in stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible))
+ foreach (IStackDataFrameHandle dataFrame in DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread))
{
TargetPointer md = stackWalk.GetMethodDescPtr(dataFrame);
if (md == TargetPointer.Null)
@@ -509,7 +510,7 @@ private IStackDataFrameHandle GetFirstManagedFrame()
IStackWalk stackWalk = Target.Contracts.StackWalk;
ThreadData crashingThread = DumpTestHelpers.FindFailFastThread(Target);
- foreach (IStackDataFrameHandle dataFrame in stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible))
+ foreach (IStackDataFrameHandle dataFrame in DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread))
{
TargetPointer md = stackWalk.GetMethodDescPtr(dataFrame);
if (md != TargetPointer.Null)
diff --git a/src/native/managed/cdac/tests/DumpTests/IXCLRDataMethodDefinitionDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/IXCLRDataMethodDefinitionDumpTests.cs
index 1d81567b7878e3..d352cb87f19c8a 100644
--- a/src/native/managed/cdac/tests/DumpTests/IXCLRDataMethodDefinitionDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/IXCLRDataMethodDefinitionDumpTests.cs
@@ -7,8 +7,9 @@
using System.Reflection.Metadata.Ecma335;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
-using static Microsoft.Diagnostics.DataContractReader.Tests.TestHelpers;
+using static Microsoft.Diagnostics.DataContractReader.TestInfrastructure.TestHelpers;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
@@ -198,7 +199,7 @@ private IXCLRDataMethodDefinition GetMethodDefinitionFromStack(string methodName
IRuntimeTypeSystem rts = Target.Contracts.RuntimeTypeSystem;
ThreadData crashingThread = DumpTestHelpers.FindFailFastThread(Target);
- foreach (IStackDataFrameHandle frame in stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible))
+ foreach (IStackDataFrameHandle frame in DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread))
{
TargetPointer methodDescPtr = stackWalk.GetMethodDescPtr(frame);
if (methodDescPtr == TargetPointer.Null)
diff --git a/src/native/managed/cdac/tests/DumpTests/IXCLRDataValueDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/IXCLRDataValueDumpTests.cs
index 1b488939198cd3..ae75899ea40618 100644
--- a/src/native/managed/cdac/tests/DumpTests/IXCLRDataValueDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/IXCLRDataValueDumpTests.cs
@@ -6,8 +6,9 @@
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
-using static Microsoft.Diagnostics.DataContractReader.Tests.TestHelpers;
+using static Microsoft.Diagnostics.DataContractReader.TestInfrastructure.TestHelpers;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
@@ -537,7 +538,7 @@ public void GetSize_GetFlags_AllFrames_Succeeds(TestConfiguration config)
ThreadData crashingThread = DumpTestHelpers.FindFailFastThread(Target);
int totalValues = 0;
- foreach (IStackDataFrameHandle dataFrame in stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible))
+ foreach (IStackDataFrameHandle dataFrame in DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread))
{
TargetPointer md = stackWalk.GetMethodDescPtr(dataFrame);
if (md == TargetPointer.Null)
@@ -730,7 +731,7 @@ private static void AssertEach(Dictionary values, Di
IStackWalk stackWalk = Target.Contracts.StackWalk;
ThreadData crashingThread = DumpTestHelpers.FindFailFastThread(Target);
- foreach (IStackDataFrameHandle dataFrame in stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible))
+ foreach (IStackDataFrameHandle dataFrame in DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread))
{
TargetPointer md = stackWalk.GetMethodDescPtr(dataFrame);
if (md == TargetPointer.Null)
diff --git a/src/native/managed/cdac/tests/DumpTests/InterpreterStackDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/InterpreterStackDumpTests.cs
index c2425950d6a7a5..c753e9b3395159 100644
--- a/src/native/managed/cdac/tests/DumpTests/InterpreterStackDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/InterpreterStackDumpTests.cs
@@ -4,6 +4,7 @@
using System;
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Microsoft.DotNet.XUnitExtensions;
using Xunit;
diff --git a/src/native/managed/cdac/tests/DumpTests/LoaderDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/LoaderDumpTests.cs
index 66a73a30c84cdd..41744e00a37422 100644
--- a/src/native/managed/cdac/tests/DumpTests/LoaderDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/LoaderDumpTests.cs
@@ -4,6 +4,7 @@
using System.Collections.Generic;
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/MetaDataImportDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/MetaDataImportDumpTests.cs
index f7092cb537d4e9..e9300fc6771020 100644
--- a/src/native/managed/cdac/tests/DumpTests/MetaDataImportDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/MetaDataImportDumpTests.cs
@@ -7,6 +7,7 @@
using System.Reflection.Metadata.Ecma335;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/Microsoft.Diagnostics.DataContractReader.DumpTests.csproj b/src/native/managed/cdac/tests/DumpTests/Microsoft.Diagnostics.DataContractReader.DumpTests.csproj
index 22568ab7090587..0616c5d67ea2f7 100644
--- a/src/native/managed/cdac/tests/DumpTests/Microsoft.Diagnostics.DataContractReader.DumpTests.csproj
+++ b/src/native/managed/cdac/tests/DumpTests/Microsoft.Diagnostics.DataContractReader.DumpTests.csproj
@@ -25,21 +25,16 @@
-
-
-
-
+
-
-
diff --git a/src/native/managed/cdac/tests/DumpTests/ObjectiveCMarshalDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/ObjectiveCMarshalDumpTests.cs
index d7ece25db165d5..e237b3bb344ebc 100644
--- a/src/native/managed/cdac/tests/DumpTests/ObjectiveCMarshalDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/ObjectiveCMarshalDumpTests.cs
@@ -3,6 +3,7 @@
using System.Collections.Generic;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/RCWCleanupListDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/RCWCleanupListDumpTests.cs
index 6575594de0e329..42af97238df32e 100644
--- a/src/native/managed/cdac/tests/DumpTests/RCWCleanupListDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/RCWCleanupListDumpTests.cs
@@ -4,6 +4,7 @@
using System.Collections.Generic;
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/RCWDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/RCWDumpTests.cs
index c2d2e7a26d9592..d236bdb5a5a8fd 100644
--- a/src/native/managed/cdac/tests/DumpTests/RCWDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/RCWDumpTests.cs
@@ -4,6 +4,7 @@
using System.Collections.Generic;
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/RuntimeInfoDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/RuntimeInfoDumpTests.cs
index 751ffa69c6b256..ece4af019cd6e4 100644
--- a/src/native/managed/cdac/tests/DumpTests/RuntimeInfoDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/RuntimeInfoDumpTests.cs
@@ -3,6 +3,7 @@
using System;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/RuntimeTypeSystemDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/RuntimeTypeSystemDumpTests.cs
index df2d134d322e51..8a180fab497990 100644
--- a/src/native/managed/cdac/tests/DumpTests/RuntimeTypeSystemDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/RuntimeTypeSystemDumpTests.cs
@@ -5,6 +5,7 @@
using System.Linq;
using System.Reflection.Metadata;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/ServerGCDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/ServerGCDumpTests.cs
index fe9d72cf573e83..4c06d02388d5c5 100644
--- a/src/native/managed/cdac/tests/DumpTests/ServerGCDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/ServerGCDumpTests.cs
@@ -5,6 +5,7 @@
using System.Collections.Generic;
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/StackReferenceDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/StackReferenceDumpTests.cs
index fe299495996aa4..53aafcfccadc2a 100644
--- a/src/native/managed/cdac/tests/DumpTests/StackReferenceDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/StackReferenceDumpTests.cs
@@ -3,6 +3,7 @@
using System.Collections.Generic;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/StackWalkDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/StackWalkDumpTests.cs
index 98de0bcc41c79f..e0832f67547037 100644
--- a/src/native/managed/cdac/tests/DumpTests/StackWalkDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/StackWalkDumpTests.cs
@@ -6,8 +6,9 @@
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
-using static Microsoft.Diagnostics.DataContractReader.Tests.TestHelpers;
+using static Microsoft.Diagnostics.DataContractReader.TestInfrastructure.TestHelpers;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
@@ -31,7 +32,7 @@ public void StackWalk_CanWalkCrashingThread(TestConfiguration config)
ThreadData crashingThread = DumpTestHelpers.FindFailFastThread(Target);
- IEnumerable frames = stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible);
+ IEnumerable frames = DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread);
List frameList = frames.ToList();
Assert.True(frameList.Count > 0, "Expected at least one stack frame on the crashing thread");
@@ -47,7 +48,7 @@ public void StackWalk_HasMultipleFrames(TestConfiguration config)
ThreadData crashingThread = DumpTestHelpers.FindFailFastThread(Target);
- IEnumerable frames = stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible);
+ IEnumerable frames = DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread);
List frameList = frames.ToList();
// The debuggee has Main → MethodA → MethodB → MethodC → FailFast,
@@ -68,7 +69,7 @@ public void StackWalk_ManagedFramesHaveValidMethodDescs(TestConfiguration config
ThreadData crashingThread = DumpTestHelpers.FindFailFastThread(Target);
- IEnumerable frames = stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible);
+ IEnumerable frames = DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread);
foreach (IStackDataFrameHandle frame in frames)
{
@@ -92,7 +93,7 @@ public void StackWalk_FramesHaveRawContext(TestConfiguration config)
ThreadData crashingThread = DumpTestHelpers.FindFailFastThread(Target);
- IEnumerable frames = stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible);
+ IEnumerable frames = DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread);
IStackDataFrameHandle? firstFrame = frames.FirstOrDefault();
Assert.NotNull(firstFrame);
@@ -130,7 +131,7 @@ public void PInvokeStub_CanWalkCrashingThread(TestConfiguration config)
IStackWalk stackWalk = Target.Contracts.StackWalk;
ThreadData crashingThread = DumpTestHelpers.FindThreadWithMethod(Target, "Main");
- IEnumerable frames = stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible);
+ IEnumerable frames = DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread);
List frameList = frames.ToList();
Assert.True(frameList.Count > 0, "Expected at least one stack frame on the crashing thread");
@@ -165,7 +166,7 @@ public void VarargPInvoke_CanWalkCrashingThread(TestConfiguration config)
IStackWalk stackWalk = Target.Contracts.StackWalk;
ThreadData crashingThread = DumpTestHelpers.FindThreadWithMethod(Target, "Main");
- IEnumerable frames = stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible);
+ IEnumerable frames = DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread);
List frameList = frames.ToList();
Assert.True(frameList.Count > 0, "Expected at least one stack frame on the crashing thread");
@@ -202,7 +203,7 @@ public void VarargPInvoke_HasILStubFrame(TestConfiguration config)
IRuntimeTypeSystem rts = Target.Contracts.RuntimeTypeSystem;
ThreadData crashingThread = DumpTestHelpers.FindThreadWithMethod(Target, "Main");
- IEnumerable frames = stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible);
+ IEnumerable frames = DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread);
bool foundILStub = false;
foreach (IStackDataFrameHandle frame in frames)
@@ -234,7 +235,7 @@ public unsafe void VarargPInvoke_GetMethodTableDataForILStubFrame(TestConfigurat
ISOSDacInterface sosDac = new SOSDacImpl(Target, legacyObj: null);
ThreadData crashingThread = DumpTestHelpers.FindThreadWithMethod(Target, "Main");
- IEnumerable frames = stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible);
+ IEnumerable frames = DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread);
foreach (IStackDataFrameHandle frame in frames)
{
@@ -268,7 +269,7 @@ public unsafe void VarargPInvoke_GetILAddressMapForILStub_ReturnsFailure(TestCon
IRuntimeTypeSystem rts = Target.Contracts.RuntimeTypeSystem;
ThreadData crashingThread = DumpTestHelpers.FindThreadWithMethod(Target, "Main");
- IEnumerable frames = stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible);
+ IEnumerable frames = DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread);
foreach (IStackDataFrameHandle frame in frames)
{
@@ -304,7 +305,7 @@ public unsafe void VarargPInvoke_GetCodeHeaderDataWithInvalidPrecodeAddress(Test
ISOSDacInterface sosDac = new SOSDacImpl(Target, legacyObj: null);
ThreadData crashingThread = DumpTestHelpers.FindThreadWithMethod(Target, "Main");
- IEnumerable frames = stackWalk.CreateStackWalk(crashingThread).Where(ClrDataStackWalk.IsLegacyVisible);
+ IEnumerable frames = DumpTestStackWalker.LegacyVisibleFrames(stackWalk, crashingThread);
foreach (IStackDataFrameHandle frame in frames)
{
diff --git a/src/native/managed/cdac/tests/DumpTests/SyncBlockDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/SyncBlockDumpTests.cs
index 8ccb7ffb95fb0e..9a872ed1e3f299 100644
--- a/src/native/managed/cdac/tests/DumpTests/SyncBlockDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/SyncBlockDumpTests.cs
@@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/ThreadDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/ThreadDumpTests.cs
index 6d29f6433e3d5a..9a7b74f5d51510 100644
--- a/src/native/managed/cdac/tests/DumpTests/ThreadDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/ThreadDumpTests.cs
@@ -3,6 +3,7 @@
using System.Collections.Generic;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/DumpTests/WorkstationGCDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/WorkstationGCDumpTests.cs
index a6fcad964cd6fb..733263f7001b21 100644
--- a/src/native/managed/cdac/tests/DumpTests/WorkstationGCDumpTests.cs
+++ b/src/native/managed/cdac/tests/DumpTests/WorkstationGCDumpTests.cs
@@ -5,6 +5,7 @@
using System.Collections.Generic;
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
diff --git a/src/native/managed/cdac/tests/Microsoft.Diagnostics.DataContractReader.Tests.csproj b/src/native/managed/cdac/tests/Microsoft.Diagnostics.DataContractReader.Tests.csproj
deleted file mode 100644
index cad068f38a2774..00000000000000
--- a/src/native/managed/cdac/tests/Microsoft.Diagnostics.DataContractReader.Tests.csproj
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
- true
- $(NetCoreAppToolCurrent)
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/native/managed/cdac/tests/DumpTests/ClrMdDumpHost.cs b/src/native/managed/cdac/tests/TestInfrastructure/ClrMdDumpHost.cs
similarity index 98%
rename from src/native/managed/cdac/tests/DumpTests/ClrMdDumpHost.cs
rename to src/native/managed/cdac/tests/TestInfrastructure/ClrMdDumpHost.cs
index ffcef872209bfa..341a4b2a8c8a20 100644
--- a/src/native/managed/cdac/tests/DumpTests/ClrMdDumpHost.cs
+++ b/src/native/managed/cdac/tests/TestInfrastructure/ClrMdDumpHost.cs
@@ -3,17 +3,17 @@
using System;
using System.Collections.Generic;
-using System.Reflection.PortableExecutable;
using System.IO;
+using System.Reflection.PortableExecutable;
using Microsoft.Diagnostics.Runtime;
-namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
+namespace Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
///
/// Wraps a ClrMD DataTarget to provide the memory read callback and symbol lookup
/// needed to create a from a crash dump.
///
-internal sealed class ClrMdDumpHost : IDisposable
+public sealed class ClrMdDumpHost : IDisposable
{
private static readonly string[] s_runtimeModuleNames =
{
diff --git a/src/native/managed/cdac/tests/ContractDescriptor/ContractDescriptorBuilder.cs b/src/native/managed/cdac/tests/TestInfrastructure/ContractDescriptor/ContractDescriptorBuilder.cs
similarity index 89%
rename from src/native/managed/cdac/tests/ContractDescriptor/ContractDescriptorBuilder.cs
rename to src/native/managed/cdac/tests/TestInfrastructure/ContractDescriptor/ContractDescriptorBuilder.cs
index de5129cdabfdaa..411d7203087de4 100644
--- a/src/native/managed/cdac/tests/ContractDescriptor/ContractDescriptorBuilder.cs
+++ b/src/native/managed/cdac/tests/TestInfrastructure/ContractDescriptor/ContractDescriptorBuilder.cs
@@ -3,14 +3,14 @@
using System;
using System.Collections.Generic;
-using System.Diagnostics.CodeAnalysis;
using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Text;
-namespace Microsoft.Diagnostics.DataContractReader.Tests.ContractDescriptor;
+namespace Microsoft.Diagnostics.DataContractReader.TestInfrastructure.ContractDescriptor;
-internal class ContractDescriptorBuilder : MockMemorySpace.Builder
+public class ContractDescriptorBuilder : MockMemorySpace.Builder
{
// These addresses are arbitrary and are used to store the contract descriptor components.
// They should not overlap with any other heap fragment addresses.
@@ -18,7 +18,7 @@ internal class ContractDescriptorBuilder : MockMemorySpace.Builder
private const uint JsonDescriptorAddr = 0xdddddddd;
private const uint ContractPointerDataAddr = 0xeeeeeeee;
- bool _created = false;
+ private bool _created;
public ContractDescriptorBuilder(TargetTestHelpers targetTestHelpers)
: base(targetTestHelpers)
@@ -26,23 +26,27 @@ public ContractDescriptorBuilder(TargetTestHelpers targetTestHelpers)
public class DescriptorBuilder(ContractDescriptorBuilder parent)
{
- private bool _created = false;
+ private bool _created;
private readonly ContractDescriptorBuilder _parent = parent;
- private IReadOnlyCollection _contracts;
- private IDictionary _types;
- private IReadOnlyCollection<(string Name, ulong? Value, uint? IndirectIndex, string? StringValue, string? TypeName)> _globals;
- private IReadOnlyCollection<(string Name, ulong? Value, uint? IndirectIndex, string? StringValue, string? TypeName)> _subDescriptors;
- private IReadOnlyCollection _indirectValues;
+ private IReadOnlyCollection? _contracts;
+ private IDictionary? _types;
+ private IReadOnlyCollection<(string Name, ulong? Value, uint? IndirectIndex, string? StringValue, string? TypeName)>? _globals;
+ private IReadOnlyCollection<(string Name, ulong? Value, uint? IndirectIndex, string? StringValue, string? TypeName)>? _subDescriptors;
+ private IReadOnlyCollection? _indirectValues;
public DescriptorBuilder SetContracts(IReadOnlyCollection contracts)
{
+ if (_contracts is not null)
+ throw new InvalidOperationException("Contracts already set");
_contracts = contracts;
return this;
}
public DescriptorBuilder SetTypes(IDictionary types)
{
+ if (_types is not null)
+ throw new InvalidOperationException("Types already set");
_types = types;
return this;
}
@@ -100,7 +104,7 @@ public ulong CreateSubDescriptor(uint contractDescriptorAddress, uint jsonAddres
if (_created)
throw new InvalidOperationException("Context already created");
- (var json, var pointerData) = CreateDataDescriptor(jsonAddress, pointerDataAddress);
+ (MockMemorySpace.HeapFragment json, MockMemorySpace.HeapFragment pointerData) = CreateDataDescriptor(jsonAddress, pointerDataAddress);
int pointerDataCount = pointerData.Data is null ? 0 : pointerData.Data.Length / _parent.TargetTestHelpers.PointerSize;
MockMemorySpace.HeapFragment descriptor = CreateContractDescriptor(
contractDescriptorAddress,
@@ -111,7 +115,7 @@ public ulong CreateSubDescriptor(uint contractDescriptorAddress, uint jsonAddres
_parent.AddHeapFragment(descriptor);
_parent.AddHeapFragment(json);
- if (pointerData.Data.Length > 0)
+ if (pointerData.Data is not null && pointerData.Data.Length > 0)
_parent.AddHeapFragment(pointerData);
_created = true;
@@ -132,7 +136,7 @@ private MockMemorySpace.HeapFragment CreateContractDescriptor(uint contractDescr
private string MakeContractsJson()
{
- if (_contracts.Count == 0)
+ if (_contracts is null || _contracts.Count == 0)
return string.Empty;
StringBuilder sb = new();
foreach (var c in _contracts)
diff --git a/src/native/managed/cdac/tests/ContractDescriptor/ContractDescriptorHelpers.cs b/src/native/managed/cdac/tests/TestInfrastructure/ContractDescriptor/ContractDescriptorHelpers.cs
similarity index 97%
rename from src/native/managed/cdac/tests/ContractDescriptor/ContractDescriptorHelpers.cs
rename to src/native/managed/cdac/tests/TestInfrastructure/ContractDescriptor/ContractDescriptorHelpers.cs
index f9ba9241d41384..d0e06afec70611 100644
--- a/src/native/managed/cdac/tests/ContractDescriptor/ContractDescriptorHelpers.cs
+++ b/src/native/managed/cdac/tests/TestInfrastructure/ContractDescriptor/ContractDescriptorHelpers.cs
@@ -7,9 +7,9 @@
using System.Linq;
using System.Runtime.InteropServices;
-namespace Microsoft.Diagnostics.DataContractReader.Tests.ContractDescriptor;
+namespace Microsoft.Diagnostics.DataContractReader.TestInfrastructure.ContractDescriptor;
-internal unsafe class ContractDescriptorHelpers
+public static unsafe class ContractDescriptorHelpers
{
public static int Size(bool is64Bit) => is64Bit ? sizeof(ContractDescriptor64) : sizeof(ContractDescriptor32);
diff --git a/src/native/managed/cdac/tests/DumpTests/DumpInfo.cs b/src/native/managed/cdac/tests/TestInfrastructure/DumpInfo.cs
similarity index 97%
rename from src/native/managed/cdac/tests/DumpTests/DumpInfo.cs
rename to src/native/managed/cdac/tests/TestInfrastructure/DumpInfo.cs
index e9d1d702a99607..baf791c5677936 100644
--- a/src/native/managed/cdac/tests/DumpTests/DumpInfo.cs
+++ b/src/native/managed/cdac/tests/TestInfrastructure/DumpInfo.cs
@@ -8,7 +8,7 @@
using System.Text.Json;
using System.Text.Json.Serialization;
-namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
+namespace Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
///
/// Metadata about the environment in which a set of dumps was generated.
@@ -121,6 +121,6 @@ public sealed class DebuggeeEntry
[JsonSerializable(typeof(DumpInfo))]
[JsonSourceGenerationOptions(WriteIndented = true)]
-internal partial class DumpInfoContext : JsonSerializerContext
+public partial class DumpInfoContext : JsonSerializerContext
{
}
diff --git a/src/native/managed/cdac/tests/DumpTests/DumpTestBase.cs b/src/native/managed/cdac/tests/TestInfrastructure/DumpTestBase.cs
similarity index 99%
rename from src/native/managed/cdac/tests/DumpTests/DumpTestBase.cs
rename to src/native/managed/cdac/tests/TestInfrastructure/DumpTestBase.cs
index 4c0aaa34cb508c..e3eaca7b45050e 100644
--- a/src/native/managed/cdac/tests/DumpTests/DumpTestBase.cs
+++ b/src/native/managed/cdac/tests/TestInfrastructure/DumpTestBase.cs
@@ -10,7 +10,7 @@
using Microsoft.DotNet.XUnitExtensions;
using Xunit;
-namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
+namespace Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
///
/// Base class for dump-based cDAC integration tests.
diff --git a/src/native/managed/cdac/tests/DumpTests/DumpTestHelpers.cs b/src/native/managed/cdac/tests/TestInfrastructure/DumpTestHelpers.cs
similarity index 92%
rename from src/native/managed/cdac/tests/DumpTests/DumpTestHelpers.cs
rename to src/native/managed/cdac/tests/TestInfrastructure/DumpTestHelpers.cs
index 3fe9ca223fad7a..8cf7c76bb79514 100644
--- a/src/native/managed/cdac/tests/DumpTests/DumpTestHelpers.cs
+++ b/src/native/managed/cdac/tests/TestInfrastructure/DumpTestHelpers.cs
@@ -5,15 +5,14 @@
using System.Reflection.Metadata;
using System.Reflection.Metadata.Ecma335;
using Microsoft.Diagnostics.DataContractReader.Contracts;
-using Microsoft.Diagnostics.DataContractReader.Legacy;
using Xunit;
-namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
+namespace Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
///
/// Helpers for resolving method names and other metadata from cDAC contracts.
///
-internal static class DumpTestHelpers
+public static class DumpTestHelpers
{
///
/// Resolves the method name for a using the
@@ -73,7 +72,7 @@ public static ThreadData FindThreadWithMethod(ContractDescriptorTarget target, s
{
ThreadData threadData = threadContract.GetThreadData(currentThreadPtr);
- foreach (IStackDataFrameHandle frame in stackWalk.CreateStackWalk(threadData).Where(ClrDataStackWalk.IsLegacyVisible))
+ foreach (IStackDataFrameHandle frame in DumpTestStackWalker.LegacyVisibleFrames(stackWalk, threadData))
{
TargetPointer methodDescPtr = stackWalk.GetMethodDescPtr(frame);
string? name = GetMethodName(target, methodDescPtr);
diff --git a/src/native/managed/cdac/tests/DumpTests/DumpTestStackWalker.cs b/src/native/managed/cdac/tests/TestInfrastructure/DumpTestStackWalker.cs
similarity index 90%
rename from src/native/managed/cdac/tests/DumpTests/DumpTestStackWalker.cs
rename to src/native/managed/cdac/tests/TestInfrastructure/DumpTestStackWalker.cs
index 1a60c97550675b..4c56cb64be09c5 100644
--- a/src/native/managed/cdac/tests/DumpTests/DumpTestStackWalker.cs
+++ b/src/native/managed/cdac/tests/TestInfrastructure/DumpTestStackWalker.cs
@@ -5,10 +5,9 @@
using System.Collections.Generic;
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
-using Microsoft.Diagnostics.DataContractReader.Legacy;
using Xunit;
-namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
+namespace Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
///
/// A single resolved stack frame, carrying the method name, the raw
@@ -23,7 +22,7 @@ namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
/// frame has a non-null frame address, or null for native/managed code frames.
///
/// The underlying stack data frame handle for raw access.
-internal readonly record struct ResolvedFrame(string? Name, TargetPointer MethodDescPtr, string? FrameName, IStackDataFrameHandle FrameHandle);
+public readonly record struct ResolvedFrame(string? Name, TargetPointer MethodDescPtr, string? FrameName, IStackDataFrameHandle FrameHandle);
///
/// Encapsulates a resolved stack walk for a thread, providing a builder-pattern
@@ -70,7 +69,7 @@ namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
///
///
///
-internal sealed class DumpTestStackWalker
+public sealed class DumpTestStackWalker
{
private readonly ContractDescriptorTarget _target;
private readonly List _frames;
@@ -86,6 +85,27 @@ private DumpTestStackWalker(ContractDescriptorTarget target, List
/// The cDAC target the stack was walked from.
public ContractDescriptorTarget Target => _target;
+ ///
+ /// Returns true if is a stack frame that
+ /// the legacy DAC stack walker (ClrDataStackWalk) would surface
+ /// through the IXCLRDataStackWalk COM interface. Use this to
+ /// filter the raw output to match what a debugger
+ /// would see via the legacy DAC.
+ ///
+ public static bool IsLegacyVisible(IStackDataFrameHandle frame)
+ => frame.State is StackWalkState.Frameless
+ or StackWalkState.Frame
+ or StackWalkState.SkippedFrame;
+
+ ///
+ /// Enumerates the frames of 's stack that the
+ /// legacy DAC stack walker would surface — that is, the same frames a
+ /// debugger sees via IXCLRDataStackWalk. Convenience wrapper
+ /// around + .
+ ///
+ public static IEnumerable LegacyVisibleFrames(IStackWalk stackWalk, ThreadData thread)
+ => stackWalk.CreateStackWalk(thread).Where(IsLegacyVisible);
+
///
/// The fully resolved call stack in inner-to-outer order (callee -> caller).
///
@@ -100,7 +120,7 @@ public static DumpTestStackWalker Walk(ContractDescriptorTarget target, ThreadDa
IStackWalk stackWalk = target.Contracts.StackWalk;
List frames = [];
- foreach (IStackDataFrameHandle frame in stackWalk.CreateStackWalk(threadData).Where(ClrDataStackWalk.IsLegacyVisible))
+ foreach (IStackDataFrameHandle frame in stackWalk.CreateStackWalk(threadData).Where(IsLegacyVisible))
{
TargetPointer methodDescPtr = stackWalk.GetMethodDescPtr(frame);
string? name = DumpTestHelpers.GetMethodName(target, methodDescPtr);
diff --git a/src/native/managed/cdac/tests/MockDescriptors/Layout.cs b/src/native/managed/cdac/tests/TestInfrastructure/Layout.cs
similarity index 90%
rename from src/native/managed/cdac/tests/MockDescriptors/Layout.cs
rename to src/native/managed/cdac/tests/TestInfrastructure/Layout.cs
index 2de7e01c5bec28..d4c67475705ab4 100644
--- a/src/native/managed/cdac/tests/MockDescriptors/Layout.cs
+++ b/src/native/managed/cdac/tests/TestInfrastructure/Layout.cs
@@ -4,9 +4,9 @@
using System;
using System.Collections.Generic;
-namespace Microsoft.Diagnostics.DataContractReader.Tests;
+namespace Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
-internal class Layout
+public class Layout
{
public Layout(string name, MockTarget.Architecture architecture, int size, LayoutField[] fields)
{
@@ -28,7 +28,7 @@ public Layout(string name, MockTarget.Architecture architecture, int size, Layou
public LayoutField[] Fields { get; }
- internal LayoutField GetField(string fieldName)
+ public LayoutField GetField(string fieldName)
{
foreach (LayoutField field in Fields)
{
@@ -43,32 +43,35 @@ internal LayoutField GetField(string fieldName)
}
-internal sealed class Layout : Layout
- where TView : TypedView, new()
+public sealed class Layout : Layout
+ where TView : TypedView
{
public Layout(string name, MockTarget.Architecture architecture, int size, LayoutField[] fields)
: base(name, architecture, size, fields)
{
}
+ private static TView CreateView()
+ => (TView)Activator.CreateInstance(typeof(TView), nonPublic: true)!;
+
public TView Create(MockMemorySpace.HeapFragment fragment)
{
- TView view = new();
+ TView view = CreateView();
view.Init(fragment.Data.AsMemory(), fragment.Address, this);
return view;
}
public TView Create(Memory memory, ulong address)
{
- TView view = new();
+ TView view = CreateView();
view.Init(memory, address, this);
return view;
}
}
-internal readonly record struct LayoutField(string Name, int Offset, int Size);
+public readonly record struct LayoutField(string Name, int Offset, int Size);
-internal sealed class LayoutBuilder
+public sealed class LayoutBuilder
{
private readonly string _name;
private readonly MockTarget.Architecture _architecture;
@@ -97,11 +100,11 @@ public Layout Build()
=> new(_name, _architecture, Size, [.. _fields.Values]);
public Layout Build()
- where TView : TypedView, new()
+ where TView : TypedView
=> new(_name, _architecture, Size, [.. _fields.Values]);
}
-internal sealed class SequentialLayoutBuilder
+public sealed class SequentialLayoutBuilder
{
private readonly LayoutBuilder _layoutBuilder;
private readonly MockTarget.Architecture _architecture;
@@ -189,7 +192,7 @@ public Layout Build()
}
public Layout Build()
- where TView : TypedView, new()
+ where TView : TypedView
{
if (_alignFinalSize)
{
diff --git a/src/native/managed/cdac/tests/TestInfrastructure/Microsoft.Diagnostics.DataContractReader.TestInfrastructure.csproj b/src/native/managed/cdac/tests/TestInfrastructure/Microsoft.Diagnostics.DataContractReader.TestInfrastructure.csproj
new file mode 100644
index 00000000000000..69fbd92b07c39d
--- /dev/null
+++ b/src/native/managed/cdac/tests/TestInfrastructure/Microsoft.Diagnostics.DataContractReader.TestInfrastructure.csproj
@@ -0,0 +1,43 @@
+
+
+
+ $(NetCoreAppToolCurrent)
+ Microsoft.Diagnostics.DataContractReader
+ enable
+ true
+
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/native/managed/cdac/tests/MockMemorySpace.BumpAllocator.cs b/src/native/managed/cdac/tests/TestInfrastructure/MockMemorySpace.BumpAllocator.cs
similarity index 93%
rename from src/native/managed/cdac/tests/MockMemorySpace.BumpAllocator.cs
rename to src/native/managed/cdac/tests/TestInfrastructure/MockMemorySpace.BumpAllocator.cs
index 58fb78208bc8b2..de0f45e4305521 100644
--- a/src/native/managed/cdac/tests/MockMemorySpace.BumpAllocator.cs
+++ b/src/native/managed/cdac/tests/TestInfrastructure/MockMemorySpace.BumpAllocator.cs
@@ -9,7 +9,7 @@
using System.Text;
using Xunit;
-namespace Microsoft.Diagnostics.DataContractReader.Tests;
+namespace Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
///
/// Helper for creating a mock memory space for testing.
@@ -18,14 +18,14 @@ namespace Microsoft.Diagnostics.DataContractReader.Tests;
/// Use MockMemorySpace.CreateContext to create a mostly empty context for reading from the target.
/// Use MockMemorySpace.ContextBuilder to create a context with additional MockMemorySpace.HeapFragment data.
///
-internal unsafe static partial class MockMemorySpace
+public static unsafe partial class MockMemorySpace
{
- internal class BumpAllocator
+ public class BumpAllocator
{
private readonly Builder _builder;
private readonly ulong _blockStart;
private readonly ulong _blockEnd; // exclusive
- ulong _current;
+ private ulong _current;
public int MinAlign { get; init; } = 16; // by default align to 16 bytes
public BumpAllocator(Builder builder, ulong blockStart, ulong blockEnd)
diff --git a/src/native/managed/cdac/tests/MockMemorySpace.cs b/src/native/managed/cdac/tests/TestInfrastructure/MockMemorySpace.cs
similarity index 92%
rename from src/native/managed/cdac/tests/MockMemorySpace.cs
rename to src/native/managed/cdac/tests/TestInfrastructure/MockMemorySpace.cs
index 33737627296f0b..b0dbeb4b2553eb 100644
--- a/src/native/managed/cdac/tests/MockMemorySpace.cs
+++ b/src/native/managed/cdac/tests/TestInfrastructure/MockMemorySpace.cs
@@ -9,7 +9,7 @@
using System.Text;
using Xunit;
-namespace Microsoft.Diagnostics.DataContractReader.Tests;
+namespace Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
///
/// Helper for creating a mock memory space for testing.
@@ -17,9 +17,9 @@ namespace Microsoft.Diagnostics.DataContractReader.Tests;
///
/// Use MockMemorySpace.Builder to create a context with MockMemorySpace.HeapFragment data.
///
-internal unsafe static partial class MockMemorySpace
+public static unsafe partial class MockMemorySpace
{
- internal struct HeapFragment
+ public struct HeapFragment
{
public ulong Address;
public byte[] Data;
@@ -29,7 +29,7 @@ internal struct HeapFragment
///
/// Helper to populate a virtual memory space for reading from a target.
///
- internal class Builder
+ public class Builder
{
private readonly List _heapFragments = new();
private readonly List _allocators = new();
@@ -41,9 +41,9 @@ public Builder(TargetTestHelpers targetTestHelpers)
_targetTestHelpers = targetTestHelpers;
}
- internal TargetTestHelpers TargetTestHelpers => _targetTestHelpers;
+ public TargetTestHelpers TargetTestHelpers => _targetTestHelpers;
- internal Span BorrowAddressRange(ulong address, int length)
+ public Span BorrowAddressRange(ulong address, int length)
{
foreach (var fragment in _heapFragments)
{
@@ -53,7 +53,7 @@ internal Span BorrowAddressRange(ulong address, int length)
throw new InvalidOperationException($"No fragment includes addresses from 0x{address:x} with length {length}");
}
- internal Memory BorrowAddressRangeMemory(ulong address, int length)
+ public Memory BorrowAddressRangeMemory(ulong address, int length)
{
foreach (var fragment in _heapFragments)
{
@@ -93,7 +93,7 @@ public Builder AddHeapFragments(IEnumerable fragments)
return this;
}
- internal MemoryContext GetMemoryContext()
+ public MemoryContext GetMemoryContext()
{
MemoryContext context = new MemoryContext
{
@@ -135,11 +135,11 @@ public BumpAllocator CreateAllocator(ulong start, ulong end, int minAlign = 16)
}
// Used by ReadFromTarget to return the appropriate bytes
- internal class MemoryContext
+ public class MemoryContext
{
- public IList HeapFragments { get; init; }
+ public IList HeapFragments { get; init; } = [];
- internal int ReadFromTarget(ulong address, Span buffer)
+ public int ReadFromTarget(ulong address, Span buffer)
{
if (buffer.Length == 0)
return 0;
@@ -185,7 +185,7 @@ internal int ReadFromTarget(ulong address, Span buffer)
return -1;
}
- internal int WriteToTarget(ulong address, Span buffer)
+ public int WriteToTarget(ulong address, Span buffer)
{
if (buffer.Length == 0)
return 0;
diff --git a/src/native/managed/cdac/tests/MockTarget.cs b/src/native/managed/cdac/tests/TestInfrastructure/MockTarget.cs
similarity index 94%
rename from src/native/managed/cdac/tests/MockTarget.cs
rename to src/native/managed/cdac/tests/TestInfrastructure/MockTarget.cs
index 2950929cf8b08b..fb8171ebb6f550 100644
--- a/src/native/managed/cdac/tests/MockTarget.cs
+++ b/src/native/managed/cdac/tests/TestInfrastructure/MockTarget.cs
@@ -3,7 +3,7 @@
using System.Collections.Generic;
-namespace Microsoft.Diagnostics.DataContractReader.Tests;
+namespace Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
public class MockTarget
{
diff --git a/src/native/managed/cdac/tests/DumpTests/SkipOnArchAttribute.cs b/src/native/managed/cdac/tests/TestInfrastructure/SkipOnArchAttribute.cs
similarity index 91%
rename from src/native/managed/cdac/tests/DumpTests/SkipOnArchAttribute.cs
rename to src/native/managed/cdac/tests/TestInfrastructure/SkipOnArchAttribute.cs
index 86a28c2fd27707..dd475d62d781b8 100644
--- a/src/native/managed/cdac/tests/DumpTests/SkipOnArchAttribute.cs
+++ b/src/native/managed/cdac/tests/TestInfrastructure/SkipOnArchAttribute.cs
@@ -3,7 +3,7 @@
using System;
-namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
+namespace Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
///
/// When applied to a test method, causes the test to be skipped when
diff --git a/src/native/managed/cdac/tests/DumpTests/SkipOnOSAttribute.cs b/src/native/managed/cdac/tests/TestInfrastructure/SkipOnOSAttribute.cs
similarity index 96%
rename from src/native/managed/cdac/tests/DumpTests/SkipOnOSAttribute.cs
rename to src/native/managed/cdac/tests/TestInfrastructure/SkipOnOSAttribute.cs
index 2b79468c3688ad..97432dde60e9be 100644
--- a/src/native/managed/cdac/tests/DumpTests/SkipOnOSAttribute.cs
+++ b/src/native/managed/cdac/tests/TestInfrastructure/SkipOnOSAttribute.cs
@@ -3,7 +3,7 @@
using System;
-namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
+namespace Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
///
/// When applied to a test method, controls whether the test runs based on
diff --git a/src/native/managed/cdac/tests/DumpTests/SkipOnVersionAttribute.cs b/src/native/managed/cdac/tests/TestInfrastructure/SkipOnVersionAttribute.cs
similarity index 91%
rename from src/native/managed/cdac/tests/DumpTests/SkipOnVersionAttribute.cs
rename to src/native/managed/cdac/tests/TestInfrastructure/SkipOnVersionAttribute.cs
index f81a74d01ffa96..29824cad899e6b 100644
--- a/src/native/managed/cdac/tests/DumpTests/SkipOnVersionAttribute.cs
+++ b/src/native/managed/cdac/tests/TestInfrastructure/SkipOnVersionAttribute.cs
@@ -3,7 +3,7 @@
using System;
-namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
+namespace Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
///
/// When applied to a test method, causes the test to be skipped for
diff --git a/src/native/managed/cdac/tests/TargetTestHelpers.cs b/src/native/managed/cdac/tests/TestInfrastructure/TargetTestHelpers.cs
similarity index 79%
rename from src/native/managed/cdac/tests/TargetTestHelpers.cs
rename to src/native/managed/cdac/tests/TestInfrastructure/TargetTestHelpers.cs
index 5438d11b412cf8..e4063f9ddea9f2 100644
--- a/src/native/managed/cdac/tests/TargetTestHelpers.cs
+++ b/src/native/managed/cdac/tests/TestInfrastructure/TargetTestHelpers.cs
@@ -4,10 +4,11 @@
using System;
using System.Buffers.Binary;
using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
using System.Text;
-namespace Microsoft.Diagnostics.DataContractReader.Tests;
-internal unsafe class TargetTestHelpers
+namespace Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
+public unsafe class TargetTestHelpers
{
public MockTarget.Architecture Arch { get; init; }
@@ -21,19 +22,20 @@ public TargetTestHelpers(MockTarget.Architecture arch)
#region Mock memory initialization
- internal uint ObjHeaderSize => (uint)(Arch.Is64Bit ? 2 * sizeof(uint) /*alignpad + syncblock*/: sizeof(uint) /* syncblock */);
- internal uint ObjectSize => (uint)PointerSize /* methtab */;
+ public uint ObjHeaderSize => (uint)(Arch.Is64Bit ? 2 * sizeof(uint) /*alignpad + syncblock*/: sizeof(uint) /* syncblock */);
+ public uint ObjectSize => (uint)PointerSize /* methtab */;
- internal uint ObjectBaseSize => ObjHeaderSize + ObjectSize;
+ public uint ObjectBaseSize => ObjHeaderSize + ObjectSize;
- internal uint ArrayBaseSize => Arch.Is64Bit ? ObjectSize + sizeof(uint) /* numComponents */ + sizeof(uint) /* pad*/ : ObjectSize + sizeof(uint) /* numComponents */;
+ public uint ArrayBaseSize => Arch.Is64Bit ? ObjectSize + sizeof(uint) /* numComponents */ + sizeof(uint) /* pad*/ : ObjectSize + sizeof(uint) /* numComponents */;
- internal uint ArrayBaseBaseSize => ObjHeaderSize + ArrayBaseSize;
+ public uint ArrayBaseBaseSize => ObjHeaderSize + ArrayBaseSize;
- internal uint StringBaseSize => ObjectBaseSize + sizeof(uint) /* length */ + sizeof(char) /* nul terminator */;
+ public uint StringBaseSize => ObjectBaseSize + sizeof(uint) /* length */ + sizeof(char) /* nul terminator */;
- internal void Write(Span dest, byte b) => dest[0] = b;
- internal void Write(Span dest, ushort u)
+ [SuppressMessage("Performance", "CA1822:Mark members as static", Justification = "Kept as instance for consistent overload resolution with other Write overloads.")]
+ public void Write(Span dest, byte b) => dest[0] = b;
+ public void Write(Span dest, ushort u)
{
if (Arch.IsLittleEndian)
{
@@ -45,7 +47,7 @@ internal void Write(Span dest, ushort u)
}
}
- internal void Write(Span dest, int i)
+ public void Write(Span dest, int i)
{
if (Arch.IsLittleEndian)
{
@@ -57,7 +59,7 @@ internal void Write(Span dest, int i)
}
}
- internal void Write(Span dest, uint u)
+ public void Write(Span dest, uint u)
{
if (Arch.IsLittleEndian)
{
@@ -69,7 +71,7 @@ internal void Write(Span dest, uint u)
}
}
- internal void Write(Span dest, ulong u)
+ public void Write(Span dest, ulong u)
{
if (Arch.IsLittleEndian)
{
@@ -81,7 +83,7 @@ internal void Write(Span dest, ulong u)
}
}
- internal void WritePointer(Span dest, ulong value)
+ public void WritePointer(Span dest, ulong value)
{
if (Arch.Is64Bit)
{
@@ -107,9 +109,9 @@ internal void WritePointer(Span dest, ulong value)
}
}
- internal void WriteNUInt(Span dest, TargetNUInt targetNUInt) => WritePointer(dest, targetNUInt.Value);
+ public void WriteNUInt(Span dest, TargetNUInt targetNUInt) => WritePointer(dest, targetNUInt.Value);
- internal TargetPointer ReadPointer(ReadOnlySpan src)
+ public TargetPointer ReadPointer(ReadOnlySpan src)
{
if (Arch.Is64Bit)
{
@@ -121,7 +123,7 @@ internal TargetPointer ReadPointer(ReadOnlySpan src)
}
}
- internal void WriteUtf16String(Span dest, string value)
+ public void WriteUtf16String(Span dest, string value)
{
Encoding encoding = Arch.IsLittleEndian ? Encoding.Unicode : Encoding.BigEndianUnicode;
byte[] valueBytes = encoding.GetBytes(value);
@@ -134,7 +136,7 @@ internal void WriteUtf16String(Span dest, string value)
dest[^1] = 0;
}
- internal int SizeOfPrimitive(DataType type)
+ public int SizeOfPrimitive(DataType type)
{
return type switch
{
@@ -169,7 +171,7 @@ public readonly struct LayoutResult
public readonly uint MaxAlign { get; init; }
}
- internal record Field(string Name, DataType Type, uint? Size = null);
+ public record Field(string Name, DataType Type, uint? Size = null);
// Implements a simple layout algorithm that aligns fields to their size
// and aligns the structure to the largest field size.
@@ -186,7 +188,7 @@ public LayoutResult LayoutFields(FieldLayout style, Field[] fields)
private LayoutResult LayoutFieldsWorker(FieldLayout style, Field[] fields, ref int offset, ref int maxAlign)
{
- Dictionary fieldInfos = new ();
+ Dictionary fieldInfos = [];
for (int i = 0; i < fields.Length; i++)
{
var (name, type, sizeMaybe) = fields[i];
@@ -226,7 +228,7 @@ public LayoutResult ExtendLayout(FieldLayout fieldLayout, Field[] fields, Layout
return LayoutFieldsWorker(fieldLayout, fields, ref offset, ref maxAlign);
}
- internal static Target.TypeInfo CreateTypeInfo(Layout layout)
+ public static Target.TypeInfo CreateTypeInfo(Layout layout)
{
Dictionary fields = new(layout.Fields.Length, StringComparer.Ordinal);
foreach (LayoutField field in layout.Fields)
diff --git a/src/native/managed/cdac/tests/DumpTests/TestConfiguration.cs b/src/native/managed/cdac/tests/TestInfrastructure/TestConfiguration.cs
similarity index 96%
rename from src/native/managed/cdac/tests/DumpTests/TestConfiguration.cs
rename to src/native/managed/cdac/tests/TestInfrastructure/TestConfiguration.cs
index f96f0bccb6719f..10a4af91f5dcd4 100644
--- a/src/native/managed/cdac/tests/DumpTests/TestConfiguration.cs
+++ b/src/native/managed/cdac/tests/TestInfrastructure/TestConfiguration.cs
@@ -3,7 +3,7 @@
using Xunit.Abstractions;
-namespace Microsoft.Diagnostics.DataContractReader.DumpTests;
+namespace Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
///
/// Describes which dump to load for a parameterized dump test.
diff --git a/src/native/managed/cdac/tests/TestHelpers.cs b/src/native/managed/cdac/tests/TestInfrastructure/TestHelpers.cs
similarity index 79%
rename from src/native/managed/cdac/tests/TestHelpers.cs
rename to src/native/managed/cdac/tests/TestInfrastructure/TestHelpers.cs
index ffadf6fb55bb95..08a35f1cbece5b 100644
--- a/src/native/managed/cdac/tests/TestHelpers.cs
+++ b/src/native/managed/cdac/tests/TestInfrastructure/TestHelpers.cs
@@ -5,11 +5,11 @@
using System.Reflection;
using Xunit;
-namespace Microsoft.Diagnostics.DataContractReader.Tests;
+namespace Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
-internal static class TestHelpers
+public static class TestHelpers
{
- internal static string FormatHResult(int hr)
+ public static string FormatHResult(int hr)
{
string hex = $"0x{unchecked((uint)hr):X8}";
foreach (Type type in new[] { typeof(HResults), typeof(CorDbgHResults) })
@@ -23,7 +23,7 @@ internal static string FormatHResult(int hr)
return hex;
}
- internal static void AssertHResult(int expected, int actual)
+ public static void AssertHResult(int expected, int actual)
{
Assert.True(expected == actual,
$"Expected: {FormatHResult(expected)}, Actual: {FormatHResult(actual)}");
diff --git a/src/native/managed/cdac/tests/TestPlaceholderTarget.cs b/src/native/managed/cdac/tests/TestInfrastructure/TestPlaceholderTarget.cs
similarity index 94%
rename from src/native/managed/cdac/tests/TestPlaceholderTarget.cs
rename to src/native/managed/cdac/tests/TestInfrastructure/TestPlaceholderTarget.cs
index 53bb3173b2a859..12561ffd8676a7 100644
--- a/src/native/managed/cdac/tests/TestPlaceholderTarget.cs
+++ b/src/native/managed/cdac/tests/TestInfrastructure/TestPlaceholderTarget.cs
@@ -10,12 +10,12 @@
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Moq;
-namespace Microsoft.Diagnostics.DataContractReader.Tests;
+namespace Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
///
/// A mock implementation of Target that has basic implementations of getting types/globals and reading data
///
-internal class TestPlaceholderTarget : Target
+public class TestPlaceholderTarget : Target
{
private ContractRegistry _contractRegistry;
private readonly Target.IDataCache _dataCache;
@@ -23,9 +23,9 @@ internal class TestPlaceholderTarget : Target
private readonly (string Name, ulong Value)[] _globals;
private readonly (string Name, string Value)[] _globalStrings;
- internal delegate int ReadFromTargetDelegate(ulong address, Span buffer);
- internal delegate int WriteToTargetDelegate(ulong address, Span buffer);
- internal delegate TargetPointer AllocateMemoryDelegate(uint size);
+ public delegate int ReadFromTargetDelegate(ulong address, Span buffer);
+ public delegate int WriteToTargetDelegate(ulong address, Span buffer);
+ public delegate TargetPointer AllocateMemoryDelegate(uint size);
private readonly ReadFromTargetDelegate _dataReader;
private readonly WriteToTargetDelegate? _dataWriter;
@@ -33,7 +33,7 @@ internal class TestPlaceholderTarget : Target
private static readonly UTF8Encoding strictUTF8Encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false, throwOnInvalidBytes: true);
private static readonly UTF8Encoding looseUTF8Encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false, throwOnInvalidBytes: false);
- public TestPlaceholderTarget(MockTarget.Architecture arch, ReadFromTargetDelegate reader, Dictionary types = null, (string Name, ulong Value)[] globals = null, (string Name, string Value)[] globalStrings = null, WriteToTargetDelegate? writer = null, AllocateMemoryDelegate? allocateMemory = null)
+ public TestPlaceholderTarget(MockTarget.Architecture arch, ReadFromTargetDelegate reader, Dictionary? types = null, (string Name, ulong Value)[]? globals = null, (string Name, string Value)[]? globalStrings = null, WriteToTargetDelegate? writer = null, AllocateMemoryDelegate? allocateMemory = null)
{
IsLittleEndian = arch.IsLittleEndian;
PointerSize = arch.Is64Bit ? 8 : 4;
@@ -47,7 +47,7 @@ public TestPlaceholderTarget(MockTarget.Architecture arch, ReadFromTargetDelegat
_globalStrings = globalStrings ?? [];
}
- internal void SetContracts(ContractRegistry contracts)
+ public void SetContracts(ContractRegistry contracts)
{
_contractRegistry = contracts;
}
@@ -59,7 +59,7 @@ internal void SetContracts(ContractRegistry contracts)
/// and
/// .
///
- internal TestContractRegistry SetupContractRegistry(Action? registrations = null)
+ public TestContractRegistry SetupContractRegistry(Action? registrations = null)
{
var registry = new TestContractRegistry();
registry.SetTarget(this);
@@ -73,7 +73,7 @@ internal TestContractRegistry SetupContractRegistry(Action? re
/// globals, and contract factories from mock descriptors, then materializes the
/// target and wires contracts in .
///
- internal class Builder
+ public class Builder
{
private readonly MockTarget.Architecture _arch;
private readonly MockMemorySpace.Builder _memBuilder;
@@ -91,7 +91,7 @@ public Builder(MockTarget.Architecture arch)
_memBuilder = new MockMemorySpace.Builder(new TargetTestHelpers(arch));
}
- internal MockMemorySpace.Builder MemoryBuilder => _memBuilder;
+ public MockMemorySpace.Builder MemoryBuilder => _memBuilder;
public Builder AddTypes(Dictionary types)
{
@@ -410,10 +410,10 @@ protected unsafe bool DefaultTryRead(ulong address, out T value) where T : un
return true;
}
- internal unsafe static T ReadFromSpan(ReadOnlySpan bytes, bool isLittleEndian) where T : unmanaged, IBinaryInteger, IMinMaxValue
+ public static unsafe T ReadFromSpan(ReadOnlySpan bytes, bool isLittleEndian) where T : unmanaged, IBinaryInteger, IMinMaxValue
{
if (sizeof(T) != bytes.Length)
- throw new ArgumentException(nameof(bytes));
+ throw new ArgumentException("Span length does not match size of T.", nameof(bytes));
T value;
if (isLittleEndian)
@@ -427,10 +427,10 @@ internal unsafe static T ReadFromSpan(ReadOnlySpan bytes, bool isLittle
return value;
}
- internal unsafe static void WriteToSpan(T value, bool isLittleEndian, Span dest) where T : unmanaged, IBinaryInteger, IMinMaxValue
+ public static unsafe void WriteToSpan(T value, bool isLittleEndian, Span dest) where T : unmanaged, IBinaryInteger, IMinMaxValue
{
if (sizeof(T) != dest.Length)
- throw new ArgumentException(nameof(dest));
+ throw new ArgumentException("Span length does not match size of T.", nameof(dest));
if (isLittleEndian)
{
@@ -599,7 +599,7 @@ public void Clear()
}
}
- internal sealed class TestContractRegistry : ContractRegistry
+ public sealed class TestContractRegistry : ContractRegistry
{
private readonly Dictionary<(Type, string), Func> _creators = new();
private readonly Dictionary _versions = new();
diff --git a/src/native/managed/cdac/tests/MockDescriptors/TypedView.cs b/src/native/managed/cdac/tests/TestInfrastructure/TypedView.cs
similarity index 95%
rename from src/native/managed/cdac/tests/MockDescriptors/TypedView.cs
rename to src/native/managed/cdac/tests/TestInfrastructure/TypedView.cs
index 796b03c6322407..347bbb40ee0d66 100644
--- a/src/native/managed/cdac/tests/MockDescriptors/TypedView.cs
+++ b/src/native/managed/cdac/tests/TestInfrastructure/TypedView.cs
@@ -4,9 +4,9 @@
using System;
using System.Numerics;
-namespace Microsoft.Diagnostics.DataContractReader.Tests;
+namespace Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
-internal abstract class TypedView
+public abstract class TypedView
{
public ulong Address { get; private set; }
@@ -16,7 +16,7 @@ internal abstract class TypedView
protected MockTarget.Architecture Architecture { get; private set; }
- internal void Init(Memory memory, ulong address, Layout layout)
+ public void Init(Memory memory, ulong address, Layout layout)
{
ArgumentNullException.ThrowIfNull(layout);
ArgumentOutOfRangeException.ThrowIfLessThan(memory.Length, layout.Size);
diff --git a/src/native/managed/cdac/tests/AuxiliarySymbolsTests.cs b/src/native/managed/cdac/tests/UnitTests/AuxiliarySymbolsTests.cs
similarity index 98%
rename from src/native/managed/cdac/tests/AuxiliarySymbolsTests.cs
rename to src/native/managed/cdac/tests/UnitTests/AuxiliarySymbolsTests.cs
index 0ea6f2a855bfd2..6642d544efa6bb 100644
--- a/src/native/managed/cdac/tests/AuxiliarySymbolsTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/AuxiliarySymbolsTests.cs
@@ -5,6 +5,7 @@
using System.Collections.Generic;
using System.Text;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Moq;
using Xunit;
diff --git a/src/native/managed/cdac/tests/BuiltInCOMTests.cs b/src/native/managed/cdac/tests/UnitTests/BuiltInCOMTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/BuiltInCOMTests.cs
rename to src/native/managed/cdac/tests/UnitTests/BuiltInCOMTests.cs
index 26ce80038772c4..f5f826f685f854 100644
--- a/src/native/managed/cdac/tests/BuiltInCOMTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/BuiltInCOMTests.cs
@@ -5,6 +5,7 @@
using System.Collections.Generic;
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Moq;
using Xunit;
diff --git a/src/native/managed/cdac/tests/ClrDataExceptionStateTests.cs b/src/native/managed/cdac/tests/UnitTests/ClrDataExceptionStateTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/ClrDataExceptionStateTests.cs
rename to src/native/managed/cdac/tests/UnitTests/ClrDataExceptionStateTests.cs
index beb0d15e04593d..f1eaef77eef9ad 100644
--- a/src/native/managed/cdac/tests/ClrDataExceptionStateTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/ClrDataExceptionStateTests.cs
@@ -2,10 +2,11 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System;
-using Moq;
-using Xunit;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
+using Moq;
+using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/ClrDataTaskTests.cs b/src/native/managed/cdac/tests/UnitTests/ClrDataTaskTests.cs
similarity index 96%
rename from src/native/managed/cdac/tests/ClrDataTaskTests.cs
rename to src/native/managed/cdac/tests/UnitTests/ClrDataTaskTests.cs
index eb8e301172bd79..4366854f278b95 100644
--- a/src/native/managed/cdac/tests/ClrDataTaskTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/ClrDataTaskTests.cs
@@ -3,6 +3,7 @@
using System;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/CodeNotificationsTests.cs b/src/native/managed/cdac/tests/UnitTests/CodeNotificationsTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/CodeNotificationsTests.cs
rename to src/native/managed/cdac/tests/UnitTests/CodeNotificationsTests.cs
index da9fd91ef26046..95e8d08c9272c7 100644
--- a/src/native/managed/cdac/tests/CodeNotificationsTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/CodeNotificationsTests.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/CodeVersionsTests.cs b/src/native/managed/cdac/tests/UnitTests/CodeVersionsTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/CodeVersionsTests.cs
rename to src/native/managed/cdac/tests/UnitTests/CodeVersionsTests.cs
index 7089103cb93a2e..693e279af2817f 100644
--- a/src/native/managed/cdac/tests/CodeVersionsTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/CodeVersionsTests.cs
@@ -6,6 +6,7 @@
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Contracts.Extensions;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Moq;
using Xunit;
diff --git a/src/native/managed/cdac/tests/ContractDescriptor/ParserTests.cs b/src/native/managed/cdac/tests/UnitTests/ContractDescriptor/ParserTests.cs
similarity index 100%
rename from src/native/managed/cdac/tests/ContractDescriptor/ParserTests.cs
rename to src/native/managed/cdac/tests/UnitTests/ContractDescriptor/ParserTests.cs
diff --git a/src/native/managed/cdac/tests/ContractDescriptor/TargetTests.SubDescriptors.cs b/src/native/managed/cdac/tests/UnitTests/ContractDescriptor/TargetTests.SubDescriptors.cs
similarity index 98%
rename from src/native/managed/cdac/tests/ContractDescriptor/TargetTests.SubDescriptors.cs
rename to src/native/managed/cdac/tests/UnitTests/ContractDescriptor/TargetTests.SubDescriptors.cs
index 960569882c104c..d0a2a9ba2abca5 100644
--- a/src/native/managed/cdac/tests/ContractDescriptor/TargetTests.SubDescriptors.cs
+++ b/src/native/managed/cdac/tests/UnitTests/ContractDescriptor/TargetTests.SubDescriptors.cs
@@ -6,6 +6,8 @@
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure.ContractDescriptor;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests.ContractDescriptor;
diff --git a/src/native/managed/cdac/tests/ContractDescriptor/TargetTests.cs b/src/native/managed/cdac/tests/UnitTests/ContractDescriptor/TargetTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/ContractDescriptor/TargetTests.cs
rename to src/native/managed/cdac/tests/UnitTests/ContractDescriptor/TargetTests.cs
index b42b9492aa5386..128928377b7e9f 100644
--- a/src/native/managed/cdac/tests/ContractDescriptor/TargetTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/ContractDescriptor/TargetTests.cs
@@ -6,6 +6,8 @@
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure.ContractDescriptor;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests.ContractDescriptor;
diff --git a/src/native/managed/cdac/tests/DacDbiImplTests.cs b/src/native/managed/cdac/tests/UnitTests/DacDbiImplTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/DacDbiImplTests.cs
rename to src/native/managed/cdac/tests/UnitTests/DacDbiImplTests.cs
index 5cb4e34d3e46cb..ea5a0c6f70a7af 100644
--- a/src/native/managed/cdac/tests/DacDbiImplTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/DacDbiImplTests.cs
@@ -7,6 +7,7 @@
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Contracts.StackWalkHelpers;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Moq;
using Xunit;
diff --git a/src/native/managed/cdac/tests/DacStreamsTests.cs b/src/native/managed/cdac/tests/UnitTests/DacStreamsTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/DacStreamsTests.cs
rename to src/native/managed/cdac/tests/UnitTests/DacStreamsTests.cs
index 99e27517ac5bf6..a8e1e3dddd76f1 100644
--- a/src/native/managed/cdac/tests/DacStreamsTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/DacStreamsTests.cs
@@ -5,6 +5,7 @@
using System.Collections.Generic;
using System.Text;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/DebuggerTests.cs b/src/native/managed/cdac/tests/UnitTests/DebuggerTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/DebuggerTests.cs
rename to src/native/managed/cdac/tests/UnitTests/DebuggerTests.cs
index b50d489787cbaf..bf962fa730e9f6 100644
--- a/src/native/managed/cdac/tests/DebuggerTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/DebuggerTests.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/EnumMethodDefinitionsTests.cs b/src/native/managed/cdac/tests/UnitTests/EnumMethodDefinitionsTests.cs
similarity index 100%
rename from src/native/managed/cdac/tests/EnumMethodDefinitionsTests.cs
rename to src/native/managed/cdac/tests/UnitTests/EnumMethodDefinitionsTests.cs
diff --git a/src/native/managed/cdac/tests/ExceptionTests.cs b/src/native/managed/cdac/tests/UnitTests/ExceptionTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/ExceptionTests.cs
rename to src/native/managed/cdac/tests/UnitTests/ExceptionTests.cs
index a9681cfeeb2acd..3f4e527eb91fee 100644
--- a/src/native/managed/cdac/tests/ExceptionTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/ExceptionTests.cs
@@ -5,6 +5,7 @@
using System.Collections.Generic;
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Moq;
using Xunit;
diff --git a/src/native/managed/cdac/tests/ExecutionManager/ExecutionManagerTests.cs b/src/native/managed/cdac/tests/UnitTests/ExecutionManager/ExecutionManagerTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/ExecutionManager/ExecutionManagerTests.cs
rename to src/native/managed/cdac/tests/UnitTests/ExecutionManager/ExecutionManagerTests.cs
index ed2796c34f66cb..a8666ca5f5a5b9 100644
--- a/src/native/managed/cdac/tests/ExecutionManager/ExecutionManagerTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/ExecutionManager/ExecutionManagerTests.cs
@@ -2,12 +2,12 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System;
-using Xunit;
-
using System.Collections.Generic;
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Moq;
+using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests.ExecutionManager;
diff --git a/src/native/managed/cdac/tests/ExecutionManager/HashMapTests.cs b/src/native/managed/cdac/tests/UnitTests/ExecutionManager/HashMapTests.cs
similarity index 98%
rename from src/native/managed/cdac/tests/ExecutionManager/HashMapTests.cs
rename to src/native/managed/cdac/tests/UnitTests/ExecutionManager/HashMapTests.cs
index 499f74c8411f21..cd83eb1aa11bef 100644
--- a/src/native/managed/cdac/tests/ExecutionManager/HashMapTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/ExecutionManager/HashMapTests.cs
@@ -2,8 +2,9 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System;
-using Microsoft.Diagnostics.DataContractReader.ExecutionManagerHelpers;
using System.Collections.Generic;
+using Microsoft.Diagnostics.DataContractReader.ExecutionManagerHelpers;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests.ExecutionManager;
diff --git a/src/native/managed/cdac/tests/ExecutionManager/HotColdLookupTests.cs b/src/native/managed/cdac/tests/UnitTests/ExecutionManager/HotColdLookupTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/ExecutionManager/HotColdLookupTests.cs
rename to src/native/managed/cdac/tests/UnitTests/ExecutionManager/HotColdLookupTests.cs
index c0d91f58e07f32..1d6135124caf51 100644
--- a/src/native/managed/cdac/tests/ExecutionManager/HotColdLookupTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/ExecutionManager/HotColdLookupTests.cs
@@ -1,11 +1,10 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using Moq;
-using Xunit;
-
using System;
using Microsoft.Diagnostics.DataContractReader.ExecutionManagerHelpers;
+using Moq;
+using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests.ExecutionManager;
diff --git a/src/native/managed/cdac/tests/ExecutionManager/NibbleMapTestBuilder.cs b/src/native/managed/cdac/tests/UnitTests/ExecutionManager/NibbleMapTestBuilder.cs
similarity index 99%
rename from src/native/managed/cdac/tests/ExecutionManager/NibbleMapTestBuilder.cs
rename to src/native/managed/cdac/tests/UnitTests/ExecutionManager/NibbleMapTestBuilder.cs
index cf023167c01896..e1d5625783316e 100644
--- a/src/native/managed/cdac/tests/ExecutionManager/NibbleMapTestBuilder.cs
+++ b/src/native/managed/cdac/tests/UnitTests/ExecutionManager/NibbleMapTestBuilder.cs
@@ -3,6 +3,7 @@
using System;
using Microsoft.Diagnostics.DataContractReader.ExecutionManagerHelpers;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
namespace Microsoft.Diagnostics.DataContractReader.Tests.ExecutionManager;
diff --git a/src/native/managed/cdac/tests/ExecutionManager/NibbleMapTests.cs b/src/native/managed/cdac/tests/UnitTests/ExecutionManager/NibbleMapTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/ExecutionManager/NibbleMapTests.cs
rename to src/native/managed/cdac/tests/UnitTests/ExecutionManager/NibbleMapTests.cs
index c244e57de378bc..4d570045ce7d5f 100644
--- a/src/native/managed/cdac/tests/ExecutionManager/NibbleMapTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/ExecutionManager/NibbleMapTests.cs
@@ -1,9 +1,9 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using Xunit;
-
using Microsoft.Diagnostics.DataContractReader.ExecutionManagerHelpers;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
+using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests.ExecutionManager;
diff --git a/src/native/managed/cdac/tests/ExecutionManager/RangeSectionMapTests.cs b/src/native/managed/cdac/tests/UnitTests/ExecutionManager/RangeSectionMapTests.cs
similarity index 98%
rename from src/native/managed/cdac/tests/ExecutionManager/RangeSectionMapTests.cs
rename to src/native/managed/cdac/tests/UnitTests/ExecutionManager/RangeSectionMapTests.cs
index 4846f9804732f5..ffefc393358dd7 100644
--- a/src/native/managed/cdac/tests/ExecutionManager/RangeSectionMapTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/ExecutionManager/RangeSectionMapTests.cs
@@ -2,9 +2,9 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System;
-using Xunit;
-
using Microsoft.Diagnostics.DataContractReader.ExecutionManagerHelpers;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
+using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests.ExecutionManager;
diff --git a/src/native/managed/cdac/tests/ExecutionManager/RuntimeFunctionTests.cs b/src/native/managed/cdac/tests/UnitTests/ExecutionManager/RuntimeFunctionTests.cs
similarity index 98%
rename from src/native/managed/cdac/tests/ExecutionManager/RuntimeFunctionTests.cs
rename to src/native/managed/cdac/tests/UnitTests/ExecutionManager/RuntimeFunctionTests.cs
index de66532243e05f..dd068e4fe07010 100644
--- a/src/native/managed/cdac/tests/ExecutionManager/RuntimeFunctionTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/ExecutionManager/RuntimeFunctionTests.cs
@@ -1,12 +1,12 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using Xunit;
-
-using Microsoft.Diagnostics.DataContractReader.ExecutionManagerHelpers;
-using System.Collections.Generic;
using System;
+using System.Collections.Generic;
+using Microsoft.Diagnostics.DataContractReader.ExecutionManagerHelpers;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Moq;
+using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests.ExecutionManager;
diff --git a/src/native/managed/cdac/tests/GCMemoryRegionTests.cs b/src/native/managed/cdac/tests/UnitTests/GCMemoryRegionTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/GCMemoryRegionTests.cs
rename to src/native/managed/cdac/tests/UnitTests/GCMemoryRegionTests.cs
index f64c994e47e5bd..2d2086a1300f60 100644
--- a/src/native/managed/cdac/tests/GCMemoryRegionTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/GCMemoryRegionTests.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/GCTests.cs b/src/native/managed/cdac/tests/UnitTests/GCTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/GCTests.cs
rename to src/native/managed/cdac/tests/UnitTests/GCTests.cs
index ff3c3feb8c01ab..d5529d134950f4 100644
--- a/src/native/managed/cdac/tests/GCTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/GCTests.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/GetRegisterNameTests.cs b/src/native/managed/cdac/tests/UnitTests/GetRegisterNameTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/GetRegisterNameTests.cs
rename to src/native/managed/cdac/tests/UnitTests/GetRegisterNameTests.cs
index c8a92b37040f1c..bc99bbc51ebab5 100644
--- a/src/native/managed/cdac/tests/GetRegisterNameTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/GetRegisterNameTests.cs
@@ -5,6 +5,7 @@
using System.Collections.Generic;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/LoaderHeapTests.cs b/src/native/managed/cdac/tests/UnitTests/LoaderHeapTests.cs
similarity index 98%
rename from src/native/managed/cdac/tests/LoaderHeapTests.cs
rename to src/native/managed/cdac/tests/UnitTests/LoaderHeapTests.cs
index 4db75ffd95bce3..baf527820d5aad 100644
--- a/src/native/managed/cdac/tests/LoaderHeapTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/LoaderHeapTests.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/LoaderTests.cs b/src/native/managed/cdac/tests/UnitTests/LoaderTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/LoaderTests.cs
rename to src/native/managed/cdac/tests/UnitTests/LoaderTests.cs
index 60e718b51b751d..8843a4d5161011 100644
--- a/src/native/managed/cdac/tests/LoaderTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/LoaderTests.cs
@@ -8,6 +8,7 @@
using System.Text;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Moq;
using Xunit;
diff --git a/src/native/managed/cdac/tests/MetaDataImportImplTests.cs b/src/native/managed/cdac/tests/UnitTests/MetaDataImportImplTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/MetaDataImportImplTests.cs
rename to src/native/managed/cdac/tests/UnitTests/MetaDataImportImplTests.cs
index 1db47d31236ed6..c951d6b7e4b84e 100644
--- a/src/native/managed/cdac/tests/MetaDataImportImplTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/MetaDataImportImplTests.cs
@@ -9,6 +9,7 @@
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.Marshalling;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/MethodDescTests.cs b/src/native/managed/cdac/tests/UnitTests/MethodDescTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/MethodDescTests.cs
rename to src/native/managed/cdac/tests/UnitTests/MethodDescTests.cs
index 31365e735fbc93..e16b21181b980f 100644
--- a/src/native/managed/cdac/tests/MethodDescTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/MethodDescTests.cs
@@ -7,6 +7,7 @@
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Data;
using Microsoft.Diagnostics.DataContractReader.RuntimeTypeSystemHelpers;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Moq;
using Xunit;
diff --git a/src/native/managed/cdac/tests/MethodTableTests.cs b/src/native/managed/cdac/tests/UnitTests/MethodTableTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/MethodTableTests.cs
rename to src/native/managed/cdac/tests/UnitTests/MethodTableTests.cs
index 308105aa97a852..e0983ba5a08d9d 100644
--- a/src/native/managed/cdac/tests/MethodTableTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/MethodTableTests.cs
@@ -7,8 +7,9 @@
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
using Microsoft.Diagnostics.DataContractReader.RuntimeTypeSystemHelpers;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
-using static Microsoft.Diagnostics.DataContractReader.Tests.TestHelpers;
+using static Microsoft.Diagnostics.DataContractReader.TestInfrastructure.TestHelpers;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/UnitTests/Microsoft.Diagnostics.DataContractReader.Tests.csproj b/src/native/managed/cdac/tests/UnitTests/Microsoft.Diagnostics.DataContractReader.Tests.csproj
new file mode 100644
index 00000000000000..32fe6fa499a95a
--- /dev/null
+++ b/src/native/managed/cdac/tests/UnitTests/Microsoft.Diagnostics.DataContractReader.Tests.csproj
@@ -0,0 +1,19 @@
+
+
+ true
+ $(NetCoreAppToolCurrent)
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/native/managed/cdac/tests/MockDescriptors/MockBuiltInComBuilder.cs b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockBuiltInComBuilder.cs
similarity index 99%
rename from src/native/managed/cdac/tests/MockDescriptors/MockBuiltInComBuilder.cs
rename to src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockBuiltInComBuilder.cs
index 20dc2a679bcf29..2d8454913960b4 100644
--- a/src/native/managed/cdac/tests/MockDescriptors/MockBuiltInComBuilder.cs
+++ b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockBuiltInComBuilder.cs
@@ -2,6 +2,8 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
+
namespace Microsoft.Diagnostics.DataContractReader.Tests;
internal sealed class MockComMethodTable : TypedView
diff --git a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.CodeVersions.cs b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.CodeVersions.cs
similarity index 99%
rename from src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.CodeVersions.cs
rename to src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.CodeVersions.cs
index 5ec6375ed8e990..66b72af7c40e3e 100644
--- a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.CodeVersions.cs
+++ b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.CodeVersions.cs
@@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.ExecutionManager.cs b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.ExecutionManager.cs
similarity index 99%
rename from src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.ExecutionManager.cs
rename to src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.ExecutionManager.cs
index e27fce343d92f6..4e964f04867fd9 100644
--- a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.ExecutionManager.cs
+++ b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.ExecutionManager.cs
@@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Microsoft.Diagnostics.DataContractReader.Tests.ExecutionManager;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Frame.cs b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.Frame.cs
similarity index 99%
rename from src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Frame.cs
rename to src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.Frame.cs
index cc1bb0461778bf..619e8f0628432a 100644
--- a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Frame.cs
+++ b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.Frame.cs
@@ -1,6 +1,7 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
internal class MockFrame : TypedView
diff --git a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.GC.cs b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.GC.cs
similarity index 99%
rename from src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.GC.cs
rename to src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.GC.cs
index b5ece366d68857..61b60fdfdc1185 100644
--- a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.GC.cs
+++ b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.GC.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.HashMap.cs b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.HashMap.cs
similarity index 99%
rename from src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.HashMap.cs
rename to src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.HashMap.cs
index 978ac471026151..5799887e9d1b03 100644
--- a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.HashMap.cs
+++ b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.HashMap.cs
@@ -3,6 +3,7 @@
using System;
using System.Linq;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Loader.cs b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.Loader.cs
similarity index 99%
rename from src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Loader.cs
rename to src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.Loader.cs
index 079a149e1df332..09ad3d25260a58 100644
--- a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Loader.cs
+++ b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.Loader.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using System.Text;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.MethodDescriptors.cs b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.MethodDescriptors.cs
similarity index 99%
rename from src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.MethodDescriptors.cs
rename to src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.MethodDescriptors.cs
index 6a461096d31012..e388a570c63bbe 100644
--- a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.MethodDescriptors.cs
+++ b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.MethodDescriptors.cs
@@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.cs b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.Object.cs
similarity index 99%
rename from src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.cs
rename to src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.Object.cs
index db96e7152ed194..4fef96a60ee26e 100644
--- a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.cs
+++ b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.Object.cs
@@ -8,6 +8,7 @@
using System.Runtime.InteropServices;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.RuntimeTypeSystemHelpers;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.ReJIT.cs b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.ReJIT.cs
similarity index 98%
rename from src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.ReJIT.cs
rename to src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.ReJIT.cs
index 82058359f9e83f..a31806f386e517 100644
--- a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.ReJIT.cs
+++ b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.ReJIT.cs
@@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.RuntimeFunctions.cs b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.RuntimeFunctions.cs
similarity index 98%
rename from src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.RuntimeFunctions.cs
rename to src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.RuntimeFunctions.cs
index a198138a418869..d481dc349ecf70 100644
--- a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.RuntimeFunctions.cs
+++ b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.RuntimeFunctions.cs
@@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
internal sealed class MockRuntimeFunction : TypedView
diff --git a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.RuntimeMutableTypeSystem.cs b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.RuntimeMutableTypeSystem.cs
similarity index 99%
rename from src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.RuntimeMutableTypeSystem.cs
rename to src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.RuntimeMutableTypeSystem.cs
index 2dcb5826349244..992957fdc947c7 100644
--- a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.RuntimeMutableTypeSystem.cs
+++ b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.RuntimeMutableTypeSystem.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.RuntimeTypeSystem.cs b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.RuntimeTypeSystem.cs
similarity index 99%
rename from src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.RuntimeTypeSystem.cs
rename to src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.RuntimeTypeSystem.cs
index d7c1578d147ff8..182f5935b60ed8 100644
--- a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.RuntimeTypeSystem.cs
+++ b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.RuntimeTypeSystem.cs
@@ -3,6 +3,7 @@
using System;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.SyncBlock.cs b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.SyncBlock.cs
similarity index 99%
rename from src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.SyncBlock.cs
rename to src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.SyncBlock.cs
index c62c075bd1cd08..2fd2580b46cfd8 100644
--- a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.SyncBlock.cs
+++ b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.SyncBlock.cs
@@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
internal sealed class MockSyncBlockCache : TypedView
diff --git a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Thread.cs b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.Thread.cs
similarity index 99%
rename from src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Thread.cs
rename to src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.Thread.cs
index c93059e8fb50fe..27cc2db6eaf741 100644
--- a/src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Thread.cs
+++ b/src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.Thread.cs
@@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/NotificationsTests.cs b/src/native/managed/cdac/tests/UnitTests/NotificationsTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/NotificationsTests.cs
rename to src/native/managed/cdac/tests/UnitTests/NotificationsTests.cs
index 056a809706036e..c4adcc2dd706d1 100644
--- a/src/native/managed/cdac/tests/NotificationsTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/NotificationsTests.cs
@@ -3,6 +3,7 @@
using System;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/ObjectTests.cs b/src/native/managed/cdac/tests/UnitTests/ObjectTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/ObjectTests.cs
rename to src/native/managed/cdac/tests/UnitTests/ObjectTests.cs
index c4cb8d9d21eef7..ede2b54cfb8abf 100644
--- a/src/native/managed/cdac/tests/ObjectTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/ObjectTests.cs
@@ -6,6 +6,7 @@
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Moq;
using Xunit;
diff --git a/src/native/managed/cdac/tests/ObjectiveCMarshalTests.cs b/src/native/managed/cdac/tests/UnitTests/ObjectiveCMarshalTests.cs
similarity index 98%
rename from src/native/managed/cdac/tests/ObjectiveCMarshalTests.cs
rename to src/native/managed/cdac/tests/UnitTests/ObjectiveCMarshalTests.cs
index d328f99e6e4adb..d3f242b5410b83 100644
--- a/src/native/managed/cdac/tests/ObjectiveCMarshalTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/ObjectiveCMarshalTests.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/PlatformContextTests.cs b/src/native/managed/cdac/tests/UnitTests/PlatformContextTests.cs
similarity index 100%
rename from src/native/managed/cdac/tests/PlatformContextTests.cs
rename to src/native/managed/cdac/tests/UnitTests/PlatformContextTests.cs
diff --git a/src/native/managed/cdac/tests/PrecodeStubsTests.cs b/src/native/managed/cdac/tests/UnitTests/PrecodeStubsTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/PrecodeStubsTests.cs
rename to src/native/managed/cdac/tests/UnitTests/PrecodeStubsTests.cs
index 4f22833ec8394b..99b27f2c5dcdc4 100644
--- a/src/native/managed/cdac/tests/PrecodeStubsTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/PrecodeStubsTests.cs
@@ -1,14 +1,14 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using Xunit;
-using Moq;
-using Microsoft.DotNet.XUnitExtensions;
-
-using Microsoft.Diagnostics.DataContractReader.Contracts;
-using System.Collections.Generic;
using System;
+using System.Collections.Generic;
using System.Reflection;
+using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
+using Microsoft.DotNet.XUnitExtensions;
+using Moq;
+using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/PrintfStressMessageFormatterTests.cs b/src/native/managed/cdac/tests/UnitTests/PrintfStressMessageFormatterTests.cs
similarity index 100%
rename from src/native/managed/cdac/tests/PrintfStressMessageFormatterTests.cs
rename to src/native/managed/cdac/tests/UnitTests/PrintfStressMessageFormatterTests.cs
diff --git a/src/native/managed/cdac/tests/README.md b/src/native/managed/cdac/tests/UnitTests/README.md
similarity index 100%
rename from src/native/managed/cdac/tests/README.md
rename to src/native/managed/cdac/tests/UnitTests/README.md
diff --git a/src/native/managed/cdac/tests/ReJITTests.cs b/src/native/managed/cdac/tests/UnitTests/ReJITTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/ReJITTests.cs
rename to src/native/managed/cdac/tests/UnitTests/ReJITTests.cs
index 8dd980f84d4500..398474de184b2d 100644
--- a/src/native/managed/cdac/tests/ReJITTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/ReJITTests.cs
@@ -6,6 +6,7 @@
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Contracts.Extensions;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Moq;
using Xunit;
diff --git a/src/native/managed/cdac/tests/RuntimeInfoTests.cs b/src/native/managed/cdac/tests/UnitTests/RuntimeInfoTests.cs
similarity index 98%
rename from src/native/managed/cdac/tests/RuntimeInfoTests.cs
rename to src/native/managed/cdac/tests/UnitTests/RuntimeInfoTests.cs
index a8f6c73a244e41..02e552eefa152b 100644
--- a/src/native/managed/cdac/tests/RuntimeInfoTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/RuntimeInfoTests.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/RuntimeMutableTypeSystemTests.cs b/src/native/managed/cdac/tests/UnitTests/RuntimeMutableTypeSystemTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/RuntimeMutableTypeSystemTests.cs
rename to src/native/managed/cdac/tests/UnitTests/RuntimeMutableTypeSystemTests.cs
index 999beaa6ef90df..8a14361e17d6e5 100644
--- a/src/native/managed/cdac/tests/RuntimeMutableTypeSystemTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/RuntimeMutableTypeSystemTests.cs
@@ -5,6 +5,7 @@
using System.Collections.Generic;
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Moq;
using Xunit;
diff --git a/src/native/managed/cdac/tests/SOSDacInterface5Tests.cs b/src/native/managed/cdac/tests/UnitTests/SOSDacInterface5Tests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/SOSDacInterface5Tests.cs
rename to src/native/managed/cdac/tests/UnitTests/SOSDacInterface5Tests.cs
index 5fd4e20d3ebb39..1da74f6d4d2a19 100644
--- a/src/native/managed/cdac/tests/SOSDacInterface5Tests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/SOSDacInterface5Tests.cs
@@ -4,6 +4,7 @@
using System.Collections.Generic;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Moq;
using Xunit;
diff --git a/src/native/managed/cdac/tests/SOSDacInterface8Tests.cs b/src/native/managed/cdac/tests/UnitTests/SOSDacInterface8Tests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/SOSDacInterface8Tests.cs
rename to src/native/managed/cdac/tests/UnitTests/SOSDacInterface8Tests.cs
index c9df8e9a6d375e..1403e94f78a52b 100644
--- a/src/native/managed/cdac/tests/SOSDacInterface8Tests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/SOSDacInterface8Tests.cs
@@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
using Microsoft.Diagnostics.DataContractReader.Legacy;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/SignatureTests.cs b/src/native/managed/cdac/tests/UnitTests/SignatureTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/SignatureTests.cs
rename to src/native/managed/cdac/tests/UnitTests/SignatureTests.cs
index 622108b494a4c3..6f54a3e86a7030 100644
--- a/src/native/managed/cdac/tests/SignatureTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/SignatureTests.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/StackWalkTests.cs b/src/native/managed/cdac/tests/UnitTests/StackWalkTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/StackWalkTests.cs
rename to src/native/managed/cdac/tests/UnitTests/StackWalkTests.cs
index b8d9382ef88334..c8945685dbac78 100644
--- a/src/native/managed/cdac/tests/StackWalkTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/StackWalkTests.cs
@@ -5,6 +5,7 @@
using System.Collections.Generic;
using System.Linq;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Moq;
using Xunit;
diff --git a/src/native/managed/cdac/tests/SyncBlockTests.cs b/src/native/managed/cdac/tests/UnitTests/SyncBlockTests.cs
similarity index 98%
rename from src/native/managed/cdac/tests/SyncBlockTests.cs
rename to src/native/managed/cdac/tests/UnitTests/SyncBlockTests.cs
index dcd18bc9c93391..155c8d5bf78850 100644
--- a/src/native/managed/cdac/tests/SyncBlockTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/SyncBlockTests.cs
@@ -3,9 +3,9 @@
using System;
using System.Collections.Generic;
-using Xunit;
-
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
+using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/ThreadTests.cs b/src/native/managed/cdac/tests/UnitTests/ThreadTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/ThreadTests.cs
rename to src/native/managed/cdac/tests/UnitTests/ThreadTests.cs
index 921096a8196ec0..7e5ef29a2909e2 100644
--- a/src/native/managed/cdac/tests/ThreadTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/ThreadTests.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using Microsoft.Diagnostics.DataContractReader.Contracts;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests;
diff --git a/src/native/managed/cdac/tests/TypeDescTests.cs b/src/native/managed/cdac/tests/UnitTests/TypeDescTests.cs
similarity index 99%
rename from src/native/managed/cdac/tests/TypeDescTests.cs
rename to src/native/managed/cdac/tests/UnitTests/TypeDescTests.cs
index b10ccc20d3751e..a93d3d9263a34c 100644
--- a/src/native/managed/cdac/tests/TypeDescTests.cs
+++ b/src/native/managed/cdac/tests/UnitTests/TypeDescTests.cs
@@ -6,6 +6,7 @@
using System.Reflection.Metadata;
using Microsoft.Diagnostics.DataContractReader.Contracts;
using Microsoft.Diagnostics.DataContractReader.RuntimeTypeSystemHelpers;
+using Microsoft.Diagnostics.DataContractReader.TestInfrastructure;
using Xunit;
namespace Microsoft.Diagnostics.DataContractReader.Tests;