public void CreateFromAttributeData_ThrowsWhenTypeAndNameIsSpecified()
        {
            var attributeData = CompiledSourceFileProvider.CompileAttribute(
                "[ExpectedException (typeof(DivideByZeroException), ExpectedExceptionName = \"DivideByZeroException\")]");

            Assert.That(
                () => ExpectedExceptionModel.CreateFromAttributeData(attributeData),
                Throws.Exception.With.InstanceOf <InvalidOperationException>());
        }
        public void ConvertToConstraint_ConvertsExpectedExceptionMessage()
        {
            var attributeData = CompiledSourceFileProvider.CompileAttribute("[ExpectedException(ExpectedMessage = \"Test Message\")]");
            IExpectedExceptionModel expectedException
                = new ExpectedExceptionModel(attributeData, ParseExpression("Exception"), null, ParseExpression("\"Test Message\""), null);

            var constraint = expectedException.AsConstraintExpression("");

            Assert.That(constraint, Is.EquivalentTo(ParseExpression("Throws.Exception.With.Message.EqualTo(\"Test Message\")")));
        }
        public void ConvertToConstraint_ConvertsForCustomWellKnownException()
        {
            var attributeData = CompiledSourceFileProvider.CompileAttribute("[ExpectedException(typeof(InvalidOperationException))]");
            IExpectedExceptionModel expectedException
                = new ExpectedExceptionModel(attributeData, ParseExpression("typeof(InvalidOperationException)"), null, null, null);

            var constraint = expectedException.AsConstraintExpression("");

            Assert.That(constraint, Is.EquivalentTo(ParseExpression("Throws.InvalidOperationException")));
        }
        public void ConvertToConstraint_ConvertsForSimpleExceptionCase()
        {
            var attributeData = CompiledSourceFileProvider.CompileAttribute("[ExpectedException]");
            IExpectedExceptionModel expectedException
                = new ExpectedExceptionModel(attributeData, IdentifierName("Exception"), null, null, null);

            var constraint = expectedException.AsConstraintExpression("");

            Assert.That(constraint, Is.EquivalentTo(ParseExpression("Throws.Exception")));
        }
        public void CreateFromAttributeData_ExceptionNameIsSetCorrectly(string attribute)
        {
            var attributeData = CompiledSourceFileProvider.CompileAttribute(attribute);

            var expectedExceptionModel = ExpectedExceptionModel.CreateFromAttributeData(attributeData);

            Assert.That(
                expectedExceptionModel.ExceptionType,
                Is.EquivalentTo(TypeOfExpression(IdentifierName("DivideByZeroException"))));
        }
        public void CreateFromAttributeData_UsesUserMessage()
        {
            var attributeData = CompiledSourceFileProvider.CompileAttribute("[ExpectedException (UserMessage = \"test user message\")]");

            var expectedExceptionModel = ExpectedExceptionModel.CreateFromAttributeData(attributeData);

            Assert.That(expectedExceptionModel, Is.Not.Null);
            Assert.That(
                expectedExceptionModel.UserMessage,
                Is.EquivalentTo(LiteralExpression(SyntaxKind.StringLiteralExpression, Literal("test user message"))));
        }
        public void CreateFromAttributeData_UsesCustomExceptionType()
        {
            var attributeData = CompiledSourceFileProvider.CompileAttribute("[ExpectedException(typeof(DivideByZeroException))]");

            var expectedExceptionModel = ExpectedExceptionModel.CreateFromAttributeData(attributeData);

            Assert.That(expectedExceptionModel, Is.Not.Null);
            Assert.That(
                expectedExceptionModel.ExceptionType,
                Is.EquivalentTo(TypeOfExpression(IdentifierName("DivideByZeroException"))));
        }
        public void CreateFromAttributeData_UsesExpectedMessage(string attribute, string message, string matchType)
        {
            var attributeData = CompiledSourceFileProvider.CompileAttribute(attribute);

            var expectedExceptionModel = ExpectedExceptionModel.CreateFromAttributeData(attributeData);

            Assert.That(expectedExceptionModel, Is.Not.Null);
            Assert.That(
                expectedExceptionModel.ExpectedMessage,
                Is.EquivalentTo(LiteralExpression(SyntaxKind.StringLiteralExpression, Literal(message))));
            Assert.That(
                expectedExceptionModel.MatchType,
                Is.EquivalentTo(MemberAccess(IdentifierName("MessageMatch"), matchType)));
        }
        public async Task CreateFromAttributeData_NoArgsAttribute()
        {
            var attributeData = CompiledSourceFileProvider.CompileAttribute("[ExpectedException]");

            var expectedExceptionModel = ExpectedExceptionModel.CreateFromAttributeData(attributeData);

            Assert.That(expectedExceptionModel, Is.Not.Null);
            Assert.That(
                expectedExceptionModel.ExceptionType,
                Is.EquivalentTo(TypeOfExpression(IdentifierName("Exception"))));
            Assert.That(
                await expectedExceptionModel.GetAttributeSyntax(),
                Is.SameAs(await attributeData.ApplicationSyntaxReference.GetSyntaxAsync()));
            Assert.That(expectedExceptionModel.ExpectedMessage, Is.Null);
        }
        public void CreateFromAttributeData_UsesAllCustomFields(string attribute)
        {
            var attributeData = CompiledSourceFileProvider.CompileAttribute(attribute);

            var expectedExceptionModel = ExpectedExceptionModel.CreateFromAttributeData(attributeData);

            Assert.That(expectedExceptionModel, Is.Not.Null);
            Assert.That(
                expectedExceptionModel.ExceptionType,
                Is.EquivalentTo(TypeOfExpression(IdentifierName("DivideByZeroException"))));
            Assert.That(
                expectedExceptionModel.ExpectedMessage,
                Is.EquivalentTo(LiteralExpression(SyntaxKind.StringLiteralExpression, Literal("test message"))));
            Assert.That(
                expectedExceptionModel.MatchType,
                Is.EquivalentTo(MemberAccess(IdentifierName("MessageMatch"), "Contains")));
            Assert.That(
                expectedExceptionModel.UserMessage,
                Is.EquivalentTo(LiteralExpression(SyntaxKind.StringLiteralExpression, Literal("test user message"))));
        }