Example #1
0
        public void WC002_Consolidate_Bulk_Test(string testId, string name1, string name2)
        {
            var sourceDir   = new DirectoryInfo("../../../../TestFiles/");
            var source1Docx = new FileInfo(Path.Combine(sourceDir.FullName, name1));
            var source2Docx = new FileInfo(Path.Combine(sourceDir.FullName, name2));

            var rootTempDir     = TestUtil.TempDir;
            var thisTestTempDir = new DirectoryInfo(Path.Combine(rootTempDir.FullName, testId));

            if (thisTestTempDir.Exists)
            {
                Assert.True(false, "Duplicate test id: " + testId);
            }
            else
            {
                thisTestTempDir.Create();
            }

            var source1CopiedToDestDocx = new FileInfo(Path.Combine(thisTestTempDir.FullName, source1Docx.Name));
            var source2CopiedToDestDocx = new FileInfo(Path.Combine(thisTestTempDir.FullName, source2Docx.Name));

            if (!source1CopiedToDestDocx.Exists)
            {
                var wml1 = new WmlDocument(source1Docx.FullName);
                var wml2 = WordprocessingMLUtil.BreakLinkToTemplate(wml1);
                wml2.SaveAs(source1CopiedToDestDocx.FullName);
            }
            if (!source2CopiedToDestDocx.Exists)
            {
                var wml1 = new WmlDocument(source2Docx.FullName);
                var wml2 = WordprocessingMLUtil.BreakLinkToTemplate(wml1);
                wml2.SaveAs(source2CopiedToDestDocx.FullName);
            }

            var before = source1CopiedToDestDocx.Name.Replace(".docx", "");
            var after  = source2CopiedToDestDocx.Name.Replace(".docx", "");
            var docxWithRevisionsFi = new FileInfo(Path.Combine(thisTestTempDir.FullName, before + "-COMPARE-" + after + ".docx"));
            var docxConsolidatedFi  = new FileInfo(Path.Combine(thisTestTempDir.FullName, before + "-CONSOLIDATED-" + after + ".docx"));

            var source1Wml  = new WmlDocument(source1CopiedToDestDocx.FullName);
            var source2Wml  = new WmlDocument(source2CopiedToDestDocx.FullName);
            var settings    = new WmlComparerSettings();
            var comparedWml = OpenXmlPowerTools.WmlComparer.WmlComparer.Compare(source1Wml, source2Wml, settings);

            WordprocessingMLUtil.BreakLinkToTemplate(comparedWml).SaveAs(docxWithRevisionsFi.FullName);

            var revisedDocInfo = new List <WmlRevisedDocumentInfo>()
            {
                new WmlRevisedDocumentInfo()
                {
                    RevisedDocument = source2Wml,
                    Color           = Color.LightBlue,
                    Revisor         = "Revised by Eric White",
                }
            };
            var consolidatedWml = OpenXmlPowerTools.WmlComparer.WmlComparer.Consolidate(
                source1Wml,
                revisedDocInfo,
                settings);

            WordprocessingMLUtil.BreakLinkToTemplate(consolidatedWml).SaveAs(docxConsolidatedFi.FullName);

            var validationErrors = "";

            using (var ms = new MemoryStream())
            {
                ms.Write(consolidatedWml.DocumentByteArray, 0, consolidatedWml.DocumentByteArray.Length);
                using var wDoc = WordprocessingDocument.Open(ms, true);
                var validator = new OpenXmlValidator();
                var errors    = validator.Validate(wDoc).Where(e => !ExpectedErrors.Contains(e.Description));
                if (errors.Any())
                {
                    var ind = "  ";
                    var sb  = new StringBuilder();
                    foreach (var err in errors)
                    {
                        sb.Append("Error" + Environment.NewLine);
                        sb.Append(ind + "ErrorType: " + err.ErrorType.ToString() + Environment.NewLine);
                        sb.Append(ind + "Description: " + err.Description + Environment.NewLine);
                        sb.Append(ind + "Part: " + err.Part.Uri.ToString() + Environment.NewLine);
                        sb.Append(ind + "XPath: " + err.Path.XPath + Environment.NewLine);
                    }
                    validationErrors = sb.ToString();
                }
            }

            if (!string.IsNullOrEmpty(validationErrors))
            {
                Assert.True(false, validationErrors);
            }
        }
