Esempio n. 1
0
        private IEnumerable <StatementSyntax> GetBodyStatements(ClassModel sourceModel, IInterfaceModel interfaceModel)
        {
            ITypeSymbol enumerableTypeSymbol = sourceModel.TypeSymbol;

            if (interfaceModel.IsGeneric)
            {
                Debug.Assert(interfaceModel.GenericTypes.Count == 1, "Expecting one type argument for IEnumerable");
                enumerableTypeSymbol = interfaceModel.GenericTypes.First();
            }

            yield return(SyntaxHelper.CreateVariableDeclaration(
                             sourceModel.TypeSymbol.ToTypeSyntax(FrameworkSet.Context),
                             "enumerable",
                             SyntaxFactory.DefaultExpression(sourceModel.TypeSyntax))
                         .AsLocalVariableDeclarationStatementSyntax());

            yield return(SyntaxHelper.CreateVariableDeclaration(
                             SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.IntKeyword)),
                             "expectedCount",
                             SyntaxFactory.LiteralExpression(SyntaxKind.NumericLiteralExpression, SyntaxFactory.Literal(-1)))
                         .AsLocalVariableDeclarationStatementSyntax());

            yield return(SyntaxHelper.CreateVariableDeclaration(
                             SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.IntKeyword)),
                             "actualCount",
                             SyntaxFactory.LiteralExpression(SyntaxKind.NumericLiteralExpression, SyntaxFactory.Literal(0)))
                         .AsLocalVariableDeclarationStatementSyntax());

            yield return(SyntaxFactory.UsingStatement(
                             SyntaxFactory.Block(
                                 FrameworkSet.TestFramework.AssertNotNull(SyntaxFactory.IdentifierName("enumerator")),
                                 SyntaxFactory.WhileStatement(
                                     SyntaxFactory.InvocationExpression(
                                         SyntaxFactory.MemberAccessExpression(
                                             SyntaxKind.SimpleMemberAccessExpression,
                                             SyntaxFactory.IdentifierName("enumerator"),
                                             SyntaxFactory.IdentifierName("MoveNext"))),
                                     SyntaxFactory.Block(
                                         SyntaxFactory.ExpressionStatement(
                                             SyntaxFactory.PostfixUnaryExpression(
                                                 SyntaxKind.PostIncrementExpression,
                                                 SyntaxFactory.IdentifierName("actualCount"))),
                                         FrameworkSet.TestFramework.AssertIsInstanceOf(
                                             SyntaxFactory.MemberAccessExpression(
                                                 SyntaxKind.SimpleMemberAccessExpression,
                                                 SyntaxFactory.IdentifierName("enumerator"),
                                                 SyntaxFactory.IdentifierName("Current")),
                                             enumerableTypeSymbol.ToTypeSyntax(FrameworkSet.Context))))))
                         .WithDeclaration(
                             SyntaxHelper.CreateVariableDeclaration("enumerator", SyntaxFactory.InvocationExpression(
                                                                        SyntaxFactory.MemberAccessExpression(
                                                                            SyntaxKind.SimpleMemberAccessExpression,
                                                                            SyntaxFactory.IdentifierName("enumerable"),
                                                                            SyntaxFactory.IdentifierName("GetEnumerator"))))));

            yield return(FrameworkSet.TestFramework.AssertEqual(SyntaxFactory.IdentifierName("actualCount"), SyntaxFactory.IdentifierName("expectedCount")));
        }
Esempio n. 2
0
        private IEnumerable <StatementSyntax> GetBodyStatements(ClassModel sourceModel, IInterfaceModel interfaceModel)
        {
            ITypeSymbol comparableTypeIdentifier = sourceModel.TypeSymbol;

            if (interfaceModel.IsGeneric)
            {
                Debug.Assert(interfaceModel.GenericTypes.Count == 1, "Expecting one type argument for IComparable");
                comparableTypeIdentifier = interfaceModel.GenericTypes.First();
            }

            var typeSyntax = comparableTypeIdentifier.ToTypeSyntax(FrameworkSet.Context);

            yield return(SyntaxHelper.CreateVariableDeclaration(
                             sourceModel.TypeSymbol.ToTypeSyntax(FrameworkSet.Context),
                             "baseValue",
                             SyntaxFactory.DefaultExpression(sourceModel.TypeSyntax))
                         .AsLocalVariableDeclarationStatementSyntax());

            yield return(SyntaxHelper.CreateVariableDeclaration(
                             typeSyntax,
                             "equalToBaseValue",
                             SyntaxFactory.DefaultExpression(typeSyntax))
                         .AsLocalVariableDeclarationStatementSyntax());

            yield return(SyntaxHelper.CreateVariableDeclaration(
                             typeSyntax,
                             "greaterThanBaseValue",
                             SyntaxFactory.DefaultExpression(typeSyntax))
                         .AsLocalVariableDeclarationStatementSyntax());

            yield return(FrameworkSet.TestFramework.AssertEqual(
                             SyntaxHelper.CreateInvocationStatement(
                                 SyntaxFactory.IdentifierName("baseValue"),
                                 SyntaxFactory.IdentifierName("CompareTo"),
                                 SyntaxFactory.IdentifierName("equalToBaseValue")),
                             SyntaxFactory.LiteralExpression(
                                 SyntaxKind.NumericLiteralExpression,
                                 SyntaxFactory.Literal(0))));

            yield return(FrameworkSet.TestFramework.AssertLessThan(
                             SyntaxHelper.CreateInvocationStatement(
                                 SyntaxFactory.IdentifierName("baseValue"),
                                 SyntaxFactory.IdentifierName("CompareTo"),
                                 SyntaxFactory.IdentifierName("greaterThanBaseValue")),
                             SyntaxFactory.LiteralExpression(
                                 SyntaxKind.NumericLiteralExpression,
                                 SyntaxFactory.Literal(0))));

            yield return(FrameworkSet.TestFramework.AssertGreaterThan(
                             SyntaxHelper.CreateInvocationStatement(
                                 SyntaxFactory.IdentifierName("greaterThanBaseValue"),
                                 SyntaxFactory.IdentifierName("CompareTo"),
                                 SyntaxFactory.IdentifierName("baseValue")),
                             SyntaxFactory.LiteralExpression(
                                 SyntaxKind.NumericLiteralExpression,
                                 SyntaxFactory.Literal(0))));
        }