Index: xword/ContentFiltering/ContentFiltering.csproj =================================================================== --- xword/ContentFiltering/ContentFiltering.csproj (revision 21435) +++ xword/ContentFiltering/ContentFiltering.csproj (working copy) @@ -31,6 +31,14 @@ 4 + + False + ..\dependencies\nunit.framework.dll + + + False + ..\dependencies\nunit.mocks.dll + 3.5 @@ -68,6 +76,17 @@ + + + + + + + + + + + Index: xword/ContentFiltering/Office/Word/Filters/GrammarAndSpellingErrorsFilter.cs =================================================================== --- xword/ContentFiltering/Office/Word/Filters/GrammarAndSpellingErrorsFilter.cs (revision 21435) +++ xword/ContentFiltering/Office/Word/Filters/GrammarAndSpellingErrorsFilter.cs (working copy) @@ -9,6 +9,7 @@ public class GrammarAndSpellingErrorsFilter:IDOMFilter { private ConversionManager manager; + public GrammarAndSpellingErrorsFilter(ConversionManager manager) { this.manager = manager; Index: xword/ContentFiltering/Office/Word/Filters/StyleRemoverFilter.cs =================================================================== --- xword/ContentFiltering/Office/Word/Filters/StyleRemoverFilter.cs (revision 21435) +++ xword/ContentFiltering/Office/Word/Filters/StyleRemoverFilter.cs (working copy) @@ -35,7 +35,7 @@ xIterator = navigator.Select(expression); foreach (XPathNavigator nav in xIterator) { - if (nav.Value == "MsoNormal" || nav.Value == "MsoNormalTable" || nav.Value == "MsoTableGrid") + if (nav.Value == "MsoNormal" || nav.Value == "MsoNormalTable" || nav.Value == "MsoTableGrid"||nav.Value=="MsoNoSpacing") { nav.DeleteSelf(); } Index: xword/ContentFiltering/Office/Word/Filters/WebListsAdaptorFilter.cs =================================================================== --- xword/ContentFiltering/Office/Word/Filters/WebListsAdaptorFilter.cs (revision 21435) +++ xword/ContentFiltering/Office/Word/Filters/WebListsAdaptorFilter.cs (working copy) @@ -20,7 +20,7 @@ /// /// Adapts the HTML lists to lists known by MS Word, because Word doesn't like - /// 'ul' inside 'li' elements with innerText. + /// 'ul' and 'ol' inside 'li' elements with innerText. /// /// A reference to an xml document. public void Filter(ref XmlDocument xmlDoc) @@ -28,7 +28,7 @@ Dictionary> itemsToMoveUp = new Dictionary>(); XmlNodeList listItems = xmlDoc.GetElementsByTagName("li"); - //itentify
  • elements with
      children + //itentify
    • elements with
        or
          children foreach (XmlNode node in listItems) { XmlNodeList children = node.ChildNodes; Index: xword/ContentFiltering/Test/Office/Word/Filters/GrammarAndSpellingErrorsFilterTest.cs =================================================================== --- xword/ContentFiltering/Test/Office/Word/Filters/GrammarAndSpellingErrorsFilterTest.cs (revision 0) +++ xword/ContentFiltering/Test/Office/Word/Filters/GrammarAndSpellingErrorsFilterTest.cs (revision 0) @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NUnit.Framework; +using System.Xml; +using ContentFiltering.Test.Util; +using ContentFiltering.Office.Word.Filters; +using XWiki.Office.Word; + +namespace ContentFiltering.Test.Office.Word.Filters +{ + + /// + /// Test class for GrammarAndSpellingErrorsFilter. + /// + [TestFixture] + public class GrammarAndSpellingErrorsFilterTest + { + private ConversionManager manager; + private string initialHTML; + private string cleanedHTML; + private XmlDocument initialXmlDoc; + private XmlDocument cleanedXmlDoc; + + /// + /// Default constructor. + /// + public GrammarAndSpellingErrorsFilterTest() + { + manager = ConversionManagerTestUtil.DummyConversionManager(); + initialHTML = ""; + cleanedHTML = ""; + initialXmlDoc = new XmlDocument(); + cleanedXmlDoc=new XmlDocument(); + } + + /// + /// Initialize the test. + /// + [TestFixtureSetUp] + public void GlobalSetUp() + { + initialHTML = "" + + "" + + "
          " + + "

          Page title gos here

          " + + "

          Page content goes here.

          " + + "

          And some errrors goes here.

          " + + "

          We shold have both grammar and spelingserors.

          " + + "

          He have apples.

          " + + "

          Un cuvant

          " + + "
          " + + "" + + ""; + + cleanedHTML ="" + + "" + + "
          " + + "

          Page title gos here

          " + + "

          Page content goes here.

          " + + "

          And some errrors goes here.

          " + + "

          We shold have both grammar and spelings erors .

          " + + "

          He have apples.

          " + + "

          Un cuvant

          " + + "
          " + + "" + + ""; + + initialXmlDoc.LoadXml(initialHTML); + cleanedXmlDoc.LoadXml(cleanedHTML); + } + + /// + /// Test method for grammar and spelling errors filter. + /// + [Test] + public void TestFilter() + { + new GrammarAndSpellingErrorsFilter(manager).Filter(ref initialXmlDoc); + Assert.IsTrue(XmlDocComparator.AreIdentical(initialXmlDoc, cleanedXmlDoc)); + } + } +} Index: xword/ContentFiltering/Test/Office/Word/Filters/LocalImageAdaptorFilterTest.cs =================================================================== --- xword/ContentFiltering/Test/Office/Word/Filters/LocalImageAdaptorFilterTest.cs (revision 0) +++ xword/ContentFiltering/Test/Office/Word/Filters/LocalImageAdaptorFilterTest.cs (revision 0) @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NUnit.Framework; +using ContentFiltering.Office.Word.Filters; +using System.Xml; +using XWiki.Office.Word; +using ContentFiltering.Test.Util; + +namespace ContentFiltering.Test.Office.Word.Filters +{ + /// + /// Test class for LocalImageAdaptorFilter. + /// + [TestFixture] + public class LocalImageAdaptorFilterTest + { + private ConversionManager manager; + private string initialHTML; + private XmlDocument initialXmlDoc; + + /// + /// Default constructor. + /// + public LocalImageAdaptorFilterTest() + { + manager = ConversionManagerTestUtil.DummyConversionManager(); + initialHTML = ""; + initialXmlDoc = new XmlDocument(); + } + + /// + /// Initialize the test. + /// + [TestFixtureSetUp] + public void GlobalSetUp() + { + initialHTML = "" + + "" + + "

          Heading 1

          " + + "

          " + + "\"DevManager-server.png\"" + + "

          " + + "" + + ""; + + initialXmlDoc.LoadXml(initialHTML); + } + + /// + /// Test method for local image adaptor filter. + /// Verifies if images are 'bordered' with comments and image sources start with 'http'. + /// + [Test] + public void TestFilter() + { + new LocalImageAdaptorFilter(manager).Filter(ref initialXmlDoc); + XmlNodeList images=initialXmlDoc.GetElementsByTagName("img"); + foreach (XmlNode image in images) + { + Assert.AreEqual(image.PreviousSibling.NodeType, XmlNodeType.Comment); + Assert.IsTrue(image.PreviousSibling.Value.IndexOf("startimage") >= 0); + Assert.AreEqual(image.NextSibling.NodeType, XmlNodeType.Comment); + Assert.IsTrue(image.NextSibling.Value.IndexOf("stopimage") >= 0); + Assert.IsTrue(image.Attributes["src"].Value.IndexOf("http") >= 0); + } + } + } +} Index: xword/ContentFiltering/Test/Office/Word/Filters/LocalMacrosAdaptorFilterTest.cs =================================================================== --- xword/ContentFiltering/Test/Office/Word/Filters/LocalMacrosAdaptorFilterTest.cs (revision 0) +++ xword/ContentFiltering/Test/Office/Word/Filters/LocalMacrosAdaptorFilterTest.cs (revision 0) @@ -0,0 +1,114 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NUnit.Framework; +using System.Xml; +using ContentFiltering.Test.Util; +using ContentFiltering.Office.Word.Filters; +using XWiki.Office.Word; + +namespace ContentFiltering.Test.Office.Word.Filters +{ + /// + /// Test class for LocalMacrosAdaptorFilter. + /// + [TestFixture] + public class LocalMacrosAdaptorFilterTest + { + private ConversionManager manager; + private string initialHTML; + private string expectedHTML; + private XmlDocument initialXmlDoc; + private XmlDocument expectedXmlDoc; + + /// + /// Default constructor. + /// + public LocalMacrosAdaptorFilterTest() + { + manager = ConversionManagerTestUtil.DummyConversionManager(); + initialHTML = ""; + expectedHTML = ""; + initialXmlDoc = new XmlDocument(); + expectedXmlDoc = new XmlDocument(); + } + + + /// + /// Initialize the test. + /// + [TestFixtureSetUp] + public void GlobalSetUp() + { + //'known' macros + manager.States.Macros.Add("9225601", "generated html content"); + + initialHTML = "" + + "" + + "

          Heading 1

          " + + "

          Normal text

          " + + "" + + "

          <img border=\"0\" src=\"" + + " http://opi.yahoo.com/online?u=yahoohelper&amp;m=g&amp;t=1\" alt=\"yahoo yahoohelper\" />" + + "" + + "

          " + + "
          " + + "

          Some text goes here" + + "

          More text goes here.

          " + + "" + + ""; + + expectedHTML = "" + + "" + + "

          Heading 1

          " + + "

          Normal text

          " + + "generated html content" + + "

          Some text goes here" + + "

          More text goes here.

          " + + "" + + ""; + + initialXmlDoc = new XmlDocument(); + expectedXmlDoc = new XmlDocument(); + + initialXmlDoc.LoadXml(initialHTML); + expectedXmlDoc.LoadXml(expectedHTML); + } + + /// + /// Test method for local macros adaptor filter. + /// Content controls which represent XWiki macros should be tranformed (in macros) + /// and content controls which belong to Word should not be altered. + /// + [Test] + public void TestFilter() + { + new LocalMacrosAdaptorFilter(manager).Filter(ref initialXmlDoc); + XmlNodeList stds = initialXmlDoc.GetElementsByTagName("Sdt", "urn:schemas-microsoft-com:office:word"); + + bool foundElement9225601 = false; + bool foundElement15075750 = false; + + foreach (XmlNode std in stds) + { + if (std.Attributes["ID"] != null) + { + if (std.Attributes["ID"].Value == "9225601") + { + foundElement9225601 = true; + } + if (std.Attributes["ID"].Value == "15075750") + { + foundElement15075750 = true; + } + } + } + + Assert.IsTrue(foundElement15075750); + Assert.IsFalse(foundElement9225601); + + Assert.IsTrue(initialXmlDoc.InnerText.ToLower().IndexOf("generated html content") >= 0); + } + } +} Index: xword/ContentFiltering/Test/Office/Word/Filters/OfficeAttributesRemoverFilterTest.cs =================================================================== --- xword/ContentFiltering/Test/Office/Word/Filters/OfficeAttributesRemoverFilterTest.cs (revision 0) +++ xword/ContentFiltering/Test/Office/Word/Filters/OfficeAttributesRemoverFilterTest.cs (revision 0) @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NUnit.Framework; +using System.Xml; +using ContentFiltering.Test.Util; +using ContentFiltering.Office.Word.Filters; +using XWiki.Office.Word; + +namespace ContentFiltering.Test.Office.Word.Filters +{ + /// + /// Test class for OfficeAttributesRemoverFilter. + /// + [TestFixture] + public class OfficeAttributesRemoverFilterTest + { + private ConversionManager manager; + private string initialHTML; + private string expectedHTML; + private XmlDocument initialXmlDoc; + private XmlDocument expectedXmlDoc; + + /// + /// Default constructor. + /// + public OfficeAttributesRemoverFilterTest() + { + manager = ConversionManagerTestUtil.DummyConversionManager(); + initialHTML = ""; + expectedHTML = ""; + initialXmlDoc = new XmlDocument(); + expectedXmlDoc = new XmlDocument(); + } + + /// + /// Initialize the test. + /// + [TestFixtureSetUp] + public void GlobalSetUp() + { + initialHTML = "" + + "" + + "

          o content

          " + + "

          w content

          " + + "" + + "

          m content

          " + + ""; + + expectedHTML = "" + + "" + + "

          o content

          " + + "

          w content

          " + + "" + + "

          m content

          " + + ""; + + + initialXmlDoc.LoadXml(initialHTML); + expectedXmlDoc.LoadXml(expectedHTML); + } + + /// + /// Test method for office attributes remover filter. + /// + [Test] + public void TestFilter() + { + new OfficeAttributesRemoverFilter(manager).Filter(ref initialXmlDoc); + Assert.IsTrue(XmlDocComparator.AreIdentical(initialXmlDoc, expectedXmlDoc)); + } + } +} Index: xword/ContentFiltering/Test/Office/Word/Filters/StyleRemoverFilterTest.cs =================================================================== --- xword/ContentFiltering/Test/Office/Word/Filters/StyleRemoverFilterTest.cs (revision 0) +++ xword/ContentFiltering/Test/Office/Word/Filters/StyleRemoverFilterTest.cs (revision 0) @@ -0,0 +1,160 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NUnit.Framework; +using System.Xml; +using ContentFiltering.Test.Util; +using ContentFiltering.Office.Word.Filters; +using XWiki.Office.Word; + +namespace ContentFiltering.Test.Office.Word.Filters +{ + /// + /// Test class for StyleRemoverFilter. + /// + [TestFixture] + public class StyleRemoverFilterTest + { + private ConversionManager manager; + private string initialHTML; + private string expectedHTML; + private XmlDocument initialXmlDoc; + private XmlDocument expectedXmlDoc; + + /// + /// Default constructor. + /// + public StyleRemoverFilterTest() + { + manager = ConversionManagerTestUtil.DummyConversionManager(); + initialHTML = ""; + expectedHTML = ""; + initialXmlDoc = new XmlDocument(); + expectedXmlDoc = new XmlDocument(); + } + + /// + /// Initialize the test. + /// + [TestFixtureSetUp] + public void GlobalSetUp() + { + initialHTML = "" + + "Title" + + "" + + "
          " + + "
          " + + "

          Heading 1

          " + + "

          Heading 2

          " + + "

          Normal text content goes here.

          " + + "

          " + + "\"bg001.bmp\"/" + + "

          " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + "
          " + + "

          1

          " + + "
          " + + "

          2

          " + + "
          " + + "

          3

          " + + "
          " + + "

          4

          " + + "
          " + + "

          5

          " + + "
          " + + "

          Some no spacing text content

          " + + "
          " + + ""; + + + expectedHTML = "" + + "Title" + + "" + + "
          " + + "
          " + + "

          Heading 1

          " + + "

          Heading 2

          " + + "

          Normal text content goes here.

          " + + "

          " + + "\"bg001.bmp\"/" + + "

          " + + "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + "
          " + + "

          1

          " + + "
          " + + "

          2

          " + + "
          " + + "

          3

          " + + "
          " + + "

          4

          " + + "
          " + + "

          5

          " + + "
          " + + "

          Some no spacing text content

          " + + "
          " + + ""; + + initialXmlDoc.LoadXml(initialHTML); + expectedXmlDoc.LoadXml(expectedHTML); + } + + /// + /// Test method for style remover filter. Verifies if styles and attributes that sould be transformed in CSS (like width, height) + /// are removed, but other attributes (like colspan, rowspan) are preserved. + /// + [Test] + public void TestFilter() + { + StyleRemoverFilter styleRemoverFilter = new StyleRemoverFilter(manager); + styleRemoverFilter.Filter(ref initialXmlDoc); + Assert.IsTrue(XmlDocComparator.AreIdentical(initialXmlDoc, expectedXmlDoc)); + } + } +} Index: xword/ContentFiltering/Test/Office/Word/Filters/WebImageAdaptorFilterTest.cs =================================================================== --- xword/ContentFiltering/Test/Office/Word/Filters/WebImageAdaptorFilterTest.cs (revision 0) +++ xword/ContentFiltering/Test/Office/Word/Filters/WebImageAdaptorFilterTest.cs (revision 0) @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NUnit.Framework; +using System.Xml; +using ContentFiltering.Test.Util; +using ContentFiltering.Office.Word.Filters; +using XWiki.Office.Word; + +namespace ContentFiltering.Test.Office.Word.Filters +{ + /// + /// Test class for WebImageAdaptorFilter. + /// + [TestFixture] + public class WebImageAdaptorFilterTest + { + private ConversionManager manager; + private string initialHTML; + private XmlDocument initialXmlDoc; + + + /// + /// Default constructor. + /// + public WebImageAdaptorFilterTest() + { + manager = ConversionManagerTestUtil.DummyConversionManager(); + initialHTML = ""; + initialXmlDoc = new XmlDocument(); + } + /// + /// Initialize the test. + /// + [TestFixtureSetUp] + public void GlobalSetUp() + { + initialHTML = "" + + "WebImageAdaptorFilterTest" + + "" + + "\"alternative" + +""; + + //are atributul ImageInfo.XWORD_IMG_ATTRIBUTE + //are atributul alt + //src-ul e file:// + //nu are attributul v:shapes + initialXmlDoc.LoadXml(initialHTML); + } + + /// + /// Test method for web image adaptor filter. After filterning images should have ImageInfo.XWORD_IMG_ATTRIBUTE and 'alt' attributes, + /// the 'src' should start with 'file://' and the 'v:shapes' attribute should not be present. + /// + [Test] + public void TestFilter() + { + WebImageAdaptorFilter webImageAdaptorFilter = new WebImageAdaptorFilter(manager); + webImageAdaptorFilter.Filter(ref initialXmlDoc); + + XmlNodeList images = initialXmlDoc.GetElementsByTagName("img"); + foreach (XmlNode image in images) + { + Assert.IsNotNull(image.Attributes[ImageInfo.XWORD_IMG_ATTRIBUTE]); + Assert.AreEqual(image.Attributes["alt"].Value, "alternative text"); + Assert.IsTrue(image.Attributes["src"].Value.IndexOf("file://") >= 0); + Assert.IsNull(image.Attributes["v:shapes"]); + } + + } + } +} Index: xword/ContentFiltering/Test/Office/Word/Filters/WebListsAdaptorFilterTest.cs =================================================================== --- xword/ContentFiltering/Test/Office/Word/Filters/WebListsAdaptorFilterTest.cs (revision 0) +++ xword/ContentFiltering/Test/Office/Word/Filters/WebListsAdaptorFilterTest.cs (revision 0) @@ -0,0 +1,122 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NUnit.Framework; +using XWiki.Office.Word; +using System.Xml; +using ContentFiltering.Test.Util; +using ContentFiltering.Office.Word.Filters; + + +namespace ContentFiltering.Test.Office.Word.Filters +{ + /// + /// Test class for WebListsAdaptorFilter. + /// + [TestFixture] + public class WebListsAdaptorFilterTest + { + private ConversionManager manager; + private string initialHTML; + private string expectedHTML; + private XmlDocument initialXmlDoc; + private XmlDocument expectedXmlDoc; + + /// + /// Default constructor. + /// + public WebListsAdaptorFilterTest() + { + manager=ConversionManagerTestUtil.DummyConversionManager(); + initialHTML=""; + expectedHTML=""; + initialXmlDoc=new XmlDocument(); + expectedXmlDoc=new XmlDocument(); + } + + /// + /// Test setup. + /// + [TestFixtureSetUp] + public void GlobalSetup() + { + initialHTML = "" + + "Some Lists" + + "" + + "

          Unordered list:

          " + + "
            " + + "
          • Item 1
          • " + + "
          • Item2
              " + + "
            • Item 2.1
            • " + + "
            • Item 2.2
                " + + "
              • Item 2.2.1
              • " + + "
              • Item 2.2.2
              • " + + "
              " + + "
            • " + + "
            • Item 2.3
            • " + + "
            " + + "
          • " + + "
          • Item 3
          • " + + "
          " + + "

          Ordered list:

          " + + "
            " + + "
          1. Item 1
              " + + "
            1. Item 1.1
            2. " + + "
            3. Item 1.2
            4. " + + "
            " + + "
          2. " + + "
          3. Item 2
          4. " + + "
          " + + "

          End of file :-)

          " + + "" + + ""; + + expectedHTML = "" + + "Some Lists" + + "" + + "

          Unordered list:

          " + + "
            " + + "
          • Item 1
          • " + + "
          • Item2
          • " + + "
              " + + "
            • Item 2.1
            • " + + "
            • Item 2.2
            • " + + "
                " + + "
              • Item 2.2.1
              • " + + "
              • Item 2.2.2
              • " + + "
              " + + "
            • Item 2.3
            • " + + "
            " + + "
          • Item 3
          • " + + "
          " + + "

          Ordered list:

          " + + "
            " + + "
          1. Item 1
          2. " + + "
              " + + "
            1. Item 1.1
            2. " + + "
            3. Item 1.2
            4. " + + "
            " + + "
          3. Item 2
          4. " + + "
          " + + "

          End of file :-)

          " + + "" + + ""; + + initialXmlDoc.LoadXml(initialHTML); + + expectedXmlDoc.LoadXml(expectedHTML); + } + + /// + /// Test method for web lists adaptor filter. + /// + [Test] + public void TestFilter() + { + WebListsAdaptorFilter webListsAdaptorFilter = new WebListsAdaptorFilter(manager); + webListsAdaptorFilter.Filter(ref initialXmlDoc); + Assert.IsTrue(XmlDocComparator.AreIdentical(initialXmlDoc, expectedXmlDoc)); + } + } +} Index: xword/ContentFiltering/Test/Office/Word/Filters/WebMacrosAdaptorFilterTest.cs =================================================================== --- xword/ContentFiltering/Test/Office/Word/Filters/WebMacrosAdaptorFilterTest.cs (revision 0) +++ xword/ContentFiltering/Test/Office/Word/Filters/WebMacrosAdaptorFilterTest.cs (revision 0) @@ -0,0 +1,116 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NUnit.Framework; +using XWiki.Office.Word; +using System.Xml; +using ContentFiltering.Test.Util; +using ContentFiltering.Office.Word.Filters; + +namespace ContentFiltering.Test.Office.Word.Filters +{ + /// + /// Test class for WebMacrosAdaptorFilter. + /// + [TestFixture] + public class WebMacrosAdaptorFilterTest + { + private ConversionManager manager; + private string initialHTML; + private string expectedHTML; + private XmlDocument initialXmlDoc; + + /// + /// Default constructor. + /// + public WebMacrosAdaptorFilterTest() + { + manager = ConversionManagerTestUtil.DummyConversionManager(); + initialHTML = ""; + expectedHTML = ""; + initialXmlDoc = new XmlDocument(); + } + + /// + /// Global test setup. + /// + [TestFixtureSetUp] + public void GlobalSetup() + { + initialHTML = "" + + "" + + "

          Normal text.

          " + + "" + + "

          generated html

          " + + "" + + ""; + + expectedHTML = "" + + "" + + "

          Normal text.

          " + + "" + + "" + + "

          generated html

          " + + "" + + "
          " + + ""; + + initialXmlDoc.LoadXml(initialHTML); + } + + /// + /// Test method for web macros adaptor filter. After filtering the XmlDocument should have one content control + /// (w:Std) with 'ContentLocked', 'DocPart', 'ID' attributes and 'startmacro','stopmacro' and macro generated html + /// as child nodes. + /// + [Test] + public void TestFilter() + { + WebMacrosAdaptorFilter webmacrosAdaptorFilter = new WebMacrosAdaptorFilter(manager); + webmacrosAdaptorFilter.Filter(ref initialXmlDoc); + + XmlNodeList wStds = initialXmlDoc.GetElementsByTagName("Sdt", "urn:schemas-microsoft-com:office:word"); + Assert.AreEqual(wStds.Count, 1); + XmlNode wStd = wStds[0]; + Assert.AreEqual(wStd.Attributes["ContentLocked"].Value, "t"); + Assert.IsTrue(wStd.Attributes["DocPart"].Value.IndexOf("DefaultPlaceholder_") >= 0); + Assert.IsNotNull(wStd.Attributes["ID"]); + XmlNodeList wSdChildNodes = wStd.ChildNodes; + + bool foundStartMacro = false; + bool foundGeneratedHtml = false; + bool foundStopMacro = false; + + foreach (XmlNode child in wSdChildNodes) + { + if (child.NodeType == XmlNodeType.Comment) + { + if (child.InnerText.IndexOf("startmacro") >= 0) + { + foundStartMacro = true; + } + if (child.InnerText.IndexOf("stopmacro") >= 0) + { + foundStopMacro = true; + } + } + else + { + if (child.Name == "p") + { + if (child.InnerText == "generated html") + { + foundGeneratedHtml = true; + } + } + } + } + + Assert.IsTrue(foundStartMacro); + Assert.IsTrue(foundGeneratedHtml); + Assert.IsTrue(foundStopMacro); + + } + } +} Index: xword/ContentFiltering/Test/Util/ConversionManagerUtil.cs =================================================================== --- xword/ContentFiltering/Test/Util/ConversionManagerUtil.cs (revision 0) +++ xword/ContentFiltering/Test/Util/ConversionManagerUtil.cs (revision 0) @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using XWiki.Office.Word; +using XWiki.Clients; + +namespace ContentFiltering.Test.Util +{ + public class ConversionManagerTestUtil + { + private static string serverURL = "http://127.0.0.1:8080"; + private static string localFolder = "localFolder"; + private static string docFullName = "docFullName"; + private static string localFileName = "localFileName"; + + /// + /// Creates a dummy ConverionManeger to be used by unit tests. + /// + /// An instance of a dummy ConversionManager + public static ConversionManager DummyConversionManager() + { + IXWikiClient client = null; + client = XWikiClientTestUtil.CreateMockInstance(); + return new ConversionManager(serverURL, localFolder, docFullName, localFileName, client); + } + } +} Index: xword/ContentFiltering/Test/Util/XmlDocComparator.cs =================================================================== --- xword/ContentFiltering/Test/Util/XmlDocComparator.cs (revision 0) +++ xword/ContentFiltering/Test/Util/XmlDocComparator.cs (revision 0) @@ -0,0 +1,120 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml; +using System.Collections; + +namespace ContentFiltering.Test.Util +{ + public class XmlDocComparator + { + /// + /// Compares two XmlDocuments. + /// Returns TRUE if the xml dcouments have the same nodes, in the same position with the exact attributes. + /// + /// True if the xml dcouments have the same nodes, in the same position with the exact attributes. + public static bool AreIdentical(XmlDocument xmlDoc1,XmlDocument xmlDoc2) + { + XmlNodeList nodeList1 = xmlDoc1.ChildNodes; + XmlNodeList nodeList2 = xmlDoc2.ChildNodes; + bool same = true; + + if (nodeList1.Count != nodeList2.Count) + { + return false; + } + + IEnumerator enumerator1 = nodeList1.GetEnumerator(); + IEnumerator enumerator2 = nodeList2.GetEnumerator(); + while (enumerator1.MoveNext() && enumerator2.MoveNext() && same) + { + same = CompareNodes((XmlNode)enumerator1.Current, (XmlNode)enumerator2.Current); + } + return same; + } + + private static bool CompareNodes(XmlNode node1, XmlNode node2) + { + //compare properties + if (node1.Attributes == null||node2.Attributes==null) + { + bool nullAttributes = (node1.Attributes == null && node2.Attributes == null); + if (!nullAttributes) + { + return false; + } + } + else + { + if (node1.Attributes.Count != node2.Attributes.Count) + { + Console.WriteLine("Attributes count: " + node1.Attributes.Count + "!=" + node2.Attributes.Count); + Console.WriteLine(node1.ParentNode.InnerXml); + Console.WriteLine(node2.ParentNode.InnerXml); + return false; + } + } + if (node1.ChildNodes.Count != node2.ChildNodes.Count) + { + Console.WriteLine("Child nodes count: " + node1.ChildNodes.Count + " !=" + node2.ChildNodes.Count); + return false; + } + + if (node1.Name != node2.Name) + { + Console.WriteLine("Nodes Name: " + node1.Name + "!=" + node2.Name); + return false; + } + + if (node1.NodeType != node2.NodeType) + { + Console.WriteLine("Nodes Type: " + node1.NodeType + "!=" + node2.NodeType); + return false; + } + + if ((""+node1.Value).Trim() != (""+node2.Value).Trim()) + { + Console.WriteLine("Nodes value: " + node1.Value + "!=" + node2.Value); + return false; + } + + + //compare attributes + XmlAttribute attribute; + if (node1.Attributes != null && node2.Attributes != null) + { + foreach (XmlAttribute attr in node1.Attributes) + { + attribute = node2.Attributes[attr.Name]; + if (attribute == null) + { + Console.WriteLine("Null attribute: " + attr.Name); + return false; + } + if (attribute.Value != attr.Value) + { + Console.WriteLine("Attribute values: " + attribute.Value + "!=" + attr.Value); + return false; + } + } + } + //compare child nodes + IEnumerator enumerator1 = node1.GetEnumerator(); + IEnumerator enumerator2 = node2.GetEnumerator(); + bool childrenOK = true; + while (enumerator1.MoveNext() && enumerator2.MoveNext()) + { + childrenOK = CompareNodes((XmlNode)enumerator1.Current, (XmlNode)enumerator2.Current); + if (!childrenOK) + { + return false; + } + } + + + //same properties, same attributes, same child nodes + return true; + } + } +} Index: xword/ContentFiltering/Test/Util/XWikiClientUtil.cs =================================================================== --- xword/ContentFiltering/Test/Util/XWikiClientUtil.cs (revision 0) +++ xword/ContentFiltering/Test/Util/XWikiClientUtil.cs (revision 0) @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using XWiki.Clients; +using NUnit.Mocks; + +namespace ContentFiltering.Test.Util +{ + public class XWikiClientTestUtil + { + /// + /// Returns an IXWikiClient mock implementation to be used by unit tests. + /// + /// An IXWikiClient mock instance. + public static IXWikiClient CreateMockInstance() + { + DynamicMock myXWikiClientMock=new DynamicMock(typeof(IXWikiClient)); + myXWikiClientMock.ExpectAndReturn("Login", true,new object[2]); + myXWikiClientMock.ExpectAndReturn("GetAvailableSyntaxes", new List() { "XWiki 2.0", "XHTML" }); + myXWikiClientMock.ExpectAndReturn("GetPagesNames", new List() { "Page1" }, new object[1]); + myXWikiClientMock.ExpectAndReturn("SavePageHTML", true,new object[3]); + myXWikiClientMock.ExpectAndReturn("AddAttachment", true, new object[2] { "docFullName", "localFolder\\Document1_TempExport_files/image002.jpg" }); + myXWikiClientMock.ExpectAndReturn("GetAttachmentURL", "http://127.0.0.1:8080/xwiki/bin/download/Main/Page1/image002.jpg", new object[] { "docFullName","image002.jpg" }); + + return (IXWikiClient)myXWikiClientMock.MockInstance; + } + } + + +}