Exemple #1
0
        private void GetHtmlForChange(string style, StringBuilder builder)
        {
            var r = _report as XmlChangedRecordReport;

            switch (style.ToLower())
            {
            case "normal":

                var original = GetHtmlForEntry(r.ParentNode);
                // XmlUtilities.GetXmlForShowingInHtml("<entry>" + r.ParentNode.InnerXml + "</entry>");
                var modified = GetHtmlForEntry(r.ChildNode);
                // XmlUtilities.GetXmlForShowingInHtml("<entry>" + r.ChildNode.InnerXml + "</entry>");
                var m = new Rainbow.HtmlDiffEngine.Merger(original, modified);
                builder.Append(m.merge());
                break;

            case "raw":

                builder.Append("<h3>From</h3>");
                builder.AppendFormat("<p><pre>{0}</pre></p>",
                                     XmlUtilities.GetXmlForShowingInHtml(r.ParentNode.OuterXml));
                builder.Append("<h3>To</h3>");
                builder.AppendFormat("<p><pre>{0}</pre></p>",
                                     XmlUtilities.GetXmlForShowingInHtml(r.ChildNode.OuterXml));
                break;

            default:
                break;
            }
        }
Exemple #2
0
        private void AppendDiffOfUnknownFile(StringBuilder builder, DefaultChangeReport r)
        {
            var modified = r.ChildFileInRevision.GetFileContents(_repository);

            if (r.ParentFileInRevision != null)             // will be null when this file was just added
            {
                var original = r.ParentFileInRevision.GetFileContents(_repository);
                var m        = new Rainbow.HtmlDiffEngine.Merger(original, modified);
                builder.Append(m.merge());
            }
            else
            {
                builder.Append(modified);
            }
        }
        private void AppendDiffOfTextFile(StringBuilder builder, TextEditChangeReport r)
        {
            var modified = r.ChildFileInRevision.GetFileContents(_repository);

            if (r.ParentFileInRevision != null) // will be null when this file was just added
            {
                var original = r.ParentFileInRevision.GetFileContents(_repository);
                var m = new Rainbow.HtmlDiffEngine.Merger(original, modified);
                builder.Append(m.merge());
            }
            else
            {
                builder.Append(modified);
            }
        }
        public void DefaultHtmlDetails_UsesClientHtmlGenerator()
        {
            string ancestor = @"<a key='one'>
                                <b key='one'>
                                    <c key='two'>data</c>
                                </b>
                            </a>";
            string red = @"<a key='one'>
                                <b key='one'>
                                    <c key='two'>change1</c>
                                </b>
                            </a>";

            string blue = @"<a key='one'>
                                <b key='one'>
                                    <c key='two'>change2</c>
                                </b>
                            </a>";

            // blue wins
            ChangeAndConflictAccumulator r = CheckOneWay(blue, red, ancestor,
                                        "a/b[@key='one']/c[@key='two' and text()='change2']");
            Assert.AreEqual(typeof(XmlTextBothEditedTextConflict), r.Conflicts[0].GetType());
            // red wins
            var mergeSituation = new MergeSituation("somepath", "red", "some rev", "blue", "another rev",
                MergeOrder.ConflictHandlingModeChoices.WeWin);
            var specialStrategies = new Dictionary<string, ElementStrategy>();
            var strategy = ElementStrategy.CreateForKeyedElement("key", true);
            strategy.ContextDescriptorGenerator = new MockContextGenerator2();
            specialStrategies.Add("c", strategy);
            r = CheckOneWay(red, blue, ancestor, mergeSituation, specialStrategies,
                                        "a/b[@key='one']/c[@key='two' and text()='change1']");
            Assert.AreEqual(typeof(XmlTextBothEditedTextConflict), r.Conflicts[0].GetType());

            var c = r.Conflicts[0];
            Assert.That(c.HtmlDetails.StartsWith("<head><style type='text/css'>div.myStyle {margin-left:  0.2in}</style>"));
            Assert.That(c.HtmlDetails, Contains.Substring(c.GetFullHumanReadableDescription()));
            var ancestorHml = "<div class='test'>" + XmlUtilities.GetXmlForShowingInHtml("<c key='two'>data</c>") + "</div>";
            // For now decided that with diffs we don't need the ancestor
            //Assert.That(c.HtmlDetails, Contains.Substring(ancestorHml));
            Assert.That(c.HtmlDetails.EndsWith("</body>"));
            var oursHtml = "<div class='test'>" + XmlUtilities.GetXmlForShowingInHtml("<c key='two'>change1</c>") + "</div>";
            var m = new Rainbow.HtmlDiffEngine.Merger(ancestorHml, oursHtml);
            Assert.That(c.HtmlDetails, Contains.Substring(m.merge()));

            var theirsHtml = "<div class='test'>" + XmlUtilities.GetXmlForShowingInHtml("<c key='two'>change2</c>") + "</div>";
            m = new Rainbow.HtmlDiffEngine.Merger(ancestorHml, theirsHtml);
            Assert.That(c.HtmlDetails, Contains.Substring(m.merge()));

            Assert.That(c.HtmlDetails, Contains.Substring("kept the change made by red"));
            AssertDivsMatch(c.HtmlDetails);
        }
        public void DefaultHtmlDetails_ReportsOneDeleted()
        {
            string ancestor = @"<a key='one'>
                                <b key='one'>
                                    <c key='two'>data</c>
                                </b>
                            </a>";
            string red = @"<a key='one'>
                                <b key='one'>
                                    <c key='two'>change1</c>
                                </b>
                            </a>";

            string blue = @"<a key='one'>
                            </a>";

            // blue would normally win, but this is a delete vs edit.
            ChangeAndConflictAccumulator r = CheckOneWay(blue, red, ancestor,
                                        "a[@key='one']/b[@key='one']/c[@key='two' and text()='change1']");
            Assert.AreEqual(typeof(RemovedVsEditedElementConflict), r.Conflicts[0].GetType());
            // red wins
            var mergeSituation = new MergeSituation("somepath", "red", "some rev", "blue", "another rev",
                MergeOrder.ConflictHandlingModeChoices.WeWin);
            r = CheckOneWay(red, blue, ancestor, mergeSituation, null,
                                        "a[@key='one']/b[@key='one']/c[@key='two' and text()='change1']");
            Assert.AreEqual(typeof(EditedVsRemovedElementConflict), r.Conflicts[0].GetType());

            var c = r.Conflicts[0];
            Assert.That(c.HtmlDetails.StartsWith("<head>"));
            Assert.That(c.HtmlDetails, Contains.Substring(c.GetFullHumanReadableDescription()));
            var ancestorHml = XmlUtilities.GetXmlForShowingInHtml("<c key='two'>data</c>");
            // For now decided that with diffs we don't need the ancestor
            //Assert.That(c.HtmlDetails, Contains.Substring(ancestorHml));
            Assert.That(c.HtmlDetails.EndsWith("</body>"));
            var oursHtml = XmlUtilities.GetXmlForShowingInHtml("<c key='two'>change1</c>");
            var m = new Rainbow.HtmlDiffEngine.Merger(ancestorHml, oursHtml);
            Assert.That(c.HtmlDetails, Contains.Substring(m.merge()));

            Assert.That(c.HtmlDetails, Contains.Substring("kept the change made by red"));
            AssertDivsMatch(c.HtmlDetails);
        }
        private void GetHtmlForChange(string style, StringBuilder builder)
        {
            var r = _report as XmlChangedRecordReport;
            switch (style.ToLower())
            {
                case "normal":

                    var original = GetHtmlForEntry(r.ParentNode);
                        // XmlUtilities.GetXmlForShowingInHtml("<entry>" + r.ParentNode.InnerXml + "</entry>");
                    var modified = GetHtmlForEntry(r.ChildNode);
                        // XmlUtilities.GetXmlForShowingInHtml("<entry>" + r.ChildNode.InnerXml + "</entry>");
                    var m = new Rainbow.HtmlDiffEngine.Merger(original, modified);
                    builder.Append(m.merge());
                    break;

                case "raw":

                    builder.Append("<h3>From</h3>");
                    builder.AppendFormat("<p><pre>{0}</pre></p>",
                                         XmlUtilities.GetXmlForShowingInHtml(r.ParentNode.OuterXml));
                    builder.Append("<h3>To</h3>");
                    builder.AppendFormat("<p><pre>{0}</pre></p>",
                                         XmlUtilities.GetXmlForShowingInHtml(r.ChildNode.OuterXml));
                    break;
                default:
                    break;
            }
        }
Exemple #7
0
        private void AppendDiffOfXmlFile(StringBuilder builder, DefaultChangeReport r)
        {
            var modified =
                XmlUtilities.GetXmlForShowingInHtml(r.ChildFileInRevision.GetFileContents(_repository));

            if (r.ParentFileInRevision != null) // will be null when this file was just added
            {
                var original =
                    XmlUtilities.GetXmlForShowingInHtml(r.ParentFileInRevision.GetFileContents(_repository));
                var m = new Rainbow.HtmlDiffEngine.Merger(original, modified);
                builder.Append(m.merge());
            }
            else
            {
                builder.Append(modified);
            }
        }