Merge remote-tracking branch 'remotes/origin/general-devel'

Conflicts:
	TShockAPI/Commands.cs
	TShockAPI/DB/GroupManager.cs
	TShockAPI/DB/RegionManager.cs
	TShockAPI/Properties/AssemblyInfo.cs
	Terraria.sln
This commit is contained in:
Lucas Nicodemus 2011-07-23 17:25:20 -06:00
commit 5c59ebf71a
18 changed files with 660 additions and 15 deletions

10
Local.testsettings Normal file
View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<TestSettings name="Local" id="943ada2e-478e-45be-b4b8-6f7d6d949602" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<Description>These are default test settings for a local test run.</Description>
<Deployment enabled="false" />
<Execution>
<TestTypeSpecific />
<AgentRule name="Execution Agents">
</AgentRule>
</Execution>
</TestSettings>

View file

@ -138,6 +138,9 @@ namespace TShockAPI
ChatCommands.Add(new Command("warp", UseWarp, "warp")); ChatCommands.Add(new Command("warp", UseWarp, "warp"));
ChatCommands.Add(new Command("managewarp", SetWarp, "setwarp")); ChatCommands.Add(new Command("managewarp", SetWarp, "setwarp"));
ChatCommands.Add(new Command("managewarp", DeleteWarp, "delwarp")); ChatCommands.Add(new Command("managewarp", DeleteWarp, "delwarp"));
ChatCommands.Add(new Command("managegroup", AddGroup, "addGroup"));
ChatCommands.Add(new Command("managegroup", DeleteGroup, "delGroup"));
ChatCommands.Add(new Command("managegroup", ModifyGroup, "modGroup"));
ChatCommands.Add(new Command("cfg", SetSpawn, "setspawn")); ChatCommands.Add(new Command("cfg", SetSpawn, "setspawn"));
ChatCommands.Add(new Command("cfg", Reload, "reload")); ChatCommands.Add(new Command("cfg", Reload, "reload"));
ChatCommands.Add(new Command("cfg", DebugConfiguration, "debug-config")); ChatCommands.Add(new Command("cfg", DebugConfiguration, "debug-config"));
@ -1204,6 +1207,72 @@ namespace TShockAPI
#endregion Teleport Commands #endregion Teleport Commands
#region Group Management
private static void AddGroup(CommandArgs args)
{
if (args.Parameters.Count > 0)
{
String groupname = args.Parameters[0];
args.Parameters.RemoveAt(0);
String permissions = String.Join(",", args.Parameters );
String response = TShock.Groups.addGroup(groupname, permissions);
if( response.Length > 0 )
args.Player.SendMessage(response, Color.Green);
}
else
{
args.Player.SendMessage("Incorrect format: /addGroup <group name> [optional permissions]", Color.Red);
}
}
private static void DeleteGroup(CommandArgs args)
{
if (args.Parameters.Count > 0)
{
String groupname = args.Parameters[0];
String response = TShock.Groups.delGroup(groupname);
if (response.Length > 0)
args.Player.SendMessage(response, Color.Green);
}
else
{
args.Player.SendMessage("Incorrect format: /delGroup <group name>", Color.Red);
}
}
private static void ModifyGroup(CommandArgs args)
{
if (args.Parameters.Count > 2)
{
String com = args.Parameters[0];
args.Parameters.RemoveAt(0);
String groupname = args.Parameters[0];
args.Parameters.RemoveAt(0);
if (com.Equals("add"))
{
String response = TShock.Groups.addPermission(groupname, args.Parameters);
if (response.Length > 0)
args.Player.SendMessage(response, Color.Green);
return;
}
else if (com.Equals("del") || com.Equals("delete"))
{
String response = TShock.Groups.delPermission(groupname, args.Parameters);
if (response.Length > 0)
args.Player.SendMessage(response, Color.Green);
return;
}
}
args.Player.SendMessage("Incorrect format: /modGroup add|del <group name> <permission to add or remove>", Color.Red);
}
#endregion Group Management
#region Server Config Commands #region Server Config Commands
private static void SetSpawn(CommandArgs args) private static void SetSpawn(CommandArgs args)
@ -1966,8 +2035,13 @@ namespace TShockAPI
return; return;
} }
int itemAmount = 0; int itemAmount = 0;
int.TryParse(args.Parameters[args.Parameters.Count - 1], out itemAmount);
var items = Tools.GetItemByIdOrName(args.Parameters[0]); var items = Tools.GetItemByIdOrName(args.Parameters[0]);
args.Parameters.RemoveAt(0);
string plStr = args.Parameters[0];
args.Parameters.RemoveAt(0);
if( args.Parameters.Count > 0 )
int.TryParse(args.Parameters[args.Parameters.Count - 1], out itemAmount);
if (items.Count == 0) if (items.Count == 0)
{ {
@ -1982,7 +2056,6 @@ namespace TShockAPI
var item = items[0]; var item = items[0];
if (item.type >= 1 && item.type < Main.maxItemTypes) if (item.type >= 1 && item.type < Main.maxItemTypes)
{ {
string plStr = args.Parameters[1];
var players = Tools.FindPlayer(plStr); var players = Tools.FindPlayer(plStr);
if (players.Count == 0) if (players.Count == 0)
{ {

View file

@ -37,7 +37,6 @@ namespace TShockAPI.DB
AddGroup("default", "canwater,canlava,warp,canbuild"); AddGroup("default", "canwater,canlava,warp,canbuild");
AddGroup("vip", "default,canwater,canlava,warp,canbuild,reservedslot"); AddGroup("vip", "default,canwater,canlava,warp,canbuild,reservedslot");
String file = Path.Combine(TShock.SavePath, "groups.txt"); String file = Path.Combine(TShock.SavePath, "groups.txt");
if (File.Exists(file)) if (File.Exists(file))
{ {
@ -124,6 +123,96 @@ namespace TShockAPI.DB
return false; return false;
} }
public String addGroup(String name, String permissions)
{
String message = "";
if( GroupExists( name ) )
return "Error: Group already exists. Use /modGroup to change permissions.";
using (var com = database.CreateCommand())
{
if (TShock.Config.StorageType.ToLower() == "sqlite")
com.CommandText = "INSERT OR IGNORE INTO GroupList (GroupName, Commands, OrderBy) VALUES (@groupname, @commands, @order);";
else if (TShock.Config.StorageType.ToLower() == "mysql")
com.CommandText = "INSERT IGNORE INTO GroupList SET GroupName=@groupname, Commands=@commands, OrderBy=@order;";
com.AddParameter("@groupname", name);
com.AddParameter("@commands", permissions);
com.AddParameter("@order", "0");
if (com.ExecuteNonQuery() == 1)
message = "Group " + name + " has been created successfully.";
Group g = new Group(name);
g.permissions.Add(permissions);
groups.Add(g);
}
return message;
}
public String delGroup(String name)
{
String message = "";
if (!GroupExists(name))
return "Error: Group doesn't exists.";
using (var com = database.CreateCommand())
{
com.CommandText = "Delete FROM GroupList WHERE GroupName=@groupname;";
com.AddParameter("@groupname", name);
if (com.ExecuteNonQuery() == 1)
message = "Group " + name + " has been deleted successfully.";
groups.Remove(Tools.GetGroup(name));
}
return message;
}
public String addPermission(String name, List<String> permissions)
{
String message = "";
if (!GroupExists(name))
return "Error: Group doesn't exists.";
using (var com = database.CreateCommand())
{
Group g = Tools.GetGroup(name);
List<String> perm = g.permissions;
foreach (String p in permissions)
{
if (!perm.Contains(p))
{
if (perm.Count > 0 && perm[0].Equals(""))
perm[0] = p;
else
g.permissions.Add(p);
}
}
com.CommandText = "UPDATE GroupList SET Commands=@perm WHERE GroupName=@name;";
com.AddParameter("@perm", String.Join(",", perm));
com.AddParameter("@name", name);
if (com.ExecuteNonQuery() == 1)
message = "Group " + name + " has been modified successfully.";
}
return message;
}
public String delPermission(String name, List<String> permissions)
{
String message = "";
if (!GroupExists(name))
return "Error: Group doesn't exists.";
using (var com = database.CreateCommand())
{
Group g = Tools.GetGroup(name);
List<String> perm = g.permissions;
foreach (String p in permissions)
{
if (perm.Contains(p))
g.permissions.Remove(p);
}
com.CommandText = "UPDATE GroupList SET Commands=@perm WHERE GroupName=@name;";
com.AddParameter("@perm", String.Join(",", perm));
com.AddParameter("@name", name);
if (com.ExecuteNonQuery() == 1)
message = "Group " + name + " has been modified successfully.";
}
return message;
}
public void LoadPermisions() public void LoadPermisions()
{ {
groups = new List<Group>(); groups = new List<Group>();

View file

@ -36,7 +36,7 @@ namespace TShockAPI.DB
String line; String line;
while ((line = sr.ReadLine()) != null) while ((line = sr.ReadLine()) != null)
{ {
if (!line.Equals("") && !line.Substring( 0, 1 ).Equals("#") ) if (!line.Equals("") && !line.Substring(0, 1).Equals("#"))
{ {
if (TShock.Config.StorageType.ToLower() == "sqlite") if (TShock.Config.StorageType.ToLower() == "sqlite")
com.CommandText = "INSERT OR IGNORE INTO 'ItemBans' (ItemName) VALUES (@name);"; com.CommandText = "INSERT OR IGNORE INTO 'ItemBans' (ItemName) VALUES (@name);";
@ -44,8 +44,8 @@ namespace TShockAPI.DB
com.CommandText = "INSERT IGNORE INTO ItemBans SET ItemName=@name;"; com.CommandText = "INSERT IGNORE INTO ItemBans SET ItemName=@name;";
int id = 0; int id = 0;
int.TryParse(line, out id ); int.TryParse(line, out id);
com.AddParameter("@name", Tools.GetItemById( id ).name ); com.AddParameter("@name", Tools.GetItemById(id).name);
com.ExecuteNonQuery(); com.ExecuteNonQuery();
com.Parameters.Clear(); com.Parameters.Clear();
} }
@ -60,19 +60,25 @@ namespace TShockAPI.DB
File.Delete(file2); File.Delete(file2);
File.Move(file, file2); File.Move(file, file2);
} }
}
UpdateItemBans();
}
public void UpdateItemBans()
{
ItemBans.Clear();
using (var com = database.CreateCommand())
{
com.CommandText = "SELECT * FROM ItemBans"; com.CommandText = "SELECT * FROM ItemBans";
using (var reader = com.ExecuteReader()) using (var reader = com.ExecuteReader())
{ {
while (reader.Read()) while (reader!=null&&reader.Read())
ItemBans.Add(reader.Get<string>("ItemName")); ItemBans.Add(reader.Get<string>("ItemName"));
reader.Close();
} }
} }
} }
public void AddNewBan(string itemname = "") public void AddNewBan(string itemname = "")
{ {
try try
@ -82,6 +88,8 @@ namespace TShockAPI.DB
com.CommandText = "INSERT INTO ItemBans (ItemName) VALUES (@itemname);"; com.CommandText = "INSERT INTO ItemBans (ItemName) VALUES (@itemname);";
com.AddParameter("@itemname", Tools.GetItemByName(itemname)[0].name); com.AddParameter("@itemname", Tools.GetItemByName(itemname)[0].name);
com.ExecuteNonQuery(); com.ExecuteNonQuery();
if( !ItemIsBanned( itemname ) )
ItemBans.Add(itemname);
} }
} }
catch (Exception ex) catch (Exception ex)
@ -92,13 +100,16 @@ namespace TShockAPI.DB
public void RemoveBan(string itemname) public void RemoveBan(string itemname)
{ {
if (!ItemIsBanned(itemname))
return;
try try
{ {
using (var com = database.CreateCommand()) using (var com = database.CreateCommand())
{ {
com.CommandText = "DELETE FROM ItemBans WHERE ItemName=@itemname;"; com.CommandText = "Delete FROM 'ItemBans' WHERE ItemName=@itemname;";
com.AddParameter("@itemname", Tools.GetItemByName(itemname)[0].name); com.AddParameter("@itemname", Tools.GetItemByName(itemname)[0].name);
com.ExecuteNonQuery(); com.ExecuteNonQuery();
ItemBans.Remove(itemname);
} }
} }
catch (Exception ex) catch (Exception ex)

View file

@ -201,7 +201,6 @@ namespace TShockAPI.DB
File.Delete(file2); File.Delete(file2);
//File.Move(file, file2); //File.Move(file, file2);
} }
if (updates > 0) if (updates > 0)
ReloadAllRegions(); ReloadAllRegions();
} }
@ -249,7 +248,7 @@ namespace TShockAPI.DB
int Protected = reader.Get<int>("Protected"); int Protected = reader.Get<int>("Protected");
string MergedIDs = DbExt.Get<string>(reader, "UserIds"); string MergedIDs = DbExt.Get<string>(reader, "UserIds");
string name = DbExt.Get<string>(reader, "RegionName"); string name = DbExt.Get<string>(reader, "RegionName");
System.Console.WriteLine(MergedIDs);
string[] SplitIDs = MergedIDs.Split(','); string[] SplitIDs = MergedIDs.Split(',');
Region r = new Region(new Rectangle(X1, Y1, width, height), name, Protected, Main.worldID.ToString()); Region r = new Region(new Rectangle(X1, Y1, width, height), name, Protected, Main.worldID.ToString());
@ -262,6 +261,7 @@ namespace TShockAPI.DB
{ {
break; break;
} }
//System.Console.WriteLine(SplitIDs[i]);
r.RegionAllowedIDs[i] = Convert.ToInt32(SplitIDs[i]); r.RegionAllowedIDs[i] = Convert.ToInt32(SplitIDs[i]);
} }
} }
@ -303,7 +303,7 @@ namespace TShockAPI.DB
com.AddParameter("@protected", 1); com.AddParameter("@protected", 1);
if (com.ExecuteNonQuery() > 0) if (com.ExecuteNonQuery() > 0)
{ {
ReloadAllRegions(); Regions.Add(new Region(new Rectangle(tx, ty, width, height), regionname, 0, worldid));
return true; return true;
} }

