public PropertyBasedEventMock(MocklisTypesForSymbols typesForSymbols, INamedTypeSymbol classSymbol, INamedTypeSymbol interfaceSymbol, IEventSymbol symbol, string memberMockName, bool strict, bool veryStrict) : base(typesForSymbols, classSymbol, interfaceSymbol, symbol, memberMockName, strict, veryStrict) { EventHandlerTypeSyntax = typesForSymbols.ParseTypeName(symbol.Type, symbol.NullableOrOblivious()); MockPropertyType = typesForSymbols.EventMock(typesForSymbols.ParseTypeName(symbol.Type, false)); }
public VirtualMethodBasedMethodMock(MocklisTypesForSymbols typesForSymbols, INamedTypeSymbol classSymbol, INamedTypeSymbol interfaceSymbol, IMethodSymbol symbol, string mockMemberName) : base(typesForSymbols.WithSubstitutions(classSymbol, symbol), classSymbol, interfaceSymbol, symbol, mockMemberName) { if (symbol.ReturnsByRef) { RefTypeSyntax tmp = F.RefType(typesForSymbols.ParseTypeName(symbol.ReturnType, symbol.ReturnTypeIsNullableOrOblivious())); ReturnType = tmp; ReturnTypeWithoutReadonly = tmp; } else if (symbol.ReturnsByRefReadonly) { RefTypeSyntax tmp = F.RefType(typesForSymbols.ParseTypeName(symbol.ReturnType, symbol.ReturnTypeIsNullableOrOblivious())); ReturnType = tmp.WithReadOnlyKeyword(F.Token(SyntaxKind.ReadOnlyKeyword)); ReturnTypeWithoutReadonly = tmp; } else if (symbol.ReturnsVoid) { ReturnType = F.PredefinedType(F.Token(SyntaxKind.VoidKeyword)); ReturnTypeWithoutReadonly = ReturnType; } else { ReturnType = typesForSymbols.ParseTypeName(symbol.ReturnType, symbol.ReturnTypeIsNullableOrOblivious()); ReturnTypeWithoutReadonly = ReturnType; } ArglistParameterName = FindArglistParameterName(symbol); }
public PropertyBasedPropertyMock(MocklisTypesForSymbols typesForSymbols, INamedTypeSymbol classSymbol, INamedTypeSymbol interfaceSymbol, IPropertySymbol symbol, string mockMemberName, bool strict, bool veryStrict) : base(typesForSymbols, classSymbol, interfaceSymbol, symbol, mockMemberName, strict, veryStrict) { ValueTypeSyntax = typesForSymbols.ParseTypeName(symbol.Type, symbol.NullableOrOblivious()); MockPropertyType = typesForSymbols.PropertyMock(ValueTypeSyntax); }
protected VirtualMethodBasedMock(MocklisTypesForSymbols typesForSymbols, INamedTypeSymbol classSymbol, INamedTypeSymbol interfaceSymbol, TSymbol symbol, string memberMockName) { TypesForSymbols = typesForSymbols; ClassSymbol = classSymbol; InterfaceSymbol = interfaceSymbol; Symbol = symbol; MemberMockName = memberMockName; }
protected PropertyBasedMock(MocklisTypesForSymbols typesForSymbols, INamedTypeSymbol classSymbol, INamedTypeSymbol interfaceSymbol, TSymbol symbol, string memberMockName, bool strict, bool veryStrict) { TypesForSymbols = typesForSymbols; ClassSymbol = classSymbol; InterfaceSymbol = interfaceSymbol; Symbol = symbol; MemberMockName = memberMockName; Strict = strict; VeryStrict = veryStrict; }
public static ClassDeclarationSyntax UpdateMocklisClass(SemanticModel semanticModel, ClassDeclarationSyntax classDecl, MocklisSymbols mocklisSymbols, bool nullableContextEnabled) { var typesForSymbols = new MocklisTypesForSymbols(semanticModel, classDecl, mocklisSymbols, nullableContextEnabled); var populator = new MocklisClassPopulator(typesForSymbols, semanticModel, classDecl, mocklisSymbols); return(classDecl.WithMembers(F.List(populator.GenerateMembers())) .WithOpenBraceToken(F.Token(SyntaxKind.OpenBraceToken).WithTrailingTrivia(Comments)) .WithCloseBraceToken(F.Token(SyntaxKind.CloseBraceToken)) .WithAdditionalAnnotations(Formatter.Annotation) .WithAttributeLists(AddOrUpdateCodeGeneratedAttribute(typesForSymbols, semanticModel, mocklisSymbols, classDecl.AttributeLists))); }
public VirtualMethodBasedIndexerMock(MocklisTypesForSymbols typesForSymbols, INamedTypeSymbol classSymbol, INamedTypeSymbol interfaceSymbol, IPropertySymbol symbol, string mockMemberName) : base(typesForSymbols, classSymbol, interfaceSymbol, symbol, mockMemberName) { ValueTypeSyntax = typesForSymbols.ParseTypeName(symbol.Type, symbol.NullableOrOblivious()); ValueWithReadonlyTypeSyntax = ValueTypeSyntax; if (Symbol.ReturnsByRef || Symbol.ReturnsByRefReadonly) { RefTypeSyntax tmp = F.RefType(ValueTypeSyntax); ValueTypeSyntax = tmp; ValueWithReadonlyTypeSyntax = tmp; if (Symbol.ReturnsByRefReadonly) { ValueWithReadonlyTypeSyntax = tmp.WithReadOnlyKeyword(F.Token(SyntaxKind.ReadOnlyKeyword)); } } }
public PropertyBasedIndexerMock(MocklisTypesForSymbols typesForSymbols, INamedTypeSymbol classSymbol, INamedTypeSymbol interfaceSymbol, IPropertySymbol symbol, string mockMemberName, bool strict, bool veryStrict) : base(typesForSymbols, classSymbol, interfaceSymbol, symbol, mockMemberName, strict, veryStrict) { var builder = new SingleTypeOrValueTupleBuilder(TypesForSymbols); foreach (var p in symbol.Parameters) { builder.AddParameter(p); } KeyType = builder.Build(mockMemberName); var keyTypeSyntax = KeyType.BuildTypeSyntax(); KeyTypeSyntax = keyTypeSyntax ?? throw new ArgumentException("Property symbol must have at least one parameter", nameof(symbol)); ValueTypeSyntax = typesForSymbols.ParseTypeName(symbol.Type, symbol.NullableOrOblivious()); MockPropertyType = typesForSymbols.IndexerMock(KeyTypeSyntax, ValueTypeSyntax); }
public PropertyBasedMethodMock(MocklisTypesForSymbols typesForSymbols, INamedTypeSymbol classSymbol, INamedTypeSymbol interfaceSymbol, IMethodSymbol symbol, string mockMemberName, bool strict, bool veryStrict) : base(typesForSymbols, classSymbol, interfaceSymbol, symbol, mockMemberName, strict, veryStrict) { var parametersBuilder = new SingleTypeOrValueTupleBuilder(TypesForSymbols); var returnValuesBuilder = new SingleTypeOrValueTupleBuilder(TypesForSymbols); if (!symbol.ReturnsVoid) { returnValuesBuilder.AddReturnValue(symbol.ReturnType, symbol.ReturnTypeIsNullableOrOblivious()); } foreach (var parameter in symbol.Parameters) { switch (parameter.RefKind) { case RefKind.Ref: { parametersBuilder.AddParameter(parameter); returnValuesBuilder.AddParameter(parameter); break; } case RefKind.Out: { returnValuesBuilder.AddParameter(parameter); break; } case RefKind.In: { parametersBuilder.AddParameter(parameter); break; } case RefKind.None: { parametersBuilder.AddParameter(parameter); break; } } } ParametersType = parametersBuilder.Build(); ReturnValuesType = returnValuesBuilder.Build(); var parameterTypeSyntax = ParametersType.BuildTypeSyntax(); var returnValueTypeSyntax = ReturnValuesType.BuildTypeSyntax(); if (returnValueTypeSyntax == null) { MockMemberType = parameterTypeSyntax == null ? TypesForSymbols.ActionMethodMock() : TypesForSymbols.ActionMethodMock(parameterTypeSyntax); } else { MockMemberType = parameterTypeSyntax == null ? TypesForSymbols.FuncMethodMock(returnValueTypeSyntax) : TypesForSymbols.FuncMethodMock(parameterTypeSyntax, returnValueTypeSyntax); } }
public PropertyBasedMethodMockWithTypeParameters(MocklisTypesForSymbols typesForSymbols, INamedTypeSymbol classSymbol, INamedTypeSymbol interfaceSymbol, IMethodSymbol symbol, string mockMemberName, string mockProviderName, bool strict, bool veryStrict) : base(typesForSymbols.WithSubstitutions(classSymbol, symbol), classSymbol, interfaceSymbol, symbol, mockMemberName, strict, veryStrict) { MockProviderName = mockProviderName; }
public SingleTypeOrValueTupleBuilder(MocklisTypesForSymbols typesForSymbols) { TypesForSymbols = typesForSymbols ?? throw new ArgumentNullException(nameof(typesForSymbols)); }
public static ParameterListSyntax AsParameterList(this IEnumerable <IParameterSymbol> parameters, MocklisTypesForSymbols typesForSymbols) { var args = parameters.Select(p => { var syntax = F.Parameter(F.Identifier(p.Name)).WithType(typesForSymbols.ParseTypeName(p.Type, p.NullableOrOblivious())); switch (p.RefKind) { case RefKind.In: { syntax = syntax.WithModifiers(F.TokenList(F.Token(SyntaxKind.InKeyword))); break; } case RefKind.Out: { syntax = syntax.WithModifiers(F.TokenList(F.Token(SyntaxKind.OutKeyword))); break; } case RefKind.Ref: { syntax = syntax.WithModifiers(F.TokenList(F.Token(SyntaxKind.RefKeyword))); break; } } return(syntax); }); return(F.ParameterList(F.SeparatedList(args))); }
private static SyntaxList <AttributeListSyntax> AddOrUpdateCodeGeneratedAttribute(MocklisTypesForSymbols typesForSymbols, SemanticModel semanticModel, MocklisSymbols mocklisSymbols, in SyntaxList <AttributeListSyntax> classDeclAttributeLists)