コード例 #1
0
        public static void ShouldMatchApproved(this string actual, Func <string> customMessage, Action <ShouldMatchConfigurationBuilder> configureOptions)
        {
            var configurationBuilder = new ShouldMatchConfigurationBuilder(new ShouldMatchConfiguration
            {
                StringCompareOptions = StringCompareShould.IgnoreLineEndings,
                FileExtension        = "txt"
            });

            configureOptions(configurationBuilder);

            var config = configurationBuilder.Build();

            if (config.Scrubber != null)
            {
                actual = config.Scrubber(actual);
            }

            var approvalFileFolder = config.ApprovalFileFolder;

            if (!Directory.Exists(approvalFileFolder))
            {
                Directory.CreateDirectory(approvalFileFolder);
            }

            var approvedFile = Path.Combine(approvalFileFolder, $"{config.Name}{config.FilenameDescriminator}.approved.{config.FileExtension}");
            var receivedFile = Path.Combine(approvalFileFolder, $"{config.Name}{config.FilenameDescriminator}.received.{config.FileExtension}");

            File.WriteAllText(receivedFile, actual);
            if (!File.Exists(approvedFile))
            {
                if (DiffTools.ShouldOpenDiffTool())
                {
                    DiffTools.GetDiffTool().Open(receivedFile, approvedFile, false);
                }

                throw new ShouldMatchApprovedException($@"Approval file {approvedFile} does not exist", receivedFile, approvedFile);
            }

            try
            {
                var approvedFileContents = File.ReadAllText(approvedFile);
                var receivedFileContents = File.ReadAllText(receivedFile);

                receivedFileContents.ShouldBe(approvedFileContents, config.StringCompareOptions);

                if (File.Exists(receivedFile))
                {
                    File.Delete(receivedFile);
                }
            }
            catch (Exception)
            {
                if (DiffTools.ShouldOpenDiffTool())
                {
                    DiffTools.GetDiffTool().Open(receivedFile, approvedFile, true);
                }

                throw;
            }
        }