internal ShouldlyAssertionContext(string shouldlyMethod, object expected = null, object actual = null, StackTrace stackTrace = null) { var actualCodeGetter = new ActualCodeTextGetter(); Expected = expected; Actual = actual; ShouldMethod = shouldlyMethod; CodePart = actualCodeGetter.GetCodeText(actual, stackTrace); }
public static void ShouldMatchApproved(this string actual, Func<string> customMessage, Action<ShouldMatchConfigurationBuilder> configureOptions) { var codeGetter = new ActualCodeTextGetter(); var stackTrace = new StackTrace(true); codeGetter.GetCodeText(actual, stackTrace); var configurationBuilder = new ShouldMatchConfigurationBuilder(ShouldlyConfiguration.ShouldMatchApprovedDefaults.Build()); configureOptions(configurationBuilder); var config = configurationBuilder.Build(); if (config.Scrubber != null) actual = config.Scrubber(actual); var testMethodInfo = config.TestMethodFinder.GetTestMethodInfo(stackTrace, codeGetter.ShouldlyFrameIndex); var descriminator = config.FilenameDescriminator == null ? null : "." + config.FilenameDescriminator; var outputFolder = testMethodInfo.SourceFileDirectory; if (string.IsNullOrEmpty(outputFolder)) throw new Exception($"Source information not available, make sure you are compiling with full debug information. Frame: {testMethodInfo.DeclaringTypeName}.{testMethodInfo.MethodName}"); if (!string.IsNullOrEmpty(config.ApprovalFileSubFolder)) { outputFolder = Path.Combine(outputFolder, config.ApprovalFileSubFolder); Directory.CreateDirectory(outputFolder); } var approvedFile = Path.Combine(outputFolder, config.FilenameGenerator(testMethodInfo, descriminator, "approved", config.FileExtension)); var receivedFile = Path.Combine(outputFolder, config.FilenameGenerator(testMethodInfo, descriminator, "received", config.FileExtension)); File.WriteAllText(receivedFile, actual); if (!File.Exists(approvedFile)) { if (ConfigurationAllowsDiff(config)) ShouldlyConfiguration.DiffTools.GetDiffTool().Open(receivedFile, approvedFile, false); throw new ShouldMatchApprovedException($@"Approval file {approvedFile} does not exist", receivedFile, approvedFile); } var approvedFileContents = File.ReadAllText(approvedFile); var receivedFileContents = File.ReadAllText(receivedFile); var assertion = StringShouldBeAssertionFactory .Create(approvedFileContents, receivedFileContents, config.StringCompareOptions); var contentsMatch = assertion.IsSatisfied(); if (!contentsMatch && ConfigurationAllowsDiff(config)) ShouldlyConfiguration.DiffTools.GetDiffTool().Open(receivedFile, approvedFile, true); if (!contentsMatch) throw new ShouldMatchApprovedException(assertion.GenerateMessage(customMessage()), receivedFile, approvedFile); File.Delete(receivedFile); }
internal ShouldlyAssertionContext( string shouldlyMethod, object expected = null, object actual = null, System.Diagnostics.StackTrace stackTrace = null) { var actualCodeGetter = new ActualCodeTextGetter(); Expected = expected; Actual = actual; ShouldMethod = shouldlyMethod; CodePart = actualCodeGetter.GetCodeText(actual, stackTrace); FileName = actualCodeGetter.FileName; LineNumber = actualCodeGetter.LineNumber; }