protected override Task LoadAsync(HttpClient httpClient) { return(Task.Run(async() => { // SkillTree does nothing if the files are already there. // Data/Assets var assetsFolder = Path.Combine(SavePath, "Assets"); if (Directory.Exists(assetsFolder)) { Directory.Delete(assetsFolder, true); } Directory.CreateDirectory(assetsFolder); // Data/Opts.txt var optsFile = Path.Combine(SavePath, "Opts.txt"); if (File.Exists(optsFile)) { File.Delete(optsFile); } // Data/Skilltree.txt var treeFile = Path.Combine(SavePath, "Skilltree.txt"); if (File.Exists(treeFile)) { File.Delete(treeFile); } await SkillTree.CreateAsync(new PersistentData(false), null, null, false); })); }
public static void Initalize(TestContext testContext) { AppData.SetApplicationData(Environment.CurrentDirectory); if (ItemDB.IsEmpty()) { ItemDB.Load("Data/ItemDB/GemList.xml", true); } _treeTask = SkillTree.CreateAsync(new PersistentData(false), null); }
private static HashSet <SkillNode> DecodeInSkillTree(string buildUrl) { // SkillTree.DecodeUrl accesses static state that should be reset between tests SkillTree.ClearAssets(); _tree = SkillTree.CreateAsync(_persistentData).Result; HashSet <SkillNode> nodes; SkillTree.DecodeUrl(buildUrl, out nodes, _tree); return(nodes); }
public async Task FullPoeplannerTreeLoadUnloadTest() { var build = _builds.FindByName("PoeplannerFullTreeWithMaxScionAndBandits"); SkillTree.ClearAssets(); SkillTree tree = await SkillTree.CreateAsync(_persistentData); tree.LoadFromUrl(build.DefaultUrl); var actualUrl = new SkillTreeSerializer(tree).ToUrl(); Assert.AreEqual(build.GetAlternativeUrl("pathofexile"), actualUrl); }
public async Task GetPointCountTest() { var build = _builds.FindByName("PoeplannerWitchOccultistAscendant"); var targetUrl = build.GetAlternativeUrl("pathofexileWindowed"); // Need instance created in current thread for a WPF UI logic SkillTree.ClearAssets(); SkillTree tree = await SkillTree.CreateAsync(_persistentData); tree.LoadFromUrl(targetUrl); var deserializer = _tree.BuildConverter.GetUrlDeserializer(targetUrl); var points = tree.GetPointCount(); var count = points["NormalUsed"] + points["AscendancyUsed"] + points["ScionAscendancyChoices"]; Assert.AreEqual(count, deserializer.GetPointsCount(true)); }
public static void ClassInitialize(TestContext testContext) { if (ItemDB.IsEmpty()) { ItemDB.Load("Data/ItemDB/GemList.xml", true); } _persistentData = new BarePersistentData { CurrentBuild = new PoEBuild() }; _persistentData.EquipmentData = EquipmentData.CreateAsync(_persistentData.Options).Result; _builds = TestBuildUrlLoader.LoadFromXmlFile("../../TestBuilds/BuildUrls.xml"); _builds.AddRange(TestBuildUrlLoader.LoadFromXmlFile("../../TestBuilds/EmptyBuildUrls.xml")); // This initialization requires a lot of time, so it is reasonable to reuse one instance if possible. // However, as some tests may change tree state this field should be used only for methods, // that does not depend on a tree instance. _tree = SkillTree.CreateAsync(_persistentData).Result; }
public async Task SaveToUrlNoAscendancyPointsTest() { var build = _builds.FindByName("PathofexilWitchOccultist"); var targetUrl = build.DefaultUrl; string expectedSegment = targetUrl.Split('/').LastOrDefault(); // Need new instance created in current thread for a WPF UI logic SkillTree.ClearAssets(); SkillTree tree = await SkillTree.CreateAsync(_persistentData); tree.LoadFromUrl(targetUrl); var actualSegment = tree.Serializer.ToUrl().Split('/').LastOrDefault(); Assert.AreEqual(expectedSegment, actualSegment); SkillTree.ClearAssets(); }
public async Task SaveToUrlTest() { var build = _builds.FindByName("PoeplannerWitchOccultistAscendant"); var targetUrl = build.GetAlternativeUrl("pathofexileWindowed"); string expectedUrl = targetUrl.Split('/').LastOrDefault(); // Need instance created in current thread for a WPF UI logic SkillTree.ClearAssets(); SkillTree tree = await SkillTree.CreateAsync(_persistentData); tree.LoadFromUrl(targetUrl); var actualUrl = tree.Serializer.ToUrl().Split('/').LastOrDefault(); Assert.AreEqual(expectedUrl, actualUrl); SkillTree.ClearAssets(); }
public async Task TestBuild() { // Read build entry. string treeURL = TestContext.DataRow["TreeURL"].ToString(); int level = Convert.ToInt32(TestContext.DataRow["Level"]); string buildFile = @"..\..\TestBuilds\" + TestContext.DataRow["BuildFile"].ToString(); List <string> expectDefense = new List <string>(); List <string> expectOffense = new List <string>(); if (TestContext.DataRow.Table.Columns.Contains("ExpectDefence")) { using (StringReader reader = new StringReader(TestContext.DataRow["ExpectDefence"].ToString())) { string line; while ((line = reader.ReadLine()) != null) { line = line.Trim(); if (line.Length > 0 && !line.StartsWith("#")) { expectDefense.Add(line.Trim()); } } } } if (TestContext.DataRow.Table.Columns.Contains("ExpectOffence")) { using (StringReader reader = new StringReader(TestContext.DataRow["ExpectOffence"].ToString())) { string line; while ((line = reader.ReadLine()) != null) { line = line.Trim(); if (line.Length > 0 && !line.StartsWith("#")) { expectOffense.Add(line.Trim()); } } } } _persistentData.EquipmentData = await EquipmentData.CreateAsync(_persistentData.Options); var tree = await SkillTree.CreateAsync(_persistentData, null); // Initialize structures. tree.LoadFromUrl(treeURL); tree.Level = level; string itemData = File.ReadAllText(buildFile); ItemAttributes itemAttributes = new ItemAttributes(_persistentData, itemData); Compute.Initialize(tree, itemAttributes); // Compare defense properties. Dictionary <string, List <string> > defense = new Dictionary <string, List <string> >(); if (expectDefense.Count > 0) { foreach (ListGroup grp in Compute.Defense()) { List <string> props = new List <string>(); foreach (string item in grp.Properties.Select(InsertNumbersInAttributes)) { props.Add(item); } defense.Add(grp.Name, props); } List <string> group = null; foreach (string entry in expectDefense) { if (entry.Contains(':')) // Property: Value { Assert.IsNotNull(group, "Missing defence group [" + TestContext.DataRow["BuildFile"].ToString() + "]"); Assert.IsTrue(group.Contains(entry), "Wrong " + entry + " [" + TestContext.DataRow["BuildFile"].ToString() + "]"); } else // Group { Assert.IsTrue(defense.ContainsKey(entry), "No such defence group: " + entry + " [" + TestContext.DataRow["BuildFile"].ToString() + "]"); group = defense[entry]; } } } // Compare offense properties. Dictionary <string, List <string> > offense = new Dictionary <string, List <string> >(); if (expectOffense.Count > 0) { foreach (ListGroup grp in Compute.Offense()) { List <string> props = new List <string>(); foreach (string item in grp.Properties.Select(InsertNumbersInAttributes)) { props.Add(item); } offense.Add(grp.Name, props); } List <string> group = null; foreach (string entry in expectOffense) { if (entry.Contains(':')) // Property: Value { Assert.IsNotNull(group, "Missing offence group [" + TestContext.DataRow["BuildFile"].ToString() + "]"); Assert.IsTrue(group.Contains(entry), "Wrong " + entry + " [" + TestContext.DataRow["BuildFile"].ToString() + "]"); } else // Group { Assert.IsTrue(offense.ContainsKey(entry), "No such offence group: " + entry + " [" + TestContext.DataRow["BuildFile"].ToString() + "]"); group = offense[entry]; } } } }
public async Task Build_Test() { // Read build entry. var resultTree = FileEx.GetResource <TestCharacterSheet>("UnitTests.TestBuilds/Builds.xml"); var xmlFile = XDocument.Parse(resultTree); var build = XmlHelpers.DeserializeXml <TestBuild>(xmlFile.Root.Element("TestBuild").ToString()); AbstractPersistentData _persistentData; var db = GemDB.LoadFromText(FileEx.GetResource <GemDB>(@"POESKillTree.Data.ItemDB.GemList.xml")); _persistentData = new BarePersistentData { CurrentBuild = new PoEBuild() }; int level = Convert.ToInt32(build.Level); List <string> expectDefense = new List <string>(); List <string> expectOffense = new List <string>(); using (StringReader reader = new StringReader(build.ExpectDefence)) { string line; while ((line = reader.ReadLine()) != null) { line = line.Trim(); if (line.Length > 0 && !line.StartsWith("#")) { expectDefense.Add(line.Trim()); } } } using (StringReader reader = new StringReader(build.ExpectOffence)) { string line; while ((line = reader.ReadLine()) != null) { line = line.Trim(); if (line.Length > 0 && !line.StartsWith("#")) { expectOffense.Add(line.Trim()); } } } _persistentData.EquipmentData = await EquipmentData.CreateAsync(_persistentData.Options); var tree = await SkillTree.CreateAsync(_persistentData, null); // Initialize structures. tree.LoadFromUrl(build.TreeUrl); tree.Level = level; string itemData = FileEx.GetResource <TestCharacterSheet>("UnitTests.TestBuilds." + build.BuildFile); ItemAttributes itemAttributes = new ItemAttributes(_persistentData, itemData); var Compute = new Computation(tree, itemAttributes); //failing here because "Staff" isn't recognized. // Compare defense properties. Dictionary <string, List <string> > defense = new Dictionary <string, List <string> >(); if (expectDefense.Count > 0) { foreach (ListGroup grp in Compute.GetDefensiveAttributes()) { List <string> props = new List <string>(); foreach (string item in grp.Properties.Select(InsertNumbersInAttributes)) { props.Add(item); } defense.Add(grp.Name, props); } List <string> group = null; foreach (string entry in expectDefense) { if (entry.Contains(':')) // Property: Value { Assert.IsNotNull(group, "Missing defence group [" + build.BuildFile + "]"); Assert.IsTrue(group.Contains(entry), "Wrong " + entry + " [" + build.BuildFile + "]"); } else // Group { Assert.IsTrue(defense.ContainsKey(entry), "No such defence group: " + entry + " [" + build.BuildFile + "]"); group = defense[entry]; } } } // Compare offense properties. Dictionary <string, List <string> > offense = new Dictionary <string, List <string> >(); if (expectOffense.Count > 0) { foreach (ListGroup grp in Compute.Offense()) { List <string> props = new List <string>(); foreach (string item in grp.Properties.Select(InsertNumbersInAttributes)) { props.Add(item); } offense.Add(grp.Name, props); } List <string> group = null; foreach (string entry in expectOffense) { if (entry.Contains(':')) // Property: Value { Assert.IsNotNull(group, "Missing offence group [" + build.BuildFile + "]"); Assert.IsTrue(group.Contains(entry), "Wrong " + entry + " [" + build.BuildFile + "]"); } else // Group { Assert.IsTrue(offense.ContainsKey(entry), "No such offence group: " + entry + " [" + build.BuildFile + "]"); group = offense[entry]; } } } }