View file

@ -35,5 +35,6 @@ using System.Runtime.InteropServices;
// by using the '*' as shown below: // by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("3.1.3.0723")] [assembly: AssemblyVersion("3.1.3.0723")]
[assembly: AssemblyFileVersion("3.1.3.0723")] [assembly: AssemblyFileVersion("3.1.3.0723")]

View file

@ -170,7 +170,7 @@
</PropertyGroup> </PropertyGroup>
<ProjectExtensions> <ProjectExtensions>
<VisualStudio> <VisualStudio>
<UserProperties BuildVersion_UpdateAssemblyVersion="True" BuildVersion_UpdateFileVersion="True" BuildVersion_BuildAction="Both" BuildVersion_BuildVersioningStyle="None.None.None.MonthAndDayStamp" BuildVersion_StartDate="2011/6/17" BuildVersion_IncrementBeforeBuild="False" /> <UserProperties BuildVersion_IncrementBeforeBuild="False" BuildVersion_StartDate="2011/6/17" BuildVersion_BuildVersioningStyle="None.None.None.MonthAndDayStamp" BuildVersion_BuildAction="Both" BuildVersion_UpdateFileVersion="True" BuildVersion_UpdateAssemblyVersion="True" />
</VisualStudio> </VisualStudio>
</ProjectExtensions> </ProjectExtensions>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.

