Skip to content

Commit a3d984f

Browse files
committed
fix RuntimeTypeSystem unit tests
mock the additional data and globals
1 parent ec5424c commit a3d984f

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

src/native/managed/cdacreader/tests/MethodTableTests.cs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public unsafe class MethodTableTests
3333
{ nameof (Data.EEClass.MethodTable), new () { Offset = 8, Type = DataType.pointer}},
3434
{ nameof (Data.EEClass.CorTypeAttr), new () { Offset = 16, Type = DataType.uint32}},
3535
{ nameof (Data.EEClass.NumMethods), new () { Offset = 20, Type = DataType.uint16}},
36+
{ nameof (Data.EEClass.NumNonVirtualSlots), new () { Offset = 22, Type = DataType.uint16}},
3637
}
3738
};
3839

@@ -46,6 +47,7 @@ private static readonly (DataType Type, Target.TypeInfo Info)[] RTSTypes =
4647
private static readonly (string Name, ulong Value, string? Type)[] RTSGlobals =
4748
[
4849
(nameof(Constants.Globals.FreeObjectMethodTable), TestFreeObjectMethodTableGlobalAddress, null),
50+
(nameof(Constants.Globals.MethodDescAlignment), 8, nameof(DataType.uint64)),
4951
];
5052

5153
private static MockMemorySpace.Builder AddFreeObjectMethodTable(TargetTestHelpers targetTestHelpers, MockMemorySpace.Builder builder)
@@ -58,13 +60,14 @@ private static MockMemorySpace.Builder AddFreeObjectMethodTable(TargetTestHelper
5860
]);
5961
}
6062

61-
private static MockMemorySpace.Builder AddEEClass(TargetTestHelpers targetTestHelpers, MockMemorySpace.Builder builder, TargetPointer eeClassPtr, string name, TargetPointer canonMTPtr, uint attr, ushort numMethods)
63+
private static MockMemorySpace.Builder AddEEClass(TargetTestHelpers targetTestHelpers, MockMemorySpace.Builder builder, TargetPointer eeClassPtr, string name, TargetPointer canonMTPtr, uint attr, ushort numMethods, ushort numNonVirtualSlots)
6264
{
6365
MockMemorySpace.HeapFragment eeClassFragment = new() { Name = $"EEClass '{name}'", Address = eeClassPtr, Data = new byte[targetTestHelpers.SizeOfTypeInfo(EEClassTypeInfo)] };
6466
Span<byte> dest = eeClassFragment.Data;
6567
targetTestHelpers.WritePointer(dest.Slice(EEClassTypeInfo.Fields[nameof(Data.EEClass.MethodTable)].Offset), canonMTPtr);
6668
targetTestHelpers.Write(dest.Slice(EEClassTypeInfo.Fields[nameof(Data.EEClass.CorTypeAttr)].Offset), attr);
6769
targetTestHelpers.Write(dest.Slice(EEClassTypeInfo.Fields[nameof(Data.EEClass.NumMethods)].Offset), numMethods);
70+
targetTestHelpers.Write(dest.Slice(EEClassTypeInfo.Fields[nameof(Data.EEClass.NumNonVirtualSlots)].Offset), numNonVirtualSlots);
6871
return builder.AddHeapFragment(eeClassFragment);
6972

7073
}
@@ -161,7 +164,7 @@ private static MockMemorySpace.Builder AddSystemObject(TargetTestHelpers targetT
161164
System.Reflection.TypeAttributes typeAttributes = System.Reflection.TypeAttributes.Public | System.Reflection.TypeAttributes.Class;
162165
const int numMethods = 8; // System.Object has 8 methods
163166
const int numVirtuals = 3; // System.Object has 3 virtual methods
164-
builder = AddEEClass(targetTestHelpers, builder, systemObjectEEClassPtr, "System.Object", systemObjectMethodTablePtr, attr: (uint)typeAttributes, numMethods: numMethods);
167+
builder = AddEEClass(targetTestHelpers, builder, systemObjectEEClassPtr, "System.Object", systemObjectMethodTablePtr, attr: (uint)typeAttributes, numMethods: numMethods, numNonVirtualSlots: 0);
165168
builder = AddMethodTable(targetTestHelpers, builder, systemObjectMethodTablePtr, "System.Object", systemObjectEEClassPtr,
166169
mtflags: default, mtflags2: default, baseSize: targetTestHelpers.ObjectBaseSize,
167170
module: TargetPointer.Null, parentMethodTable: TargetPointer.Null, numInterfaces: 0, numVirtuals: numVirtuals);
@@ -216,7 +219,7 @@ public void ValidateSystemStringMethodTable(MockTarget.Architecture arch)
216219
const int numInterfaces = 8; // Arbitrary
217220
const int numVirtuals = 3; // at least as many as System.Object
218221
uint mtflags = (uint)RuntimeTypeSystem_1.WFLAGS_HIGH.HasComponentSize | /*componentSize: */2;
219-
builder = AddEEClass(targetTestHelpers, builder, systemStringEEClassPtr, "System.String", systemStringMethodTablePtr, attr: (uint)typeAttributes, numMethods: numMethods);
222+
builder = AddEEClass(targetTestHelpers, builder, systemStringEEClassPtr, "System.String", systemStringMethodTablePtr, attr: (uint)typeAttributes, numMethods: numMethods, numNonVirtualSlots: 0);
220223
builder = AddMethodTable(targetTestHelpers, builder, systemStringMethodTablePtr, "System.String", systemStringEEClassPtr,
221224
mtflags: mtflags, mtflags2: default, baseSize: targetTestHelpers.StringBaseSize,
222225
module: TargetPointer.Null, parentMethodTable: systemObjectMethodTablePtr, numInterfaces: numInterfaces, numVirtuals: numVirtuals);
@@ -291,7 +294,7 @@ public void ValidateGenericInstMethodTable(MockTarget.Architecture arch)
291294
const int numInterfaces = 0;
292295
const int numVirtuals = 3;
293296
const uint gtd_mtflags = 0x00000030; // TODO: GenericsMask_TypicalInst
294-
builder = AddEEClass(targetTestHelpers, builder, genericDefinitionEEClassPtr, "EEClass GenericDefinition", genericDefinitionMethodTablePtr, attr: (uint)typeAttributes, numMethods: numMethods);
297+
builder = AddEEClass(targetTestHelpers, builder, genericDefinitionEEClassPtr, "EEClass GenericDefinition", genericDefinitionMethodTablePtr, attr: (uint)typeAttributes, numMethods: numMethods, numNonVirtualSlots: 0);
295298
builder = AddMethodTable(targetTestHelpers, builder, genericDefinitionMethodTablePtr, "MethodTable GenericDefinition", genericDefinitionEEClassPtr,
296299
mtflags: gtd_mtflags, mtflags2: default, baseSize: targetTestHelpers.ObjectBaseSize,
297300
module: TargetPointer.Null, parentMethodTable: systemObjectMethodTablePtr, numInterfaces: numInterfaces, numVirtuals: numVirtuals);
@@ -346,15 +349,15 @@ public void ValidateArrayInstMethodTable(MockTarget.Architecture arch)
346349
const ushort systemArrayNumMethods = 37; // Arbitrary. Not trying to exactly match the real System.Array
347350
const uint systemArrayCorTypeAttr = (uint)(System.Reflection.TypeAttributes.Public | System.Reflection.TypeAttributes.Class);
348351

349-
builder = AddEEClass(targetTestHelpers, builder, systemArrayEEClassPtr, "EEClass System.Array", systemArrayMethodTablePtr, attr: systemArrayCorTypeAttr, numMethods: systemArrayNumMethods);
352+
builder = AddEEClass(targetTestHelpers, builder, systemArrayEEClassPtr, "EEClass System.Array", systemArrayMethodTablePtr, attr: systemArrayCorTypeAttr, numMethods: systemArrayNumMethods, numNonVirtualSlots: 0);
350353
builder = AddMethodTable(targetTestHelpers, builder, systemArrayMethodTablePtr, "MethodTable System.Array", systemArrayEEClassPtr,
351354
mtflags: default, mtflags2: default, baseSize: targetTestHelpers.ObjectBaseSize,
352355
module: TargetPointer.Null, parentMethodTable: systemObjectMethodTablePtr, numInterfaces: systemArrayNumInterfaces, numVirtuals: 3);
353356

354357
const uint arrayInst_mtflags = (uint)(RuntimeTypeSystem_1.WFLAGS_HIGH.HasComponentSize | RuntimeTypeSystem_1.WFLAGS_HIGH.Category_Array) | arrayInstanceComponentSize;
355358
const uint arrayInstCorTypeAttr = (uint)(System.Reflection.TypeAttributes.Public | System.Reflection.TypeAttributes.Class | System.Reflection.TypeAttributes.Sealed);
356359

357-
builder = AddEEClass(targetTestHelpers, builder, arrayInstanceEEClassPtr, "EEClass ArrayInstance", arrayInstanceMethodTablePtr, attr: arrayInstCorTypeAttr, numMethods: systemArrayNumMethods);
360+
builder = AddEEClass(targetTestHelpers, builder, arrayInstanceEEClassPtr, "EEClass ArrayInstance", arrayInstanceMethodTablePtr, attr: arrayInstCorTypeAttr, numMethods: systemArrayNumMethods, numNonVirtualSlots: 0);
358361
builder = AddMethodTable(targetTestHelpers, builder, arrayInstanceMethodTablePtr, "MethodTable ArrayInstance", arrayInstanceEEClassPtr,
359362
mtflags: arrayInst_mtflags, mtflags2: default, baseSize: targetTestHelpers.ObjectBaseSize,
360363
module: TargetPointer.Null, parentMethodTable: systemArrayMethodTablePtr, numInterfaces: systemArrayNumInterfaces, numVirtuals: 3);

0 commit comments

Comments
 (0)