Commit Graph

1096 Commits

Author SHA1 Message Date
Slayer95
694cd47e7b Fix target resolution (#5363) 2019-03-30 22:34:44 +08:00
MacChaeger
a729cb577f Fix duration of slot conditions (#5372) 2019-03-29 23:03:10 +08:00
MacChaeger
2edd8a354f Fix Leech Seed vs. Magic Guard (#5374) 2019-03-29 23:01:50 +08:00
MacChaeger
5a4578420b Fix attacks failing if only their effect fails (#5373) 2019-03-29 22:48:15 +08:00
MacChaeger
9472019e03 Fix Gear Up and Magnetic Flux (#5368) 2019-03-28 14:19:47 -04:00
MacChaeger
905ed1e95c Fix multihit moves continuing after a KO (#5360) 2019-03-28 19:02:37 +08:00
Slayer95
c18f244071
Test: Prevent before hook from timing out
It times out often in certain environments.
2019-03-28 00:06:45 -05:00
Ivo Julca
ac4b94876b Sim: Refactor to use Battle#getAllPokemon() and Battle#getAllActive() 2019-03-26 23:18:19 -05:00
MacChaeger
6adc779a19 Fix doubled recoil (#5358) 2019-03-27 11:15:57 +08:00
MacChaeger
9a7ce3dedf Put side conditions on p1 and p2 in multi battles (#5341) 2019-03-27 11:00:36 +08:00
MacChaeger
860900ac57 Fix AfterDamage event running on secondary effects (#5350) 2019-03-26 15:29:46 +09:00
Kirk Scheibelhut
9f5a727ad1 Pull Field out of Battle (#5333) 2019-03-23 02:52:12 +09:00
Ivo Julca
3cbe38130c Test: Fix usage of assert.throws() 2019-03-22 02:26:14 -05:00
Ivo Julca
dd2759c1c3 Test: Fix testing of choice internals 2019-03-22 02:21:22 -05:00
Ivo Julca
7736cbf21d Test: Remove usage of deprecated Battle#join() API 2019-03-22 01:48:34 -05:00
Kirk Scheibelhut
564dae455d Make Battle throw on choice errors in tests (#5286) 2019-03-21 13:14:38 +09:00
MacChaeger
a44f16c6e3 Fix pivot moves vs. Substitute (#5314) 2019-03-19 11:50:27 +09:00
MacChaeger
6c486409f4 Fix spread move effect order (#5216) 2019-03-17 23:30:08 +09:00
Marty-D
39a8b4270e Fix Stealth Rock effectiveness during Delta Stream 2019-03-16 14:38:03 -04:00
urkerab
2ea89698b0 Run effectiveness events even for string type (#5310) 2019-03-14 20:03:14 +09:00
Slayer95
7a7ad8453d Fix regressions in team generators (#5302) 2019-03-12 18:44:38 -07:00
Kirk Scheibelhut
e9ccc7ecd6 Fix Stadium mod's stat modification logic (#5301) 2019-03-12 13:52:32 -07:00
Ivo Julca
6fe53e6b6d Test: Remove deprecated API in common lib 2019-03-11 21:26:16 -05:00
Kirk Scheibelhut
4fe5fd2bf5 Split out 'Conversion 2' tests from targeting 2019-03-10 13:48:09 -05:00
Kirk Scheibelhut
1b2aeb696b Reject move commands with multiple flags (#5290) 2019-03-09 23:23:36 -06:00
Kirk Scheibelhut
538731d6df Accept move choices with target/mega in either order (#5284) 2019-03-09 20:21:17 -06:00
Kirk Scheibelhut
a8903d2563 Cleanup stat naming and types (storedStats, StatNameExceptHP) (#5274) 2019-03-09 09:53:11 -06:00
Kirk Scheibelhut
d5710acf8a Remove unnecessary Array.prototype.values() calls (#5282)
These break on Node < v10.9.0
2019-03-09 08:49:10 -06:00
JetOU
85533ee3a0 Change forEach to for...of (#5269) 2019-03-08 11:24:58 -06:00
Kirk Scheibelhut
dc5255f7c8 Fix Gen 1 Substitute + self damage behavior (#5263) 2019-03-06 16:12:32 -05:00
Kirk Scheibelhut
961b9882f5 Fix Gen 4 interaction between U-turn/Substitute/Intimidate (#5222) 2019-03-06 08:33:52 -05:00
Kirk Scheibelhut
6f82443101 Fix GSC Toxic interaction with Baton Pass/Heal Bell (#5226) 2019-03-05 13:28:01 -05:00
MacChaeger
82ae8db93a Fix Snarl test (#5253) 2019-03-05 09:20:11 -06:00
MacChaeger
33a872e029 Gen 7: Stockpile tracks individual stat alterations (#5246) 2019-03-04 17:59:44 -06:00
Guangcong Luo
39f0ca022e Fix validation of Gen 2 Marowak set
This was a lot of work for what turned out to be a really simple fix.
Gen 2 tradeback validation ended up being slightly too strict.
2019-03-03 08:45:45 -06:00
Kirk Scheibelhut
6e122d5d74 Refactor lib/ to be native Typescript (#5217) 2019-03-02 11:12:24 -06:00
Kirk Scheibelhut
aa81f2a2d8 Fix Shell Trap behavior with Encore (#5218) 2019-02-28 14:27:56 -05:00
Guangcong Luo
4e1ef51b8a Add one more volatile switch test 2019-02-26 19:21:14 -06:00
Kirk Scheibelhut
b09fd63377 Refactor sim/ to be native Typescript (#5210) 2019-02-26 11:03:30 -06:00
Kirk Scheibelhut
6ddb714f44 Fix Counter/Mirror Coat to respect redirection (#5212) 2019-02-26 09:52:10 -06:00
Kirk Scheibelhut
623b349fc1 Fix Gen 1 bug involving last damage and Substitute (#2598) (#5211) 2019-02-25 21:24:14 -06:00
Kirk Scheibelhut
4e421c1bd9 Refactor getEffect for speed safely (#5201)
Rollforward of 7a20245 which retains the `hasOwnProperty` checks.

Also changes the method to call `toId` earlier and use the id
as the key to the cache to ensure 'Stealth Rock' and 'stealthrock'
return the same. NOTE: 'move: Stealth Rock' and 'Stealth Rock' will
still continue to return different results.
2019-02-23 19:28:06 -06:00
Guangcong Luo
5f41684442 Further improve switch tests
- Test that Baton Pass passes Ingrain
- Test that Baton Pass doesn't pass Imprison
- Test that other forms of switching don't pass either
2019-02-23 07:01:07 -06:00
Guangcong Luo
9b694fa350 Add Imprison switch-out test
Apparently we had zero tests to make sure volatile statuses go away
after switching out and back in!
2019-02-23 03:27:32 -06:00
Kirk Scheibelhut
fd0059f39b Fix random typos in tests (#5190) 2019-02-20 22:16:44 -06:00
Guangcong Luo
94b2d65b05 Finally remove deprecated legacy API
It's gone! The last remnants of the old choice parsing system is
finally gone!
2019-02-20 02:58:41 -06:00
Kirk Scheibelhut
0e4ed7fd40 Refactor remaining tests to use Battle#makeChoices (#5183) 2019-02-20 00:34:31 -06:00
Konrad Borowski
7481ccc680 Disallow 0 EVs even when EVs weren't sent (#5187) 2019-02-20 00:05:12 -06:00
HoeenHero
9c9004cacf Fix "Fix terrain seed activation timing (#5163)"
Shouldn't of reverted this so quickly. Credit to the code goes to @MacChaeger
2019-02-16 20:31:07 -05:00
HoeenHero
f8a1612906
Revert "Fix terrain seed activation timing (#5163)" (#5173)
This reverts commit 250955ee68.
2019-02-16 19:46:53 -05:00
MacChaeger
250955ee68 Fix terrain seed activation timing (#5163) 2019-02-16 19:30:00 -05:00
Konrad Borowski
883c611078 Add tests for Sleep Clause Mod (#5171) 2019-02-16 12:47:22 -06:00
Konrad Borowski
a97b879e2d Prevent using Leppa Berry from triggering Endless Battle (#5158)
Previously, using Leppa Berry by itself caused Endless Battle Clause
to consider Pokemon to be stale. However, it is reasonable to use
Leppa Berry without an intent to cause an endless battle - for
instance to increase the PP of a move with a low PP.
2019-02-15 17:43:19 -06:00
Guangcong Luo
8ff241906d Check capitalization in Factory sets
This might be debatably important, but if it's worth pointing it out
in reviews, we might as well automate it.
2019-02-06 10:40:10 -06:00
Guangcong Luo
70b3e9a525 Rename channel -> room, subchannel -> channel
"channel" is just a fancy way of saying "room, but in sockets".
Renaming them like this should make it clearer exactly what's going
on in sockets.
2019-02-05 16:55:37 -06:00
Guangcong Luo
b15c9a60f9 Fix formatText support for & > etc in URLs 2019-02-04 09:17:48 -06:00
Guangcong Luo
f3e45fbb72 Move server code to server/
Also move mods/ to data/mods/

This makes PS more monorepo-like. The intent is to further separate
the sim and the server code, but without fully committing to splitting
the repository itself.

We now support `./pokemon-showdown start` in addition to
`./pokemon-showdown`. I'm not clear which I want to be the default
yet.
2019-02-03 16:07:06 -06:00
MacChaeger
cf7670f0b2 Gen 1: Paralysis should not reapply stat drop because of a failed move (#5123) 2019-01-26 01:30:58 -06:00
Guangcong Luo
74dfd71355 Support Config.fakeladder
Useful for local testing, ignores matchmaking conditions like "can't
match same player twice in a row" and "can't match same IP", to make
it easier to test ladder stuff.
2019-01-26 00:40:00 -06:00
MacChaeger
2a60ad7589 Fix stomping tantrum vs. only Protect (#5081) 2019-01-15 22:03:54 -06:00
Russell Jones
d35aeb0b23 Trying another fix for Fake Out (#5103) 2019-01-14 09:52:04 -06:00
Konrad Borowski
92d69fe8f8 Add basic Fake Out tests 2019-01-13 19:08:36 +01:00
Konrad Borowski
4f9375e5d0 Trivia alternate leaderboards (#5096) 2019-01-12 07:58:13 -06:00
MacChaeger
54eeb88e5e Fix Stomping Tantrum interaction with spread moves and Protect (#5055) 2018-12-28 20:09:31 +04:00
Russell Jones
c70d369c10 Add unit tests for Photon Geyser (#5050) 2018-12-27 14:30:11 -08:00
MacChaeger
2710633765 Magic Guard should block crash damage (#5042) 2018-12-25 09:08:00 -08:00
Alexander B
eecde00ed3 Fix Leppa Berry (#5025) 2018-12-14 01:12:41 -06:00
Guangcong Luo
13614b9890 Update for TypeScript 3.2
TypeScript 3.2 unearthed a metric fuckton of bugs, making this change
take effectively forever.
2018-12-08 21:39:38 -06:00
Guangcong Luo
b95fe3a497 Implement proper RNG for speed ties
So the Pursuit unit test is broken in Node 0.11, because PS relies on
the sort function deterministically calling the comparison function,
and due to a recent V8 update, the call order changed.

This was a good thing, anyway, since PS didn't handle 3+-way speed ties
correctly, anyway, and it reminded me to go and fix that. Which I did.

This is as cartridge-accurate as possible, given the description given
to me by V4 in #1157.

Fixes #1157
2018-11-27 22:22:34 -06:00
whales
c85d931fdf Use default config for tests (#4959) 2018-11-08 10:13:32 -06:00
Konrad Borowski
09360e88ca Add a test for self-damage critical hits (#4954) 2018-11-04 10:55:49 -06:00
Alexander B
34c3096d6b "But it failed!" messages should not reveal the target (#4944) 2018-11-01 09:41:04 -04:00
Konrad Borowski
bd99a2b9b0 Support gTLDs in e-mail addresses (#4931)
Back when this code was introduced, the TLDs were relatively short,
with only two outliers: .museum and .travel.

Since then, a generic TLD system was introduced which opened
registration of top level domains. The number of TLDs registered this
way exceeds 1 200, with the longest TLDs having 18 characters.

Parsing longer TLDs for emails shouldn't cause practical issues, as
e-mail syntax is unusual enough. In fact, in the older versions, this
code was buggy as it linked example@example.exa in
example@example.example, not noticing that there should be a word
bounary.
2018-10-25 15:40:18 -05:00
Konrad Borowski
60c3fe5e05 Test links with parenthesis (#4932)
A lot of complexity in a chat formatter link regular expression is to
support links with parentheses in them. This commit introduces a test of
this to avoid accidentally breaking this functionality.
2018-10-25 15:37:28 -05:00
Guangcong Luo
d687de0dd5 Add tests for Weather Ball 2018-10-11 13:10:33 -05:00
Guangcong Luo
e709249a65 Fix frozen battle with partial choices
PS is inconsistent about which parts do or don't support partial
choices.

This change makes it so battle.choose no longer supports partial
choices, while side.choose still does.

This fixes the bug where making a partial choice caused a battle
freeze.
2018-10-05 03:54:59 -05:00
Marty-D
02332ce2fa
Test some more illegal egg move combinations 2018-08-21 13:47:21 -04:00
Guangcong Luo
3d148a10f6 Validate species ID in factory-sets.json
Regression test for 139a852a70

(Commented out due to failing test; TODO: figure out what to do about
this)
2018-08-18 22:28:33 -05:00
Kevin Lau
ab7813cc74 Add Parental Bond Tests (#4803) 2018-08-11 11:44:08 +09:00
Quinton Lee
58b20d99eb Dex: Support custom rules altering complex bans (#4738)
Also adds some tests for custom rules
2018-07-03 17:22:28 -07:00
urkerab
89e33bc649 Fix Bestow, Covet, Symbiosis and Thief with a required item (#4715) 2018-07-02 17:36:37 -04:00
MacChaeger
b082705569 Transform should ignore Roost's effects (#4698) 2018-05-28 13:17:06 -04:00
MacChaeger
1aaeca908f Fix transforming into Arceus/Silvally (#4687) 2018-05-23 19:55:59 -04:00
MacChaeger
08ba5bc831 Make formeChange handle relevant messages and ability changes (#4654) 2018-05-23 19:55:05 -04:00
MacChaeger
526c118d1e Imprison shouldn't stop z-status moves (#4686) 2018-05-23 14:40:36 -05:00
MacChaeger
1be208916a Improve Stomping Tantrum interaction with Protect (#4680) 2018-05-21 22:39:30 -04:00
MacChaeger
e3174ebc02 Fix type display in Gen 7 metas (#4655) 2018-05-21 17:27:23 -05:00
Kevin Lau
4847ecb06d Add Truant unit tests (#4681) 2018-05-21 18:07:08 -04:00
MacChaeger
6a7c3aa138 Heal Block should not prevent any direct healing effects from Z-Moves (#4676) 2018-05-19 22:51:45 -04:00
Guangcong Luo
40c1dcdb1d Add a longer timeout to BSS set validator 2018-05-02 17:45:15 -05:00
MacChaeger
c6806c84ff Fix Defog and Splash-likes being erroneously counted as failures (#4627) 2018-04-27 21:59:52 -05:00
Kris Johnson
09bf67da3a BSS Factory: Remove unnecessary set properties (#4623) 2018-04-26 10:51:57 -04:00
Kevin Lau
f35d43ef36 Fix countering a hit for 0 damage (#4621) 2018-04-26 10:51:05 -04:00
MacChaeger
711a0d4ce4 Check semi-invulnerability before immunities (#4574) 2018-04-14 10:27:45 -04:00
whales
eb61aac282 Tests#Ban: Ignore shared IPs (#4565) 2018-04-09 01:58:31 -05:00
Ivo Julca
9d25f7fde7 Test: Add Fusion Bolt and Fusion Flare
Refs #4558
2018-04-08 01:25:58 -05:00
Ivo Julca
52746acd49 Test: Add Trump Card 2018-04-08 01:23:43 -05:00
Ivo Julca
da4a8b72ce Fix: Preserve pranksterBoosted for Status moves overriden into other moves
So if a Prankster-mon chooses in two successive turns an attacking move and an Status move,
and this Pokémon is encored into the attacking move before the Status move proceeds,
the attacking move will be used and it won't affect a Dark-type target.
2018-04-06 05:09:47 -05:00
MacChaeger
2feb607c9d Pursuit should not move before a switch when targeting an ally (#4548) 2018-04-05 22:07:54 -04:00
MacChaeger
27afe1b6b8 Gen VI-VII: Transform should copy Focus Energy (#4546) 2018-04-05 09:19:43 -04:00
MacChaeger
054c545c05 Fix Prankster interaction with bounced/encored moves (#4533) 2018-04-01 22:23:43 -04:00
Brandon Gottlob
27d3e4fc5b Refactor tests to use new makeChoices API (#4528)
See 8473c3f4fa for the example followed in the refactor
2018-03-30 16:06:14 -05:00
asgdf
913d126e17 Fix Rock Head throwing errors in valid situations 2018-03-29 02:24:51 -05:00
asgdf
324e853f4a Enable explicit allowing/disallowing of renames in battles (#4510) 2018-03-22 10:07:47 -05:00
asgdf
b205140de0 Tests: Prevent expired battle warning message (#4505) 2018-03-20 10:54:11 +09:00
Marty-D
bcf17f9471 Move Gen 6 Battle Factory to its mod 2018-03-16 19:28:12 -04:00
Matthew Glazar
6c2350f5b6 Refactor random indexes into sample function
Often, you just need a random item in an array. Throughout Pokemon
Showdown's code, there are many instances of the following pattern:

    let randomThing = things[this.random(things.length)];

Make this code easier to read by factoring the indexing into the
PRNG#sample function:

    let randomThing = this.sample(things);

Run the following sed script to refactor lots of code to use sample:

    s/\([a-zA-Z0-9.]\{1,\}\)\[this\.random(\1\.length)\]/this.sample(\1)/

This commit should not change behaviour. In particular, PRNG#next is
called the same number of times with the same number of parameter as
before this commit, and PRNG#next's results are interpreted in the same
way as before this commit.
2018-03-12 05:53:33 +09:00
Matthew Glazar
45a876917d Refactor random booleans into randomChance function
Often, you just need a random boolean. Throughout Pokemon Showdown's
code, there are many creative ways of requesting random booleans. For
example:

    if (this.random(10) < 3) {
    if (this.isWeather(['sunnyday', 'desolateland']) || this.random(2) === 0) {
    let shiny = !this.random(1024);
    if (uberCount > 1 && this.random(5) >= 1) continue;
    if (!this.random(3)) ability = ability1.name;
    } else if ((ability === 'Iron Barbs' || ability === 'Rough Skin') && this.random(2)) {
    if (typeof secondary.chance === 'undefined' || this.random(256) <= effectChance) {
    if (accuracy !== true && this.random(256) > accuracy) {

Enable these methods to converge by introducing the PRNG#randomChance
function. It accepts a probability and returns true with that
probability.

Run the following sed script to refactor many common patterns to use
randomChance:

    s/this\.random(\([0-9]\{1,\}\)) >= \([0-9]\{1,\}\)/!this.randomChance(\2, \1)/g
    s/this\.random(\([0-9]\{1,\}\)) < \([0-9]\{1,\}\)/this.randomChance(\2, \1)/g
    s/this\.random(\([0-9]\{1,\}\)) === 0/this.randomChance(1, \1)/g
    s/!this\.random(\([0-9]\{1,\}\))/this.randomChance(1, \1)/g

The sed script takes advantage of the following properties:

    random(x) < y     is equivalent to   randomChance(y, x)
    random(x) >= y    is equivalent to   !(random(x) < y), i.e. !randomChance(y, x)
    random(x) === 0   is equivalent to   random(x) < 1, i.e. randomChance(1, x)
    !random(x)        is equivalent to   random(x) === 0, i.e. randomChance(1, x)

This commit should not change behaviour. In particular, PRNG#next is
called the same number of times with the same number of parameter as
before this commit, and PRNG#next's results are interpreted in the same
way as before this commit.
2018-03-08 20:11:33 +09:00
asgdf
d9c3b46b83 Extend Protective Pads unit tests (#4467) 2018-03-08 04:11:37 +09:00
asgdf
9448f51db7 Add unit test for Protective Pads/Mummy interaction (#4462) 2018-03-06 13:38:20 +09:00
strager
423509bceb Cache species-specific effects (e.g. Arceus); 20% overall perf win (#4459)
Battle#getRelevantEffectsInner performs a lookup for the base species of
every Pokemon with ModdedDex#getEffect, then invokes callbacks. The
lookup is expensive, and callbacks very rare. In fact, there are only
ever two callbacks: one for Arceus (SwitchIn) and one for Silvally
(SwitchIn).

Instead of an expensive ModdedDex#getEffect lookup for the callbacks,
put the callbacks directly on the Pokemon's Template object.

On my machine, this commit speeds up Pokemon Showdown's tests by 20%.

Methodology: With and without this commit, I ran mocha four times with
zsh' 'time' builtin, dropped the first result, and averaged the wall
times:

    mocha times before this commit:
    18.20s user 0.33s system 118% cpu 15.704 total
    17.91s user 0.34s system 118% cpu 15.454 total
    18.11s user 0.33s system 118% cpu 15.558 total

    mocha times after this commit:
    15.58s user 0.33s system 122% cpu 13.028 total
    15.32s user 0.33s system 121% cpu 12.890 total
    15.56s user 0.32s system 121% cpu 13.068 total

    Hardware:
    Mid 2012 MacBook Pro
    2.6 GHz Intel Core i7

    Software:
    Node v9.0.0
    macOS 10.10.5
2018-03-05 17:24:14 +09:00
Marty-D
3e9a92b1be
Tests: Fix typo 2018-03-02 14:32:28 +00:00
Guangcong Luo
fae7174912 Add BSS factory set validator 2018-03-02 20:29:30 +09:00
Guangcong Luo
8b19a546b8 Fix chainbreeding validator 2018-02-01 21:06:37 -06:00
Guangcong Luo
245af440d4 Fix style error 2018-01-31 22:26:24 -06:00
Guangcong Luo
78c327028e Fix Blissey Present + Heal Bell egg move bug
I originally thought this would have to be hardcoded, but actually this
can be coded slightly less hardly than expected!

Getting a Blissey with Present + Heal Bell in Gen 2 works like this:

- Teach Smeargle Present + Heal Bell
- Breed Present + Heal Bell into Snubbull
- Chainbreed Present + Heal Bell into Blissey

The main issue is that checking chainbreeding is very hard, so PS
mostly just takes the stance of "chainbreeding multiple moves is
probably impossible; hardcode exceptions".

BUT! BUT!!!!

Instead of hardcoding this exact move combination, we can actually
just hardcode the fact "the first step of chainbreeding is always legal
if the first father is Smeargle". Which I did and it works!
2018-01-31 21:53:11 -06:00
Guangcong Luo
1b8d7775d9 Tests: Improve error message for Promise rejections 2018-01-31 21:53:10 -06:00
Guangcong Luo
ba4e9870d4 Fix getChoice
It now returns a valid choice string for Team Preview choices.
2018-01-29 20:59:52 -06:00
Guangcong Luo
4c0699abc6 Implement inputLog
A battle's inputLog is now stored separately from the output log. It's
not an exact log of inputs, but rather just a collection of the inputs
that resulted in the battle: a default choice expands to the choice
that was actually used, and the starting seed is logged whether or not
it was explicitly passed into the battle stream.

Fixes #4348

Fixes #3201
2018-01-28 21:23:06 -06:00
Guangcong Luo
1531b662c6 Refactor battle stream system
This contains a lot of minor refactors, but the main thing that's going
on here is that battle stream writes have been streamlined to be a lot
easier for others to use.

We even support:

    ./pokemon-showdown simulate-battle

which provides a stdio interface for anyone using any programming
language to simulate a battle.
2018-01-28 21:06:49 -06:00
Guangcong Luo
9c037b17fe Refactor Battle constructor
`Sim.construct` no longer exists. Battles are now constructed directly
with `new Battle()`. Parameters other than formatid are now passed as
`options`.
2018-01-28 21:06:49 -06:00
Ricky Amparo
8e12a7ffd0 Tests: Refactor more tests to use makeChoices() (#4325) 2018-01-24 14:56:58 -06:00
Dan Huang
9c37960ab6 Use PRNG in sim/ files (#4365) 2018-01-24 12:27:07 -06:00
Guangcong Luo
e8163824ff Remove validate-conditionals eslint rule
As far as I can tell, `curly, multi-line, consistent` does everything I
want; there's no reason to keep around a validate-conditionals rule.

Which is probably good, since eslint is deprecating the API for this,
anyway. The nice thing about not relying on deprecated APIs is that now
you can lint PS with `eslint` rather than needing to memorize
command-line switches.
2018-01-19 13:25:10 -06:00
Guangcong Luo
43103f98ae Disable ProcessManager in tests 2018-01-18 04:10:19 -06:00
Guangcong Luo
ab1f995daa Rewrite Process Manager
Process Manager is now lib/process-manager.js

It's been entirely rewritten to reflect what I think a process manager
API should look like.

In particular, there are now two Process Managers, QueryProcessManager
and StreamProcessManager.

Pass QueryProcessManager a pure-ish query function (sync or async) that
takes a JSON value and returns a JSON value, and PM.query() will
execute that function in a subprocess, and return a Promise for its
return value.

StreamProcessManager is the same idea: Pass it a function to create an
ObjectReadWriteStream, and PM.createStream() will create a stream in a
subprocess and return a stream connected to it.
2018-01-18 03:34:16 -06:00
Guangcong Luo
d395424fd3 TeamValidator: Return null, not false, for valid team
As usual, having `T | false` be our optional is a really old PHP
convention; we should be using `T | null` basically everywhere.
2018-01-18 03:32:32 -06:00
Guangcong Luo
72d4f73160 Improve seed-passing experience in test API
Now, seeds are passed as arrays, rather than needing to pass an entire
PRNG object. In addition, they're now passed in the options object,
instead of as a separate argument.

This is done mostly so the Miracle Eye can be rewritten with a custom
seed, which requires fewer turns and should overall be faster. Which
was in turn done because a Miracle Eye timed out on Travis CI earlier.
Overall, the speed increase is pretty negligible, so this is mostly
just about improving the test API.
2018-01-18 03:31:13 -06:00
urkerab
99d682ca26 Change lastMove from a string to a Move (#4298) 2018-01-03 11:54:35 -06:00
Kris Johnson
238ac1fdd7 Refactor old gens to for...of (#4274) 2017-12-23 21:46:04 -06:00
Guangcong Luo
5094631fcf Implement Roomlog library
Rooms now have their logging abstracted into their own file, which also
allows the rest of rooms.js to be simplified by a decent margin.

This is in preparation for using Redis as a backing for scrollback log
storage, which will give us a lot more RAM to work with.

My newest newest plan is actually to locally cache room scrollback, and
only read battle logs from Redis. This will make chatroom-joining
faster.
2017-12-16 15:40:45 -06:00
Guangcong Luo
738c60ed8b Move repl.js -> lib/repl.js 2017-12-16 15:40:45 -06:00
MacChaeger
8d571be74e Fix certain Abilities not being overwritten by most forme changes (#4245) 2017-12-14 11:45:12 -05:00
Bär Halberkamp
65a82f28f0 Add a system for subrooms (#4014) 2017-12-13 23:33:25 -06:00
Guangcong Luo
f403a5d3ea Refactor some forEach to for...of 2017-12-12 14:50:08 -06:00
Marty-D
4d3440fedb
Tests: Fix Clangorous Soulblaze choices 2017-12-11 21:27:55 -05:00
urkerab
dc3945ff86 Protect should not affect Clangorous Soulblaze's other target (#4237)
Closes #4232
2017-12-11 09:02:24 -05:00
MacChaeger
d2a419d2be Update Stomping Tantrum's description (#4231) 2017-12-10 16:18:53 -05:00
Guangcong Luo
7e02b57016 Refactor Matchmaker to subclass Ladder
As expected, this resulted in zero API changes. (Aside from a minor
test change.)
2017-12-09 15:45:10 -06:00
Guangcong Luo
799a6a1e44 Improve Matchmaker API
Ladder is now a subclass of Matchmaker, and all the APIs previously
attached to Matchmaker are now directly available in Ladder.

In addition, all functions that take a formatid are now of the form
`Ladders(formatid).function(other arguments)`

TODO: Reverse polarity; it makes more sense for Matchmaker to be
a subclass of Ladder. Fortunately, this wouldn't involve API changes.
2017-12-09 15:04:29 -06:00
Guangcong Luo
5d11ec89f1 Fix base-pokemon banning 2017-12-08 22:27:30 -06:00
Guangcong Luo
0613939874 Refactor tournament rule validation
It was happening in two different places. It's been consolidated now.
2017-12-08 21:04:05 -06:00
Guangcong Luo
bb598ed6c2 Add rule validator for format rules 2017-12-07 22:07:12 -06:00
MacChaeger
0d10cfcf03 Add test for Recharge -> Stomping Tantrum (#4223) 2017-12-07 22:58:50 -05:00
MacChaeger
801883c53a Implement Stomping Tantrum (#4175) 2017-12-07 18:36:19 -06:00
Quinton Lee
b13098a684 Formatter: fix linking text followed by > (#4222) 2017-12-07 16:13:35 -06:00
Guangcong Luo
ead4ffff64 Sky Drop only makes contact on the way down 2017-12-06 12:05:42 -06:00
Guangcong Luo
c0da44c482 Refactor moveset -> moveSlots
pokemon.moveset is now pokemon.moveSlots, which is at least slightly
clearer about what it's doing (tracking move state, mainly PP).

Mostly, this gives a consistent naming scheme for `move` (a Move
object) vs `moveSlot` (a MoveSlot object).

This also refactors a lot of existing `moveSlot` accesses to be modern,
including using `for...of`.
2017-12-05 11:12:44 -06:00
Guangcong Luo
f3dbfbe685 Refactor Decision -> Action
"Decision" and "Choice" were always kind of unclear, so Decision is now
Action. It should now be a lot clearer.

Actions are also now strongly typed.
2017-12-02 11:34:55 -06:00
Guangcong Luo
70a5f3cf6d Fix Pursuit KO canceling a switch in Gen 3 2017-12-02 08:27:44 -06:00
Guangcong Luo
1ac2745c3e Refactor Pursuit hack
Pursuit no longer uses `moveThisTurn`, but rather `willMove`, which
involves significantly fewer Pursuit hacks.
2017-12-01 15:59:13 -06:00
Guangcong Luo
eb9836d4d1 Test faint order 2017-12-01 13:06:01 -06:00
Guangcong Luo
7773253c3a Test Future Sight 2017-12-01 13:05:57 -06:00
The Immortal
9a5ee1983e Make Inverse Battle test work without a format 2017-12-01 23:11:31 +08:00
Guangcong Luo
f4e535bbd6 Enforce consistent key spacing
This was previously not enforced because we used `:1` in too many
places, but those places seem to all be refactored out at this point.
2017-12-01 08:16:23 -06:00
Guangcong Luo
e73cd9dbc2 Update Healing Wish test summary 2017-11-30 11:00:15 -06:00
Guangcong Luo
8473c3f4fa Improve test engine
New functions:

battle.makeChoices([side 1], [side 2]);

Intended to be a replacement for the previous .choose/.commitDecisions
API.

If we can get all the test code on it, we can maybe finally actually
deprecate LEGACY_API_DO_NOT_USE.

It's now used in Healing Wish, where I think it makes a very readable
test.
2017-11-30 10:56:01 -06:00
Guangcong Luo
97d773226a Support switching to pokemon by name 2017-11-30 10:56:01 -06:00
Guangcong Luo
80c9a7c5a1 Fix Healing Wish properly
Broken in #4120
2017-11-30 10:39:21 -06:00
Guangcong Luo
901ff2bd4d Fix Gen 4 Healing Wish and Lunar Dance
...?????

Has this code ever worked in the past?
2017-11-29 21:24:36 -06:00
Guangcong Luo
1d41e73199 Formatter: Change rel="noopener" output
The client now interprets `rel="noopener"` to mean "check links for
interstice whitelist", and bypasses the interstice if it's not there.

This is is the best approach for [[google links]] to bypass the
interstice, while not whitelisting all of Google because Google
redirects are not generally trustworthy.
2017-11-28 09:53:21 -06:00
Bär Halberkamp
5b542c5f4c Formatter: re-implement [[pokemon: name]] and [[item: name]] 2017-11-28 16:34:48 +01:00
Guangcong Luo
fda5ab4fcc Support paren spans in chat formatter
This mainly adds support for parenthetical spoilers:

(parenthetical spoiler: these)

They'll be useful for closing any other autoclosing spans in the
future, but currently spoiler is the only one.
2017-11-28 08:34:21 -06:00
Guangcong Luo
3c5b4ca0fb Formatter: Fix parsing for [[wiki: links]] 2017-11-28 08:34:21 -06:00
Guangcong Luo
d0f66895c3 Update text formatter link syntax
Now matches old link syntax [[Text <uri>]]

Also now supports alternate search engines [[wiki: Text]]
2017-11-28 07:59:51 -06:00
Guangcong Luo
45dd012840 Refactor chat-formatter main loop
The new loop makes the loop invariant a lot easier to enforce, although
it makes certain parts less readable.
2017-11-28 07:17:36 -06:00
Guangcong Luo
65517f279c Rewrite chat formatter
This new version supports significantly more client chat formatting
than before, and is more readable.

Also new: the `code` formatting now uses basically the same system as
Markdown, where you can use as many `` ` `` in a row as you want as
your delimiter.
2017-11-27 12:16:15 -06:00
Guangcong Luo
eb6748048d Fix Magic Guard Mind Blown
Fixes #4172
2017-11-22 02:54:40 -06:00
MacChaeger
4d95bb2ed9 Dancer shouldn't copy moves that did nothing (#4101) 2017-11-17 17:41:34 -06:00
Ben Davies
1efe9525f0 Check for ENOENT error codes where MODULE_NOT_FOUND is checked 2017-11-17 13:19:18 +00:00
Guangcong Luo
e716e9edc7 Implement Ultra Burst 2017-11-17 00:01:09 -06:00
Guangcong Luo
e25eeb9eb0 Correctly validate Rockruff-Dusk 2017-11-16 21:45:24 -06:00
MacChaeger
06e03e3431 Parting Shot shouldn't switch if it doesn't change stats (#4105) 2017-11-13 22:23:20 -05:00
MacChaeger
6f82808c34 Fix clearing volatiles (#4120) 2017-11-12 22:09:52 -05:00
Guangcong Luo
e377d69395 Fix core team-validation intersection check 2017-11-05 00:11:51 -07:00
Guangcong Luo
7904e7791b Fix Gen 2 Hidden Power IV validation 2017-11-05 00:11:51 -07:00
Guangcong Luo
b01e4794a0 Rephrase team validator test 2017-11-04 12:14:21 -07:00
Guangcong Luo
011528bd5a Fix Hidden Ability validation
Previously, a mix of past-gen and modern event sources for a move would
confuse the validator. This case is now properly handled.
2017-11-02 13:36:05 -05:00
Guangcong Luo
0039db7a84 Add more tests for team validator 2017-11-02 00:15:04 -05:00
Guangcong Luo
0e728281e6 Move team-validator to sim/team-validator 2017-11-01 05:22:37 -05:00
Guangcong Luo
a47077bbe9 Split TeamValidator and TeamValidatorAsync
I'm not really sold on "TeamValidatorAsync" as a class name or file
name, so I'm open to suggestions.

The long-term plan is to put TeamValidator in sim/ but this is in three
commits because I really want the right file to retain blame history.
2017-10-31 15:49:09 -05:00
Guangcong Luo
d1bf3737a8 Improve chat formatter tests 2017-10-30 21:51:37 -05:00
Guangcong Luo
3f3eaa1ac0 Formatter: Fix subscript parsing 2017-10-30 21:48:14 -05:00
Guangcong Luo
39b52e7dda Rename Chat.parseText -> Chat.formatText
(And move it to its own file, chat-formatter.js)
2017-10-30 21:41:59 -05:00
Guangcong Luo
0ccf846eab Add tests for Chat.parseText 2017-10-30 21:31:03 -05:00
QuiteQuiet
5cf4066897 Tests: Add Sitrus Berry tests (#4073) 2017-10-21 09:29:22 -04:00
Marty-D
312f93c47c Revert "Fix confusion interaction with HP-checking items (#4045)"
This reverts commit
6651c5dadb.
2017-10-20 21:05:49 -04:00
Guangcong Luo
88159c41bc Refactor BattleRoom -> GameRoom
BattleRoom is now GameRoom, a slightly more abstract room type capable
of holding any of a number of possible roomgames. Currently, battles
are the only such roomgame, but any future roomgame could possibly use
it.

Differences between ChatRoom and GameRoom:

- GameRooms start at the left, ChatRooms start at the right
- GameRooms have chat on the right, and a game area on the left, with a
  view area at the top left and a controls area at the bottom left
- GameRooms retain all their logs, ChatRooms only retain the latest 100
  lines
- GameRooms expire after 40 minutes of inactivity or 10 minutes of zero
  online users (configurable in the future)
- GameRooms are guaranteed to have an associated game, while ChatRooms
  may or may not
2017-10-18 05:41:03 -05:00
QuiteQuiet
6651c5dadb Fix confusion interaction with HP-checking items (#4045) 2017-10-17 09:26:27 -04:00
Insist
fc59f4c628 Tests: Moltres doesn't get Intimidate (#4061)
Minor improvement
2017-10-15 19:13:30 +04:00
Guangcong Luo
ccac3add6e Make eslint rules stricter 2017-10-08 04:41:11 -05:00
Guangcong Luo
dcffa2a37d Update Mocha dependency 2017-10-08 03:36:04 -05:00
Guangcong Luo
839e9d1a83 Force linebreaks at the ends of files 2017-10-08 03:05:29 -05:00
Guangcong Luo
4098383f65 Fix Gen 2 paralysis Spe 2017-10-07 23:39:56 -05:00
MacChaeger
a759b8910b Fix Reflect Type vs. Pokemon with the "???" type (#4039) 2017-10-06 15:24:04 -05:00
MacChaeger
05cdd33542 Fix Dancer activation order (#4009) 2017-09-23 20:17:00 -04:00
Guangcong Luo
0646743a6d Sim: Check Protect/etc before type immunities in gen 7
TryHit effects, like Protect, Lightningrod, Magic Bounce, etc now
activate before type immunities, rather than after.
2017-09-05 09:36:18 -04:00
Guangcong Luo
8d12d1e0d2 Refactor matchmaker
This removes the outdated user.searching object, instead tracking all
searching state from inside the matchmaker.
2017-09-05 05:34:27 -04:00
Guangcong Luo
7a9310ac66 Fix Matchmaker hotpatching
Matchmaker is now globally accessible under Ladders, rather than
needing to be manually required.

This fixes a crash when hotpatching certain things.
2017-09-01 06:29:21 -04:00
Guangcong Luo
cb459a37bc Rename matchmaker.startBattle -> Rooms.createBattle 2017-09-01 04:46:37 -04:00
Guangcong Luo
eb6fe5ce41 Improve tests 2017-07-25 03:25:25 -04:00
Guangcong Luo
3b4d8b3ff0 Split random-teams.js out of scripts.js
Random team generation scripts are no longer in scripts.js, but instead
in a new file random-teams.js.

The scripts are now also no longer run from inside battles, but in a
new team generator object. This makes it easier for external scripts
to generate random teams by running Dex.generateTeam(format).
2017-07-25 02:59:59 -04:00
HoeenHero
54f957875e [Gen 3] Random Battles (#3760) 2017-07-10 23:35:26 +04:00
Guangcong Luo
95e8bebeaf Revert "ProcessManager: refactor, fix memory leak, use Typescript (#3706)"
This reverts commit c9b93d3529.
2017-07-02 08:11:18 -04:00
Ben Davies
c9b93d3529 ProcessManager: refactor, fix memory leak, use Typescript (#3706)
- spawning and setting up child processes is now handled by
ProcessManager#constructor rather than needing to be done manually for
each module that uses ProcessManager
- direct references to ProcessManager in ProcessWrapper were removed to
prevent dead ProcessWrapper instances from being leaked when hotpatching
- process-manager.js and verifier.js now use Typescript
2017-06-30 09:09:13 +09:00
Guangcong Luo
0143ae28dd Replace fs module (#3686)
The new FS module is an abstraction layer over the built-in fs module.

The main reason it exists is because I need an abstraction layer I can
disable writing from. But that'll be in another commit.

Currently, mine is better because:
 - paths are always relative to PS's base directory
 - Promises (seriously wtf Node Core what are you thinking)
 - PS-style API: FS("foo.txt").write("bar") for easier argument order
 - mkdirp

This also increases the minimum supported Node version from v6.0 to
v7.7, because we now use async/await. Sorry for the inconvenience!

This also drops the mock-fs-require-fix dependency

mock-fs-require-fix was always kind of a huge hack. It's no longer
necessary, with an FS API that does everything it used to.

This removes a lot of other hacks from test/main.js, which is nice.
2017-06-24 13:42:54 -07:00
Konrad Borowski
56a05a82b6 Rename Gen6 formats to have [Gen 6] in name (#3683)
* Rename Gen6 formats to have [Gen 6] in name

* Add Gen 6 format aliases for bots

Those will be removed later when bots will be updated to know
about new format names.
2017-06-24 01:51:06 -07:00
Ben Davies
0e736074a9 Tests: refactor test/main.js, remove test/simulator/index.js (#3565)
- The before hook in test/main.js has no reason to be handled
asynchronously when nothing it handles is async
- test/simulator/index.js has no reason to exist when mocha.opts
already handles finding files to test
2017-06-02 01:21:47 -05:00
Guangcong Luo
cd3ac06987 Fix Hail/Sandstorm damage regression
(Also add a test for it since this isn't even the first time this
exact regression has happened.)
2017-05-18 06:29:25 -05:00
Ben Davies
92c6c3e3ac Trivia: fix crash in Trivia#destroy, pause when too many players absent (#3531) 2017-05-13 19:35:57 -05:00
HoeenHero
36b56f5c44 Finish renaming tools to dex (#3526) 2017-05-12 17:11:30 -05:00
Guangcong Luo
9e180e4fc1 Remove MockBattle
No MockBattle feature needs to be kept out of sim/...
2017-05-05 16:57:18 -05:00
Guangcong Luo
6dd58b40d3 Refactor simulator into new sim/ directory
This is a surprisingly minor refactor considering how many files it
touches, but most of this is only renames.

In terms of file renames:
- `tools.js` is now `sim/dex.js`
- `battle-engine.js` is now `sim/index.js` and its three classes are
  in `sim/battle.js`, `sim/side.js`, and `sim/pokemon.js`
- `prng.js` is now `sim/prng.js`

In terms of variable renames:
- `Tools` is now `Dex`
- `BattleEngine` is now `Sim`
- `BattleEngine.Battle` is now `Sim.Battle`
- `BattleEngine.BattleSide` is now `Sim.Side`
- `BattleEngine.BattlePokemon` is now `Sim.Pokemon`
2017-05-05 16:48:38 -05:00
Guangcong Luo
fcccc2cff0 Rename Battle#on to Battle#onEvent
Battle will soon be a Node.js Stream, which has an .on() function,
which Battle#on would conflict with.

PS events aren't Node events, so naming a PS event function .on()
was kind of misleading anyway.
2017-05-05 16:48:38 -05:00
Marty-D
ab89834912 Fix lack of Inverse format 2017-05-01 23:36:47 -04:00
Ben Davies
8de4bdfecb Sockets: refactor to use maps (#3474) 2017-04-23 16:39:38 -07:00
Ben Davies
7002810044 Tests: import the Trivia module in a sane way, clean up users/rooms (#3455)
Using internal module API to require the Trivia module is insane when it's
very simple to do without it. The trivia room is deleted after the tests
finish, and users are now destroyed properly.
2017-04-17 22:45:12 -04:00
Ben Davies
7d27efb817 Matchmaking: move battle logging back to Rooms.global (#3454)
* Matchmaking: move battle logging back to Rooms.global

For now, logging should be dealt by the global room until logging can be
abstracted away from it. This makes it simpler to refactor the logic in
Matchmaker#startBattle to be handled by Rooms.createBattle where it belongs.

* Matchmaking: use Matchmaker#cancelSearch format parametre

Optimizes cancelling searches if the format is known
2017-04-15 17:51:34 -04:00
Ben Davies
5adac2bc56 Matchmaking: fix crash on user disconnect/merge
Challenges and searches weren't being cleared properly after moving
them out of GlobalRoom#onLeave.
2017-03-20 17:01:42 -05:00
Guangcong Luo
698fb2ad9a Refactor choices
PS's choice system has now been majorly rewritten!

Battle#parseChoice has been eliminated, and Battle#choose is now a
very lightweight wrapper around the BattleSide#choose* functions, which
now handle validation.

Partial decisions have been mostly removed. You can manually construct
decisions partially with the side.choose* functions, but there's no
other support for them. Partial undo has been removed completely.

Choice tracking has been renamed from side.choiceData to side.choice.
side.choices has been removed and is now autogenerated from side.choice
when needed.

side.choiceData.decisions has been renamed side.choice.actions. In the
future, "decision" is a deprecated term and should be called "action"
wherever it shows up.

side.choiceData.waiting and side.getDecisionsFinished() have been
merged into side.isChoiceDone().

Other values in side.choiceData have either been rendered unnecessary
or renamed to something clearer.

The "skip" and "pass" choices have been merged together. Passes can
still be filled in automatically (so you can just use `/move 1` in
doubles when you have only one Pokémon left).
2017-03-17 23:14:52 -05:00
Ben Davies
fa3136f6f4 Prevent JSON writers from being able to block I/O (#3368)
These are the last place process.nextTick should be used. Also fixes
BattleRoom's unit tests.
2017-03-17 17:42:10 -05:00
Ben Davies
213b697d7c Rooms: move matchmaking logic to ladders-matchmaker.js (#3364)
This abstracts matchmaking logic from the global room away to its own
module, allowing the two to be decoupled from each other entirely with
some refactoring.

Related to #3361
2017-03-17 02:42:30 -05:00
Guangcong Luo
df5d8b283e Fix mistakes in tests
So I've been working on a massive refactor to the choice system for,
like, over a week. It's still not done, but it's found some mistakes
in the tests that should be fixed.
2017-03-17 02:22:52 -05:00
Guangcong Luo
5223e4b9ad Remove roomid from Battle
Battles never actually use the roomid for anything. This commit removes
it in preparation for a refactor to the sim API.
2017-03-09 13:51:13 -06:00
Ben Davies
5031794f97 Sockets: fix unit tests (#3281)
* Sockets: fix Sockets.killWorker not disconnecting connections

* Sockets: fix unit tests

- Fix crash when constructing mock sockets in certain cases
- Properly prevent workers from writing to stdout
- Fix race conditions in workers-related tests that were causing false
  positives

* Tests: mock workers now more closely imitate sockets' workers

This helps catch cases where messages are being sent in the wrong order
to the workers, e.g. messages sent to sockets that no longer exist.
2017-02-24 05:38:37 -06:00
Kevin Lau
50795768e8 Add various Z-Status Move tests (#3279) 2017-02-23 04:54:04 -06:00
Dan Pantry
9c65c5b84a add mock for battle tests that can reset the RNG
This enables battles in tests to reset their RNG to what it originally
was when they were created. A number of tests do this already by
breaking encapsulating and modifying the prng variable directly. This
should fix that.

We also remove createBattleWithPRNG and min/maxSeed properties.

Firstly, the tests that were still using the maxSeed property were
setting it to Battle.seed which has no effect since the PRNG class does
not look at this property any more - so these were no-ops.

After removing this property from tests, maxRollSeed was never used, so
I removed it and renamed minRollSeed to DEFAULT_ROLL_SEED (since it's
constant).

The places that were still using minRollSeed also were no-ops or were
using createBattleWithPRNG. Since every single instance was actually
just using the same code, I removed createBattleWithPRNG and made
createBattle default to giving you a seed with DEFAULT_ROLL_SEED and
removed the minRollSeed property too.

This makes tests much simpler and reduces the usage surface of
TestTools; now, you must define your *own* seed if you're making a PRNG
for a test, or you use one that TestTools gives you; you may not use a
public property that TestTools gives you.

We also remove the code that removes a listener in the Battle Engine.
This was rendered obsolete by f6a7c4b (see more info [in the discussion
on github][disc]

[disc]:
https://github.com/Zarel/Pokemon-Showdown/pull/3272#discussion_r102414795
2017-02-22 20:44:20 -05:00
Dan Pantry
89d4265be8 don't rely on global BattleEngine in tests
This is necessary for us to introduce a mock object.
2017-02-22 20:44:20 -05:00
Dan Pantry
56ba782966 refactor PRNG to its own class
This removes the 'deterministic test' tools by preventing action at a
distance (namely, preventing the modification of the `init` method in
`Battle` during tests). This action at a distance is incredibly
confusing.

All this action at a distance did was discard any parameters that were
passed to `Battle` that weren't the first three (which was probably a
mistake by the original author) and also hard code `this.seed` and
`this.startingSeed` in `Battle`.

This functionality has now been moved to the `PRNG` class, so instead
users should pass a `PRNG` to `Battle` as the 5th constructor argument.
Users can also pass one as the third argument to `common.createBattle`
or use `common.createBattleWithPRNG` with the PRNG as the first
argument.

The PRNG is just an encapsulation of the pseudo-random algorithm in a
class. It is stateful, so make sure to take a `clone()` of the PRNG if
you want to re-use it.
2017-02-22 20:44:20 -05:00
Guangcong Luo
5d68b0441e Disable mod loader test
It's incredibly slow, and regressions are unlikely.
2017-02-14 22:20:10 -06:00
Guangcong Luo
6611c9c9ed Fix Seed activation on double-Surge
Terrain seeds weren't activating correctly on the first Surge of two
Surge ability activations turn 1. This fixes it by allowing Update to
run on inactive Pokémon, allowing a Pokémon's item to activate onUpdate
before their own ability activation.
2017-02-14 22:14:15 -06:00
Ben Davies
8a9ce4a12a Sockets: temporarily skip unit tests (#3235)
Until the crashes and workers' flooding of stdout are resolved.
2017-02-14 22:00:06 -06:00
Ben Davies
2d0e7dba25 Implement sockets.js unit tests (#3098)
These tests are just sanity checks for sockets.js' exported methods.
Tests for bugs will come later when those for related users.js methods
have been written.
2017-01-16 16:38:16 -06:00
Ben Davies
1a433e9972 Tests: clear all users created during rooms.js tests (#3097)
This left behind 7 users in Users.users before.
2017-01-15 13:29:28 -06:00
Ben Davies
b0c117ce7a Trivia: mitigate game end/question timeout callback race condition (#3080)
This isn't very easy to reproduce, so I can't properly test any fixes.
Trivia#broadcast writes to debug monitor rather than throwing if called after
the game instance destroys itself.
2017-01-07 04:13:19 -08:00
Guangcong Luo
4fc03700fb Fix Mega Pursuit
Previously, if a pokemon mega evolved and used Pursuit, and the foe
switched on the next turn, it would use Pursuit again on the next turn,
in addition to its usual decision.

This is a hack to fix it; a full fix is pending a rewrite of the
decision structure.
2016-12-21 19:37:48 -08:00
Guangcong Luo
c773b7dd83 Add test for e1c43d4bb 2016-12-15 15:25:02 -08:00
Guangcong Luo
cfd1d0ab92 Fix Emergency Exit + Sitrus Berry interaction
If Sitrus Berry activates before switch-out, Emergency Exit shouldn't
activate.
2016-12-15 03:03:11 -08:00
Kevin Lau
d7e96b8390 Add unit tests for Comatose ability (#3013) 2016-12-11 10:44:01 -05:00
Ivo Julca
78972c41f0 Revert "Confusion still has a 50% self-hit chance"
This reverts commit 7d1ee5fecd.

There is even stronger evidence, from a trusted source, that the chance is now 1/3.
https://twitter.com/pokemon_PhD/status/788827888028151808
2016-12-06 23:50:07 -05:00
asgdf
1a922d9ea4 Don't allow locked users to roompromote (#2986) 2016-12-04 10:10:56 -06:00
Ivo Julca
7d1ee5fecd Confusion still has a 50% self-hit chance
Hypothesis of chance=1/3 can be rejected at a 0.0005 significance level.
2016-11-27 19:11:58 -05:00
Ivo Julca
2604dd1939 Trim megaOrZ argument of BattleSide#chooseMove() 2016-11-27 00:23:19 -05:00
Ivo Julca
318ca6ae9f Fix Destiny Bond 2016-11-25 15:38:25 -05:00
Ivo Julca
a14d1cc1f2 Add test for turn order for Mega Evos with Trace 2016-11-24 22:42:03 -05:00
Kevin Lau
7963c97894 Fix priority issues with Z-Moves (#2930) 2016-11-21 14:32:31 -05:00
Ivo Julca
cf35c0a8d7 Test: Fix Destiny Bond specification
It should fail deterministically every second time it's used.
2016-11-20 03:00:05 -05:00
Ivo Julca
632c04e6f1 Add failing tests for randbats generators 2016-11-20 00:24:28 -05:00
Ivo Julca
2bceebaac8 Test: Add coverage for random team generators 2016-11-19 16:11:50 -05:00
Slayer95
a3e3249a8f Spectral Thief should zero boosts despite of target abilities (#2906) 2016-11-19 14:38:54 -05:00
Ivo Julca
a09c0110b8 Destiny Bond: Add tests for exclusive counter and a minimal implementation 2016-11-19 14:17:08 -05:00
Ivo Julca
792548c01d Add test for Mega-evolution vs Pursuit order 2016-11-19 02:54:52 -05:00
Ivo Julca
78ab0bdf31 Implement Spectral Thief 2016-11-18 18:26:16 -05:00
Ivo Julca
34beddac3d Add test for bounced status moves affected by Prankster
So that UltiMario can be validated when it happens in CC:
http://www.smogon.com/forums/threads/3586701/page-33#post-7087589
2016-11-18 16:59:22 -05:00
Ivo Julca
1700067a77 Fix Judgment test 2016-11-18 15:14:27 -05:00
Ivo Julca
fbc88c8428 Fix Emergency Exit: It should block Volt Switch effect 2016-11-18 15:10:51 -05:00
Ivo Julca
c2f8c72b38 Judgment should not change type from Z Crystals 2016-11-18 15:09:21 -05:00
Ivo Julca
e97ccb3d48 Emergency Exit activation quirks are similar to Eject Button and Red Card
In particular, it only activates after all hits in a multi-hit move are performed, and
it won't activate if the move is boosted by Sheer Force.

This commit also implements the interactions of Emergency Exit
with Eject Button and Red Card, and adds tests.
2016-11-18 13:55:57 -05:00
Ivo Julca
5d04c4f2e0 King's Shield Atk drop now triggers even if immune 2016-11-18 12:48:50 -05:00
Ivo Julca
c8308ccd89 Sheer Cold no longer affects Ice-type Pokémon 2016-11-18 01:53:24 -05:00
Ivo Julca
511a45eb95 Implement immunity of Dark-types to Prankster
The immunity also applies to any moves, even non-Status, called by
other Prankster-boosted moves.
2016-11-18 00:35:52 -05:00
Guangcong Luo
382eeca94a Fix test error 2016-11-17 22:28:40 -06:00
Ivo Julca
e741700553 Test: Update the PRNG seed to make confusion self-hits more consistent 2016-11-17 23:09:04 -05:00
Ivo Julca
92c31e9d7c Test: Move old gen suites for statuses to the bottom 2016-11-17 23:09:04 -05:00
Ivo Julca
005287443c Add tests for new mega evolution & turn order mechanics 2016-11-17 20:57:29 -05:00
Ivo Julca
4fa6c5499b Build: Fix issues reported by the latest Eslint version 2016-11-17 14:27:39 -05:00
Ivo Julca
ddfe02efe3 Build: Fix Node v7 support 2016-11-17 14:20:33 -05:00
Guangcong Luo
b734d2f1c3 Make gen 7 the default mod
This makes gen 7 the default mod, updates the tests to match, and fixes
the corresponding build error.

Note that this only changes the default Tools mod, the default Formats
mod is now gen6. gen7 must be specified by name in a format, for that
format to be a gen 7 format.
2016-11-17 12:27:46 -06:00
QuiteQuiet
17a18e7a2a Tests: Update TeamValidator tests and add new ones (#2855)
* Tests: Add TeamValidator nature and happiness test

* Tests: Make TeamValidator test synchronous
2016-10-27 13:01:35 -05:00
Guangcong Luo
02055d3d17 Fix mod loading order
Sometimes mods would mess up if they were loaded in the wrong order.
Specifically, some autogenerated properties of e.g. moves need to be
recalculated for mods.

Anyway, the entire cache system is replaced with a newer, faster,
slightly-more-memory-intensive-but-only-slightly cache system, which
no longer has these kinds of loading order issues.
2016-10-23 14:17:13 -05:00
Guangcong Luo
7d8d47c97c Refactor BattleEngine
Battle is now an ES6 class... mostly... it's complicated.

Battle's inheritance system has always been a mess. I tried to redo it
in a sensible way but it caused nondeterministic test failures. Not
even kidding; different things would fail each time I ran tests, even
without code changes. I'll investigate closer later, but this refactor
makes it use ES6 classes with only a small amount of hacking, which is
good enough. It is, at the very least, simpler than the previous mess.

BattleEngine.Battle.construct has been renamed BattleEngine.construct.
2016-10-22 23:11:26 -05:00
Guangcong Luo
2604780ec5 Refactor Tools
Tools will be renamed to Dex soon, which is why the code inside Tools
is calling itself "Dex" now, but right now we're just refactoring its
internal code and not officially renaming it yet.

In the meantime, Tools is now an ES6 Class.

A long-standing bug in learnset loading order (the one
test/chat-plugins/datasearch.js tests for) has finally been fixed, so
Tools.includeMods() is no longer necessary to accurately access modded
data.

Tools.mod has been split into Tools.mod(modid) and
Tools.format(format). The issue of Tools.mod being ambiguous about
whether it's passed a mod or a format hasn't been a _bug_ for a while,
but this is still more readable.

Other renames include:

Tools#isLoaded -> Tools#dataLoaded
Tools.includeMods() -> Tools.includeModData()
Tools.preloadMods() -> Tools.includeMods()
Tools.preloadedMods -> Tools.modsLoaded
Tools.moddedTools -> Tools.dexes

Do not just rename your calls of Tools.includeMods() to
Tools.includeModData(). With the learnset loading bug fixed, there's
no reason to use it unless you need direct access to
Tools.dexes[...].data for some reason (you don't, just use
Tools.mod(...).data)
2016-10-21 13:23:21 -05:00
Guangcong Luo
87c41eb67c Rename simulator.js to room-battle.js
simulator.js doesn't actually contain the simulator, but is really just
an implementation of battles in the RoomGame interface.

Renames:
`Simulator.Battle` -> `Rooms.RoomBattle`
`Simulator.BattlePlayer` -> `Rooms.RoomBattlePlayer`
`Simulator.SimulatorManager` -> `Rooms.SimulatorManager`
`Simulator.SimulatorProcess` -> `Rooms.SimulatorProcess`
`Simulator.create` -> no longer exists, use `new Rooms.RoomBattle(...)`
2016-10-21 13:21:12 -05:00
Ben Davies
54d0ff203a Performance: replace direct references to arguments with rest parametres (#2818)
Replacing direct references to the arguments object of functions with rest
parametres prevents the function from being deoptimized while still allowing
use of arbitrary arguments. This may also fix some minor memory leaks related
to mishandling the arguments object.
2016-10-04 16:29:14 -07:00
Guangcong Luo
d6f5404e7e Rename CommandParser to Chat
We had a lot of discussion in Dev and a somewhat-close poll, but in
the end "Chat" was a better name than "Messages", and also has the
advantage of being shorter (which is nice for Chat.html and
Chat.plural which should be short).
2016-09-30 18:31:15 -07:00
Guangcong Luo
da1b318707 Move text processing from Tools to CommandParser
The following functions have been renamed:

- Tools.html to CommandParser.html
- Tools.plural to CommandParser.plural
- Tools.escapeHTML to CommandParser.escapeHTML
- Tools.toDurationString to CommandParser.toDurationString
- Tools.toTimeStamp to CommandParser.toTimestamp
  (notice the lowercase 's')

This is in preparation for a rename of Tools to Dex (by removing the
non-dex-related functions) and a rename of CommandParser to either
Messages or Chat.
2016-09-30 18:04:13 -07:00
Guangcong Luo
2bc0bf5061 Tests: Properly resolve rejected promise 2016-09-30 15:56:50 -04:00
Ivo Julca
ce9cdecafd Drop commands sent to rooms from outside 2016-09-17 19:42:15 -05:00
Ben Davies
d9c6fe54b2 ProcessManager: subclass to extend ProcessManager, unit tests setup (#2739)
Before, an options object containing properties and values to be used
was how decorated instances of the class would be created. This meant
the constructor could assign anything you feel like to `this`. Rather
than that, the constructor now assigns a strict set of values, and
methods are redefined in subclasses.

Basic unit tests were added to test if they could be written for after
the final refactor to fix the other memory leak here.
2016-09-09 15:51:49 -05:00
Ben Davies
4e9577a7e5 Trivia: modlog kicks and wins, clean up unit tests (#2740)
Unit tests were still not destroying a few users.
2016-09-08 02:37:21 -05:00
Taylor Everding
1a1f64fe95 Remove .js extension from requires (#2725) 2016-08-30 00:04:40 -05:00
Ben Davies
ecb00710a7 Trivia: dispose of extra users in unit tests (#2719) 2016-08-27 14:47:08 -05:00
Ben Davies
d88561b42e Trivia: properly dispose of trivia games in mode unit tests (#2718) 2016-08-27 02:39:22 -05:00
Guangcong Luo
4523078519 Refactor User#games from Map to Set
User#games no longer retains games; it instead gets them from
Rooms(roomid).game.

The Trivia tests needed to be fixed for fidelity to continue passing.
2016-08-27 02:16:58 -05:00
Guangcong Luo
1a1530f4ff Refactor Connection#rooms to Set
Connection#rooms, previously a null-prototype roomid:room Object,
is now Connection#inRooms, a roomid Set.

This, incidentally, makes it stop retaining rooms, which may make the
GC's job easier and may also lead to unexpected bugs if we get
inconsistent state (we often do get inconsistent state, so look
forward to that!)

The rename is mostly to put it in line with the new User#inRooms,
and for ease of greppability without running into Rooms.rooms.
2016-08-22 03:57:52 -05:00
Bär Halberkamp
55429ed884 Move modlog writing to Room.prototype (#2700)
* Move modlog-related functions to Room.prototype, instead of CommandParser

* Wifi: modnote the winner of a giveaway
2016-08-18 16:45:53 -05:00
Ben Davies
5c4834f3fd Tests: tweak user mocks, add Connection tests, fix Trivia tests (#2682)
Worker mocks now have proper ids. Trivia tests now dispose of user objects
rather than letting them stay in memory for the rest of the tests.
2016-08-09 04:02:27 -05:00
Guangcong Luo
34650dd455 Refactor Rooms.rooms and Rooms.aliases to Map 2016-08-08 16:46:11 -05:00
Ben Davies
343c67b15f Trivia: lazy loading for modules in unit tests (#2677)
This makes it possible to refer to globals normally defined in production in the
outermost scope of the trivia module without making unit tests throw.
2016-08-08 14:43:01 -05:00
Ben Davies
febba6b362 Trivia: add /trivia leave, lower answering period to 10 seconds (#2674) 2016-08-06 14:20:58 -05:00
Taylor Everding
f6a7c4bd30 Move IPC from battle-engine.js to simulator.js (#2666) 2016-08-04 00:35:59 -05:00
The Immortal
76b6030043 Fix Relic Song 2016-08-04 03:41:15 +04:00
Ben Davies
0d2d73540d Trivia: add unit tests confirming if points given aren't NaN (#2661) 2016-08-01 15:03:04 -05:00
Ben Davies
d00ba49b1c Trivia: game management code rewrite (#2626)
Part 1 of the rewrite for the entire plugin
This is the rewrite of the classes and commands that handle running
trivia games. Several bugs that happened when running trivia games were
fixed, and unit tests were added to help keep them gone.
2016-07-31 18:29:51 -05:00
Marty-D
41e6945417 Add Electric/Misty Terrain messages 2016-07-20 14:05:25 -04:00
Konrad Borowski
bb3acda351 Copy auth from tournament room to tournament battle (#2608)
This allows room staff to perform moderation in tournament battles.
2016-07-06 07:28:47 -05:00
Ivo Julca
9d5e0e78a7 Resolve tournament matches on battle room expiry 2016-07-01 10:07:03 -05:00
The Immortal
a61e19b46a Tests: Remove unused const 2016-06-26 05:37:17 +04:00
Kevin Lau
5e3f1dcabc Tests: Update Weather tests for clarity and readability (#2596)
Updated remaining Primal Weathers to the new APIs.

Updated misleading test cases relating to base power of moves in
Desolate Land / Primordial Sea.

Increased coverage on weather tests.
2016-06-24 20:11:03 -07:00
Ivo Julca
f095ac4fea Implement Curse targetting glitch 2016-06-20 11:57:23 -05:00
Ivo Julca
ec572891a5 Fix typing information leak 2016-06-20 11:38:06 -05:00
Ivo Julca
59c667337b Refactor Team Preview to support per-Pokémon decisions 2016-06-20 10:49:21 -05:00
Ivo Julca
543bbf5ccc Refactor switching to support per-Pokémon decisions
- Implements `skip` choice, which acts as a placeholder in the player
choices. This is relevant to double-KOs, since in-game you are allowed
to specify switch-ins in any order.
2016-06-19 23:45:57 -05:00
panpawn
a331b5d41c Test: fix iteration index (#2594) 2016-06-20 05:25:52 +02:00
Ivo Julca
50fcd02b6d Tighten move validation
The target location is checked on chooseMove(), rather than
after the decision has entered the queue.
2016-06-19 07:53:58 -05:00
Ivo Julca
2861463b48 Test: Increase coverage of /undo
Among the added tests, are included:
- A skipped test for an edge case in which usage of Reflect Type
causes a typing information leak via the presence/absence of the
"maybe-trapped" warning and cancel prevention.
- Two skipped tests related to partial decisions functionality.
2016-06-19 05:49:23 -05:00
Ivo Julca
3b1749eccf Add basic support for per-Pokémon decisions
- Basically, support is added only for `move` requests here, and
behind a flag (`battle.supportsPartialDecision`).
- Switching is mostly supported, except for the multiple-KOs case.
- Team Preview needs a rework in order to enable this feature.
2016-06-17 12:26:56 -05:00
Ivo Julca
76604daf58 Test: Cover /team and /shift decisions 2016-06-17 11:48:07 -05:00
Ivo Julca
be8ba884c8 Test: Increase coverage of decisions 2016-06-17 08:48:22 -05:00
Ivo Julca
99f43ca2ef Test: Fix misc issues
Introduced in commits 69d9dc803 and 22c55e656
2016-06-17 08:41:58 -05:00
Ivo Julca
67da1a1221 Test: Use the new common#createBattle method
- This cuts down tons of code that define player names, avatars,
and deal with Team Preview.
2016-06-17 05:45:22 -05:00
Ivo Julca
22c55e6560 Test: simplify battle initialization with a common module 2016-06-17 05:44:33 -05:00
Ivo Julca
e69d9dc803 Test: Dramatically increase coverage of choice parser 2016-06-16 08:25:37 -05:00
Ivo Julca
b242e86c04 Test: rearrange tests for decisions 2016-06-16 08:22:07 -05:00
Ivo Julca
6ca2233657 Fix logging of passes 2016-06-15 10:02:52 -05:00
Ivo Julca
f2aff1b6ae Refactor tests to use the new assert/battle APIs 2016-06-15 08:56:29 -05:00
Ivo Julca
0be37dd2ce Split apart Battle#parseChoice into several BattleSide methods 2016-06-15 08:56:11 -05:00
Ivo Julca
2ab2937b3c Implement assert extensions to enhance the test suite 2016-06-15 08:54:18 -05:00
Ivo Julca
e5971f4f13 Test: Increase choice parser coverage 2016-06-15 01:28:06 -05:00
Quinton Lee
e08f7ef4c0 Test: add TeamValidator tests (#2546) 2016-05-04 16:33:16 -07:00
Bär Halberkamp
b450b0617f Move things relating to punishments to punishments.js (#2540) 2016-05-02 12:16:25 -07:00
Ivo Julca
22779102cc Lint: Add miscellaneous extra rules
Among the newly added rules, there are quite a few intended to enforce
compliance of CONTRIBUTING.md-blessed idioms, as well as ensure
safe usage of classes and constant bindings.

We are also now enforcing usage of early return in commands.js,
which has 100% compliance as of fd2c45c.
2016-04-25 21:52:21 -05:00
kotarou3
952cefbad4 Minor crash guard changes (#2470)
- Remove unused crash guard comment
- Update Config.crashguard comment a bit
- Use Config.crashguard to disable it in tests
2016-04-17 02:15:17 -07:00
Kevin Lau
1c574c6c55 Critical Hit Ratio refactor: Use an event to modify crit ratios (#2501)
This allows for proper crit ratios when a Pokemon loses/gains an ability,
item, or other effect in the middle of a multi-hit attack.
2016-04-11 21:35:36 -04:00
Ivo Julca
bbb58d5a29 Add a test for old-gen /learn 2016-03-31 14:01:11 -05:00
Kevin Lau
715de49408 Refactor Anger Point to the Hit event handler
This fixes its interaction with Clear Smog because Hit handlers for
moves always activate before all other global event handlers.

Removed the Hit event from the list of events stopped by Mold Breaker
variants as there are no abilities that would be negated by it that
use that handler.
2016-03-23 20:23:42 -07:00
Kevin Lau
bfac338ddb Normalize doesn't affect moves that change type
The ModifyMove singleEvent for moves always runs before the
larger event that triggers an ability's event handler and
take precedence over Normalize, so we code exceptions in
Normalize to not change the type in those situations.

Conveniently, all the moves that change type right now are
defaulted to Normal-type, and since Normalize technically
won't change the type of any Normal-type move, we're using
that as the guideline for our exception.
2016-03-16 10:54:47 -07:00
Guangcong Luo
82ed5e0d22 Fix Levitate Flying Ring Target interaction 2016-02-19 17:23:21 -06:00
Guangcong Luo
8446e5fbc3 Fix Thousand Arrows Wonder Guard interaction
Thousand Arrows shouldn't add Smack Down if Wonder Guard avoids it.
2016-02-19 17:23:21 -06:00
Guangcong Luo
794d160eec Refactor runImmunity
BattlePokemon#runImmunity is now two functions, runImmunity and
runStatusImmunity.

The split is helpful because: 1. NegateImmunity only applies to type
immunities, and 2. Immunity only applies to status immunities and
Ground immunities.

Ground immunities are now entirely handled hardcoded in isGrounded.

This overall doesn't have a noticeable impact on performance, but
it makes certain things behave more predictably, and correctly
shows the ability activation for Levitate, so I assume that means it's
a net positive. I hope I at least improved readability...
2016-02-19 05:18:40 -06:00
Guangcong Luo
a8e8272bac Refactor types and remove ModifyPokemon
The unwieldy system that is typesData is now removed, and is replaced by
the array `types` and the string `addedType`, which track the same amount
of information in a much more efficient way. (Roost is now hardcoded, but
let's not talk about that.)

Incidentally, this now roughly matches client, which tracks typechange
and typeadd as volatiles.

This allows us to remove ModifyPokemon, which overall provides a 10%
performance increase. I was hoping it'd be more substantial, but oh well.
2016-02-16 23:42:37 -06:00
Guangcong Luo
b665660608 Refactor for more ES6 features
Now that nodejs/node#3072 is mostly fixed, we can finally start using
Node 4+ features.

This refactor:

- uses arrow functions where appropriate

  Note that arrow functions still aren't used in Mocha, where `this`
  is sometimes meaningful.

  This also removes the need for .bind() nearly everywhere, as well
  as the `self = this` trick.

- refactors Validator and Connection into ES6 classes

- no longer uses Array#forEach for iterating arrays

  We strongly prefer for (let i = 0; i < arr.length; i++) because of
  performance reasons. Most forEaches have been replaced with for..of,
  though, which is 5x slower than the long-form loop but 2x faster
  than forEach, which is good enough outside of most inner loops.

  The only exception is tournaments, which is due for a more invasive
  refactor soon anyway.
2016-02-10 17:40:21 -06:00
Kevin Lau
ab64569717 Fix Focus Punch bugs
By setting a handler to listen for the Hit event, Pokemon will now lose
focus properly when attacked by multiple Pokemon or by Nature Power.
2016-01-27 16:15:50 -08:00
Guangcong Luo
c7bb5b5315 Add RoomGame support for /joingame, /leavegame
The old commands /joinbattle, /leavebattle are now /joingame and
/leavegame, and can be implemented by any RoomGame.
2016-01-19 01:47:26 -08:00
Guangcong Luo
f094e4cf01 Fix Lightning Rod redirection priority
In speed ties, the pokemon that's had the ability the longest is
redirected to.

Fixes #2083

Closes #2154
2016-01-13 00:13:55 -08:00
Guangcong Luo
99a6e73df0 Mostly fix Curse targeting
Curse now correctly updates what target it asks for when the user
changes type.

The only remaining targeting issue is when the user changes to
Ghost-type mid-turn in Doubles.
2016-01-12 15:16:23 -08:00
Guangcong Luo
1e2bb4a9c5 Merge pull request #2371 from kotarou3/fix-repl-tests
Don't enable repl while testing
2016-01-12 02:29:57 -08:00
Guangcong Luo
331608da49 Fix Natural Cure message
In-game, you can see your opponent's pokemon represented as balls, with
statused pokemon being dark balls. Because of this, light balls are
clearly not statused, which allows you to know when a pokemon has
Natural Cure.

The only exception is in Doubles/Triples, where multiple pokemon that
are statused but could have Natural Cure switch out at the same time,
but not all of them have Natural Cure: it's not possible to know which
pokemon had Natural Cure.

This exception is now handled correctly.

Fixes #1452
2016-01-12 02:28:43 -08:00
小太
edb9d27262 Don't enable repl while testing 2016-01-12 20:44:27 +11:00
Guangcong Luo
573922f145 Give more control over when servers are spawned
Previously, include('./sockets.js') and include('./app.js') would
automatically spawn listener processes.

Now, you have to actually use .listen() to spawn listener processes.

This makes the testing framework simpler, since it no longer needs an
ugly hack to suppress spawning socket processes, and also makes it
easier for the ./pokemon-showdown "binary" to pass a port to app.js.

./pokemon-showdown will now also install dependencies if necessary.
2016-01-07 00:20:49 -06:00
Guangcong Luo
4898190cb6 Fix old pullreq for modern code style 2016-01-04 23:13:43 -06:00
Guangcong Luo
69934732ef Merge pull request #2130 from ascriptmaster/move-fixes
Refactor move redirection
2016-01-05 04:06:58 +00:00
Konrad Borowski
81f602b8d8 Always use trailing comma for multiline objects 2016-01-01 00:20:07 +01:00
Konrad Borowski
79a5b23f25 Modify data and mods files to follow style rules 2016-01-01 00:18:00 +01:00
urkerab
ba6dc7c5c0 Prevent IV values that represent half of a DV 2015-12-30 15:32:40 +00:00
Marty-D
bb7bfada94 Fix lingering issues from #2339 2015-12-28 15:09:32 -05:00
Marty-D
235e470553 Merge pull request #2339 from ascriptmaster/trapping
Trapping refactor
2015-12-28 12:10:52 -05:00
Kevin Lau
7c491ad06b Add test suites for trapping moves and abilities 2015-12-21 14:56:21 -08:00
The Immortal
d47c968ee6 Fix Magic Room interaction with Primals 2015-12-21 21:22:23 +04:00
Ivo Julca
c8df8c4e27 Test: increase timeout for Lightningrod Triples test 2015-12-21 05:41:56 -05:00
Ivo Julca
f5b3a3b875 Test: use mock-fs to sandbox the file system 2015-12-20 03:22:02 -05:00
Ivo Julca
1673f1fd9b Test: make player name sync regression test more robust
If Custom Game was configured as never rated (in order to e.g. give it an unrated ladder), it would yield bogus failures.
2015-12-20 00:18:23 -05:00
Ivo Julca
344e021700 Increase timeout for Pressure tests in Triples 2015-12-14 17:53:03 -05:00
Guangcong Luo
332a65f9c0 Convert some Users tables to ES6 Maps
Specifically, Users.users, Users.connections, and Users.pastUsers
are now ES6 Maps. In theory, this should be a minor performance
upgrade, but we still need to profile to make sure.
2015-12-10 11:52:26 -05:00
Guangcong Luo
4e9a5a962f Merge pull request #2293 from ascriptmaster/trickroom
Refactor Trick Room and fix interactions with speed-based moves
2015-12-10 11:24:32 +00:00
Kevin Lau
64c8650713 Add tests for Trick Room and the TR Glitch 2015-12-09 15:52:21 -08:00
Ivo Julca
9116fea506 Fix config crashes possibly resulting in config reset 2015-12-04 01:01:50 -05:00
Ivo Julca
50c3f8f8aa Fix test for battle player identifier consistency after rename 2015-12-03 20:45:13 -05:00
Ivo Julca
47918a6d92 Replace remaining instances of var by block bindings 2015-12-03 19:45:35 -05:00
Guangcong Luo
341ab3b684 Refactor simulator.js to new RoomGame API
This is a huge refactor that's a half-scratch rewrite of simulator.js.

Everything seems to be working so far, but with such a huge change,
I wouldn't be surprised if something went wrong.
2015-12-03 18:30:47 -06:00
Ivo Julca
33386f79aa Test: increase time limit for redirection tests 2015-11-09 00:15:48 -05:00
Ivo Julca
7dddb66253 Migrate build system to ESLint
JSHint's ES6 support is shaky, and its development has stalled as of late.
Since ESLint can do by itself both JSHint and JSCS' jobs, this commit replaces them.
Gulp and its related dependencies are also hereby removed.
2015-11-07 21:36:49 -05:00
Ivo Julca
9a52fe337f Parse all numerical user input as base 10
Also took the chance to commit some style fixes missed in 90973d5 and 04c64c1.
2015-11-07 20:08:01 -05:00
Ivo Julca
04c64c143e Cleanup: remove several unused variables 2015-11-07 17:34:21 -05:00
Ivo Julca
90973d5c0c Style fixes
- Cut down excessive spacing
- Add braces to missing conditionals
2015-11-07 17:08:09 -05:00
Juanma Serrano
c4ac8d6e2f Use strict mode and let and const instead of var
This commit also fixes some duplicated variable declarations.
2015-11-06 21:56:52 -05:00
Ivo Julca
b794d2ee09 Fix Travis CI build 2015-11-01 16:36:05 -05:00
Ivo Julca
e510d036fd Add tests for Curse targetting
Refs Zarel/Pokemon-Showdown-Client#354
2015-11-01 15:43:35 -05:00
Konrad Borowski
d9abb0eeb7 Poison/burn/leech seed don't increment residualdmg on start in Gen1
Previously moves like Leech Seed incremented residualdmg when used by 1,
but this doesn't actually happen in the game. Instead, an actual game
uses a flag to store toxic poisoning flag, and when it's not specified,
these statuses always dealt 1/16 of full HP.

This fixes the issue where the sequence of moves (Toxic followed by Leech
Seed) was dealing 1/16, 3/16, and 4/16 of full HP in residual damage,
instead of 1/16, 2/16, and 3/16.
2015-10-04 13:26:23 +02:00
Carl Sobolewski
4155771189 Test: Fire- and Water-related weathers modify damage correctly
These calculations would return 150 and 54 damage respectively prior to the
previous commit.
2015-09-13 03:23:01 -06:00
Carl Sobolewski
f1146dcac6 Weather modifies baseDamage instead of basePower
http://git.io/vZKFp
2015-09-13 02:43:39 -06:00
Ivo Julca
e2709e6213 Fix Travis CI build 2015-09-11 00:54:37 -05:00
Ivo Julca
3ae84997c9 Test: don't load chatroom data 2015-09-11 00:41:15 -05:00
Ivo Julca
234e87319b Test: don't write to file system 2015-09-11 00:40:22 -05:00
Ivo Julca
85379ff12e Test: don't listen for connections 2015-09-11 00:38:49 -05:00
Kevin Lau
449f0aaa16 Add test suite for Shield Dust 2015-09-03 03:10:13 -07:00
Kevin Lau
cc1f581c90 Refactor move redirection
Implemented a new priorityEvent function that is set to abort when any
event handler returns a non-undefined result, unlike runEvent which waits
until all event handlers have run. Set RedirectTarget to use this event.

Changed ability/move priorities for RedirectTarget handlers to fit under
this new paradigm.

Added new Lightning Rod and Storm Drain tests to ensure proper behavior.
2015-08-26 20:22:28 -07:00
Kevin Lau
1c70494e2b Fix Snatch and Imprison's interaction with Pressure
They target the user, but for the purposes of Pressure are treated as if
they target the opposing side.
2015-08-21 18:50:21 -07:00
Kevin Lau
e846fbb129 Fix Battle Armor and Shell Armor tests to no longer use the battle log
Instead, they can use Battle#on to check for the move dealing a critical
hit within the ModifyDamage event instead.
2015-08-12 16:02:12 -07:00
Ivo Julca
0a1cf02b9d Prevent login server requests in tests 2015-07-30 09:20:47 -05:00
Ivo Julca
2670d4d2ce Fix stray spacing style issues
These were not caught by the CI until the cache was deleted.
2015-07-29 15:34:42 -05:00
Ivo Julca
47263c8749 Fix players of rated battles getting out of sync on rename
- This removes one of the reasons of `sendFor` calls' sometimes failing.
- This also fixes battle logs so that they register the proper end type (forfeit).
2015-07-29 15:18:17 -05:00
Ivo Julca
cd36fbfde2 Gulpfile: add more JSCS rules
- Disallow spaces between function names and round brackets.
- Disallow spaces inside array/object literal brackets.
- Disallow spaces before semicolons.
- Disallow yoda conditions for equality.
2015-07-28 19:38:53 -05:00
Kevin Lau
9a7585c58e Add tests for Ice Ball/Rollout 2015-07-26 19:58:38 -07:00
Marty-D
d00ed0c5c5 Fix trailing whitespace from cf295251a1 2015-07-24 21:26:28 -04:00
Pikachuun
cf295251a1 Fix Flower Gift 2015-07-24 20:03:25 -04:00
Kevin Lau
b310eb00b9 Add Intimidate test for double-KOs 2015-07-19 16:54:55 -07:00
Guangcong Luo
0eb6f4b244 Merge pull request #2006 from ascriptmaster/move-fixes-2
Fix PP deduction interactions with Pressure
2015-07-17 13:40:19 -05:00
Kevin Lau
4da92ae00c Upgrade Follow Me test to check for self-targetting moves 2015-07-17 01:48:01 -07:00
Kevin Lau
913704c3ac Release and update Pressure tests
Added a check for Harsh Sun/Water moves failing and deducting PP.

Spikes has 32 max PP. Correct relevant values in the code.
2015-07-17 01:47:58 -07:00
Guangcong Luo
3bde6c758b Merge pull request #2050 from ascriptmaster/tests
Fix Mold Breaker interaction with Damp
2015-07-16 16:36:43 -05:00
Konrad Borowski
c0b71f03b7 Show that weather began even under Air Lock effect 2015-07-16 16:12:47 +02:00
Kevin Lau
e5beaba7bf Upgrade Sky Drop test to check for Follow Me 2015-07-16 04:24:07 -07:00
Kevin Lau
55f08be727 Add many Ability tests related to Mold Breaker 2015-07-15 14:48:57 -07:00
Kevin Lau
72b61b25d6 Update Intimidate test to ensure ability activation order
Re-do the activation test with the Pokemon switched to ensure that ability
activation was based on speed instead of player order.
2015-07-13 20:39:25 -07:00
Kevin Lau
604194e7d4 Normalize wording on tests related to Mold Breaker
The two most common wordings were "suppressed" and "bypassed". Out of the
two, "suppressed" was chosen to be used across all tests.
2015-07-12 03:27:11 -07:00
Kevin Lau
e991c70f4c Update Intimidate test to check activation order 2015-07-07 13:20:32 -07:00
Guangcong Luo
f67fd91590 Merge pull request #2037 from Slayer95/test
Add regression test for players being unable to join battles
2015-07-07 03:17:40 -05:00
Ivo Julca
43e20ebf24 Add regression test for issue described in b3b435c 2015-07-07 03:11:49 -05:00
Ivo Julca
b441375b5a Test: move utility functions to dev-tools/ 2015-07-07 03:08:18 -05:00
Kevin Lau
3c33a363fa Add Intimidate test to check simultaneous switches 2015-07-07 00:15:10 -07:00
Kevin Lau
70c8ca45ff Fix behavior with Ability activation in double-KO scenarios
Add new function battle.insertQueue that inserts a decision into the
correct position in an already-sorted queue instead of re-sorting. Also,
to prevent code reuse, add new funciton battle.resolvePriority to deal
with shared code between battle.addQueue and battle.insertQueue.
2015-07-06 20:33:40 -07:00
Guangcong Luo
9d79f72418 Merge pull request #1999 from ascriptmaster/move-fixes
Fix Quash interaction with self-switching moves
2015-07-02 07:34:06 +00:00
Kevin Lau
f7f310831d Improve tests relating to item removal 2015-06-28 16:47:12 -07:00
Kevin Lau
51f2cd93ff Fix Color Change test wording 2015-06-27 00:42:21 -07:00
Kevin Lau
020c08d5d9 Add tests for Color Change, Relic Song, Thief 2015-06-27 00:40:16 -07:00
Ivo Julca
fc89d5f372 Test suite is now deterministic 2015-06-26 21:55:43 -05:00
Kevin Lau
dafbefe973 Fix Sky Drop test pointing at wrong generation
It should be Doubles Custom Game, not [Gen 5] Doubles Custom Game.
2015-06-26 19:07:47 -07:00
Kevin Lau
5403862e43 Fix random failure in Sky Drop test
In Doubles, if a decision is not specified, it tends to choose the first
move but the intended target can be wrong.
2015-06-26 18:59:43 -07:00
Guangcong Luo
e35ed8ebd5 Refactor login
finishRename was a really huge function. This splits it into three
much more manageable functions with more useful names.
2015-06-25 04:43:34 -04:00
Kevin Lau
523ffe454b Add Sky Drop tests and pending Sky Drop glitch tests (for Gen 5) 2015-06-23 11:49:53 -07:00
Kevin Lau
d2eda4a375 Add Quash tests 2015-06-23 00:52:41 -07:00
Kevin Lau
d7b77a76a4 Mocha: Normalize oldgen descriptions for tests
Listing the generation number imitates the style used in PS! format names,
and is clearer on which generation it is than listing games from that gen
(so GSC -> Gen 2, etc)
2015-06-19 00:25:03 -07:00
Kevin Lau
8913271ea9 Merge pull request #1985 from ascriptmaster/tests
Further upgrade status move tests
2015-06-18 18:28:23 -07:00
Ivo Julca
8329e6f532 JSCS: fix crash in validateConditionals rule for empty blocks 2015-06-18 19:35:41 -05:00
Kevin Lau
85ee0961c1 Further upgrade status move tests
Steel-types are immune to the poison status in Gen 3+, so wrap it into the
"fail when the opposing Pokemon is immune to the status it sets" and set
up the poison-inflicting status test to check Generation 2.

Spin off Thunder Wave to its own test, and also create a test for Glare to
check its Generation 3 behavior as well.
2015-06-18 17:05:49 -07:00
Kevin Lau
9df3d0e42f Add Contrary tests for Mold Breaker and Belly Drum 2015-06-18 14:23:53 -07:00
Kevin Lau
ba35604c58 Add Sticky Hold and Knock Off tests 2015-06-17 15:39:32 -07:00
Kevin Lau
ba1f5df45c Release and improve pending Iron Ball/Thousand Arrows tests
Some tests had incorrect program flow that was resulting in incorrect
expected behaviors.

Improved the wording on some test descriptions.

Gave some of the Pokemon Shell Armor to negate test failures due to
critical hit messages appearing before the type effectiveness messages.
2015-06-16 00:11:08 -07:00
Kevin Lau
c5716272da Add Wonder Guard tests 2015-06-15 23:13:05 -07:00
Kevin Lau
34a0947eab Add Ingrain tests 2015-06-15 23:12:59 -07:00
Kevin Lau
4027fad468 Add working and pending tests for Pressure 2015-06-15 16:30:17 -07:00
Ivo Julca
21aebd070e Add pending tests for Iron Ball and Thousand Arrows 2015-06-15 04:48:15 -05:00
Ivo Julca
c08aba185b Implement JSCS rule to enforce switch cases not to be indented 2015-06-12 03:41:04 -05:00
Ivo Julca
b740197244 Implement JSCS rule to enforce PS conditionals' style 2015-06-12 03:36:36 -05:00
Kevin Lau
b8af0856f4 Add tests for type-immunity negating moves and items 2015-06-11 13:48:28 -07:00
Guangcong Luo
83a3540886 Merge pull request #1908 from ascriptmaster/tests
Add option for Mocha tests to use event handlers
2015-06-09 23:03:37 +00:00
Kevin Lau
6d76928ec3 Add Battle#on tests 2015-06-09 03:42:32 -07:00
Kevin Lau
26f88d2f89 Change weight tests to use the new event handlers 2015-06-09 03:42:27 -07:00
Kevin Lau
b59c53f886 Add tests for Levitate, Magic Guard, Sturdy, Focus Sash 2015-06-09 03:09:01 -07:00
Kevin Lau
d36ffabdd8 Add Belch Mocha tests 2015-06-03 20:04:17 -07:00
Kevin Lau
2d127ca355 Add Multiscale test 2015-05-31 05:05:07 -07:00
Kevin Lau
7607900160 Add Thick Fat tests 2015-05-31 03:54:41 -07:00
Kevin Lau
903295d642 Fix rare test failures from crits
Max damage critical hits would result in OHKOs.
2015-05-31 03:54:37 -07:00
Kevin Lau
c374656275 Add Unaware Mocha tests 2015-05-31 03:54:14 -07:00
Guangcong Luo
bc789f8d7f Merge pull request #1906 from ascriptmaster/tests
Battle Engine no longer sets EVs to 84 with blank EV sets
2015-05-30 02:00:09 +00:00
Kevin Lau
88827ff468 Fix hardcoded HP values for Mocha tests
Without the battle engine setting the HP EVs to 84, all HP values for
tests that involved set damage/healing were changed.
2015-05-29 11:32:21 -07:00
Guangcong Luo
066b1d6828 Merge pull request #1865 from ascriptmaster/move-fixes
Battle refactor: No longer reset ignore in Battle#update
2015-05-27 01:11:34 +00:00
Guangcong Luo
b7aa629703 Merge pull request #1889 from ascriptmaster/move-fixes-2
Battle refactor: New function isGrounded(), bug fixes
2015-05-26 07:09:19 +00:00
Kevin Lau
61996d3f6e Battle refactor: New function isGrounded(), bug fixes
Added BattlePokemon#isGrounded to check for the grounded-ness of a
Pokemon. Also BattlePokemon#isSemiInvulnerable for whether a Pokemon is
in the first turn of a two-turn move that makes them semi-invulnerable.

Fixed Terrain bugs involving Pokemon in a semi-invulnerable state.

Changed OHKO move check to use BattlePokemon#isSemiInvulnerable, fixing a
graphical bug that would display an immunity message when a Pokemon
attempted an OHKO move on a higher-leveled Pokemon that was being held by
the effect of Sky Drop.

Fixed Misty Terrain bug that was causing Rest and the effect of Yawn to
put Pokemon to sleep.

Fixed Misty Terrain bug that was causing Yawn to fail.

Fixed Electric Terrain bug that was causing Yawn to succeed.
2015-05-21 16:54:44 -07:00
Kevin Lau
c919f1504e Add and fix up Sheer Force, Rock Head, and Substitute tests
"Sheer Force should eliminate Life Orb recoil in a move with secondary
effects" would always pass even with wrong implementation because the
Sheer Force Pokemon being used was not holding a Life Orb.

Added tests related to Mummy to Sheer Force and Rock Head.
2015-05-21 13:52:01 -07:00
Kevin Lau
9851ef9838 Add tests for Klutz, Magic Room, Embargo 2015-05-18 02:44:42 -07:00
Kevin Lau
1f10dc1185 Add terrain tests, Arena Trap tests, Inverse Battle tests 2015-05-17 19:43:15 -07:00
Kevin Lau
a5bc0632b1 Upgrade Imprison Tests
Imprison should actively prevent the Pokemon from using imprisoned moves.
2015-05-14 14:18:07 -07:00
Guangcong Luo
8b7963e996 Merge pull request #1874 from ascriptmaster/tests
Upgrade tests
2015-05-12 06:25:38 +00:00
Ivo Julca
4222ffb5df Dependant support: make sure that relative paths are resolved properly 2015-05-11 15:38:18 -05:00
Kevin Lau
dd80e38322 Upgrade tests
- Improve the wording on tests for status moves to be more clear
- Add a test for Stealth Rocks
2015-05-10 15:40:52 -07:00
Guangcong Luo
383af9eea1 Merge pull request #1858 from ascriptmaster/move-fixes-2
Fix Rage Powder's interaction with Safety Goggles
2015-05-05 05:39:29 +00:00
Guangcong Luo
4f708b1240 Merge pull request #1849 from ascriptmaster/move-fixes
Refactor disabling moves, other miscellaneous bug fixes
2015-05-05 05:36:06 +00:00
Kevin Lau
4fe6fb16f4 Add mocha tests for moves and items that disable move choices 2015-05-04 21:16:52 -07:00
Juanma Serrano
0b7a0264e9 Add a Sheer Force test 2015-05-04 12:15:21 +02:00
Kevin Lau
b3f65f76a1 Add Follow Me and Rage Powder regression tests 2015-05-04 00:06:00 -07:00
Guangcong Luo
868ccb48c0 Merge pull request #1834 from ascriptmaster/tests
Fix up Desolate Land/Primordial Sea tests
2015-04-30 07:10:20 +00:00
Guangcong Luo
f8032a9a19 Merge pull request #1830 from ascriptmaster/move-fixes
Standard Weather always fails to activate when Primal Weather is active
2015-04-30 07:10:09 +00:00
Kevin Lau
6b1bedc706 Add some Cloud Nine tests 2015-04-29 00:25:51 -07:00
Kevin Lau
5f8ddde255 Fix Desolate Land/Primordial Sea to check for the correct event
Checking for damage could lead to off-by-one errors if the Pokemon are
different.
2015-04-28 02:47:56 -07:00
Ivo Julca
245f9bd8ac Hackmons: add failing test for choice parsing when a pokémon knows Struggle 2015-04-26 17:36:06 -05:00
Guangcong Luo
27f3ae2372 Merge pull request #1805 from ascriptmaster/move-fixes-2
Fix Flower Gift to properly use formeChange
2015-04-23 16:42:00 +00:00
Kevin Lau
1a285aa04e Add regression tests for ORAS Weathers 2015-04-22 15:59:23 -07:00
Guangcong Luo
dc9ba97551 Merge pull request #1790 from ascriptmaster/move-fixes
Have Burn calculate directly in getDamage
2015-04-21 19:30:42 +00:00
Kevin Lau
83bb400e0f Fix Thousand Arrows test
Zygarde's Thousand Arrows will KO Eelektross if it gets a critical hit,
meaning that the Weakness Policy being used to check if the move was
super-effective will not activate. Fixed by initializing the battle with a
seed that does not result in a critical hit from Thousand Arrows.
2015-04-20 12:43:28 -07:00
Juanma Serrano
06f5f5a360 Gen 1: Improve Haze tests
Add a test for removing volatiles as focus energy.
Add a test for removing screens.
2015-04-17 13:09:39 +02:00
Kevin Lau
5976efea2b Add Mocha tests for status effects 2015-04-16 15:50:11 -07:00
Guangcong Luo
8ef0d5c870 Merge pull request #1777 from ascriptmaster/tests
Add some regression tests for Substitute
2015-04-15 06:28:49 +00:00
Joimer
d46d5ca598 Properly add status immunity test
It must have its own case.
We must check Pokémon of a type with a status immunity are actually immune.
2015-04-15 01:24:58 +02:00
Joimer
7cec8b6831 Update statuses test
Test also Thunder Wave not paralysing a Ground-type
2015-04-15 00:29:07 +02:00
Guangcong Luo
54947b665f Merge pull request #1728 from ascriptmaster/move-fixes
Move refactor: moves/items that ignore immunity/effectiveness
2015-04-14 17:05:22 +00:00
Kevin Lau
3632150521 Create some regression tests for Substitute 2015-04-13 15:44:53 -07:00
Ivo Julca
b9e972529b Actually make the regression tests meaningful
Also Boomburst did not exist before XY, and Uproar wasn't authentic either.
2015-04-13 02:25:34 -05:00
Ivo Julca
d367bf2650 Add regression tests for damaging moves affected by 58a5d91 2015-04-13 01:13:56 -05:00
Kevin Lau
f26b3fd279 Add type immunity tests in Mocha 2015-04-08 23:00:12 -07:00
Guangcong Luo
77b232ec25 Fix Substitute blocking foeSide moves
TryPrimaryHit, originally created for Substitute, is currently
being used for Substitute, gems, and auras. Neither of these
should affect all, foeSide, and allySide moves, so the event no
longer fires in these cases.

Included: Bonus: unit test for Substitute not blocking Stealth Rock
2015-04-03 22:48:24 -04:00
Marty-D
70e465157c Merge pull request #1656 from ascriptmaster/oldgens
Generation 4: Fix Transform's interaction with items
2015-03-26 18:23:59 -04:00
Ivo Julca
fe4eb481fa Simplify b6aea81 2015-03-24 14:37:23 -05:00
Ivo Julca
317389e2d2 Test: make sure that test server uses a clean port 2015-03-24 14:37:06 -05:00
Ivo Julca
03a8b03692 Test: remove unneeded tests for custom globals 2015-03-24 14:06:47 -05:00
Kevin Lau
a7d5199236 Add Regression Tests for Transform
Includes regression for Generation 4.
2015-03-21 19:03:38 -07:00
Kevin Lau
f60181ac91 Add Regression Tests for Weight-Based Abilities/Items/Moves 2015-03-18 18:39:01 -07:00
Kevin Lau
777b30b18f Add tests for Simple 2015-03-13 15:18:14 -07:00
Guangcong Luo
6f81899140 Fix typo in /joinbattle error 2015-03-03 04:10:27 -05:00
Guangcong Luo
8f81cfa4de Run tests on port 18003
Port 18003 was chosen at random, but the point is not to use the same
port as PS itself is running on.

This might not be the best approach, but it probably at least beats
running it on the port in config.js and conflicting with an active
PS process.
2015-03-03 01:52:50 -05:00
Kevin Lau
76484211b0 Update Unburden test
Using Leaf Storm gave the test a 10% chance to fail if it missed.
2015-02-26 12:27:31 -08:00
Kevin Lau
7cb80c7937 Add Item Removal tests
Added tests for Unburden, Pickup, and Mail.
2015-02-25 19:13:33 -08:00
Konrad Borowski
e7ac57c392 Initialize Haze test with values that don't fail.
Thunder Wave has a small chance to miss, setting seed to value that I
know doesn't fail the test fixes the problem.
2015-02-21 21:17:01 +01:00
Guangcong Luo
f874040753 Merge pull request #1546 from xfix/gen2-leftovers
Leftovers heal after switching in in Gen2
2015-02-21 13:00:18 -06:00
Konrad Borowski
815909eff2 Don't skip residuals after fainting in Gen2.
The original code was wrong, as all it did was skipping residuals.
Skipping moves is handled by `faintMessages`.
2015-02-21 11:37:39 +01:00
Slayer95
7e1a5145f0 Merge pull request #1545 from xfix/flameorb-test
Create Flame Orb test
2015-02-20 20:57:28 -05:00
Konrad Borowski
3446730787 Create Flame Orb test
Killing Focus Sash Magikarps with one attack is so amazing.
2015-02-20 12:15:42 +01:00
Guangcong Luo
4136f7a248 Merge pull request #1544 from xfix/knockoff-test
Create test for Knock Off.
2015-02-20 04:50:56 -06:00
Konrad Borowski
24c347f2e4 Create regression test for Haze (#1438). 2015-02-20 11:12:05 +01:00
Konrad Borowski
b4be85169c Create test for Knock Off. 2015-02-20 11:07:39 +01:00
Ivo Julca
03bbd985fc Test: add some tests for Magic Bounce 2015-02-19 19:52:23 -05:00
Ivo Julca
68aaa48974 Gulpfile: no files are exempt from style checks
- Streams are merged to make sure that all errors and warnings are reported.
- Adds dev dependencies: `merge-stream` and `lazypipe`.
- Tracks a fork of `gulp-jshint` to fix https://github.com/spalger/gulp-jshint/issues/88
2015-02-18 19:51:15 -05:00
Ivo Julca
5508777d97 Add first few battle simulation tests 2015-02-15 13:35:43 -05:00
Ivo Julca
18ee206833 Add some basic application tests 2015-02-15 13:28:03 -05:00
Ivo Julca
88c74abe76 Implement Mocha-based test suite 2015-02-15 13:27:36 -05:00