Esempio n. 1
0
        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);
                    }

                }
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);

                }
            }
        }
Esempio n. 4
0
        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"));
        }