pokemon-showdown/test/sim/moves/pursuit.js

108 lines
4.2 KiB
JavaScript

'use strict';
const assert = require('./../../assert');
const common = require('./../../common');
let battle;
describe(`Pursuit`, function () {
afterEach(() => battle.destroy());
it(`should execute before the target switches out and after the user mega evolves`, function () {
battle = common.createBattle([[
{species: "Beedrill", ability: 'swarm', item: 'beedrillite', moves: ['pursuit']},
], [
{species: "Alakazam", ability: 'magicguard', moves: ['psyshock']},
{species: "Clefable", ability: 'unaware', moves: ['calmmind']},
]]);
battle.makeChoices('move Pursuit mega', 'switch 2');
assert.species(battle.p1.active[0], "Beedrill-Mega");
assert.fainted(battle.p2.active[0]);
});
it(`should continue the switch in Gen 3`, function () {
battle = common.gen(3).createBattle([[
{species: "Tyranitar", ability: 'sandstream', moves: ['pursuit']},
], [
{species: "Alakazam", ability: 'magicguard', moves: ['psyshock']},
{species: "Clefable", ability: 'unaware', moves: ['calmmind']},
]]);
battle.makeChoices('move Pursuit', 'switch 2');
assert(battle.p2.active[0].hp);
});
it(`should continue the switch in Gen 4`, function () {
battle = common.gen(4).createBattle([[
{species: "Tyranitar", ability: 'sandstream', moves: ['pursuit']},
], [
{species: "Alakazam", ability: 'magicguard', moves: ['psyshock']},
{species: "Clefable", ability: 'unaware', moves: ['calmmind']},
]]);
battle.makeChoices('move Pursuit', 'switch 2');
assert(battle.p2.active[0].hp);
});
it(`should not repeat`, function () {
battle = common.createBattle([[
{species: "Beedrill", ability: 'swarm', item: 'beedrillite', moves: ['pursuit']},
{species: "Clefable", ability: 'unaware', moves: ['calmmind']},
], [
{species: "Clefable", ability: 'magicguard', moves: ['calmmind']},
{species: "Alakazam", ability: 'unaware', moves: ['calmmind']},
]]);
battle.makeChoices('move Pursuit mega', 'auto');
const clefable = battle.p2.pokemon[0];
const hpBeforeSwitch = clefable.hp;
battle.makeChoices('switch 2', 'switch 2');
assert.equal(hpBeforeSwitch, clefable.hp);
});
it(`should not double in power or activate before a switch if targeting an ally`, function () {
battle = common.createBattle({gameType: 'doubles', seed: [1, 1, 1, 1]}, [[
{species: "Beedrill", ability: 'swarm', item: 'beedrillite', moves: ['pursuit']},
{species: "Clefable", ability: 'unaware', moves: ['calmmind']},
{species: "Furret", ability: 'frisk', moves: ['uturn']},
], [
{species: "Clefable", ability: 'magicguard', moves: ['calmmind']},
{species: "Alakazam", ability: 'unaware', moves: ['calmmind']},
]]);
const furret = battle.p1.pokemon[2];
battle.makeChoices('move Pursuit mega -2, switch 3', 'auto');
assert.bounded(furret.maxhp - furret.hp, [60, 70]);
});
it(`should deal damage prior to attacker selecting a switch in after u-turn etc`, function () {
battle = common.createBattle([[
{species: 'parasect', moves: ['pursuit']},
], [
{species: 'emolga', moves: ['voltswitch']},
{species: 'zapdos', moves: ['batonpass']},
]]);
battle.makeChoices('move Pursuit', 'move voltswitch');
assert.false.fullHP(battle.p2.pokemon[0]);
battle.choose('p2', 'switch 2');
assert.equal(battle.p2.pokemon[0].name, "Zapdos");
battle.makeChoices('move Pursuit', 'move batonpass');
battle.choose('p2', 'switch 2');
assert.fullHP(battle.p2.pokemon[1], 'should not hit Pokemon that has used Baton Pass');
assert.equal(battle.p2.pokemon[0].name, "Emolga");
battle.makeChoices('move Pursuit', 'move voltswitch');
});
it(`should only activate before switches on adjacent foes`, function () {
battle = common.gen(5).createBattle({gameType: 'triples'}, [[
{species: 'Beedrill', moves: ['pursuit']},
{species: 'Wynaut', moves: ['swordsdance']},
{species: 'Wynaut', moves: ['swordsdance']},
], [
{species: 'Alakazam', moves: ['swordsdance']},
{species: 'Solosis', moves: ['swordsdance']},
{species: 'Wynaut', moves: ['swordsdance']},
{species: 'Wynaut', moves: ['swordsdance']},
]]);
battle.makeChoices('move pursuit 2, auto', 'switch 4, auto');
assert.false(battle.log.includes('|-activate|p2a: Alakazam|move: Pursuit'));
assert.false.fullHP(battle.p2.active[1]);
});
});