Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
PR の目的
文字コード変換に関するテストを追加します。
カテゴリ
PR の背景
サクラエディタには、各種「文字コード」でエンコードされたファイルを開くための「コード変換機能」があります。
コード変換機能は、各種文字コードの仕様が「やや難解」であることもあり、長いことごく一部の「偉い人」ないし「偉そうな人」による寡占でメンテされてきた経緯があるっぽいです。
ぶっちゃけで言うと間違ってる部分がかなりあるんですけど「誰もが分かるような状態」で誤りを指摘することが大変難しく、「分かっているけど修正できない既知の問題」が溜まってきていると思います。
今回は「コード変換機能」に単体テストを用意することにより、
間違っていたら直す、という当たり前のことができる環境を作ってみます。
PR のメリット
PR のデメリット (トレードオフとかあれば)
仕様・動作説明
サクラエディタは、編集するテキストファイルを内部的に「拡張UTF16LE」に変換しています。
この変換に使うのが
CCodeBase 派生クラス
で、今回のテスト対象です。CCodeBase派生クラスは2つの変換メソッドを持っています。
世の中には色々な文字コードがあります。
8bit
単位で符号化したもの。16bit
単位で符号化したもの。見て分かる通り、Unicodeとそうでないものでは表現できる文字数に圧倒的な差があります。
サクラエディタはこの特性を活用して、すべての文字をUnicodeに変換しようとします。
変換できなかったら、変換できないなりにデータを破壊しないように拡張文字として保持します。
SHIFT-JIS変換の例
「エンコードする」ということは「デコードできる」ということです。
本当はテスト追加と同時に既知の不具合を直してしまいたかったんですが、それをやるとレビューが成立しないような気がしたので、いったん無理なく実装できる部分だけに留め、問題解決は先送りすることにしました。
PR の影響範囲
このPRは既存処理を変更するものではありません。
テスト内容
テストで利用するために、本体にラッパーインターフェースを追加しています。
追加コードについては単体テストで利用しているため、追加のテストは不要と考えています。
関連 issue, PR
参考資料
https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/byteswap-uint64-byteswap-ulong-byteswap-ushort
最新のMinGWなら普通にコンパイルできるようです。
https://github.com/sakura-editor/sakura/issues?q=is%3Aopen+is%3Aissue+label%3Ax64