Example #2
0
        public void WC001_Consolidate(string testId, string originalName, string revisedDocumentsXml)
        {
            var sourceDir    = new DirectoryInfo("../../../../TestFiles/");
            var originalDocx = new FileInfo(Path.Combine(sourceDir.FullName, originalName));

            var rootTempDir     = TestUtil.TempDir;
            var thisTestTempDir = new DirectoryInfo(Path.Combine(rootTempDir.FullName, testId));

            if (thisTestTempDir.Exists)
            {
                Assert.True(false, "Duplicate test id: " + testId);
            }
            else
            {
                thisTestTempDir.Create();
            }

            var originalCopiedToDestDocx = new FileInfo(Path.Combine(thisTestTempDir.FullName, originalDocx.Name));

            if (!originalCopiedToDestDocx.Exists)
            {
                var wml1 = new WmlDocument(originalDocx.FullName);
                var wml2 = WordprocessingMLUtil.BreakLinkToTemplate(wml1);
                wml2.SaveAs(originalCopiedToDestDocx.FullName);
            }

            var revisedDocumentsXElement = XElement.Parse(revisedDocumentsXml);
            var revisedDocumentsArray    = revisedDocumentsXElement
                                           .Elements()
                                           .Select(z =>
            {
                var revisedDocx             = new FileInfo(Path.Combine(sourceDir.FullName, z.Element("DocName").Value));
                var revisedCopiedToDestDocx = new FileInfo(Path.Combine(thisTestTempDir.FullName, revisedDocx.Name));
                var wml1 = new WmlDocument(revisedDocx.FullName);
                var wml2 = WordprocessingMLUtil.BreakLinkToTemplate(wml1);
                wml2.SaveAs(revisedCopiedToDestDocx.FullName);
                return(new WmlRevisedDocumentInfo()
                {
                    RevisedDocument = new WmlDocument(revisedCopiedToDestDocx.FullName),
                    Color = ColorParser.FromName(z.Element("Color")?.Value),
                    Revisor = z.Element("Revisor")?.Value,
                });
            })
                                           .ToList();

            var consolidatedDocxName   = originalCopiedToDestDocx.Name.Replace(".docx", "-Consolidated.docx");
            var consolidatedDocumentFi = new FileInfo(Path.Combine(thisTestTempDir.FullName, consolidatedDocxName));

            var source1Wml = new WmlDocument(originalCopiedToDestDocx.FullName);
            var settings   = new WmlComparerSettings
            {
                DebugTempFileDi = thisTestTempDir
            };
            var consolidatedWml = OpenXmlPowerTools.WmlComparer.WmlComparer.Consolidate(
                source1Wml,
                revisedDocumentsArray,
                settings);
            var wml3 = WordprocessingMLUtil.BreakLinkToTemplate(consolidatedWml);

            wml3.SaveAs(consolidatedDocumentFi.FullName);

            var validationErrors = "";

            using (var ms = new MemoryStream())
            {
                ms.Write(consolidatedWml.DocumentByteArray, 0, consolidatedWml.DocumentByteArray.Length);
                using var wDoc = WordprocessingDocument.Open(ms, true);
                var validator = new OpenXmlValidator();
                var errors    = validator.Validate(wDoc).Where(e => !ExpectedErrors.Contains(e.Description));
                if (errors.Any())
                {
                    var ind = "  ";
                    var sb  = new StringBuilder();
                    foreach (var err in errors)
                    {
                        sb.Append("Error" + Environment.NewLine);
                        sb.Append(ind + "ErrorType: " + err.ErrorType.ToString() + Environment.NewLine);
                        sb.Append(ind + "Description: " + err.Description + Environment.NewLine);
                        sb.Append(ind + "Part: " + err.Part.Uri.ToString() + Environment.NewLine);
                        sb.Append(ind + "XPath: " + err.Path.XPath + Environment.NewLine);
                    }
                    validationErrors = sb.ToString();
                }
            }

            /************************************************************************************************************************/

            if (validationErrors != "")
            {
                Assert.True(false, validationErrors);
            }
        }