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"))); }
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)))); }