コード例 #1
0
 public BodyBuilder AddVoidInvocation(
     IdentifierNameSyntax identifier,
     params ArgumentSyntax[] arguments)
 {
     AddExpression(EGH.Invocation(identifier, arguments));
     return(this);
 }
コード例 #2
0
        private static ClassDeclarationSyntax CreateClass(
            ClassDeclarationSyntax parentClass,
            ConstructorDeclarationSyntax constructor)
        {
            ObjectCreationExpressionSyntax CreateMoq(TypeSyntax moqType) =>
            EGH.CreateObject(
                moqType,
                SF.Argument(
                    EGH.MemberAccess(
                        GH.Identifier("MockBehavior"),
                        GH.Identifier("Strict"))));

            var mi = new MethodInspector(constructor);

            var recordBuilder = new RecordBuilder($"{mi.Name}Test")
                                .AddModifiers(Modifiers.Public);

            foreach (var p in mi.Parameters)
            {
                var mockedType = GetMockedType(p.Type);
                var moqType    = GH.GenericName("Mock", mockedType);
                recordBuilder.AddField(moqType, MockName(p.Name), CreateMoq(moqType));
            }

            recordBuilder.AddMethod(GenerateCreateSut(parentClass, mi));

            return(recordBuilder.Build());
        }
コード例 #3
0
        private static MethodDeclarationSyntax GenerateCreateSut(
            ClassDeclarationSyntax classDeclaration,
            MethodInspector constructorInspector)
        {
            var methodBuilder = new MethodBuilder(GH.IdentifierToken("CreateSut"))
                                .Modifiers(Modifiers.Private);

            var constructorParameters = constructorInspector
                                        .Parameters
                                        .Select(p => SF.Argument(
                                                    EGH.MemberAccess(
                                                        EGH.ThisMemberAccess(
                                                            GH.Identifier(MockName(p.Name))
                                                            ),
                                                        GH.Identifier("Object")
                                                        )
                                                    )
                                                );

            methodBuilder.ArrowBody(
                EGH.Arrow(
                    EGH.CreateObject(
                        SF.IdentifierName(classDeclaration.Identifier),
                        constructorParameters.ToArray())));

            return(methodBuilder.Build());
        }
コード例 #4
0
 public BodyBuilder AddFieldAssignment(
     IdentifierNameSyntax fieldName,
     ExpressionSyntax rightSide)
 {
     // TODO: configurable this ?
     AddAssignment(
         EGH.ThisMemberAccess(fieldName),
         rightSide);
     return(this);
 }
コード例 #5
0
 public BodyBuilder AddAssignment(ExpressionSyntax left, ExpressionSyntax right)
 {
     AddExpression(EGH.SimpleAssignment(left, right));
     return(this);
 }
コード例 #6
0
 public BodyBuilder AddAssignment(SyntaxToken left, SyntaxToken right)
 {
     AddExpression(EGH.SimpleAssignment(left, right));
     return(this);
 }