# frozen_string_literal: true

require "test/unit"
require "bcdice/game_system/SRS"
require "bcdice/game_system/EtrianOdysseySRS"

# Standard RPG System（SRS）系のダイスボットの説明文のテスト
#
# SRS系のダイスボットでは、各ゲームシステム用の成功判定エイリアスコマンドに
# 合わせてダイスボットの説明文を自動生成する。
# 以下のテストケースで、説明文が正しく生成されるか確認する。
class TestSRSHelpMessages < Test::Unit::TestCase
  # Standard RPG Systemの説明文をテストする
  def test_SRS_help_message
    expected = <<~HELP_MESSAGE
      ・判定
      　・通常判定：2D6+m@c#f>=t または 2D6+m>=t[c,f]
      　　修正値m、目標値t、クリティカル値c、ファンブル値fで判定ロールを行います。
      　　修正値、クリティカル値、ファンブル値は省略可能です（[]ごと省略可、@c・#fの指定は順不同）。
      　　クリティカル値、ファンブル値の既定値は、それぞれ12、2です。
      　　自動成功、自動失敗、成功、失敗を自動表示します。

      　　例) 2d6>=10　　　　　修正値0、目標値10で判定
      　　例) 2d6+2>=10　　　　修正値+2、目標値10で判定
      　　例) 2d6+2>=10[11]　　↑をクリティカル値11で判定
      　　例) 2d6+2@11>=10 　　↑をクリティカル値11で判定
      　　例) 2d6+2>=10[12,4]　↑をクリティカル値12、ファンブル値4で判定
      　　例) 2d6+2@12#4>=10 　↑をクリティカル値12、ファンブル値4で判定
      　　例) 2d6+2>=10[,4]　　↑をクリティカル値12、ファンブル値4で判定（クリティカル値の省略）
      　　例) 2d6+2#4>=10　　　↑をクリティカル値12、ファンブル値4で判定（クリティカル値の省略）

      　・クリティカルおよびファンブルのみの判定：2D6+m@c#f または 2D6+m[c,f]
      　　目標値を指定せず、修正値m、クリティカル値c、ファンブル値fで判定ロールを行います。
      　　修正値、クリティカル値、ファンブル値は省略可能です（[]は省略不可、@c・#fの指定は順不同）。
      　　自動成功、自動失敗を自動表示します。

      　　例) 2d6[]　　　　修正値0、クリティカル値12、ファンブル値2で判定
      　　例) 2d6+2[11]　　修正値+2、クリティカル値11、ファンブル値2で判定
      　　例) 2d6+2@11 　　修正値+2、クリティカル値11、ファンブル値2で判定
      　　例) 2d6+2[12,4]　修正値+2、クリティカル値12、ファンブル値4で判定
      　　例) 2d6+2@12#4 　修正値+2、クリティカル値12、ファンブル値4で判定

      ・D66ダイスあり（入れ替えなし)
    HELP_MESSAGE

    assert_equal(expected, BCDice::GameSystem::SRS::HELP_MESSAGE)
  end

  # 世界樹の迷宮SRSの説明文をテストする
  #
  # 世界樹の迷宮SRSのダイスボットには、複数のエイリアスコマンドが存在する。
  # すべてのエイリアスコマンドについての説明が含まれているか、確認する。
  def test_EtrianOdysseySRS_help_message
    expected = <<~HELP_MESSAGE
      ・判定
      　・通常判定：2D6+m@c#f>=t または 2D6+m>=t[c,f]
      　　修正値m、目標値t、クリティカル値c、ファンブル値fで判定ロールを行います。
      　　修正値、クリティカル値、ファンブル値は省略可能です（[]ごと省略可、@c・#fの指定は順不同）。
      　　クリティカル値、ファンブル値の既定値は、それぞれ12、2です。
      　　自動成功、自動失敗、成功、失敗を自動表示します。

      　　例) 2d6>=10　　　　　修正値0、目標値10で判定
      　　例) 2d6+2>=10　　　　修正値+2、目標値10で判定
      　　例) 2d6+2>=10[11]　　↑をクリティカル値11で判定
      　　例) 2d6+2@11>=10 　　↑をクリティカル値11で判定
      　　例) 2d6+2>=10[12,4]　↑をクリティカル値12、ファンブル値4で判定
      　　例) 2d6+2@12#4>=10 　↑をクリティカル値12、ファンブル値4で判定
      　　例) 2d6+2>=10[,4]　　↑をクリティカル値12、ファンブル値4で判定（クリティカル値の省略）
      　　例) 2d6+2#4>=10　　　↑をクリティカル値12、ファンブル値4で判定（クリティカル値の省略）
      　　例) EO+2>=10　　　　 2d6+2>=10と同じ（EOが2D6のショートカットコマンド）
      　　例) SQ+2>=10　　　　 2d6+2>=10と同じ（SQが2D6のショートカットコマンド）

      　・クリティカルおよびファンブルのみの判定：2D6+m@c#f または 2D6+m[c,f]
      　　目標値を指定せず、修正値m、クリティカル値c、ファンブル値fで判定ロールを行います。
      　　修正値、クリティカル値、ファンブル値は省略可能です（[]は省略不可、@c・#fの指定は順不同）。
      　　自動成功、自動失敗を自動表示します。

      　　例) 2d6[]　　　　修正値0、クリティカル値12、ファンブル値2で判定
      　　例) 2d6+2[11]　　修正値+2、クリティカル値11、ファンブル値2で判定
      　　例) 2d6+2@11 　　修正値+2、クリティカル値11、ファンブル値2で判定
      　　例) 2d6+2[12,4]　修正値+2、クリティカル値12、ファンブル値4で判定
      　　例) 2d6+2@12#4 　修正値+2、クリティカル値12、ファンブル値4で判定
      　　例) EO　　　　　 2d6[]と同じ（EOが2D6のショートカットコマンド）
      　　例) EO+2@12#4　　2d6+2@12#4と同じ（EOが2D6のショートカットコマンド）
      　　例) SQ　　　　　 2d6[]と同じ（SQが2D6のショートカットコマンド）
      　　例) SQ+2@12#4　　2d6+2@12#4と同じ（SQが2D6のショートカットコマンド）

      ・D66ダイスあり（入れ替えなし)
    HELP_MESSAGE

    assert_equal(expected, BCDice::GameSystem::EtrianOdysseySRS::HELP_MESSAGE)
  end
end
