File: reload_option_test.cpp

package info (click to toggle)
cataclysm-dda 0.H-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 710,808 kB
  • sloc: cpp: 524,019; python: 11,580; sh: 1,228; makefile: 1,169; xml: 507; javascript: 150; sql: 56; exp: 41; perl: 37
file content (109 lines) | stat: -rw-r--r-- 4,434 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <list>
#include <memory>

#include "avatar.h"
#include "calendar.h"
#include "cata_catch.h"
#include "item.h"
#include "item_location.h"
#include "itype.h"
#include "pocket_type.h"
#include "ret_val.h"
#include "type_id.h"
#include "value_ptr.h"

static const flag_id json_flag_RELOAD_ONE( "RELOAD_ONE" );

TEST_CASE( "revolver_reload_option", "[reload],[reload_option],[gun]" )
{
    avatar dummy;
    dummy.worn.wear_item( dummy, item( "backpack" ), false, false );

    item_location gun = dummy.i_add( item( "sw_619", calendar::turn_zero, 0 ) );
    const ammotype &gun_ammo_type = item::find_type( gun->ammo_default() )->ammo->type;
    item_location ammo = dummy.i_add( item( "38_special", calendar::turn_zero,
                                            gun->ammo_capacity( gun_ammo_type ) ) );
    REQUIRE( gun->has_flag( json_flag_RELOAD_ONE ) );
    REQUIRE( gun->ammo_remaining() == 0 );

    const item::reload_option gun_option( &dummy, gun, ammo );
    REQUIRE( gun_option.qty() == 1 );

    item_location speedloader = dummy.i_add( item( "38_speedloader", calendar::turn_zero, 0 ) );
    REQUIRE( speedloader->ammo_remaining() == 0 );

    const item::reload_option speedloader_option( &dummy, speedloader, ammo );
    CHECK( speedloader_option.qty() == speedloader->ammo_capacity( gun_ammo_type ) );

    speedloader->put_in( *ammo, pocket_type::MAGAZINE );
    const item::reload_option gun_speedloader_option( &dummy, gun, speedloader );
    CHECK( gun_speedloader_option.qty() == speedloader->ammo_capacity( gun_ammo_type ) );
}

TEST_CASE( "magazine_reload_option", "[reload],[reload_option],[gun]" )
{
    avatar dummy;
    dummy.worn.wear_item( dummy, item( "backpack" ), false, false );

    item_location magazine = dummy.i_add( item( "glockmag", calendar::turn_zero, 0 ) );
    const ammotype &mag_ammo_type = item::find_type( magazine->ammo_default() )->ammo->type;
    item_location ammo = dummy.i_add( item( "9mm", calendar::turn_zero,
                                            magazine->ammo_capacity( mag_ammo_type ) ) );

    const item::reload_option magazine_option( &dummy, magazine, ammo );
    CHECK( magazine_option.qty() == magazine->ammo_capacity( mag_ammo_type ) );

    magazine->put_in( *ammo, pocket_type::MAGAZINE );
    item_location gun = dummy.i_add( item( "glock_19", calendar::turn_zero, 0 ) );
    const item::reload_option gun_option( &dummy, gun, magazine );
    CHECK( gun_option.qty() == 1 );
}

TEST_CASE( "belt_reload_option", "[reload],[reload_option],[gun]" )
{
    avatar dummy;
    dummy.set_body();
    dummy.worn.wear_item( dummy, item( "backpack" ), false, false );

    item_location belt = dummy.i_add( item( "belt308", calendar::turn_zero, 0 ) );
    const ammotype &belt_ammo_type = item::find_type( belt->ammo_default() )->ammo->type;
    item_location ammo = dummy.i_add( item( "308", calendar::turn_zero,
                                            belt->ammo_capacity( belt_ammo_type ) ) );
    dummy.i_add( item( "ammolink308", calendar::turn_zero, belt->ammo_capacity( belt_ammo_type ) ) );
    // Belt is populated with "charges" rounds by the item constructor.
    belt->ammo_unset();

    REQUIRE( belt->ammo_remaining() == 0 );
    const item::reload_option belt_option( &dummy, belt, ammo );
    CHECK( belt_option.qty() == belt->ammo_capacity( belt_ammo_type ) );

    belt->put_in( *ammo, pocket_type::MAGAZINE );
    item_location gun = dummy.i_add( item( "m134", calendar::turn_zero, 0 ) );

    const item::reload_option gun_option( &dummy, gun, belt );

    CHECK( gun_option.qty() == 1 );
}

TEST_CASE( "canteen_reload_option", "[reload],[reload_option],[liquid]" )
{
    avatar dummy;
    dummy.worn.wear_item( dummy, item( "backpack" ), false, false );

    item plastic_bottle( "bottle_plastic" );
    item_location bottle = dummy.i_add( plastic_bottle );
    item water( "water_clean", calendar::turn_zero, 2 );
    // add an extra bottle with water
    item_location water_bottle = dummy.i_add( plastic_bottle );
    water_bottle->put_in( water, pocket_type::CONTAINER );

    const item::reload_option bottle_option( &dummy, bottle, water_bottle );
    CHECK( bottle_option.qty() == bottle->get_remaining_capacity_for_liquid( water, true ) );

    item_location canteen = dummy.i_add( item( "2lcanteen" ) );

    const item::reload_option canteen_option( &dummy, canteen, water_bottle );

    CHECK( canteen_option.qty() == 2 );
}