/** * @test */ public function I_can_ask_code_if_is_specific_weapon_type() { $questions = ['isBow', 'isCrossbow', 'isThrowingWeapon']; foreach (RangedWeaponCode::getBowValues() as $codeValue) { $code = RangedWeaponCode::getIt($codeValue); self::assertTrue($code->isRanged()); self::assertFalse($code->isMelee()); self::assertTrue($code->isBow()); foreach ($questions as $question) { if ($question !== 'isBow') { self::assertFalse($code->{$question}()); } } } foreach (RangedWeaponCode::getCrossbowValues() as $codeValue) { $code = RangedWeaponCode::getIt($codeValue); self::assertTrue($code->isRanged()); self::assertFalse($code->isMelee()); self::assertTrue($code->isCrossbow()); foreach ($questions as $question) { if ($question !== 'isCrossbow') { self::assertFalse($code->{$question}()); } } } foreach (RangedWeaponCode::getThrowingWeaponValues() as $codeValue) { $code = RangedWeaponCode::getIt($codeValue); self::assertTrue($code->isRanged()); if ($codeValue !== RangedWeaponCode::SPEAR) { self::assertFalse($code->isMelee()); } else { self::assertTrue($code->isMelee()); } foreach ($questions as $question) { if ($question !== 'isThrowingWeapon') { if ($question !== 'isStaffOrSpear' || $codeValue !== RangedWeaponCode::SPEAR) { self::assertFalse($code->{$question}()); } else { self::assertTrue($code->{$question}(), "{$codeValue} should be {$question}"); } } } } }