View file

@ -24,6 +24,7 @@
#tp - allow player to teleport #tp - allow player to teleport
#tphere - allow a player to teleport players to their position #tphere - allow a player to teleport players to their position
#managewarp - allow player to add/delete warp locations #managewarp - allow player to add/delete warp locations
#managegroup - allow player to add/delete/modify groups
#editspawn - allow player to enable/disable build protection #editspawn - allow player to enable/disable build protection
#cfg - allow player to view/change tshock configuration #cfg - allow player to view/change tshock configuration
#time - allow player to change time #time - allow player to change time

View file

@ -5,7 +5,19 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TShockAPI", "TShockAPI\TSho
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TShockDBEditor", "DBEditor\TShockDBEditor.csproj", "{F1AE395C-6B4D-40E0-8BF8-0D8A126488D3}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TShockDBEditor", "DBEditor\TShockDBEditor.csproj", "{F1AE395C-6B4D-40E0-8BF8-0D8A126488D3}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests", "UnitTests\UnitTests.csproj", "{F3742F51-D7BF-4754-A68A-CD944D2A21FF}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{755F5B05-0924-47E9-9563-26EB20FE3F67}"
ProjectSection(SolutionItems) = preProject
Local.testsettings = Local.testsettings
Terraria.vsmdi = Terraria.vsmdi
TraceAndTestImpact.testsettings = TraceAndTestImpact.testsettings
EndProjectSection
EndProject
Global Global
GlobalSection(TestCaseManagementSettings) = postSolution
CategoryFile = Terraria.vsmdi
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
Debug|Mixed Platforms = Debug|Mixed Platforms Debug|Mixed Platforms = Debug|Mixed Platforms

