Esempio n. 1
0
        private void GuessFakeMethodAccessor(IType declaringType, string name, MethodSignature <IType> signature, FakeMethod m, List <IParameter> parameters)
        {
            if (signature.GenericParameterCount > 0)
            {
                return;
            }

            var guessedGetter = name.StartsWith("get_", StringComparison.Ordinal);
            var guessedSetter = name.StartsWith("set_", StringComparison.Ordinal);

            if (guessedGetter || guessedSetter)
            {
                var propertyName = name.Substring(4);

                var fakeProperty = new FakeProperty(Compilation)
                {
                    Name          = propertyName,
                    DeclaringType = declaringType,
                    IsStatic      = m.IsStatic,
                };

                if (guessedGetter)
                {
                    if (signature.ReturnType.Kind == TypeKind.Void)
                    {
                        return;
                    }

                    m.AccessorKind          = MethodSemanticsAttributes.Getter;
                    m.AccessorOwner         = fakeProperty;
                    fakeProperty.Getter     = m;
                    fakeProperty.ReturnType = signature.ReturnType;
                    fakeProperty.IsIndexer  = parameters.Count > 0;
                    fakeProperty.Parameters = parameters;
                    return;
                }

                if (guessedSetter)
                {
                    if (parameters.Count < 1 || signature.ReturnType.Kind != TypeKind.Void)
                    {
                        return;
                    }

                    m.AccessorKind          = MethodSemanticsAttributes.Setter;
                    m.AccessorOwner         = fakeProperty;
                    fakeProperty.Getter     = m;
                    fakeProperty.ReturnType = parameters.Last().Type;
                    fakeProperty.IsIndexer  = parameters.Count > 1;
                    fakeProperty.Parameters = parameters.SkipLast(1).ToArray();
                    return;
                }
            }

            const string addPrefix     = "add_";
            const string removePrefix  = "remove_";
            const string raisePrefix   = "raise_";
            var          guessedAdd    = name.StartsWith(addPrefix, StringComparison.Ordinal);
            var          guessedRemove = name.StartsWith(removePrefix, StringComparison.Ordinal);
            var          guessedRaise  = name.StartsWith(raisePrefix, StringComparison.Ordinal);

            if (guessedAdd || guessedRemove || guessedRaise)
            {
                var fakeEvent = new FakeEvent(Compilation)
                {
                    DeclaringType = declaringType,
                    IsStatic      = m.IsStatic,
                };

                if (guessedAdd)
                {
                    if (parameters.Count != 1)
                    {
                        return;
                    }

                    m.AccessorKind  = MethodSemanticsAttributes.Adder;
                    m.AccessorOwner = fakeEvent;

                    fakeEvent.Name        = name.Substring(addPrefix.Length);
                    fakeEvent.AddAccessor = m;
                    fakeEvent.ReturnType  = parameters.Single().Type;

                    return;
                }

                if (guessedRemove)
                {
                    if (parameters.Count != 1)
                    {
                        return;
                    }

                    m.AccessorKind  = MethodSemanticsAttributes.Remover;
                    m.AccessorOwner = fakeEvent;

                    fakeEvent.Name           = name.Substring(removePrefix.Length);
                    fakeEvent.RemoveAccessor = m;
                    fakeEvent.ReturnType     = parameters.Single().Type;

                    return;
                }

                if (guessedRaise)
                {
                    fakeEvent.Name           = name.Substring(raisePrefix.Length);
                    fakeEvent.InvokeAccessor = m;
                    m.AccessorKind           = MethodSemanticsAttributes.Raiser;
                    m.AccessorOwner          = fakeEvent;
                    return;
                }
            }
        }
