From d515616f729068c0962b808556fb1b52069fbe1a Mon Sep 17 00:00:00 2001 From: Zack Piispanen Date: Sat, 23 Jul 2011 22:27:21 -0400 Subject: [PATCH] A few more tests --- TShockAPI/DB/RegionManager.cs | 106 +++++++++++++++++++++--- UnitTests/ItemManagerTest.cs | 29 +------ UnitTests/RegionManagerTest.cs | 68 +++++++++++---- UnitTests/RegionManagerTest.orderedtest | 12 ++- 4 files changed, 161 insertions(+), 54 deletions(-) diff --git a/TShockAPI/DB/RegionManager.cs b/TShockAPI/DB/RegionManager.cs index 75ee9f7e..2c298dca 100644 --- a/TShockAPI/DB/RegionManager.cs +++ b/TShockAPI/DB/RegionManager.cs @@ -285,6 +285,56 @@ namespace TShockAPI.DB } } + public void ReloadForUnitTest(String n) + { + using (var com = database.CreateCommand()) + { + com.CommandText = "SELECT * FROM Regions WHERE WorldID=@worldid"; + com.AddParameter("@worldid", n); + using (var reader = com.ExecuteReader()) + { + Regions.Clear(); + while (reader.Read()) + { + int X1 = reader.Get("X1"); + int Y1 = reader.Get("Y1"); + int height = reader.Get("height"); + int width = reader.Get("width"); + int Protected = reader.Get("Protected"); + string MergedIDs = DbExt.Get(reader, "UserIds"); + string name = DbExt.Get(reader, "RegionName"); + System.Console.WriteLine(MergedIDs); + string[] SplitIDs = MergedIDs.Split(','); + + Region r = new Region(new Rectangle(X1, Y1, width, height), name, Protected, Main.worldID.ToString()); + r.RegionAllowedIDs = new int[SplitIDs.Length]; + try + { + for (int i = 0; i < SplitIDs.Length; i++) + { + if (SplitIDs.Length == 1 && SplitIDs[0].Equals("")) + { + break; + } + //System.Console.WriteLine(SplitIDs[i]); + r.RegionAllowedIDs[i] = Convert.ToInt32(SplitIDs[i]); + } + } + catch (Exception e) + { + Log.Error("Your database contains invalid UserIDs (they should be ints)."); + Log.Error("A lot of things will fail because of this. You must manually delete and re-create the allowed field."); + Log.Error(e.Message); + Log.Error(e.StackTrace); + } + + Regions.Add(r); + } + reader.Close(); + } + } + } + public bool AddRegion(int tx, int ty, int width, int height, string regionname, string worldid) { try @@ -301,11 +351,9 @@ namespace TShockAPI.DB com.AddParameter("@worldid", worldid); com.AddParameter("@userids", ""); com.AddParameter("@protected", 1); - if (com.ExecuteNonQuery() > 0) - { - Regions.Add(new Region(new Rectangle(tx, ty, width, height), regionname, 0, worldid)); - return true; - } + com.ExecuteNonQuery(); + Regions.Add(new Region(new Rectangle(tx, ty, width, height), regionname, 0, worldid)); + return true; } } @@ -326,7 +374,7 @@ namespace TShockAPI.DB com.AddParameter("@name", name.ToLower()); com.AddParameter("@worldid", Main.worldID.ToString()); com.ExecuteNonQuery(); - ReloadAllRegions(); + Regions.Remove(getRegion(name)); return true; } } @@ -347,9 +395,31 @@ namespace TShockAPI.DB com.AddParameter("@name", name); com.AddParameter("@bool", state ? 1 : 0); com.AddParameter("@worldid", Main.worldID.ToString()); - int q = com.ExecuteNonQuery(); - ReloadAllRegions(); - return (q > 0); + com.ExecuteNonQuery(); + getRegion(name).DisableBuild = state ? 1 : 0; + return true; + } + } + catch (Exception ex) + { + Log.Error(ex.ToString()); + return false; + } + } + + public bool SetRegionStateTest(string name, string world, bool state) + { + try + { + using (var com = database.CreateCommand()) + { + com.CommandText = "UPDATE Regions SET Protected=@bool WHERE RegionName=@name AND WorldID=@worldid"; + com.AddParameter("@name", name); + com.AddParameter("@bool", state ? 1 : 0); + com.AddParameter("@worldid", world); + com.ExecuteNonQuery(); + getRegion(name).DisableBuild = state ? 1 : 0; + return true; } } catch (Exception ex) @@ -392,7 +462,7 @@ namespace TShockAPI.DB public static List ListIDs(string MergedIDs) { List SplitIDs = new List(); - var sb = new StringBuilder(); + /*var sb = new StringBuilder(); for (int i = 0; i < MergedIDs.Length; i++) { char c = MergedIDs[i]; @@ -406,6 +476,12 @@ namespace TShockAPI.DB SplitIDs.Add(sb.ToString()); sb.Clear(); } + }*/ + String[] s = MergedIDs.Split(','); + for( int i = 0; i < s.Length; i++ ) + { + if (!s[i].Equals("")) + SplitIDs.Add(s[i]); } return SplitIDs; } @@ -482,6 +558,16 @@ namespace TShockAPI.DB } return regions; } + + public Region getRegion(String name) + { + foreach (Region r in Regions) + { + if (r.RegionName.Equals(name)) + return r; + } + return new Region(); + } } public class Region diff --git a/UnitTests/ItemManagerTest.cs b/UnitTests/ItemManagerTest.cs index 992e5c35..ef6ed314 100644 --- a/UnitTests/ItemManagerTest.cs +++ b/UnitTests/ItemManagerTest.cs @@ -24,6 +24,7 @@ namespace UnitTests public class ItemManagerTest { public static IDbConnection DB; + public static ItemManager manager; [TestInitialize] public void Initialize() { @@ -32,33 +33,12 @@ namespace UnitTests DB = new SqliteConnection(string.Format("uri=file://{0},Version=3", "tshock.test.sqlite")); DB.Open(); - /*try - { - var hostport = Config.MySqlHost.Split(':'); - DB = new MySqlConnection(); - DB.ConnectionString = String.Format("Server='{0}'; Port='{1}'; Database='{2}'; Uid='{3}'; Pwd='{4}';", - hostport[0], - hostport.Length > 1 ? hostport[1] : "3306", - Config.MySqlDbName, - Config.MySqlUsername, - Config.MySqlPassword - ); - DB.Open(); - } - catch (MySqlException ex) - { - Log.Error(ex.ToString()); - throw new Exception("MySql not setup correctly"); - }*/ + manager = new ItemManager(DB); } [TestMethod] public void SQLiteItemTest_AddBan() { - // - // TODO: Add test logic here - // - ItemManager manager = new ItemManager(DB); Assert.IsNotNull(manager); Assert.IsFalse( manager.ItemIsBanned("Dirt Block"), "Item isn't banned" ); manager.AddNewBan("Dirt Block"); @@ -74,10 +54,7 @@ namespace UnitTests [TestMethod] public void SQLiteItemTest_RemoveBan() { - // - // TODO: Add test logic here - // - ItemManager manager = new ItemManager(DB); + manager = new ItemManager(DB); Assert.IsNotNull(manager); Assert.AreEqual(2, manager.ItemBans.Count); manager.AddNewBan("Dirt Block"); diff --git a/UnitTests/RegionManagerTest.cs b/UnitTests/RegionManagerTest.cs index c67d0e41..2c2e5218 100644 --- a/UnitTests/RegionManagerTest.cs +++ b/UnitTests/RegionManagerTest.cs @@ -29,51 +29,91 @@ namespace UnitTests DB.Open(); manager = new RegionManager(DB); + manager.ReloadForUnitTest("test"); } [TestMethod] public void AddRegion() { - Region r = new Region( new Rectangle(100,100,100,100), "test", 0, "test world"); + Region r = new Region( new Rectangle(100,100,100,100), "test", 1, "test"); Assert.IsTrue(manager.AddRegion(r.RegionArea.X, r.RegionArea.Y, r.RegionArea.Width, r.RegionArea.Height, r.RegionName, r.RegionWorldID)); Assert.AreEqual(1, manager.Regions.Count); + Assert.IsNotNull(manager.getRegion("test")); - Region r2 = new Region(new Rectangle(201, 201, 100, 100), "test2", 0, "test world"); + Region r2 = new Region(new Rectangle(201, 201, 100, 100), "test2", 1, "test"); manager.AddRegion(r2.RegionArea.X, r2.RegionArea.Y, r2.RegionArea.Width, r2.RegionArea.Height, r2.RegionName, r2.RegionWorldID); Assert.AreEqual(2, manager.Regions.Count); + Assert.IsNotNull(manager.getRegion("test2")); } [TestMethod] public void DeleteRegion() { + Assert.IsTrue(2 == manager.Regions.Count); Assert.IsTrue(manager.DeleteRegion("test")); + Assert.IsTrue(1 == manager.Regions.Count); Assert.IsTrue(manager.DeleteRegion("test2")); - Assert.AreEqual(0, manager.Regions.Count); + Assert.IsTrue(0 == manager.Regions.Count); } [TestMethod] public void InRegion() { - // - // TODO: Add test logic here - // + Assert.IsTrue(manager.InArea(100, 100)); + Assert.IsTrue(manager.InArea(150, 150)); + Assert.IsTrue(manager.InArea(200, 200)); + Assert.IsTrue(manager.InArea(201, 201)); + Assert.IsTrue(manager.InArea(251, 251)); + Assert.IsTrue(manager.InArea(301, 301)); + Assert.IsFalse(manager.InArea(311, 311)); + Assert.IsFalse(manager.InArea(99, 99)); } [TestMethod] - public void TestMethod2() + public void SetRegionState() { - // - // TODO: Add test logic here - // + Assert.IsTrue(manager.getRegion("test").DisableBuild == 1); + manager.SetRegionStateTest("test", "test", false); + Assert.IsTrue(manager.getRegion("test").DisableBuild == 0); + manager.SetRegionStateTest("test", "test", true); + Assert.IsTrue(manager.getRegion("test").DisableBuild == 1); + Assert.IsTrue(manager.getRegion("test2").DisableBuild == 1); + manager.SetRegionStateTest("test2", "test", false); + Assert.IsTrue(manager.getRegion("test2").DisableBuild == 0); + manager.SetRegionStateTest("test2", "test", true); + Assert.IsTrue(manager.getRegion("test2").DisableBuild == 1); } [TestMethod] - public void TestMethod3() + public void CanBuild() { - // - // TODO: Add test logic here - // + /** + * For now, this test is useless. Need to implement user groups so we can alter Canbuild permission. + */ + TSPlayer t = new TSPlayer(0); + Assert.IsFalse( manager.CanBuild( 100,100,t) ); + } + + [TestMethod] + public void AddUser() + { + /** + * For now, this test is useless. Need to implement users so we have names to get ids from. + */ + } + + [TestMethod] + public void ListID() + { + Assert.IsTrue(RegionManager.ListIDs("1,2,3,4,5").Count == 5); + Assert.IsTrue(RegionManager.ListIDs("").Count == 0); + } + + [TestMethod] + public void ListRegions() + { + //needs a little more work. } [TestCleanup] diff --git a/UnitTests/RegionManagerTest.orderedtest b/UnitTests/RegionManagerTest.orderedtest index 201f1b3f..c9d1a48f 100644 --- a/UnitTests/RegionManagerTest.orderedtest +++ b/UnitTests/RegionManagerTest.orderedtest @@ -1,10 +1,14 @@  - + + - - - + + + + + + \ No newline at end of file