A few more tests
This commit is contained in:
parent
1c7d71431f
commit
d515616f72
4 changed files with 161 additions and 54 deletions
|
|
@ -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<int>("X1");
|
||||||
|
int Y1 = reader.Get<int>("Y1");
|
||||||
|
int height = reader.Get<int>("height");
|
||||||
|
int width = reader.Get<int>("width");
|
||||||
|
int Protected = reader.Get<int>("Protected");
|
||||||
|
string MergedIDs = DbExt.Get<string>(reader, "UserIds");
|
||||||
|
string name = DbExt.Get<string>(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)
|
public bool AddRegion(int tx, int ty, int width, int height, string regionname, string worldid)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|
@ -301,11 +351,9 @@ namespace TShockAPI.DB
|
||||||
com.AddParameter("@worldid", worldid);
|
com.AddParameter("@worldid", worldid);
|
||||||
com.AddParameter("@userids", "");
|
com.AddParameter("@userids", "");
|
||||||
com.AddParameter("@protected", 1);
|
com.AddParameter("@protected", 1);
|
||||||
if (com.ExecuteNonQuery() > 0)
|
com.ExecuteNonQuery();
|
||||||
{
|
Regions.Add(new Region(new Rectangle(tx, ty, width, height), regionname, 0, worldid));
|
||||||
Regions.Add(new Region(new Rectangle(tx, ty, width, height), regionname, 0, worldid));
|
return true;
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -326,7 +374,7 @@ namespace TShockAPI.DB
|
||||||
com.AddParameter("@name", name.ToLower());
|
com.AddParameter("@name", name.ToLower());
|
||||||
com.AddParameter("@worldid", Main.worldID.ToString());
|
com.AddParameter("@worldid", Main.worldID.ToString());
|
||||||
com.ExecuteNonQuery();
|
com.ExecuteNonQuery();
|
||||||
ReloadAllRegions();
|
Regions.Remove(getRegion(name));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -347,9 +395,31 @@ namespace TShockAPI.DB
|
||||||
com.AddParameter("@name", name);
|
com.AddParameter("@name", name);
|
||||||
com.AddParameter("@bool", state ? 1 : 0);
|
com.AddParameter("@bool", state ? 1 : 0);
|
||||||
com.AddParameter("@worldid", Main.worldID.ToString());
|
com.AddParameter("@worldid", Main.worldID.ToString());
|
||||||
int q = com.ExecuteNonQuery();
|
com.ExecuteNonQuery();
|
||||||
ReloadAllRegions();
|
getRegion(name).DisableBuild = state ? 1 : 0;
|
||||||
return (q > 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)
|
catch (Exception ex)
|
||||||
|
|
@ -392,7 +462,7 @@ namespace TShockAPI.DB
|
||||||
public static List<string> ListIDs(string MergedIDs)
|
public static List<string> ListIDs(string MergedIDs)
|
||||||
{
|
{
|
||||||
List<string> SplitIDs = new List<string>();
|
List<string> SplitIDs = new List<string>();
|
||||||
var sb = new StringBuilder();
|
/*var sb = new StringBuilder();
|
||||||
for (int i = 0; i < MergedIDs.Length; i++)
|
for (int i = 0; i < MergedIDs.Length; i++)
|
||||||
{
|
{
|
||||||
char c = MergedIDs[i];
|
char c = MergedIDs[i];
|
||||||
|
|
@ -406,6 +476,12 @@ namespace TShockAPI.DB
|
||||||
SplitIDs.Add(sb.ToString());
|
SplitIDs.Add(sb.ToString());
|
||||||
sb.Clear();
|
sb.Clear();
|
||||||
}
|
}
|
||||||
|
}*/
|
||||||
|
String[] s = MergedIDs.Split(',');
|
||||||
|
for( int i = 0; i < s.Length; i++ )
|
||||||
|
{
|
||||||
|
if (!s[i].Equals(""))
|
||||||
|
SplitIDs.Add(s[i]);
|
||||||
}
|
}
|
||||||
return SplitIDs;
|
return SplitIDs;
|
||||||
}
|
}
|
||||||
|
|
@ -482,6 +558,16 @@ namespace TShockAPI.DB
|
||||||
}
|
}
|
||||||
return regions;
|
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
|
public class Region
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ namespace UnitTests
|
||||||
public class ItemManagerTest
|
public class ItemManagerTest
|
||||||
{
|
{
|
||||||
public static IDbConnection DB;
|
public static IDbConnection DB;
|
||||||
|
public static ItemManager manager;
|
||||||
[TestInitialize]
|
[TestInitialize]
|
||||||
public void Initialize()
|
public void Initialize()
|
||||||
{
|
{
|
||||||
|
|
@ -32,33 +33,12 @@ namespace UnitTests
|
||||||
|
|
||||||
DB = new SqliteConnection(string.Format("uri=file://{0},Version=3", "tshock.test.sqlite"));
|
DB = new SqliteConnection(string.Format("uri=file://{0},Version=3", "tshock.test.sqlite"));
|
||||||
DB.Open();
|
DB.Open();
|
||||||
/*try
|
manager = new ItemManager(DB);
|
||||||
{
|
|
||||||
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]
|
[TestMethod]
|
||||||
public void SQLiteItemTest_AddBan()
|
public void SQLiteItemTest_AddBan()
|
||||||
{
|
{
|
||||||
//
|
|
||||||
// TODO: Add test logic here
|
|
||||||
//
|
|
||||||
ItemManager manager = new ItemManager(DB);
|
|
||||||
Assert.IsNotNull(manager);
|
Assert.IsNotNull(manager);
|
||||||
Assert.IsFalse( manager.ItemIsBanned("Dirt Block"), "Item isn't banned" );
|
Assert.IsFalse( manager.ItemIsBanned("Dirt Block"), "Item isn't banned" );
|
||||||
manager.AddNewBan("Dirt Block");
|
manager.AddNewBan("Dirt Block");
|
||||||
|
|
@ -74,10 +54,7 @@ namespace UnitTests
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void SQLiteItemTest_RemoveBan()
|
public void SQLiteItemTest_RemoveBan()
|
||||||
{
|
{
|
||||||
//
|
manager = new ItemManager(DB);
|
||||||
// TODO: Add test logic here
|
|
||||||
//
|
|
||||||
ItemManager manager = new ItemManager(DB);
|
|
||||||
Assert.IsNotNull(manager);
|
Assert.IsNotNull(manager);
|
||||||
Assert.AreEqual(2, manager.ItemBans.Count);
|
Assert.AreEqual(2, manager.ItemBans.Count);
|
||||||
manager.AddNewBan("Dirt Block");
|
manager.AddNewBan("Dirt Block");
|
||||||
|
|
|
||||||
|
|
@ -29,51 +29,91 @@ namespace UnitTests
|
||||||
DB.Open();
|
DB.Open();
|
||||||
|
|
||||||
manager = new RegionManager(DB);
|
manager = new RegionManager(DB);
|
||||||
|
manager.ReloadForUnitTest("test");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void AddRegion()
|
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.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.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);
|
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.AreEqual(2, manager.Regions.Count);
|
||||||
|
Assert.IsNotNull(manager.getRegion("test2"));
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void DeleteRegion()
|
public void DeleteRegion()
|
||||||
{
|
{
|
||||||
|
Assert.IsTrue(2 == manager.Regions.Count);
|
||||||
Assert.IsTrue(manager.DeleteRegion("test"));
|
Assert.IsTrue(manager.DeleteRegion("test"));
|
||||||
|
Assert.IsTrue(1 == manager.Regions.Count);
|
||||||
Assert.IsTrue(manager.DeleteRegion("test2"));
|
Assert.IsTrue(manager.DeleteRegion("test2"));
|
||||||
Assert.AreEqual(0, manager.Regions.Count);
|
Assert.IsTrue(0 == manager.Regions.Count);
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void InRegion()
|
public void InRegion()
|
||||||
{
|
{
|
||||||
//
|
Assert.IsTrue(manager.InArea(100, 100));
|
||||||
// TODO: Add test logic here
|
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]
|
[TestMethod]
|
||||||
public void TestMethod2()
|
public void SetRegionState()
|
||||||
{
|
{
|
||||||
//
|
Assert.IsTrue(manager.getRegion("test").DisableBuild == 1);
|
||||||
// TODO: Add test logic here
|
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]
|
[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]
|
[TestCleanup]
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,14 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?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">
|
<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">
|
||||||
|
<Execution id="e2bb6bb7-7bc7-43d5-bb81-e2d13d377599" />
|
||||||
<TestLinks>
|
<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="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="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="05a473bf-6457-6122-6150-b1aa82e8f869" name="SetRegionState" 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" />
|
<TestLink id="999dec4b-8a9b-3d06-02fb-622ecb449e82" name="CanBuild" 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="80e781d1-fd68-212a-9099-8791ad55ed9f" name="AddUser" 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="dc9d05c0-db88-716a-bbe0-aff585f7681d" name="ListID" 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="e13e8546-b310-71c3-e068-1ecd18bfec8f" name="ListRegions" 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" />
|
||||||
</TestLinks>
|
</TestLinks>
|
||||||
</OrderedTest>
|
</OrderedTest>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue