private SimplestFailCase Shrink(List <IFixture> fixtures, FalsifiableException previousFailure) { var simplestFailcase = ShrinkTransitionsList(fixtures, previousFailure); ShrinkFixtures(simplestFailcase, previousFailure); return(simplestFailcase); }
private void ShrinkFixtures(SimplestFailCase simplestFailcase, FalsifiableException previousFailure) { simplestFailcase .Fixtures .ForEach( f => f.Shrink( () => Fails(simplestFailcase.Fixtures, previousFailure))); }
private bool Fails(IEnumerable <IFixture> actions, FalsifiableException previousFailure) { var actionsCopy = actions.ToList(); objects = objectFuncs.Select(f => f()).ToList(); disposables = disposableFuncs.Select(f => f()).ToList(); for (int ix = 0; ix < actionsCopy.Count(); ix++) { try { var fixture = actionsCopy.ElementAt(ix); SetUsedState(fixture); if (fixture.CanAct()) { LastException = null; try { fixture.Execute(); } catch (Exception e) { LastException = e; } if (ix == actionsCopy.Count - 1) { if (previousFailure.Spec != null) { previousFailure.Spec.Verify(); } if (previousFailure.InnerException != null) { if (LastException == null) { return(false); } return(LastException.GetType() == previousFailure.InnerException.GetType()); } } } } catch (FalsifiableException) { disposables.ForEach(d => d.Dispose()); return(true); } } disposables.ForEach(d => d.Dispose()); return(false); }
public static string GetMessage(int testNumber, int fixtureNumber, FalsifiableException failure, SimplestFailCase simplestFailCase) { var sb = new StringBuilder(); sb.AppendLine(); sb.AppendFormat("Ran {0} test, {1} fixtures.", testNumber, fixtureNumber); sb.AppendLine(); if (failure.Spec != null) { sb.AppendLine("Spec '" + failure.Spec.Name + "' does not hold."); } if (simplestFailCase != null) { sb.Append(simplestFailCase.Report()); } return(sb.ToString()); }
private SimplestFailCase ShrinkTransitionsList(List <IFixture> fixtures, FalsifiableException previousFailure) { var simplestFailCase = new SimplestFailCase(fixtures); var ix = 0; while (ix < simplestFailCase.Fixtures.Count - 1) { var lessActions = new List <IFixture>(simplestFailCase.Fixtures); lessActions.RemoveAt(ix); if (Fails(lessActions, previousFailure)) { simplestFailCase.Fixtures = lessActions; } else { ix++; } } return(simplestFailCase); }
public RunReport(int testNumber, int fixtureNumber, FalsifiableException failure, SimplestFailCase simplestFailCase) : base(GetMessage(testNumber, fixtureNumber, failure, simplestFailCase), failure) { this.simplestFailCase = simplestFailCase; }