11#include < memory>
22#include < set>
33#include < string>
4+ #include < utility>
45#include < vector>
56
67#include " cata_catch.h"
@@ -39,6 +40,14 @@ static std::vector<const vpart_info *> all_turret_types()
3940 return res;
4041}
4142
43+ static void clear_faults_from_vp ( vehicle_part &vp )
44+ {
45+ // Just some small trickery to manipulate the const reference provided by get_base().
46+ item base_copy ( vp.get_base () );
47+ base_copy.faults .clear ();
48+ vp.set_base ( std::move ( base_copy ) );
49+ }
50+
4251// Install, reload and fire every possible vehicle turret.
4352TEST_CASE ( " vehicle_turret" , " [vehicle][gun][magazine]" )
4453{
@@ -91,8 +100,10 @@ TEST_CASE( "vehicle_turret", "[vehicle][gun][magazine]" )
91100 }
92101 const bool default_ammo_is_RECYCLED = vp.get_base ().ammo_effects ().count (
93102 ammo_effect_RECYCLED ) > 0 ;
94- CAPTURE ( default_ammo_is_RECYCLED );
95- INFO ( " RECYCLED ammo can sometimes misfire and very rarely fail this test" );
103+ if ( default_ammo_is_RECYCLED ) {
104+ CAPTURE ( default_ammo_is_RECYCLED );
105+ INFO ( " RECYCLED ammo can sometimes misfire and very rarely fail this test" );
106+ }
96107
97108 turret_data qry = veh->turret_query ( vp );
98109 REQUIRE ( qry );
@@ -105,6 +116,7 @@ TEST_CASE( "vehicle_turret", "[vehicle][gun][magazine]" )
105116 for ( int attempt = 0 ; shots_fired == 0 && attempt < 3 ; attempt++ ) {
106117 shots_fired += qry.fire ( player_character, &here, player_character.pos_bub () + point ( qry.range (),
107118 0 ) );
119+ clear_faults_from_vp ( vp );
108120 }
109121 CHECK ( shots_fired > 0 );
110122
0 commit comments