問題点
KTXのUri.toFile()を行うとどうなるか
- toFile()は単純に
Uri.path
値をFileにラップして返すだけである
- Windows環境でRobolectricを使用し、Uri.fromFile().pathを取得するとnullになる
- 結果、File(null)が渡されることとなり、
UnitTestを実行しているカレントディレクトリ
と解釈され、ほとんどの場合はその後のテストが落ちる
どうしたか?
Uri.path
をチェックし、問題があるようならURLデコードを行ってからFileにラップするような拡張関数を書いてやる
こんなの
internal const val SCHEME_FILE = "file://"
fun Uri.toFileCompat(): File {
val path = this.path ?: ""
return if (path.isEmpty()) {
val path = toString().substring(SCHEME_FILE.length)
File(URLDecoder.decode(path, "UTF-8"))
} else {
toFile()
}
}
楽観的な話