2017-09-24 22:23:22 +00:00
module TK.SpaceTac.Specs {
2017-10-26 21:47:13 +00:00
testing ( "Equipment" , test = > {
test . case ( "generates a full name" , check = > {
2017-04-18 22:55:59 +00:00
let equipment = new Equipment ( SlotType . Weapon , "rayofdeath" ) ;
2017-10-26 21:47:13 +00:00
check . equals ( equipment . getFullName ( ) , "rayofdeath Mk1" ) ;
2017-04-18 22:55:59 +00:00
equipment . name = "Ray of Death" ;
2017-10-26 21:47:13 +00:00
check . equals ( equipment . getFullName ( ) , "Ray of Death Mk1" ) ;
2017-04-18 22:55:59 +00:00
equipment . quality = EquipmentQuality . LEGENDARY ;
2017-10-26 21:47:13 +00:00
check . equals ( equipment . getFullName ( ) , "Legendary Ray of Death Mk1" ) ;
2017-04-18 22:55:59 +00:00
} ) ;
2017-10-26 21:47:13 +00:00
test . case ( "checks capabilities requirements" , check = > {
2015-02-06 00:00:00 +00:00
var equipment = new Equipment ( ) ;
var ship = new Ship ( ) ;
2017-10-26 21:47:13 +00:00
check . equals ( equipment . canBeEquipped ( ship . attributes ) , true ) ;
2015-02-06 00:00:00 +00:00
2017-02-07 19:15:21 +00:00
equipment . requirements [ "skill_time" ] = 2 ;
2015-02-06 00:00:00 +00:00
2017-10-26 21:47:13 +00:00
check . equals ( equipment . canBeEquipped ( ship . attributes ) , false ) ;
2015-02-06 00:00:00 +00:00
2017-11-14 00:07:06 +00:00
TestTools . setAttribute ( ship , "skill_time" , 1 ) ;
2015-02-06 00:00:00 +00:00
2017-10-26 21:47:13 +00:00
check . equals ( equipment . canBeEquipped ( ship . attributes ) , false ) ;
2015-02-06 00:00:00 +00:00
2017-11-14 00:07:06 +00:00
TestTools . setAttribute ( ship , "skill_time" , 2 ) ;
2015-02-06 00:00:00 +00:00
2017-10-26 21:47:13 +00:00
check . equals ( equipment . canBeEquipped ( ship . attributes ) , true ) ;
2015-02-06 00:00:00 +00:00
2017-11-14 00:07:06 +00:00
TestTools . setAttribute ( ship , "skill_time" , 3 ) ;
2015-02-06 00:00:00 +00:00
2017-10-26 21:47:13 +00:00
check . equals ( equipment . canBeEquipped ( ship . attributes ) , true ) ;
2015-02-06 00:00:00 +00:00
// Second requirement
2017-06-11 20:44:12 +00:00
equipment . requirements [ "skill_materials" ] = 3 ;
2015-02-06 00:00:00 +00:00
2017-10-26 21:47:13 +00:00
check . equals ( equipment . canBeEquipped ( ship . attributes ) , false ) ;
2015-02-06 00:00:00 +00:00
2017-11-14 00:07:06 +00:00
TestTools . setAttribute ( ship , "skill_materials" , 4 ) ;
2015-02-06 00:00:00 +00:00
2017-10-26 21:47:13 +00:00
check . equals ( equipment . canBeEquipped ( ship . attributes ) , true ) ;
2015-02-06 00:00:00 +00:00
} ) ;
2017-01-17 00:02:38 +00:00
2017-10-26 21:47:13 +00:00
test . case ( "generates a description of the effects" , check = > {
2017-04-18 19:51:23 +00:00
let equipment = new Equipment ( ) ;
2017-10-26 21:47:13 +00:00
check . equals ( equipment . getEffectsDescription ( ) , "does nothing" ) ;
2017-01-17 00:02:38 +00:00
2017-10-03 16:11:30 +00:00
let action = new TriggerAction ( equipment , [ new DamageEffect ( 50 ) ] , 1 , 200 , 0 ) ;
2017-04-18 19:51:23 +00:00
equipment . action = action ;
2017-10-26 21:47:13 +00:00
check . equals ( equipment . getEffectsDescription ( ) , "Fire (power usage 1, max range 200km):\n• do 50 damage on target" ) ;
2017-04-18 19:51:23 +00:00
action . blast = 20 ;
2017-10-26 21:47:13 +00:00
check . equals ( equipment . getEffectsDescription ( ) , "Fire (power usage 1, max range 200km):\n• do 50 damage in 20km radius" ) ;
2017-04-18 19:51:23 +00:00
action . blast = 0 ;
action . effects . push ( new StickyEffect ( new AttributeLimitEffect ( "shield_capacity" , 200 ) , 3 ) ) ;
2017-10-26 21:47:13 +00:00
check . equals ( equipment . getEffectsDescription ( ) , "Fire (power usage 1, max range 200km):\n• do 50 damage on target\n• limit shield capacity to 200 for 3 turns on target" ) ;
2017-04-18 19:51:23 +00:00
} ) ;
2017-10-26 21:47:13 +00:00
test . case ( "gets a minimal level, based on skills requirements" , check = > {
2017-04-18 19:51:23 +00:00
let equipment = new Equipment ( ) ;
2017-10-26 21:47:13 +00:00
check . equals ( equipment . getMinimumLevel ( ) , 1 ) ;
2017-04-18 19:51:23 +00:00
2017-06-11 20:44:12 +00:00
equipment . requirements [ "skill_quantum" ] = 10 ;
2017-10-26 21:47:13 +00:00
check . equals ( equipment . getMinimumLevel ( ) , 1 ) ;
2017-04-18 19:51:23 +00:00
equipment . requirements [ "skill_time" ] = 1 ;
2017-10-26 21:47:13 +00:00
check . equals ( equipment . getMinimumLevel ( ) , 2 ) ;
2017-01-17 00:02:38 +00:00
2017-04-18 19:51:23 +00:00
equipment . requirements [ "skill_gravity" ] = 2 ;
2017-10-26 21:47:13 +00:00
check . equals ( equipment . getMinimumLevel ( ) , 2 ) ;
2017-01-17 00:02:38 +00:00
2017-06-11 20:44:12 +00:00
equipment . requirements [ "skill_antimatter" ] = 4 ;
2017-10-26 21:47:13 +00:00
check . equals ( equipment . getMinimumLevel ( ) , 3 ) ;
2017-01-17 00:02:38 +00:00
} ) ;
2017-04-24 17:59:16 +00:00
2017-10-26 21:47:13 +00:00
test . case ( "weighs the price, taking wear into account" , check = > {
2017-04-24 17:59:16 +00:00
let equipment = new Equipment ( ) ;
2017-10-26 21:47:13 +00:00
check . equals ( equipment . getPrice ( ) , 0 ) ;
2017-04-24 17:59:16 +00:00
equipment . price = 100 ;
2017-10-26 21:47:13 +00:00
check . equals ( equipment . getPrice ( ) , 100 ) ;
2017-04-24 17:59:16 +00:00
equipment . addWear ( 1 ) ;
2017-10-26 21:47:13 +00:00
check . equals ( equipment . getPrice ( ) , 99 ) ;
2017-04-24 17:59:16 +00:00
equipment . addWear ( 10 ) ;
2017-10-26 21:47:13 +00:00
check . equals ( equipment . getPrice ( ) , 90 ) ;
2017-04-24 17:59:16 +00:00
equipment . addWear ( 89 ) ;
2017-10-26 21:47:13 +00:00
check . equals ( equipment . getPrice ( ) , 50 ) ;
2017-04-24 17:59:16 +00:00
equipment . addWear ( 400 ) ;
2017-10-26 21:47:13 +00:00
check . equals ( equipment . getPrice ( ) , 16 ) ;
2017-04-24 17:59:16 +00:00
} ) ;
2017-10-26 21:47:13 +00:00
test . case ( "builds a full textual description" , check = > {
2017-04-24 17:59:16 +00:00
let equipment = new Equipment ( ) ;
equipment . name = "Super Equipment" ;
equipment . requirements [ "skill_gravity" ] = 2 ;
equipment . effects . push ( new AttributeEffect ( "skill_time" , 3 ) ) ;
equipment . wear = 50 ;
let result = equipment . getFullDescription ( ) ;
2017-10-26 21:47:13 +00:00
check . equals ( result , "Second hand\n\nRequires:\n• gravity skill 2\n\nWhen equipped:\n• time skill +3" ) ;
2017-04-24 17:59:16 +00:00
} ) ;
2015-02-06 00:00:00 +00:00
} ) ;
}