summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/DotNetOpenAuth/ContractRuntimeFailureMethods.cs34
1 files changed, 33 insertions, 1 deletions
diff --git a/src/DotNetOpenAuth/ContractRuntimeFailureMethods.cs b/src/DotNetOpenAuth/ContractRuntimeFailureMethods.cs
index dc239fd..9fb1f63 100644
--- a/src/DotNetOpenAuth/ContractRuntimeFailureMethods.cs
+++ b/src/DotNetOpenAuth/ContractRuntimeFailureMethods.cs
@@ -8,6 +8,7 @@
namespace DotNetOpenAuth {
using System;
using System.Diagnostics;
+ using System.Diagnostics.Contracts;
using DotNetOpenAuth.Messaging;
/// <summary>
@@ -18,7 +19,7 @@ namespace DotNetOpenAuth {
/// The Code Contracts assembly rewriter (ccrewrite) tool causes all calls to Contract.*()
/// to redirect to this class.
/// </remarks>
- internal static class ContractRuntimeFailureMethods {
+ public static class ContractRuntimeFailureMethods {
[DebuggerStepThrough]
public static void Requires(bool condition, string userMessage, string conditionText) {
if (!condition) {
@@ -34,6 +35,13 @@ namespace DotNetOpenAuth {
}
[DebuggerStepThrough]
+ public static void EnsuresOnThrow(bool condition, string userMessage, string conditionText) {
+ if (!condition) {
+ throw new InternalErrorException(userMessage ?? conditionText);
+ }
+ }
+
+ [DebuggerStepThrough]
public static void Assert(bool condition, string userMessage, string conditionText) {
if (!condition) {
throw new InternalErrorException(userMessage ?? conditionText);
@@ -53,5 +61,29 @@ namespace DotNetOpenAuth {
throw new InternalErrorException(userMessage ?? conditionText);
}
}
+
+ [DebuggerStepThrough]
+ public static void Failure(ContractFailureKind failureKind, string userProvidedMessage, string condition, Exception originalException) {
+ switch (failureKind) {
+ case ContractFailureKind.Assert:
+ Assert(false, userProvidedMessage, condition);
+ break;
+ case ContractFailureKind.Assume:
+ Assume(false, userProvidedMessage, condition);
+ break;
+ case ContractFailureKind.Invariant:
+ Invariant(false, userProvidedMessage, condition);
+ break;
+ case ContractFailureKind.Postcondition:
+ Ensures(false, userProvidedMessage, condition);
+ break;
+ case ContractFailureKind.Precondition:
+ Requires(false, userProvidedMessage, condition);
+ break;
+ default:
+ ErrorUtilities.ThrowInternal(userProvidedMessage ?? condition);
+ break;
+ }
+ }
}
}