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; } } }
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); }
public void PlayerShouldPayOffMortgageReturnsFalseWhenPropertyIsNotOwned() { var property = new FakeProperty(); Assert.IsFalse(mortgageAdvisor.PlayerShouldPayOffMortgage(horse, property)); }
public void PlayerShouldMortgagePropertyReturnsFalseWhenPropertyIsAlreadyMortgaged() { var property = new FakeProperty(owner: horse, isMortgaged: true); Assert.IsFalse(mortgageAdvisor.PlayerShouldMortgageProperty(horse, property)); }
public void PlayerCannotPayOffMortgageForPropertyThatIsNotMortgaged() { var property = new FakeProperty(owner: horse); Assert.IsFalse(mortgageBroker.PayOffMortgage(horse, property)); }
public void PlayerCannotMortgagePropertyThatIsAlreadyMortgaged() { var property = new FakeProperty(owner: horse, isMortgaged: true); Assert.IsFalse(mortgageBroker.TakeOutMortgage(horse, property)); }
public void PlayerCannotMortgagePropertyThatIsNotOwned() { var property = new FakeProperty(); Assert.IsFalse(mortgageBroker.TakeOutMortgage(horse, property)); }