/**
  * @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}");
                 }
             }
         }
     }
 }