/// <summary> /// Outputs a friendly display of the policy execution results; /// </summary> /// <param name="output"><see cref="TextWriter"/> for outputs</param> /// <returns><see cref="Task"/></returns> public static async Task ReportAsync(PolicyResults results, TextWriter output) { if (results.HasViolations) { await output.WriteLineAsync($"Policy violations found for: {results.Name}"); foreach (var rule in results.Results) { if (!rule.IsSuccessful) { await output.WriteLineAsync("-----------------------------------------------------------"); await output.WriteLineAsync($"Rule failed: {rule.Name}"); foreach (var type in rule.FailingTypes) { await output.WriteLineAsync($"\t {type.FullName}"); } } } await output.WriteLineAsync("-----------------------------------------------------------"); } else { await output.WriteLineAsync($"No policy violations found for: {results.Name}"); } }
public void TestPolicyPresentationLayer() { // Arrange var policy = Policy.Define("Presentation Policy", "Policy for Presentation layer") .For(Types.InAssembly(typeof(CakeView).Assembly)) .Add(t => t.That() .ResideInNamespace("MyAwesomeApplication.PresentationLayer.Views") .And() .AreClasses() .Should() .HaveNameEndingWith("View"), "Control classes in Views namespace", "Classes in Views namespace ends with View suffix") .Add(t => t.That() .ResideInNamespace("MyAwesomeApplication.PresentationLayer.ViewModels") .Should() .ImplementInterface(typeof(INotifyPropertyChanged)), "Control classes in ViewModels namespace", "Classes in ViewModels namespace has to implements INotifyPropertyChanged" ); // Act PolicyResults results = policy.Evaluate(); // Assert Assert.IsFalse(results.HasViolations); }
/// <summary> /// Outputs a friendly display of the policy execution results; /// </summary> /// <param name="results"><see cref="PolicyResults"/> the policy results</param> /// <param name="output"><see cref="ITestOutputHelper"/> for outputs</param> public static void Write(PolicyResults results, ITestOutputHelper output) { if (results.HasViolations) { output.WriteLine($"Policy violations found for: {results.Name}"); foreach (var rule in results.Results) { if (!rule.IsSuccessful) { output.WriteLine("-----------------------------------------------------------"); output.WriteLine($"{rule.Name} - {rule.Description}"); foreach (var type in rule.FailingTypes) { output.WriteLine($"\t -> {type.FullName}"); } } } output.WriteLine("-----------------------------------------------------------"); } else { output.WriteLine($"No policy violations found for: {results.Name}"); } }
/// <summary> /// A synchronous variant of <see cref="ReportAsync(TextWriter)"/> /// </summary> /// <param name="output"></param> public static void Report(PolicyResults results, TextWriter output) => ReportAsync(results, output).GetAwaiter().GetResult();
public void Fail(string message) { PolicyResults.Add(new MergePolicyEvaluationResult.SingleResult(false, message, CurrentPolicy)); }
public void Succeed(string message) { PolicyResults.Add(new MergePolicyEvaluationResult.SingleResult(true, message, CurrentPolicy)); }
public void Pending(string message) { PolicyResults.Add(new MergePolicyEvaluationResult.SingleResult(null, message, CurrentPolicy)); }
public static void AssertHasNoViolations(this PolicyResults result) { var lines = new List <string> { $"{result.Description}", $"{result.Name} policy has been violated by following types:" };