Files
CHOMPStation2/code/unit_tests/mob_tests.dm
2020-08-07 00:25:15 -04:00

147 lines
4.6 KiB
Plaintext

/datum/unit_test/space_suffocation
name = "MOB: human mob suffocates in space"
var/startOxyloss
var/endOxyloss
var/mob/living/carbon/human/H
async = 1
/datum/unit_test/space_suffocation/start_test()
var/turf/space/T = locate()
H = new(T)
startOxyloss = H.getOxyLoss()
return 1
/datum/unit_test/space_suffocation/check_result()
if(H.life_tick < 10)
return 0
endOxyloss = H.getOxyLoss()
if(startOxyloss < endOxyloss)
pass("Human mob takes oxygen damage in space. (Before: [startOxyloss]; after: [endOxyloss])")
else
fail("Human mob is not taking oxygen damage in space. (Before: [startOxyloss]; after: [endOxyloss])")
qdel(H)
return 1
/datum/modifier/unit_test
/datum/unit_test/modifier
name = "modifier test template"
var/mob/living/subject = null
var/subject_type = /mob/living/carbon/human
var/list/inputs = list(1.00, 0.75, 0.50, 0.25, 0.00, -0.50, -1.0, -2.0)
var/list/expected_outputs = list(1.00, 0.75, 0.50, 0.25, 0.00, -0.50, -1.0, -2.0)
var/datum/modifier/test_modifier = null
var/issues = 0
/datum/unit_test/modifier/start_test()
// Arrange.
subject = new subject_type(get_standard_turf())
subject.add_modifier(/datum/modifier/unit_test)
test_modifier = subject.get_modifier_of_type(/datum/modifier/unit_test)
// Act,
for(var/i = 1 to inputs.len)
set_tested_variable(test_modifier, inputs[i])
var/actual = round(get_test_value(subject), 0.01) // Rounding because floating point schannigans.
if(actual != expected_outputs[i])
issues++
log_bad("Input '[inputs[i]]' did not match expected output '[expected_outputs[i]]', but was instead '[actual]'.")
// Assert.
if(issues)
fail("[issues] issues were found.")
else
pass("No issues found.")
qdel(subject)
return TRUE
// Override for subtypes.
/datum/unit_test/modifier/proc/set_tested_variable(datum/modifier/M, new_value)
return
/datum/unit_test/modifier/proc/get_test_value(mob/living/L)
return
/datum/unit_test/modifier/heat_protection
name = "MOB: human mob heat protection is calculated correctly"
/datum/unit_test/modifier/heat_protection/set_tested_variable(datum/modifier/M, new_value)
M.heat_protection = new_value
/datum/unit_test/modifier/heat_protection/get_test_value(mob/living/L)
return L.get_heat_protection(1000)
/datum/unit_test/modifier/heat_protection/simple_mob
name = "MOB: simple mob heat protection is calculated correctly"
subject_type = /mob/living/simple_mob
/datum/unit_test/modifier/cold_protection
name = "MOB: human mob cold protection is calculated correctly"
/datum/unit_test/modifier/cold_protection/set_tested_variable(datum/modifier/M, new_value)
M.cold_protection = new_value
/datum/unit_test/modifier/cold_protection/get_test_value(mob/living/L)
return L.get_cold_protection(50)
/datum/unit_test/modifier/cold_protection/simple_mob
name = "MOB: simple mob cold protection is calculated correctly"
subject_type = /mob/living/simple_mob
/datum/unit_test/modifier/shock_protection
name = "MOB: human mob shock protection is calculated correctly"
inputs = list(3.00, 2.00, 1.50, 1.00, 0.75, 0.50, 0.25, 0.00)
expected_outputs = list(-2.00, -1.00, -0.50, 0.00, 0.25, 0.50, 0.75, 1.00)
/datum/unit_test/modifier/shock_protection/set_tested_variable(datum/modifier/M, new_value)
M.siemens_coefficient = new_value
/datum/unit_test/modifier/shock_protection/get_test_value(mob/living/L)
return L.get_shock_protection()
/datum/unit_test/modifier/shock_protection/simple_mob
name = "MOB: simple mob shock protection is calculated correctly"
subject_type = /mob/living/simple_mob
/datum/unit_test/modifier/percentage_armor
name = "MOB: human mob percentage armor is calculated correctly"
inputs = list(100, 75, 50, 25, 0)
expected_outputs = list(100, 75, 50, 25, 0)
/datum/unit_test/modifier/percentage_armor/set_tested_variable(datum/modifier/M, new_value)
M.armor_percent = list("melee" = new_value)
/datum/unit_test/modifier/percentage_armor/get_test_value(mob/living/L)
return L.getarmor(null, "melee")
/datum/unit_test/modifier/percentage_armor/simple_mob
name = "MOB: simple mob percentage armor is calculated correctly"
subject_type = /mob/living/simple_mob
/datum/unit_test/modifier/percentage_flat
name = "MOB: human mob flat armor is calculated correctly"
inputs = list(100, 75, 50, 25, 0)
expected_outputs = list(100, 75, 50, 25, 0)
/datum/unit_test/modifier/percentage_flat/set_tested_variable(datum/modifier/M, new_value)
M.armor_flat = list("melee" = new_value)
/datum/unit_test/modifier/percentage_flat/get_test_value(mob/living/L)
return L.getsoak(null, "melee")
/datum/unit_test/modifier/percentage_flat/simple_mob
name = "MOB: simple mob flat armor is calculated correctly"
subject_type = /mob/living/simple_mob