Closed TK11235 closed 2 years ago
CIのエラーで気付いたバグの修正です。 あるダイスボットが別のダイスボットと継承関係を持っている場合、全ての継承元クラスのi18nファイルを動的インポートする必要があります。
具体的な再現例としてはSwordWorld2.5を動的インポートする場合が挙げられます。
SwordWorld2.5
初期状態からSwordWorld2.5のみを動的インポートした場合、#53 のコードではSwordWorld2.5のi18nファイルだけがインポートされた状態となります。 この状態でSwordWorld2.5の継承元クラスであるSwordWorldやSwordWorld2.0の機能を使用すると、SwordWorldとSwordWorld2.0のi18n情報不足によってエラーになります。
SwordWorld
SwordWorld2.0
I18n.$clear_translate_table()
GitHubのCIでエラーが表面化した理由は、推測ですが、async/awaitのタイミング揺らぎでi18n情報リセットのタイミングがブレたのかなと考えています。(曖昧) テスト結果としてはCIの挙動とエラーが正しい筈です。
game_system_list.json
superClassName
Loader
getI18nInfos()
i18nInfo[]
dynamicLoad()
game_system_commands.test.ts
クラス継承があり、なおかつi18nを使用するダイスボットは現状ではSwordWorld系統のみです。 しかし、将来的に追加されるダイスボットがSwordWorld系統と同様または亜種的なクラス継承関係を持つ場合が想定されます。
このPRではそういったクラス継承が存在する場合のi18nファイル検索も想定してgame_system_list.jsonにsuperClassNameキーを追加しています。
影響範囲は #53 のバグ修正のみです。
ローカルでも(成功が多かったものの)テスト結果が不安定だったので、実行順というのは正しそうです。ありがとうございます。
概要
CIのエラーで気付いたバグの修正です。 あるダイスボットが別のダイスボットと継承関係を持っている場合、全ての継承元クラスのi18nファイルを動的インポートする必要があります。
バグ
53 のコードにはバグがありました。
具体的な再現例としては
SwordWorld2.5
を動的インポートする場合が挙げられます。初期状態から
SwordWorld2.5
のみを動的インポートした場合、#53 のコードではSwordWorld2.5
のi18nファイルだけがインポートされた状態となります。 この状態でSwordWorld2.5
の継承元クラスであるSwordWorld
やSwordWorld2.0
の機能を使用すると、SwordWorld
とSwordWorld2.0
のi18n情報不足によってエラーになります。CIのエラー
53 でローカル環境のテストがパスしていたのは、
I18n.$clear_translate_table()
によるi18nリセットのタイミングが適切ではなく、SwordWorld
→SwordWorld2.0
→SwordWorld2.5
という"安全な順番"で動的インポート&テストが行われていた為と考えています。GitHubのCIでエラーが表面化した理由は、推測ですが、async/awaitのタイミング揺らぎでi18n情報リセットのタイミングがブレたのかなと考えています。(曖昧) テスト結果としてはCIの挙動とエラーが正しい筈です。
変更内容
game_system_list.json
にsuperClassName
キーを追加Loader
クラスのgetI18nInfos()
で対象ダイスボットの継承元クラスを含めたi18nInfo[]
を取得Loader
のdynamicLoad()
実行時に継承元クラスのi18nファイルも動的インポートgame_system_commands.test.ts
のI18n.$clear_translate_table()
実行タイミングを修正クラス継承があり、なおかつi18nを使用するダイスボットは現状では
SwordWorld
系統のみです。 しかし、将来的に追加されるダイスボットがSwordWorld
系統と同様または亜種的なクラス継承関係を持つ場合が想定されます。このPRではそういったクラス継承が存在する場合のi18nファイル検索も想定して
game_system_list.json
にsuperClassName
キーを追加しています。影響範囲
影響範囲は #53 のバグ修正のみです。