6
Terraria.vsmdi Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<TestLists xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<TestList name="Lists of Tests" id="8c43106b-9dc1-4907-a29f-aa66a61bf5b6">
<RunConfiguration id="943ada2e-478e-45be-b4b8-6f7d6d949602" name="Local" storage="local.testsettings" type="Microsoft.VisualStudio.TestTools.Common.TestRunConfiguration, Microsoft.VisualStudio.QualityTools.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestList>
</TestLists>

View file

@ -0,0 +1,53 @@
using System;
using System.Data;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Community.CsharpSqlite.SQLiteClient;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TShockAPI;
using TShockAPI.DB;
namespace UnitTests
{
[TestClass]
public class BanManagerTest
{
public static IDbConnection DB;
private BanManager Bans;
[TestInitialize]
public void Initialize()
{
TShock.Config = new ConfigFile();
TShock.Config.StorageType = "sqlite";
DB = new SqliteConnection(string.Format("uri=file://{0},Version=3", "tshock.test.sqlite"));
DB.Open();
Bans = new BanManager(DB);
}
[TestMethod]
public void TestDBNotNull()
{
Assert.IsNotNull(Bans);
}
[TestMethod]
public void AddBanTest()
{
Assert.IsTrue(Bans.AddBan("127.0.0.1", "BanTest", "Ban Testing"));
}
[TestMethod]
public void FindBanTest()
{
Assert.IsNotNull(Bans.GetBanByIp("127.0.0.1"));
TShock.Config.EnableBanOnUsernames = true;
Assert.IsNotNull(Bans.GetBanByName("BanTest"));
TShock.Config.EnableBanOnUsernames = false;
Assert.IsNull(Bans.GetBanByName("BanTest"));
}
}
}

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<OrderedTest name="BanManagerTest" storage="c:\users\shank\dropbox\design and development\csharp\tshock\unittests\banmanagertest.orderedtest" id="f28695ef-8181-4996-8783-b5059ce904b1" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<TestLinks>
<TestLink id="58b9a622-39c1-640a-6713-3ee97b0d99e2" name="TestDBNotNull" storage="bin\debug\unittests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="67a76536-c5c2-4d99-515a-498708451061" name="AddBanTest" storage="bin\debug\unittests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="9265845c-1bec-1156-2e22-1a64c5bd689f" name="FindBanTest" storage="bin\debug\unittests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</OrderedTest>

