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; } }
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 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); } }