修正済みでPRしようとしましたが、回避策もあるので報告だけさせて頂きます。
問題内容
test: GetDocDataObject001 でエラー
再現手順
コマンドプロンプトでcd c:\で移動した場合に、ドライブ名が小文字の場合にエラー
再現頻度
test-window.cpp: error: Value of: memory.wstring()
Expected: is equal to L"c:\workspace\git\sakura\Win32\Release\backup-agent-target.txt"
Actual: L"C:\workspace\git\sakura\Win32\Release\backup-agent-target.txt"
原因
本テストは2つのクリップボード形式でパスを取得・比較していますが、形式により
ドライブ文字の扱いが異なります。
CFSTR_FILENAMEW(シェルのファイル名形式): Windows シェルがドライブ文字を
大文字へ正規化する(c: → C:)。
CF_UNICODETEXT(sakura 独自形式): FileOpen に渡したパスをそのまま保持する
(c: のまま)。
期待値の targetPath.native() は GetIniFileName() 由来のドライブ文字大小を
そのまま保持するため、CFSTR_FILENAMEW 側の比較でのみ、ドライブ文字の大小が
食い違い StrEq(大小区別)で失敗します。
プロダクト側の不具合ではなく、テストの比較がドライブ文字表記に依存している点が原因です。
対応
比較対象を緩めず(フルパス一致の検証は維持)、CFSTR_FILENAMEW 側の比較に限り、
期待値のドライブ文字を大文字へ正規化してから比較するようにしました。
CF_UNICODETEXT 側は従来どおり targetPath.native() と比較します(正規化不要)。
変更ファイル
src/test/cpp/tests1/test-window.cpp(テストソースのみ)
修正済みでPRしようとしましたが、回避策もあるので報告だけさせて頂きます。
問題内容
test: GetDocDataObject001 でエラー
再現手順
コマンドプロンプトでcd c:\で移動した場合に、ドライブ名が小文字の場合にエラー
再現頻度
原因
本テストは2つのクリップボード形式でパスを取得・比較していますが、形式により
ドライブ文字の扱いが異なります。
CFSTR_FILENAMEW(シェルのファイル名形式): Windows シェルがドライブ文字を大文字へ正規化する(
c:→C:)。CF_UNICODETEXT(sakura 独自形式):FileOpenに渡したパスをそのまま保持する(
c:のまま)。期待値の
targetPath.native()はGetIniFileName()由来のドライブ文字大小をそのまま保持するため、
CFSTR_FILENAMEW側の比較でのみ、ドライブ文字の大小が食い違い
StrEq(大小区別)で失敗します。プロダクト側の不具合ではなく、テストの比較がドライブ文字表記に依存している点が原因です。
対応
比較対象を緩めず(フルパス一致の検証は維持)、
CFSTR_FILENAMEW側の比較に限り、期待値のドライブ文字を大文字へ正規化してから比較するようにしました。
CF_UNICODETEXT側は従来どおりtargetPath.native()と比較します(正規化不要)。変更ファイル
src/test/cpp/tests1/test-window.cpp(テストソースのみ)