Exemplo n.º 1
0
 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);
        }
Exemplo n.º 3
0
 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);
 }
Exemplo n.º 4
0
 protected VirtualMethodBasedMock(MocklisTypesForSymbols typesForSymbols, INamedTypeSymbol classSymbol, INamedTypeSymbol interfaceSymbol,
                                  TSymbol symbol, string memberMockName)
 {
     TypesForSymbols = typesForSymbols;
     ClassSymbol     = classSymbol;
     InterfaceSymbol = interfaceSymbol;
     Symbol          = symbol;
     MemberMockName  = memberMockName;
 }
Exemplo n.º 5
0
 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;
 }
Exemplo n.º 6
0
        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));
                }
            }
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        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));
 }
Exemplo n.º 12
0
        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)));
        }
Exemplo n.º 13
0
 private static SyntaxList <AttributeListSyntax> AddOrUpdateCodeGeneratedAttribute(MocklisTypesForSymbols typesForSymbols,
                                                                                   SemanticModel semanticModel, MocklisSymbols mocklisSymbols, in SyntaxList <AttributeListSyntax> classDeclAttributeLists)