101 lines
3.1 KiB
GDScript
101 lines
3.1 KiB
GDScript
extends GdUnitTestSuite
|
|
|
|
const Resolver := preload("res://scripts/hotbar_cast_slot_resolver.gd")
|
|
|
|
|
|
func _eight_empty_slots() -> Array:
|
|
var slots: Array = []
|
|
slots.resize(8)
|
|
for i in range(8):
|
|
slots[i] = null
|
|
return slots
|
|
|
|
|
|
func test_resolve_returns_ok_with_target_from_locked_target_id() -> void:
|
|
# Arrange
|
|
var slots := _eight_empty_slots()
|
|
slots[0] = "prototype_pulse"
|
|
var target_state := {"lockedTargetId": "prototype_npc_melee", "sequence": 3}
|
|
|
|
# Act
|
|
var outcome: Dictionary = Resolver.resolve(0, slots, target_state)
|
|
|
|
# Assert
|
|
assert_that(bool(outcome.get(Resolver.KEY_OK, false))).is_true()
|
|
assert_that(int(outcome.get(Resolver.KEY_SLOT_INDEX, -1))).is_equal(0)
|
|
assert_that(outcome.get(Resolver.KEY_ABILITY_ID)).is_equal("prototype_pulse")
|
|
assert_that(outcome.get(Resolver.KEY_TARGET_ID)).is_equal("prototype_npc_melee")
|
|
|
|
|
|
func test_resolve_returns_null_target_when_no_lock() -> void:
|
|
# Arrange
|
|
var slots := _eight_empty_slots()
|
|
slots[1] = "prototype_guard"
|
|
var target_state := {"lockedTargetId": null, "validity": "none"}
|
|
|
|
# Act
|
|
var outcome: Dictionary = Resolver.resolve(1, slots, target_state)
|
|
|
|
# Assert
|
|
assert_that(bool(outcome.get(Resolver.KEY_OK, false))).is_true()
|
|
assert_that(outcome.get(Resolver.KEY_TARGET_ID, "sentinel")).is_null()
|
|
|
|
|
|
func test_resolve_returns_null_target_when_lock_empty_string() -> void:
|
|
# Arrange
|
|
var slots := _eight_empty_slots()
|
|
slots[2] = "prototype_dash"
|
|
var target_state := {"lockedTargetId": ""}
|
|
|
|
# Act
|
|
var outcome: Dictionary = Resolver.resolve(2, slots, target_state)
|
|
|
|
# Assert
|
|
assert_that(bool(outcome.get(Resolver.KEY_OK, false))).is_true()
|
|
assert_that(outcome.get(Resolver.KEY_TARGET_ID, "sentinel")).is_null()
|
|
|
|
|
|
func test_resolve_denies_empty_slot_without_ability() -> void:
|
|
# Arrange
|
|
var slots := _eight_empty_slots()
|
|
slots[3] = null
|
|
var target_state := {"lockedTargetId": "prototype_npc_ranged"}
|
|
|
|
# Act
|
|
var outcome: Dictionary = Resolver.resolve(3, slots, target_state)
|
|
|
|
# Assert
|
|
assert_that(bool(outcome.get(Resolver.KEY_OK, true))).is_false()
|
|
assert_that(str(outcome.get(Resolver.KEY_REASON, ""))).is_equal(Resolver.REASON_EMPTY_SLOT)
|
|
|
|
|
|
func test_resolve_denies_empty_string_ability() -> void:
|
|
# Arrange
|
|
var slots := _eight_empty_slots()
|
|
slots[4] = " "
|
|
var target_state := {}
|
|
|
|
# Act
|
|
var outcome: Dictionary = Resolver.resolve(4, slots, target_state)
|
|
|
|
# Assert
|
|
assert_that(bool(outcome.get(Resolver.KEY_OK, true))).is_false()
|
|
assert_that(str(outcome.get(Resolver.KEY_REASON, ""))).is_equal(Resolver.REASON_EMPTY_SLOT)
|
|
|
|
|
|
func test_resolve_denies_slot_index_out_of_range() -> void:
|
|
# Arrange
|
|
var slots := _eight_empty_slots()
|
|
slots[0] = "prototype_pulse"
|
|
var target_state := {}
|
|
|
|
# Act
|
|
var high: Dictionary = Resolver.resolve(8, slots, target_state)
|
|
var low: Dictionary = Resolver.resolve(-1, slots, target_state)
|
|
|
|
# Assert
|
|
assert_that(bool(high.get(Resolver.KEY_OK, true))).is_false()
|
|
assert_that(str(high.get(Resolver.KEY_REASON, ""))).is_equal(Resolver.REASON_INVALID_SLOT)
|
|
assert_that(bool(low.get(Resolver.KEY_OK, true))).is_false()
|
|
assert_that(str(low.get(Resolver.KEY_REASON, ""))).is_equal(Resolver.REASON_INVALID_SLOT)
|