Esempio n. 2
0
        public void Property_is_returned_if_it_implements_IClrPropertySetter()
        {
            var property = new FakeProperty();

            Assert.Same(property, new ClrPropertySetterFactory().Create(property));
        }
        private static CommonProperty CreateCommonProperty(Mock <CommonType> commonType, FakeProperty fakeProperty)
        {
            if (fakeProperty == null)
            {
                return(null);
            }

            var propertyName     = fakeProperty.Name;
            var propertyFullName = CreateFullName(propertyName);

            if (fakeProperty.GetMethod != null)
            {
                fakeProperty.GetMethod.Name = $"get_{propertyName}";
            }
            if (fakeProperty.SetMethod != null)
            {
                fakeProperty.SetMethod.Name = $"set_{propertyName}";
            }

            var commonAttributes  = CreateCommonAttributes(fakeProperty.Attributes);
            var propertyGetMethod = CreateCommonMethod(commonType, fakeProperty.GetMethod);
            var propertySetMethod = CreateCommonMethod(commonType, fakeProperty.SetMethod);

            var monoCecilProperty = new Mock <MonoCecilProperty>(null);

            monoCecilProperty.Setup(property => property.Name).Returns(() => propertyName);
            monoCecilProperty.Setup(property => property.FullName).Returns(() => propertyFullName);
            monoCecilProperty.Setup(property => property.GetMethod).Returns(() => propertyGetMethod?.MonoCecilMethod);
            monoCecilProperty.Setup(property => property.SetMethod).Returns(() => propertySetMethod?.MonoCecilMethod);
            monoCecilProperty.Setup(property => property.PropertyType).Returns(() => CreateMonoCecilTypeReference(fakeProperty.PropertyType));
            monoCecilProperty.Setup(property => property.Attributes).Returns(() => commonAttributes.Select(attribute => attribute.MonoCecilAttribute));

            var reflectionProperty = new Mock <ReflectionProperty>(null);

            reflectionProperty.Setup(property => property.Name).Returns(() => propertyName);
            reflectionProperty.Setup(property => property.FullName).Returns(() => propertyFullName);
            reflectionProperty.Setup(property => property.GetMethod).Returns(() => propertyGetMethod?.ReflectionMethod);
            reflectionProperty.Setup(property => property.SetMethod).Returns(() => propertySetMethod?.ReflectionMethod);
            reflectionProperty.Setup(property => property.PropertyType).Returns(() => CreateReflectionType(fakeProperty.PropertyType));
            reflectionProperty.Setup(property => property.Attributes).Returns(() => commonAttributes.Select(attribute => attribute.ReflectionAttribute));

            return(new Mock <CommonProperty>(commonAttributes, monoCecilProperty.Object, reflectionProperty.Object).Object);
        }
 public FakeCommonTypeBuilder AddProperty(FakeProperty property)
 {
     properties.Add(property);
     return(this);
 }
Esempio n. 5
0
        public void PlayerShouldPayOffMortgageReturnsFalseWhenPropertyIsNotOwned()
        {
            var property = new FakeProperty();

            Assert.IsFalse(mortgageAdvisor.PlayerShouldPayOffMortgage(horse, property));
        }
Esempio n. 6
0
        public void PlayerShouldMortgagePropertyReturnsFalseWhenPropertyIsAlreadyMortgaged()
        {
            var property = new FakeProperty(owner: horse, isMortgaged: true);

            Assert.IsFalse(mortgageAdvisor.PlayerShouldMortgageProperty(horse, property));
        }
Esempio n. 7
0
        public void PlayerCannotPayOffMortgageForPropertyThatIsNotMortgaged()
        {
            var property = new FakeProperty(owner: horse);

            Assert.IsFalse(mortgageBroker.PayOffMortgage(horse, property));
        }
Esempio n. 8
0
        public void PlayerCannotMortgagePropertyThatIsAlreadyMortgaged()
        {
            var property = new FakeProperty(owner: horse, isMortgaged: true);

            Assert.IsFalse(mortgageBroker.TakeOutMortgage(horse, property));
        }
Esempio n. 9
0
        public void PlayerCannotMortgagePropertyThatIsNotOwned()
        {
            var property = new FakeProperty();

            Assert.IsFalse(mortgageBroker.TakeOutMortgage(horse, property));
        }