View file

@ -0,0 +1,103 @@
using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.IO;
using System.Data;
using System.ComponentModel;
using System.Diagnostics;
using System.Net;
using System.Reflection;
using System.Threading;
using Community.CsharpSqlite.SQLiteClient;
using TShockAPI.DB;
using TShockAPI;
namespace UnitTests
{
/// <summary>
/// Summary description for UnitTest1
/// </summary>
[TestClass]
public class ItemManagerTest
{
public static IDbConnection DB;
[TestInitialize]
public void Initialize()
{
TShock.Config = new ConfigFile();
TShock.Config.StorageType = "sqlite";
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");
}*/
}
[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");
Assert.IsTrue( manager.ItemIsBanned("Dirt Block"), "New item is added");
Assert.IsFalse( manager.ItemIsBanned("Green Brick"), "Item isn't banned");
manager.AddNewBan("Green Brick");
Assert.IsTrue( manager.ItemIsBanned("Green Brick"), "New item is added");
Assert.AreEqual(2, manager.ItemBans.Count, "Adding both items");
manager.AddNewBan("Green Brick" );
Assert.AreEqual(2, manager.ItemBans.Count, "Adding duplicate items");
}
[TestMethod]
public void SQLiteItemTest_RemoveBan()
{
//
// TODO: Add test logic here
//
ItemManager manager = new ItemManager(DB);
Assert.IsNotNull(manager);
Assert.AreEqual(2, manager.ItemBans.Count);
manager.AddNewBan("Dirt Block");
Assert.AreEqual(2, manager.ItemBans.Count);
Assert.AreEqual(true, manager.ItemIsBanned("Dirt Block"));
manager.RemoveBan("Dirt Block");
manager.UpdateItemBans();
Assert.AreEqual(1, manager.ItemBans.Count);
Assert.AreEqual(false, manager.ItemIsBanned("Dirt Block"));
manager.RemoveBan("Dirt Block");
Assert.AreEqual(false, manager.ItemIsBanned("Dirt Block"));
Assert.AreEqual(true, manager.ItemIsBanned("Green Brick"));
manager.RemoveBan("Green Brick");
Assert.AreEqual(false, manager.ItemIsBanned("Green Brick"));
}
[TestCleanup]
public void Cleanup()
{
DB.Close();
}
}
}

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<OrderedTest name="ItemManagerTest" storage="c:\users\virus\git\tshock\unittests\itemmanagertest.orderedtest" id="b9c6b3d7-52d8-4b49-bfbf-933efa073ca8" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<TestLinks>
<TestLink id="851eff7f-13e8-7778-e7ca-71ff3ce24234" name="SQLiteItemTest_AddBan" storage="bin\release\unittests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="26cf8396-064b-1c1d-c511-37969c68dfbd" name="SQLiteItemTest_RemoveBan" storage="bin\release\unittests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</OrderedTest>

View file

@ -0,0 +1,35 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("UnitTests")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("UnitTests")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2011")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("edd69981-21b0-42af-bb55-25088efab253")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View file

@ -0,0 +1,85 @@
using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Data;
using TShockAPI;
using Community.CsharpSqlite.SQLiteClient;
using TShockAPI.DB;
using Microsoft.Xna.Framework;
namespace UnitTests
{
/// <summary>
/// Summary description for RegionManagerTest
/// </summary>
[TestClass]
public class RegionManagerTest
{
public static IDbConnection DB;
public static RegionManager manager;
[TestInitialize]
public void Initialize()
{
TShock.Config = new ConfigFile();
TShock.Config.StorageType = "sqlite";
DB = new SqliteConnection(string.Format("uri=file://{0},Version=3", "tshock.test.sqlite"));
DB.Open();
manager = new RegionManager(DB);
}
[TestMethod]
public void AddRegion()
{
Region r = new Region( new Rectangle(100,100,100,100), "test", 0, "test world");
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);
Region r2 = new Region(new Rectangle(201, 201, 100, 100), "test2", 0, "test world");
manager.AddRegion(r2.RegionArea.X, r2.RegionArea.Y, r2.RegionArea.Width, r2.RegionArea.Height, r2.RegionName, r2.RegionWorldID);
Assert.AreEqual(2, manager.Regions.Count);
}
[TestMethod]
public void DeleteRegion()
{
Assert.IsTrue(manager.DeleteRegion("test"));
Assert.IsTrue(manager.DeleteRegion("test2"));
Assert.AreEqual(0, manager.Regions.Count);
}
[TestMethod]
public void InRegion()
{
//
// TODO: Add test logic here
//
}
[TestMethod]
public void TestMethod2()
{
//
// TODO: Add test logic here
//
}
[TestMethod]
public void TestMethod3()
{
//
// TODO: Add test logic here
//
}
[TestCleanup]
public void Cleanup()
{
DB.Close();
}
}
}

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<OrderedTest name="RegionManagerTest" storage="c:\users\virus\git\tshock\unittests\regionmanagertest.orderedtest" id="7601a790-d2fb-45d2-a612-1ae4de84eb61" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<TestLinks>
<TestLink id="8d92e80b-8c9d-7a14-5c3a-eba6790be784" name="AddRegion" storage="bin\release\unittests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="a8d03dce-530d-a255-9115-3b783c8a973c" name="DeleteRegion" storage="bin\release\unittests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="57686a56-2684-8c17-1564-ed9a3c37b167" name="InRegion" storage="bin\release\unittests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="c77a874e-5605-7aec-f487-110deaa7fafb" name="TestMethod2" storage="bin\release\unittests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="521a8e25-1f75-066f-b839-56fee4f2a1b1" name="TestMethod3" storage="bin\release\unittests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</OrderedTest>

