Skip to content

Commit 32efc44

Browse files
committed
server tests for Player
Experience tests added for: - GiveExperience - TakeExperience Level tests added for: - SetLevel
1 parent a7d7147 commit 32efc44

File tree

8 files changed

+234
-7
lines changed

8 files changed

+234
-7
lines changed

Framework/Intersect.Framework.Core/Config/Options.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,8 +226,7 @@ public void FixAnimatedSprites()
226226

227227
public static bool LoadFromDisk()
228228
{
229-
Options instance = new();
230-
Instance = instance;
229+
var instance = EnsureCreated();
231230

232231
var pathToServerConfig = Path.Combine(ResourcesDirectory, "config.json");
233232
if (!Directory.Exists(ResourcesDirectory))
@@ -248,6 +247,13 @@ public static bool LoadFromDisk()
248247
return true;
249248
}
250249

250+
internal static Options EnsureCreated()
251+
{
252+
Options instance = new();
253+
Instance = instance;
254+
return instance;
255+
}
256+
251257
public static void SaveToDisk()
252258
{
253259
if (Instance is not { } instance)

Framework/Intersect.Framework.Core/Intersect.Framework.Core.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
2222
<_Parameter1>Intersect.Server.Core</_Parameter1>
2323
</AssemblyAttribute>
24+
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
25+
<_Parameter1>Intersect.Tests.Server</_Parameter1>
26+
</AssemblyAttribute>
2427
</ItemGroup>
2528

2629
<ItemGroup>
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
using Intersect.Server.Entities;
2+
using NUnit.Framework;
3+
4+
namespace Intersect.Tests.Server.Entities;
5+
6+
public partial class PlayerTests
7+
{
8+
private static IEnumerable<object[]> DataGiveExperience
9+
{
10+
get
11+
{
12+
Options.EnsureCreated();
13+
14+
yield return [1, 0, -1, 1, 0];
15+
yield return [1, 0, 1, 1, 1];
16+
yield return [1, 1, 1, 1, 2];
17+
yield return [1, 99, 1, 2, 0];
18+
yield return [1, 99, 2, 2, 1];
19+
yield return [2, 0, -1, 2, 0]; // Because GiveExperience() has no "enable losing levels" boolean
20+
yield return [2, 1, -1, 2, 0];
21+
yield return [2, 1, -2, 2, 0]; // Because GiveExperience() has no "enable losing levels" boolean
22+
yield return [Options.Instance.Player.MaxLevel - 1, 1, 1000, Options.Instance.Player.MaxLevel, 901];
23+
yield return [Options.Instance.Player.MaxLevel, 1, 1000, Options.Instance.Player.MaxLevel, 1001];
24+
}
25+
}
26+
27+
[TestCaseSource(nameof(DataGiveExperience))]
28+
public void TestGiveExperience(int initialLevel, int initialExperience, long experienceToGive, int expectedLevel, long expectedExperience)
29+
{
30+
Player player = new()
31+
{
32+
Level = initialLevel,
33+
Exp = initialExperience,
34+
MapId = _mapId,
35+
};
36+
37+
Assert.Multiple(
38+
() =>
39+
{
40+
Assert.That(player.Level, Is.EqualTo(initialLevel));
41+
Assert.That(player.Exp, Is.EqualTo(initialExperience));
42+
}
43+
);
44+
45+
player.GiveExperience(experienceToGive);
46+
47+
Assert.Multiple(
48+
() =>
49+
{
50+
Assert.That(player.Level, Is.EqualTo(expectedLevel));
51+
Assert.That(player.Exp, Is.EqualTo(expectedExperience));
52+
}
53+
);
54+
}
55+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
using Intersect.Server.Entities;
2+
using NUnit.Framework;
3+
4+
namespace Intersect.Tests.Server.Entities;
5+
6+
public partial class PlayerTests
7+
{
8+
private static IEnumerable<object[]> DataSetLevel
9+
{
10+
get
11+
{
12+
Options.EnsureCreated();
13+
14+
yield return [1, 1, 0, false, 1, 1];
15+
yield return [1, 1, 0, true, 1, 1];
16+
yield return [1, 1, 2, false, 2, 1];
17+
yield return [1, 1, 2, true, 2, 0];
18+
yield return [2, 1, 1, false, 1, 1];
19+
yield return [2, 1, 1, true, 1, 0];
20+
yield return [1, 1, Options.Instance.Player.MaxLevel + 1, false, Options.Instance.Player.MaxLevel, 1];
21+
yield return [1, 1, Options.Instance.Player.MaxLevel + 1, true, Options.Instance.Player.MaxLevel, 0];
22+
}
23+
}
24+
25+
[TestCaseSource(nameof(DataSetLevel))]
26+
public void TestSetLevel(int initialLevel, int initialExperience, int newLevel, bool resetExperience, int expectedLevel, long expectedExperience)
27+
{
28+
Player player = new()
29+
{
30+
Level = initialLevel,
31+
Exp = initialExperience,
32+
MapId = _mapId,
33+
};
34+
35+
Assert.Multiple(
36+
() =>
37+
{
38+
Assert.That(player.Level, Is.EqualTo(initialLevel));
39+
Assert.That(player.Exp, Is.EqualTo(initialExperience));
40+
}
41+
);
42+
43+
player.SetLevel(level: newLevel, resetExperience: resetExperience);
44+
45+
Assert.Multiple(
46+
() =>
47+
{
48+
Assert.That(player.Level, Is.EqualTo(expectedLevel));
49+
Assert.That(player.Exp, Is.EqualTo(expectedExperience));
50+
}
51+
);
52+
}
53+
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
using Intersect.Server.Entities;
2+
using NUnit.Framework;
3+
4+
namespace Intersect.Tests.Server.Entities;
5+
6+
public partial class PlayerTests
7+
{
8+
private static IEnumerable<object[]> DataTakeExperience
9+
{
10+
get
11+
{
12+
Options.EnsureCreated();
13+
14+
yield return [1, 0, -1, true, true, 1, 1]; // Gives experience
15+
yield return [1, 0, 1, true, true, 1, 0];
16+
yield return [1, 1, 1, true, true, 1, 0];
17+
18+
yield return [1, 99, -1, true, true, 2, 0]; // Gives experience
19+
yield return [1, 99, -1, true, false, 2, 0]; // Gives experience
20+
yield return [1, 99, -1, false, true, 2, 0]; // Gives experience
21+
yield return [1, 99, -1, false, false, 2, 0]; // Gives experience
22+
23+
yield return [1, 99, -2, true, true, 2, 1]; // Gives experience
24+
yield return [1, 99, -2, true, false, 2, 1]; // Gives experience
25+
yield return [1, 99, -2, false, true, 2, 1]; // Gives experience
26+
yield return [1, 99, -2, false, false, 2, 1]; // Gives experience
27+
28+
yield return [2, 0, 1, true, true, 1, 99];
29+
yield return [2, 0, 1, true, false, 1, 99];
30+
yield return [2, 0, 1, false, true, 2, 0];
31+
yield return [2, 0, 1, false, false, 2, 0];
32+
33+
yield return [2, 1, 1, true, true, 2, 0];
34+
yield return [2, 1, 1, true, false, 2, 0];
35+
yield return [2, 1, 1, false, true, 2, 0];
36+
yield return [2, 1, 1, false, false, 2, 0];
37+
38+
yield return [2, 1, 2, true, true, 1, 99];
39+
yield return [2, 1, 2, true, false, 1, 99];
40+
yield return [2, 1, 2, false, true, 2, 0];
41+
yield return [2, 1, 2, false, false, 2, 0];
42+
43+
yield return [Options.Instance.Player.MaxLevel, 0, 1, true, true, Options.Instance.Player.MaxLevel - 1, 99];
44+
yield return [Options.Instance.Player.MaxLevel, 1, 1000, true, true, Options.Instance.Player.MaxLevel - 10, 1];
45+
}
46+
}
47+
48+
[TestCaseSource(nameof(DataTakeExperience))]
49+
public void TestTakeExperience(
50+
int initialLevel,
51+
int initialExperience,
52+
long experienceToTake,
53+
bool enableLosingLevels,
54+
bool force,
55+
int expectedLevel,
56+
long expectedExperience
57+
)
58+
{
59+
Player player = new()
60+
{
61+
Level = initialLevel,
62+
Exp = initialExperience,
63+
MapId = _mapId,
64+
};
65+
66+
Assert.Multiple(
67+
() =>
68+
{
69+
Assert.That(player.Level, Is.EqualTo(initialLevel));
70+
Assert.That(player.Exp, Is.EqualTo(initialExperience));
71+
}
72+
);
73+
74+
player.TakeExperience(experienceToTake, enableLosingLevels: enableLosingLevels, force: force);
75+
76+
Assert.Multiple(
77+
() =>
78+
{
79+
Assert.That(player.Level, Is.EqualTo(expectedLevel));
80+
Assert.That(player.Exp, Is.EqualTo(expectedExperience));
81+
}
82+
);
83+
}
84+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using Intersect.Server.Maps;
2+
using NUnit.Framework;
3+
4+
namespace Intersect.Tests.Server.Entities;
5+
6+
[TestFixture]
7+
public partial class PlayerTests
8+
{
9+
private Guid _mapId;
10+
11+
[SetUp]
12+
public void Setup()
13+
{
14+
Options.EnsureCreated();
15+
16+
_mapId = Guid.NewGuid();
17+
MapController.Lookup.Set(_mapId, new MapController(_mapId));
18+
}
19+
}

Intersect.Tests.Server/Intersect.Tests.Server.csproj

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,17 @@
1616
</ItemGroup>
1717

1818
<ItemGroup>
19-
<PackageReference Include="MSTest.TestAdapter" Version="1.3.2" />
20-
<PackageReference Include="MSTest.TestFramework" Version="1.3.2" />
21-
<PackageReference Include="NUnit" Version="3.11.0" />
22-
<PackageReference Include="NUnit3TestAdapter" Version="3.13.0" />
19+
<PackageReference Include="coverlet.collector" Version="6.0.4">
20+
<PrivateAssets>all</PrivateAssets>
21+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
22+
</PackageReference>
23+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
24+
<PackageReference Include="NUnit" Version="4.3.2" />
25+
<PackageReference Include="NUnit.Analyzers" Version="4.6.0">
26+
<PrivateAssets>all</PrivateAssets>
27+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
28+
</PackageReference>
29+
<PackageReference Include="NUnit3TestAdapter" Version="5.0.0" />
2330
</ItemGroup>
2431

2532
</Project>

Intersect.Tests.Server/Stub.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public void TestStub()
1212
{
1313
// Needed so NUnit doesn't return -2
1414
// TODO: Remove this when there are actual tests in this assembly
15-
Assert.AreEqual(0, 0);
15+
Assert.That(0, Is.EqualTo(0));
1616
}
1717

1818
}

0 commit comments

Comments
 (0)