PKHeX/Tests/PKHeX.Core.Tests/Simulator/ShowdownSetTests.cs
Kurt 825e06130e Add nullable reftype compiler checks to test proj
New in c# 8
Assert.True(check for null) doesn't give a hint that the obj isnt null
afterwards.
Assert.NotNull does have the compiler hint attribute
could probably use fluentexpression syntax, but resharper doesn't pick
up on the nonnullable hint like vs does.
GeneratorTests: swap FirstOrDefault to First, can keep the fluent style
and resharper gets the hint.

tl;dr : resharper doesn't look at external lib for hints, gotta use
Assert.NotNull or something that doesn't return null
2019-09-23 18:13:51 -07:00

252 lines
7.4 KiB
C#

using System;
using System.Linq;
using PKHeX.Core;
using Xunit;
namespace PKHeX.Tests.Simulator
{
public class ShowdownSetTests
{
static ShowdownSetTests()
{
if (!EncounterEvent.Initialized)
EncounterEvent.RefreshMGDB();
}
[Fact]
public void SimulatorGetParse()
{
foreach (var setstr in Sets)
{
var set = new ShowdownSet(setstr).Text;
var lines = set.Split('\n').Select(z => z.Trim());
Assert.True(lines.All(z => setstr.Contains(z)), setstr);
}
}
[Fact]
public void SimulatorGetEncounters()
{
var set = new ShowdownSet(SetGlaceonUSUMTutor);
var pk7 = new PK7 {Species = set.Species, AltForm = set.FormIndex, Moves = set.Moves};
var encs = EncounterMovesetGenerator.GenerateEncounters(pk7, set.Moves, GameVersion.MN);
Assert.True(!encs.Any());
pk7.HT_Name = "PKHeX";
encs = EncounterMovesetGenerator.GenerateEncounters(pk7, set.Moves, GameVersion.MN);
var first = encs.FirstOrDefault();
Assert.NotNull(first);
var egg = (EncounterEgg)first;
var info = new SimpleTrainerInfo();
var pk = egg.ConvertToPKM(info);
Assert.True(pk.Species != set.Species);
var la = new LegalityAnalysis(pk);
Assert.True(la.Valid);
var test = EncounterMovesetGenerator.GeneratePKMs(pk7, info).ToList();
foreach (var t in test)
{
var la2 = new LegalityAnalysis(t);
Assert.True(la2.Valid);
}
}
[Fact]
public void SimulatorGetWC3()
{
var set = new ShowdownSet(SetROCKSMetang);
var pk3 = new PK3 { Species = set.Species, AltForm = set.FormIndex, Moves = set.Moves };
var encs = EncounterMovesetGenerator.GenerateEncounters(pk3, set.Moves, GameVersion.R);
Assert.True(encs.Any());
encs = EncounterMovesetGenerator.GenerateEncounters(pk3, set.Moves, GameVersion.R);
var first = encs.FirstOrDefault();
Assert.NotNull(first);
var wc3 = (WC3)first;
var info = new SimpleTrainerInfo();
var pk = wc3.ConvertToPKM(info);
var la = new LegalityAnalysis(pk);
Assert.True(la.Valid);
}
[Fact]
public void SimulatorGetCelebi()
{
var set = new ShowdownSet(SetCelebi);
var pk7 = new PK7 { Species = set.Species, AltForm = set.FormIndex, Moves = set.Moves };
var encs = EncounterMovesetGenerator.GenerateEncounters(pk7, set.Moves, GameVersion.X);
Assert.True(encs.Any());
encs = EncounterMovesetGenerator.GenerateEncounters(pk7, set.Moves, GameVersion.X);
var first = encs.FirstOrDefault();
Assert.NotNull(first);
var enc = first;
var info = new SimpleTrainerInfo();
var pk = enc.ConvertToPKM(info);
var la = new LegalityAnalysis(pk);
Assert.True(la.Valid);
}
[Fact]
public void SimulatorGetSplitBreed()
{
var set = new ShowdownSet(SetMunchSnorLax);
var pk7 = new PK7 { Species = set.Species, AltForm = set.FormIndex, Moves = set.Moves, HT_Name = "PKHeX" }; // !! specify the HT name, we need tutors for this one
var encs = EncounterMovesetGenerator.GenerateEncounters(pk7, set.Moves, GameVersion.SN).ToList();
Assert.True(encs.Count > 0);
Assert.True(encs.All(z => z.Species > 150));
var info = new SimpleTrainerInfo();
var enc = encs[0];
var pk = enc.ConvertToPKM(info);
var la = new LegalityAnalysis(pk);
Assert.True(la.Valid);
}
[Fact]
public void SimulatorGetVCEgg1()
{
var set = new ShowdownSet(SetSlowpoke12);
var pk7 = new PK7 { Species = set.Species, AltForm = set.FormIndex, Moves = set.Moves, HT_Name = "PKHeX" };
var encs = EncounterMovesetGenerator.GenerateEncounters(pk7, set.Moves, GameVersion.GD).ToList();
Assert.True(encs.Count > 0);
var info = new SimpleTrainerInfo();
var enc = encs[0];
var pk = enc.ConvertToPKM(info);
var la = new LegalityAnalysis(pk);
Assert.True(la.Valid);
}
[Fact]
public void SimulatorGetSmeargle()
{
var set = new ShowdownSet(SetSmeargle);
var pk7 = new PK7 { Species = set.Species, AltForm = set.FormIndex, Moves = set.Moves };
var encs = EncounterMovesetGenerator.GenerateEncounters(pk7, set.Moves, GameVersion.MN);
Assert.True(encs.Any());
encs = EncounterMovesetGenerator.GenerateEncounters(pk7, set.Moves, GameVersion.MN);
var first = encs.FirstOrDefault();
Assert.NotNull(first);
var enc = first;
var info = new SimpleTrainerInfo();
var pk = enc.ConvertToPKM(info);
var la = new LegalityAnalysis(pk);
Assert.True(la.Valid);
}
[Fact]
public void SimulatorParseMultiple()
{
var text = string.Join("\r\n\r\n", Sets);
var lines = text.Split(new[] {"\r\n", "\n"}, StringSplitOptions.None);
var sets = ShowdownSet.GetShowdownSets(lines);
Assert.True(sets.Count() == Sets.Length);
sets = ShowdownSet.GetShowdownSets(Enumerable.Empty<string>());
Assert.True(!sets.Any());
sets = ShowdownSet.GetShowdownSets(new [] {"", " ", " "});
Assert.True(!sets.Any());
}
private const string SetROCKSMetang =
@"Metang
IVs: 20 HP / 3 Atk / 26 Def / 1 SpA / 6 SpD / 8 Spe
Ability: Clear Body
Level: 30
Adamant Nature
- Take Down
- Confusion
- Metal Claw
- Refresh";
private const string SetGlaceonUSUMTutor =
@"Glaceon (F) @ Assault Vest
IVs: 0 Atk
EVs: 252 HP / 252 SpA / 4 SpD
Ability: Ice Body
Level: 100
Shiny: Yes
Modest Nature
- Blizzard
- Water Pulse
- Shadow Ball
- Hyper Voice";
private const string SetSmeargle =
@"Smeargle @ Focus Sash
Ability: Own Tempo
EVs: 248 HP / 8 Def / 252 Spe
Jolly Nature
- Sticky Web
- Nuzzle
- Taunt
- Whirlwind";
private const string SetCelebi =
@"Celebi @ Toxic Orb
Ability: Natural Cure
Jolly Nature
- Recover
- Heal Bell
- Safeguard
- Hold Back";
private const string SetNicknamedTypeNull =
@"Reliance (Type: Null) @ Eviolite
EVs: 252 HP / 4 Def / 252 SpD
Ability: Battle Armor
Careful Nature
- Facade
- Swords Dance
- Sleep Talk
- Rest";
private const string SetMunchSnorLax =
@"Snorlax @ Choice Band
Ability: Thick Fat
Level: 50
EVs: 84 HP / 228 Atk / 180 Def / 12 SpD / 4 Spe
Adamant Nature
- Double-Edge
- High Horsepower
- Self-Destruct
- Fire Punch";
private const string SetSlowpoke12 =
@"Threat (Slowpoke) @ Eviolite
Ability: Regenerator
Shiny: Yes
EVs: 248 HP / 252 Atk / 8 SpD
Adamant Nature
- Body Slam
- Earthquake
- Belly Drum
- Iron Tail";
private static readonly string[] Sets =
{
SetGlaceonUSUMTutor,
SetNicknamedTypeNull,
SetMunchSnorLax,
@"Greninja @ Choice Specs
Ability: Battle Bond
EVs: 252 SpA / 4 SpD / 252 Spe
Timid Nature
- Hydro Pump
- Spikes
- Water Shuriken
- Dark Pulse",
};
}
}