Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

コマンドラインクラスの基底クラスを変更してテストしやすくする #1581

Merged

Conversation

berryzplus
Copy link
Contributor

PR の目的

CCommandLineの基底クラスを変更し、テストしやすくします。

カテゴリ

  • リファクタリング

PR の背景

#1570util/design_template.h を活用するための変更を行いました。

サクラエディタには、インスタンスポインタをグローバルに取得できる独自型が3種類定義されています。

型名 説明
TSingleton<T> デザインパターン「シングルトン」を実現する目的のテンプレートと考えられる。最初にインスタンス取得したタイミングで生成される。インスタンスを関数内のstatic変数で保持しているので、インスタンス破棄はプログラム終了時に行われる。インスタンス生成をstatic関数内だけで行うための派生クラスの定義に関して細かいルール(≒制約)がある。
TSingleInstance<T> プロセス内のインスタンス数を制限する。同時に2つ以上のインスタンスを生成することはできない。インスタンスを生成すると記録され、破棄するとポインタがクリアされる。派生クラスの定義に関して制約なし。CProcessの基底クラス。
TInstanceHolder<T> プロセス内で生成したインスタンスを記録する。特定の順序で生成されたインスタンスを照会できる。インスタンスを生成すると記録され、破棄するとポインタがクリアされる。派生クラスの定義に関して制約なし。CEditDocの基底クラス。

CCommandLineは現在TSingletonから派生しており、挙動を確認するためにはグローバル変数を書き替えたりラッパーを用意したりする必要があって大変めんどくさいです。

PR のメリット

  • CCommandLineのグローバル変数を気にしなくてよくなるため、テストが書きやすくなります。

PR のデメリット (トレードオフとかあれば)

とくにおもいつきません。

仕様・動作説明

CCommandLineの基底クラスを TSingleton から TInstanceHolder に変更します。

  • friend 宣言が不要になるので削除します。
  • コンストラクタを protected にする必要がなくなるので public に変更します。
  • アプリコード全域からアクセスできる「最初のインスタンス」を WinMain で確保します。

PR の影響範囲

CCommandLineに依存するテストコードに影響する修正です。

テスト内容

影響を受けるテストコードを修正し、テストにパスすることを確認しました。

関連 issue, PR

#1570

参考資料

@sonarcloud
Copy link

sonarcloud bot commented Mar 13, 2021

Kudos, SonarCloud Quality Gate passed!

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 0 Code Smells

100.0% 100.0% Coverage
0.0% 0.0% Duplication

@berryzplus berryzplus changed the title CCommandLineをテストしやすくする コマンドラインクラスの基底クラスを変更してテストしやすくする Mar 13, 2021
@AppVeyorBot
Copy link

@berryzplus
Copy link
Contributor Author

レビューありがとうございます。マージしちゃいます。

@berryzplus berryzplus merged commit 63a9c23 into sakura-editor:master Mar 13, 2021
@berryzplus berryzplus deleted the feature/rebase_ccommandline branch March 13, 2021 10:37
@beru beru added the refactoring リファクタリング 【ChangeLog除外】 label Mar 21, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
refactoring リファクタリング 【ChangeLog除外】
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants