示例#1
0
        private ClrValue(object?value, ClrValueType valueType, bool isList)
        {
            Value     = value;
            ValueType = valueType;

            IsList = isList;
        }
示例#2
0
        public void Equals_WhenDifferentAddress_ReturnsFalse([Frozen] ClrType type, ClrValueType uno, ClrValueType dos)
        {
            // Act
            var areSame = uno.Equals(dos);

            // Assert
            areSame.Should().BeFalse();
        }
示例#3
0
        public void GetValueTypeField_WhenFieldFound_ReturnsField(ClrValueType target, [Frozen] ClrType structType, ClrValueType someStruct, ClrInstanceField structValueField)
        {
            // Arrange
            structValueField.IsValueType.Returns(true);
            structValueField.Type.Returns(target.Type);
            structValueField.GetAddress(someStruct.Address, Arg.Any <bool>()).Returns(target.Address);

            // Act
            var structRefFieldTarget = someStruct.GetValueTypeField(structValueField.Name);

            // Assert
            structRefFieldTarget.Equals(target).Should().BeTrue();
        }
        public void GetFieldFrom_WhenFieldFound_ReturnsField([Frozen] ClrHeap heap, ClrValueType target, [Frozen] ClrType clrObjectType, ClrObject rawClrObject, ClrInstanceField clrObjValueField)
        {
            clrObjValueField.IsValueType.Returns(true);
            clrObjValueField.Type.Returns(target.Type);

            clrObjValueField
            .GetAddress(rawClrObject.Address)
            .Returns(target.Address);

            // Act
            var structRefFieldTarget = rawClrObject.GetFieldFrom(clrObjValueField.Name);

            // Assert
            structRefFieldTarget.Equals(target).Should().BeTrue();
        }
        public void GetFieldFrom_WhenStructureHasStructureField_ReturnsField(ClrValueType target, [Frozen] ClrType structType, ClrValueType rawStruct, ClrInstanceField structValueField)
        {
            // Arrange
            IAddressableTypedEntity entity = rawStruct;

            structValueField.IsValueType.Returns(true);
            structValueField.Type.Returns(entity.Type);
            structValueField.GetAddress(entity.Address, Arg.Any <bool>()).Returns(target.Address);

            // Act
            var structFromStruct = entity.GetFieldFrom(structValueField.Name);

            // Assert
            structFromStruct.Address.Should().Be(target.Address);
        }
示例#6
0
        private static bool HasSimpleValue(ClrArray items, int index, ClrValueType item, out string content)
        {
            content = null;
            var typeName = item.Type.Name;

            switch (typeName)
            {
            case "System.Char":
                content = $"'{items.GetValue<System.Char>(index)}'";
                break;

            case "System.Boolean":
                content = items.GetValue <System.Boolean>(index).ToString();
                break;

            case "System.SByte":
                content = items.GetValue <System.SByte>(index).ToString();
                break;

            case "System.Byte":
                content = items.GetValue <System.Byte>(index).ToString();
                break;

            case "System.Int16":
                content = items.GetValue <System.Int16>(index).ToString();
                break;

            case "System.UInt16":
                content = items.GetValue <System.UInt16>(index).ToString();
                break;

            case "System.Int32":
                content = items.GetValue <System.Int32>(index).ToString();
                break;

            case "System.UInt32":
                content = items.GetValue <System.UInt32>(index).ToString();
                break;

            case "System.Int64":
                content = items.GetValue <System.Int64>(index).ToString();
                break;

            case "System.UInt64":
                content = items.GetValue <System.UInt64>(index).ToString();
                break;

            case "System.Single":
                content = items.GetValue <System.Single>(index).ToString();
                break;

            case "System.Double":
                content = items.GetValue <System.Double>(index).ToString();
                break;

            case "System.IntPtr":
            {
                var val = items.GetValue <System.IntPtr>(index);
                content = (val == IntPtr.Zero) ? "null" : $"0x{val.ToInt64():x16}";
            }
            break;

            case "System.UIntPtr":
            {
                var val = items.GetValue <System.UIntPtr>(index);
                content = (val == UIntPtr.Zero) ? "null" : $"0x{val.ToUInt64():x16}";
            }
            break;

            default:
                return(false);
            }

            return(true);
        }
示例#7
0
        public void Equals_WhenSameAddressAndTypes_ReturnsTrue([Frozen] ulong address, [Frozen] ClrType type, ClrValueType uno, ClrValueType dos)
        {
            // Act
            var areSame = uno.Equals(dos);

            // Assert
            areSame.Should().BeTrue();
        }
示例#8
0
        private static bool HasFieldSimpleValue(ClrValueType item, ClrType type, string fieldName, out string content)
        {
            content = null;
            var typeName = type.Name;

            switch (typeName)
            {
            case "System.Char":
                content = $"'{item.ReadField<System.Char>(fieldName)}'";
                break;

            case "System.Boolean":
                content = item.ReadField <System.Boolean>(fieldName).ToString();
                break;

            case "System.SByte":
                content = item.ReadField <System.SByte>(fieldName).ToString();
                break;

            case "System.Byte":
                content = item.ReadField <System.Byte>(fieldName).ToString();
                break;

            case "System.Int16":
                content = item.ReadField <System.Int16>(fieldName).ToString();
                break;

            case "System.UInt16":
                content = item.ReadField <System.UInt16>(fieldName).ToString();
                break;

            case "System.Int32":
                content = item.ReadField <System.Int32>(fieldName).ToString();
                break;

            case "System.UInt32":
                content = item.ReadField <System.UInt32>(fieldName).ToString();
                break;

            case "System.Int64":
                content = item.ReadField <System.Int64>(fieldName).ToString();
                break;

            case "System.UInt64":
                content = item.ReadField <System.UInt64>(fieldName).ToString();
                break;

            case "System.Single":
                content = item.ReadField <System.Single>(fieldName).ToString();
                break;

            case "System.Double":
                content = item.ReadField <System.Double>(fieldName).ToString();
                break;

            case "System.IntPtr":
            {
                var val = item.ReadField <System.IntPtr>(fieldName);
                content = (val == IntPtr.Zero) ? "null" : $"0x{val.ToInt64():x}";
            }
            break;

            case "System.UIntPtr":
            {
                var val = item.ReadField <System.UIntPtr>(fieldName);
                content = (val == UIntPtr.Zero) ? "null" : $"0x{val.ToUInt64():x}";
            }
            break;

            default:
                return(false);
            }

            return(true);
        }
示例#9
0
 public ValueTaskProxy(RuntimeContext context, ClrValueType targetObject)
     : base(context, targetObject)
 {
 }
示例#10
0
 protected ValueTypeProxyBase(RuntimeContext context, ClrValueType targetObject)
 {
     Context      = context ?? throw new ArgumentNullException(nameof(context));
     TargetObject = targetObject;
 }