Commit graph

377 commits

Author SHA1 Message Date
Miguel Magno
5e1d9ba600
Fix modify_unit recall_cost indexing issue
Fix issue #7159 apply_to recall_cost to use 0 based side index instead of 1 based side

Add test for issue #7159 modify_unit recall_cost
2023-04-21 13:32:02 +02:00
Steve Cotton
e5b4f5f8a3 More unit tests for attack_filter
Add `first_time_only=no` to some existing tests, and verify that events that
should only trigger once do trigger exactly once.

A new test of `[filter_attack]` when an event lacks attack data. In testing,
I found that it used to trigger a warning that I thought was useless code, and
had removed during 88439d6427a81a6b131acd8b0f7bf04b2d981d71's review. I think
removing it is still good, at the time that the filter was checked it would have
warned "attempt to filter attack for an event with no attack data."
2023-04-19 01:17:06 +02:00
Steve Cotton
eb12a752f4 Add a test for attack_filter with melee-only vs ranged-only units
A new test of what happens when a unit with only a ranged weapon fights a
unit with only a melee weapon. This commit is just the test, it depends on
the engine fix in a previous commit.

This only tests the filtering so far. There should probably be another
additional test to check what the combat results are, however that would need
an ability such as the Deep Elves' Stardust that passively affects the amount
of damage taken. It can't be tested with Slows, as that needs the defender to
hit with a weapon first.
2023-04-18 17:29:49 +02:00
newfrenchy83
88439d6427
Fix a bug in [event][filter_attack] when trying to use special_id/type_active to detect a special whose activity is conditional. (#7509)
When we try to trigger an event conditioned by the use of a special whose activity is subject to a condition, we cannot use special_active because the specials are always considered inactive. Additionally, abilities used as weapons possessed or taught by a leadership are also not detectable in [event][filter_attack]. This PR is there to remedy this double problem.

Also remove matches_special_filter and directly use matches_filter.
2023-04-11 19:34:28 +02:00
Pentarctagon
c6b9ceb61e Move the utbs abilities include out of [units]
Fixes #7426
2023-03-11 10:39:59 -06:00
Pentarctagon
dedf00ef1c Remove use of is_unit_test. 2023-03-05 11:08:21 -06:00
Steve Cotton
0a0263e54f Support [foreach]array=this_item, nested loops using the default name
Since a0ee38a49, the inner this_item was still in scope when the inner loop
writes changed data back to the outer loop's variable, which meant that
changes were silently ignored.

A lot of the changes in wml-flow.lua are just indentation because of the
extra block.
2023-02-05 04:34:23 +01:00
Celtic Minstrel
cbbd34a79e
Add new attacks_used key to [attack] (#7351) 2023-02-04 19:55:04 +01:00
Toranks
ec8ad5f26f
Unit tests to evaluate behavior with max_experience=0 and with no advancements (#7344) 2023-02-04 13:14:44 +01:00
Steve Cotton
fba0970509 Add a unit test for scoped arrays
The existing test for scoped vars is both copied and renamed.
2023-01-24 21:02:35 +01:00
Pentarctagon
d1465a9eb9
Add basic achievements functionality. (#7237)
* Add basic achievements functionality.

This reads the mainline achievements.cfg and then all the achievements of each installed add-on.

This is intentionally handled separately from other WML loading so that:
a) All achievements and their status are able to be displayed on the main menu right after Wesnoth starts and regardless of which add-ons are active.
b) Add-ons can add additional achievements to other content, whether UMC or mainline. For example, a modification that adds more achievements for mainline campaigns.

Marking something as achieved is handled by the new [set_achieved] tag and whether an achievement has been completed can be checked via [has_achievement].

There is no attempt to prevent people from manually editing which achievements they've accomplished.

NOTE: These are *not* in any way related to Steam achievements!
2023-01-21 10:32:45 -06:00
Steve Cotton
5b4029429b Fix indentation in unit tests using sync.evaluate_*
I think I'm using two wmlindent bugs against each other here, putting two
opening statements on the same line to balance two closing statements on the
same line. However, the unit tests ought to be code that can be cut & pasted
elsewhere without causing indentation problems, and this is simpler than fixing
wmlindent's Lua parsing.
2023-01-20 02:28:54 +01:00
Steve Cotton
5f1d46513a Reindent unit tests and unit test macros
This doesn't cover all of the unit tests, it's the result of running wmlindent
on all of them and then reviewing whether the changes were bugs in the test, or
whether they're bugs in wmlindent.

Note: there are two cve_2018_1999023 tests. The other one needs to be treated
as a binary file, but the one changed here is plain text that loads its attack
from a separate file.

The change in start_position_generic.cfg doesn't seem good, but it's not
particularly bad and it's what wmlindent currently does.
2023-01-20 02:28:54 +01:00
Kingofd
492c20baa6
Add exclusive unit traits handling similar to require_amla (#7109) 2023-01-19 13:49:39 -05:00
Toranks
092fd23758
Test fire_event of kill unit on recall list (#7283) 2023-01-16 13:25:09 +01:00
Wedge009
4bfa97ab12 Add missing text domain declarations for unit test files. 2023-01-15 18:40:21 +11:00
Steve Cotton
e7e6649377 Fix the indentation in the "special_calculations" test
Just a whitespace change, because it can't be used as a reference to cut & paste from
when it's incorrectly indented.
2023-01-10 12:25:16 +01:00
Steve Cotton
e28f29b4ac Add unit tests for weapon-special calculations
Covers the math for [attack]add=, [attack]divide=, [attack]multiply= and
[attack]sub=. The behavior is the same in 1.16.

* 5 + 2 = 7
* 5 - 3 = 2
* 5 + 2 - 3 = 2. Yes it does, that's half of why this unit test exists ...
* 5 + 2 + 3 = 8
* 5 + 3 + 2 = 8
* 5 + 2 - (-3) = 7
* 3 * 3.34 = 10
* 3 * 3.334 = 9. ... and that's the other half of why this unit test exists.
2022-12-29 15:40:01 +01:00
Pentarctagon
5849a143c5 Fix undefined macro error. 2022-12-22 10:25:32 -06:00
Pentarctagon
128c0dacf9 dos2unix line endings. 2022-12-21 12:30:04 -06:00
Pentarctagon
30b55575e6 Add toplevel FilterWML tests folder. 2022-12-21 12:30:04 -06:00
Pentarctagon
129f5742fc Tests cleanup. 2022-12-21 12:30:04 -06:00
Pentarctagon
5eae1b6199 Reorganize unit tests. 2022-12-21 12:30:04 -06:00
Steve Cotton
a9d5c6ac6d Handle out-of-bounds side numbers in Lua's sync.evaluate_multiple
Change the C++ to show a Lua error instead of crashing with an assert.
2022-12-16 16:40:46 +01:00
Pentarctagon
12a7f018e0 Document last batch of unit tests. 2022-12-03 23:29:47 -06:00
Steve Cotton
38fdf06fa9 Fix [special_note] duplication when unstoring units
The movetype's special notes were becoming a new note for the individual unit.

Clean up the documentation on some of movetype's functions, as they had
documentation in both the .hpp and the .cpp.
2022-11-29 11:40:11 +01:00
Steve Cotton
3d4812ebc8 Add a unit test for the preprocessor's #ifdef handling
This one's surprising, but it's the behavior of 1.16, so add a test for the
current behavior even though I wonder if it should change in 1.17.
2022-11-26 14:55:33 +01:00
Steve Cotton
710867e010 Add unit tests for interpolated event names and end_turn
Move `event_name_variable_substitution` to the top of the file, as it's testing
that the event triggers at all, before the tests that check which order the
events are triggered in.

The old `order_of_variable_events1` seemed to be a combination of two tests that
should exist, but the code didn't quite test either of them. This replaces it
with a new `order_of_variable_events1` and `order_of_variable_events3`.

Docs partially written by Pentarctagon, this started as a review comment
on the documentation PR.
2022-11-25 12:16:46 +01:00
Pentarctagon
a2491d3aa4 More unit test documentation. 2022-11-23 16:25:37 -06:00
Pentarctagon
b1587223a1 Add some more unit test documentation.
Also split some larger tests into multiple smaller tests.
2022-11-13 16:35:06 -06:00
Steve Cotton
b18b0e0f55 Add unit tests for [break] and [return] during [fire_event]
Fixes #7084.
2022-11-05 06:21:30 +01:00
Pentarctagon
16b900c273 Add documentation to more WML unit tests. 2022-11-02 15:16:23 -05:00
Pentarctagon
e37e576f12 Add documentation to more WML unit tests. 2022-10-25 11:29:48 -05:00
Steve Cotton
b74216d6c8 Unit tests for changing abilites with filters in [event]name=attack
The existing backstab tests' common code is moved to a utility file
for reuse in other tests, because it can be used to check whether a
weapon special was active during the damage calculations.

Git's diff can show a lot of lines being deleted, but that's just
because it's showing a file being copied, and then half of each copy
being removed.
2022-10-21 20:26:12 +02:00
Pentarctagon
8bc084bc0b Add tests for pre_attack event. 2022-08-10 09:07:30 -05:00
spixi
0f763cfdd6 Add pre attack event #4075 2022-08-10 09:07:30 -05:00
Celtic Minstrel
5a184bbb40 Split wesnoth.game_events.add into multiple functions
Basically this means each of the call modes of the old function is now a separate function.

- add_repeating and add_menu take an ID and a function
- add_wml takes variable substitution setting and a config
- add takes the full options table
2022-07-18 21:56:42 -04:00
Celtic Minstrel
8a72206f02 Unit tests for the new filter options 2022-07-18 21:56:42 -04:00
Celtic Minstrel
245cd57d24 Unit tests for each way of assigning an action to an event handler 2022-07-18 21:56:42 -04:00
Celtic Minstrel
666571caa2
Fix load_string() ignoring the passed chunk name (#6794)
Complete with a unit test!
The test results in PASS_BY_VICTORY if it fails,
which is a bit weird, but it does work.
2022-06-24 01:49:28 -04:00
Celtic Minstrel
be8783154e
Add event unit tests for dynamic filters and names (#6785) 2022-06-21 22:25:01 -04:00
newfrenchy83
5c2aaeac2d modify testing for show diffrence between using ('add/sub' attribute)and value with cumulative=yes
in this test, two same leadership with value attribute and cumulative=yes add their value then what two leadership with same id and 'add' attribute using on 'add' only(the highest when 'add' value is different)
2022-05-19 18:13:43 -05:00
newfrenchy83
856aafc8d5 add a test case for 'cumulative=yes'
this test is added for verify what cumulative=yes work in same time what 'add' and 'sub' and what using of these attributes in[leadership] don't be
changed, only using of cumulative work anew like in 1.14
2022-05-19 18:13:43 -05:00
Steve Cotton
0f6a94f2a7 Unit tests for [drains], [poison] and [slow], with apply_to=opponent
Slightly different to PR #6582, which was the 1.16 version of this. The five
lines that were labelled `preserving known bug` are changed to test that it's
been fixed.

Here `apply_to=opponent` means that the weapon special gives the opponent the
ability, the unit that should get poisoned or slowed is the unit that has the
weapon special.

There's a known bug in 1.16, that `apply_to=opponent` check the wrong unit to
see it it's `unpoisonable`, `undrainable` etc. It also checks the wrong unit to
see if it's already poisoned or slowed, so a battle between two units that both
have reverse-poison results in at most one being poisoned.

Most of the credit for this is Newfrenchy's, as he's already written a fix
and a WML based test. This commit uses a Lua test instead to test more
combinations of statuses.

This adds a `COMMON_KEEP_A_B_UNIT_TEST` macro, which is a counterpart to the
`GENERIC_UNIT_TEST` macro that starts the leaders next to each other, ready
to attack. The `A_B` is because I'm planning a multiple-side variant too.

There's no test for [petrify], as simulate_combat doesn't provide a stat for it.

This tests only 3 of the 6 abilities whose behavior changed in 650f70405f.
My thoughts on testing the others are:
* [firststrike]'s test is in 650f70405f.
* [drains], [poison] and [slow] are tested here.
* [petrify] ends combat, it's also not exposed in simulate_combat's stats.
* [plague] triggers after combat ends.
2022-04-19 15:27:49 +02:00
Steve Cotton
c5dec73784 Unit tests: make separate files for each starting position
Turn the 4 side setup of the firststrike_and_laststrike test into a macro
called `COMMON_KEEP_A_B_C_D`for reuse in other tests.

The comment for `GENERIC_UNIT_TEST` gets a couple of extra paragraphs.

All the files get wmlindent run on them, which reindents `FAIL_IF_NOT`.

The main reason for having these is separate files is Git's fuzzy-patch
matching when merging and rebasing. Having large blocks of identical text
in `wml_unit_test_macros.cfg` can mean the wrong section gets patched.
2022-04-18 04:48:53 +02:00
Celtic Minstrel
a76aa9bddc
Add wesnoth.interface.add_floating_label as a replacement for wesnoth.print (#5837)
This returns a label handle which allows you to remove, reposition, or replace the label later.

In addition to all the features of wesnoth.print, you can now specify where the label appears onscreen, as well as a fadeout time separate from the duration.

You can also anchor the text to an edge or corner instead of centering in on the screen,
specify the maximum width it can occupy as an absolute width or a percentage,
and specify a background colour and transparency.

It includes a demo scenario that demonstrates many of the capabilities of the API.
To play the demo scenario, run with -toverlay_text_demo or select it from the in-game test list.
2022-04-10 13:00:29 -04:00
newfrenchy83
650f70405f
fix [firststrike] special with apply_to=opponent crashes Wesnoth 1.17.x (#6574)
As reported on the forum in https://forums.wesnoth.org/viewtopic.php?p=672374#p672374
If a unit with "last strike" ([firststrike] special with apply_to=opponent, on any of its attacks)
was targeted by other unit for attack, wesnoth crashed.

Fix similar problems for other weapon specials like poisons, when two users of specials with
apply_to=opponent fought, one fighter only could be poisoned or slowed.

* Add a unit test for poison
* Add a unit test for firststrike and laststrike
2022-04-08 02:30:14 +02:00
Steve Cotton
071ba9d7d6 Add a unit test for [move_unit]location_id with an occupied hex
(cherry picked from commit ba1767f8b9)
2022-03-31 09:33:13 +02:00
Steve Cotton
2888f0417d Add unit tests for Lua API wesnoth.simulate_combat
(cherry picked from commit d96968b2ec)
2022-03-23 07:43:10 +01:00
Celtic Minstrel
57c2e6de4a Fix shroud unit tests not being classified as unit tests and showing up in the in-game test list 2022-03-11 09:46:33 -05:00