141
UnitTests/UnitTests.csproj Normal file
View file

@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>
</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{F3742F51-D7BF-4754-A68A-CD944D2A21FF}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>UnitTests</RootNamespace>
<AssemblyName>UnitTests</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Community.CsharpSqlite">
<HintPath>..\SqlBins\Community.CsharpSqlite.dll</HintPath>
</Reference>
<Reference Include="Community.CsharpSqlite.SQLiteClient">
<HintPath>..\SqlBins\Community.CsharpSqlite.SQLiteClient.dll</HintPath>
</Reference>
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
<Reference Include="Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\Windows\Microsoft.NET\assembly\GAC_32\Microsoft.Xna.Framework\v4.0_4.0.0.0__842cf8be1de50553\Microsoft.Xna.Framework.dll</HintPath>
</Reference>
<Reference Include="MySql.Data">
<HintPath>..\SqlBins\MySql.Data.dll</HintPath>
</Reference>
<Reference Include="MySql.Web">
<HintPath>..\SqlBins\MySql.Web.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="TerrariaServerAPI, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\TerrariaServerBins\TerrariaServerAPI.dll</HintPath>
</Reference>
<Reference Include="XNAHelpers, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\TerrariaServerBins\XNAHelpers.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
<Visible>False</Visible>
</CodeAnalysisDependentAssemblyPaths>
</ItemGroup>
<ItemGroup>
<Compile Include="BanManagerTest.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ItemManagerTest.cs" />
<Compile Include="RegionManagerTest.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\TShockAPI\TShockAPI.csproj">
<Project>{49606449-072B-4CF5-8088-AA49DA586694}</Project>
<Name>TShockAPI</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="BanManagerTest.orderedtest">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="ItemManagerTest.orderedtest">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="RegionManagerTest.orderedtest">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.0">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4 %28x86 and x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>