1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
#define CONTRACTS_FULL
#define DEBUG
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using System.Diagnostics.Contracts;
using MonoTests.System.Diagnostics.Contracts.Helpers;
namespace MonoTests.System.Diagnostics.Contracts {
[TestFixture]
public class ContractMustUseRewriterTest : TestContractBase {
private void CheckMustUseRewriter (string expectedMsg, params Action[] fnTests)
{
foreach (var fnTest in fnTests) {
try {
fnTest ();
Assert.Fail ("CheckMustUseRewriter() exception not thrown");
} catch (Exception ex) {
Assert.IsInstanceOfType (typeof (NotImplementedException), ex, "CheckMustUseRewriter() wrong exception thrown");
}
}
bool handlerVisited = false;
Contract.ContractFailed += (sender, e) => {
handlerVisited = true;
};
foreach (var fnTest in fnTests) {
try {
fnTest ();
Assert.Fail ("CheckMustUseRewriter() exception not thrown");
} catch (Exception ex) {
Assert.IsInstanceOfType (typeof (NotImplementedException), ex, "CheckMustUseRewriter() wrong exception thrown");
}
}
Assert.IsFalse (handlerVisited, "CheckMustUseRewriter() handled visited");
}
/// <summary>
/// Contract.Requires() ALWAYS triggers an assert, regardless of any other factors.
/// </summary>
[Test]
[Ignore ("This causes NUnit crash on .NET 4.0")]
public void TestRequires ()
{
CheckMustUseRewriter ("Description: Must use the rewriter when using Contract.Requires",
() => Contract.Requires (true),
() => Contract.Requires (false),
() => Contract.Requires (true, "Message"),
() => Contract.Requires (false, "Message")
);
}
/// <summary>
/// Contract.Requires() ALWAYS triggers an assert, regardless of any other factors.
/// </summary>
[Test]
[Ignore ("This causes NUnit crash on .NET 4.0")]
public void TestRequiresTException ()
{
CheckMustUseRewriter ("Description: Must use the rewriter when using Contract.Requires<TException>",
() => Contract.Requires<Exception> (true),
() => Contract.Requires<Exception> (false),
() => Contract.Requires<Exception> (true, "Message"),
() => Contract.Requires<Exception> (false, "Message")
);
}
/// <summary>
/// Contract.Ensures() ALWAYS triggers an assert, regardless of any other factors.
/// </summary>
[Test]
[Ignore ("This causes NUnit crash on .NET 4.0")]
public void TestEnsures ()
{
CheckMustUseRewriter ("Description: Must use the rewriter when using Contract.Ensures",
() => Contract.Ensures (true),
() => Contract.Ensures (false),
() => Contract.Ensures (true, "Message"),
() => Contract.Ensures (false, "Message")
);
}
/// <summary>
/// Contract.Ensures() ALWAYS triggers an assert, regardless of any other factors.
/// </summary>
[Test]
[Ignore ("This causes NUnit crash on .NET 4.0")]
public void TestEnsuresOnThrow ()
{
CheckMustUseRewriter ("Description: Must use the rewriter when using Contract.EnsuresOnThrow",
() => Contract.EnsuresOnThrow<Exception> (true),
() => Contract.EnsuresOnThrow<Exception> (false),
() => Contract.EnsuresOnThrow<Exception> (true, "Message"),
() => Contract.EnsuresOnThrow<Exception> (false, "Message")
);
}
/// <summary>
/// Contract.Ensures() ALWAYS triggers an assert, regardless of any other factors.
/// </summary>
[Test]
[Ignore ("This causes NUnit crash on .NET 4.0")]
public void TestInvariant ()
{
CheckMustUseRewriter ("Description: Must use the rewriter when using Contract.Invariant",
() => Contract.Invariant (true),
() => Contract.Invariant (false),
() => Contract.Invariant (true, "Message"),
() => Contract.Invariant (false, "Message")
);
}
}
}
|