public void CanPatchVanillaUI() { throw new NotImplementedException("need to be reworked for new backup foirmat"); var subject = new PatchDataLoader(); var dllLoader = new DataLoader(); var uiDataLoader = new UIDataLoader(); var patchPath = Path.Combine(Directory.GetCurrentDirectory(), "TestData", "CorePatches.xml"); var uiPath = Path.Combine(Directory.GetCurrentDirectory(), "TestData", "skin1.xml"); var loaded = subject.LoadData(patchPath); foreach (var definition in loaded.Definitions) { foreach (var uiPatch in definition.UIPatches) { Assert.IsTrue(uiPatch.FilePath.EndsWith("xml")); //need to extend tests for other files var doc = uiDataLoader.FixAndLoadXml(uiPath); var nodeToPatch = doc.XPathSelectElement(uiPatch.XPath); Assert.IsTrue(nodeToPatch != null); var nr = new XmlNodeReader(uiPatch.Data); var patchedNode = XElement.Load(nr).Descendants().FirstOrDefault(); //patchedNode = patchedNode.Descendants().FirstOrDefault(); if (uiPatch.PatchMode == UIPatchMode.Replace) { var parent = nodeToPatch.Parent; var prevNode = nodeToPatch.PreviousNode; var backup = new XComment(string.Format("__sotsos_backup__|{0}|__sotsos_backup__", nodeToPatch.ToString())); patchedNode.Add(backup); nodeToPatch.Remove(); if (prevNode != null) { prevNode.AddAfterSelf(patchedNode); } else { parent.Add(patchedNode); } } var wr = doc.CreateWriter(); using (var writer = XmlWriter.Create(uiPath)) { doc.WriteTo(writer); } } } }
public void CanDeSerialisePatches() { var subject = new PatchDataLoader(); var targetPath = Path.Combine(Directory.GetCurrentDirectory(), "TestData", "CorePatches.xml"); var loaded = subject.LoadData(targetPath); Assert.IsNotNull(loaded); Assert.IsTrue(loaded.Definitions.Count > 0); Assert.IsNotNull(loaded.Definitions[0].UIPatches[0].Data); Assert.IsTrue(loaded.Definitions[1].CodeBlocks[0].Lines.Count >0); Assert.IsTrue(loaded.Definitions[2].CodeBlocks[0].Lines.Count >0); Assert.IsTrue(loaded.Definitions[3].CodeBlocks[0].Lines.Count >0); //int found = 0; //var doc = XDocument.Load(new XmlNodeReader(loaded.UIPatches[0].Data),LoadOptions.None); //var nav = doc.CreateNavigator(); //var xpath = nav.Compile("//panel_template[@id='AdmiralManagerItem']"); //var all = nav.Select(xpath); //var nxt = all.MoveNext(); //nxt = all.MoveNext(); //while (nav.Select(xpath).MoveNext()) //{ // found++; //}; //Assert.AreEqual(1, found); //doc = XDocument.Load(new XmlNodeReader(loaded.UIPatches[0].Data)); //nav = doc.CreateNavigator(); //xpath = nav.Compile("//panel_template[@id='AdmiralManagerDialog']"); //Assert.IsTrue(nav.Select(xpath).Count == 1); }
public void ValidatePatchXpaths() { var subject = new PatchDataLoader(); var dllLoader = new DataLoader(); var uiDataLoader = new UIDataLoader(); var patchPath = Path.Combine(Directory.GetCurrentDirectory(), "TestData", "CorePatches.xml"); var uiPath = Path.Combine(Directory.GetCurrentDirectory(), "TestData", "skin1.xml"); var loaded = subject.LoadData(patchPath); foreach (var definition in loaded.Definitions.Where(d => d.UIPatches != null && d.UIPatches.Any(u => u.FilePath.EndsWith("skin1.xml")))) { foreach (var uiPatch in definition.UIPatches) { Assert.IsTrue(uiPatch.FilePath.EndsWith("skin1.xml")); //need to extend tests for other files var doc = uiDataLoader.FixAndLoadXml(uiPath); var xpathNode = doc.XPathSelectElement(uiPatch.XPath); Assert.IsTrue(xpathNode != null); } } }
public void CanSerialise() { var subject = new PatchDataLoader(); var doc1 = new XmlDocument(); var node = doc1.AppendChild(doc1.CreateNode(XmlNodeType.Element, "Data", "")); node.AppendChild(doc1.CreateNode(XmlNodeType.Element, "aha", "NSaha")); var doc2 = new XmlDocument(); node = doc2.AppendChild(doc2.CreateNode(XmlNodeType.Element, "Data", "")); node.AppendChild(doc2.CreateNode(XmlNodeType.Element, "oho","NSoho")); var testDefinition = new PatchDefinition() { Category = PatchCategory.Enhancement, UIPatches = new List<UIPatch> { new UIPatch() { PatchMode = UIPatchMode.Replace, Data = doc1, FilePath = "assetpath/subdir/target.xml", XPath = "//aha[@id='bla'" }, new UIPatch() { PatchMode = UIPatchMode.Replace, Data = doc2, FilePath = "assetpath/dir2/targets.xml", XPath = "//oha[@id='bl'" }, } }; var targetPath = Path.Combine(Directory.GetCurrentDirectory(), "filee.xml"); var patches = new PatchData() { Definitions = new List<PatchDefinition>() { testDefinition } }; subject.SaveData(patches, targetPath); Assert.IsTrue(File.Exists(targetPath)); string contents = ""; using (var stringReader = new StreamReader(targetPath)) { contents = stringReader.ReadToEnd(); } Assert.IsTrue(contents.Contains("NSaha")); Assert.IsTrue(contents.Contains("NSoho")); }