| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| @file:Suppress("ktlint:standard:max-line-length") |
|
|
| package com.amaze.filemanager.filesystem |
|
|
| import android.os.Build |
| import android.os.Build.VERSION_CODES.LOLLIPOP |
| import android.os.Build.VERSION_CODES.P |
| import android.os.Environment |
| import androidx.test.core.app.ApplicationProvider |
| import androidx.test.ext.junit.runners.AndroidJUnit4 |
| import com.amaze.filemanager.application.AppConfig |
| import com.amaze.filemanager.fileoperations.filesystem.OpenMode |
| import com.amaze.filemanager.shadows.ShadowMultiDex |
| import org.junit.Assert.assertEquals |
| import org.junit.Test |
| import org.junit.runner.RunWith |
| import org.robolectric.annotation.Config |
| import java.io.File |
| import java.net.URLDecoder |
| import kotlin.random.Random |
|
|
| @RunWith(AndroidJUnit4::class) |
| @Config(shadows = [ShadowMultiDex::class], sdk = [LOLLIPOP, P, Build.VERSION_CODES.R]) |
| @Suppress("StringLiteralDuplication") |
| class HybridFileTest { |
| |
| |
| |
| @Test |
| fun testGetParentGeneric() { |
| val r = Random(123) |
| for (i in 0..50) { |
| val path = RandomPathGenerator.generateRandomPath(r, 50) |
| val file = HybridFile(OpenMode.UNKNOWN, path) |
| file.getParent(ApplicationProvider.getApplicationContext()) |
| } |
|
|
| for (i in 0..50) { |
| val path = RandomPathGenerator.generateRandomPath(r, 50, 0) |
| val file = HybridFile(OpenMode.UNKNOWN, path) |
| file.getParent(ApplicationProvider.getApplicationContext()) |
| } |
| } |
|
|
| |
| |
| |
| @Test |
| fun testSshGetParentWithTrailingSlash() { |
| val file = HybridFile(OpenMode.SFTP, "ssh://user@127.0.0.1/home/user/next/project/") |
| assertEquals( |
| "ssh://user@127.0.0.1/home/user/next/", |
| file.getParent(ApplicationProvider.getApplicationContext()), |
| ) |
| } |
|
|
| |
| |
| |
| @Test |
| fun testSshGetParentWithoutTrailingSlash() { |
| val file = HybridFile(OpenMode.SFTP, "ssh://user@127.0.0.1/home/user/next/project") |
| assertEquals( |
| "ssh://user@127.0.0.1/home/user/next/", |
| file.getParent(ApplicationProvider.getApplicationContext()), |
| ) |
| } |
|
|
| |
| |
| |
| @Test |
| fun testDocumentFileAndroidDataGetParent1() { |
| var file = |
| HybridFile( |
| OpenMode.DOCUMENT_FILE, |
| "content://com.android.externalstorage.documents/tree/primary:Android/data/com.amaze.filemanager.debug/cache", |
| ) |
| assertEquals( |
| "content://com.android.externalstorage.documents/tree/primary:Android/data/com.amaze.filemanager.debug/", |
| file.getParent(AppConfig.getInstance()), |
| ) |
| file = |
| HybridFile( |
| OpenMode.DOCUMENT_FILE, |
| file.getParent(AppConfig.getInstance()), |
| ) |
| assertEquals( |
| File(Environment.getExternalStorageDirectory(), "Android/data").absolutePath, |
| file.getParent(AppConfig.getInstance()), |
| ) |
| } |
|
|
| |
| |
| |
| @Test |
| fun testDocumentFileAndroidDataGetParent2() { |
| var file = |
| HybridFile( |
| OpenMode.DOCUMENT_FILE, |
| "content://com.android.externalstorage.documents/tree/primary:Android/data/com.amaze.filemanager.debug/files/external", |
| ) |
| assertEquals( |
| "content://com.android.externalstorage.documents/tree/primary:Android/data/com.amaze.filemanager.debug/files/", |
| file.getParent(AppConfig.getInstance()), |
| ) |
| file = |
| HybridFile( |
| OpenMode.DOCUMENT_FILE, |
| file.getParent(AppConfig.getInstance()), |
| ) |
| assertEquals( |
| "content://com.android.externalstorage.documents/tree/primary:Android/data/com.amaze.filemanager.debug/", |
| file.getParent(AppConfig.getInstance()), |
| ) |
| file = |
| HybridFile( |
| OpenMode.DOCUMENT_FILE, |
| file.getParent(AppConfig.getInstance()), |
| ) |
| assertEquals( |
| File(Environment.getExternalStorageDirectory(), "Android/data").absolutePath, |
| file.getParent(AppConfig.getInstance()), |
| ) |
| } |
|
|
| |
| |
| |
| @Test |
| fun testDocumentFileAndroidObbGetParent3() { |
| var file = |
| HybridFile( |
| OpenMode.DOCUMENT_FILE, |
| "content://com.android.externalstorage.documents/tree/primary:Android/obb/com.amaze.filemanager.debug/cache", |
| ) |
| assertEquals( |
| "content://com.android.externalstorage.documents/tree/primary:Android/obb/com.amaze.filemanager.debug/", |
| file.getParent(AppConfig.getInstance()), |
| ) |
| file = |
| HybridFile( |
| OpenMode.DOCUMENT_FILE, |
| file.getParent(AppConfig.getInstance()), |
| ) |
| assertEquals( |
| File(Environment.getExternalStorageDirectory(), "Android/obb").absolutePath, |
| file.getParent(AppConfig.getInstance()), |
| ) |
| } |
|
|
| |
| |
| |
| @Test |
| fun testDocumentFileAndroidObbGetParent2() { |
| var file = |
| HybridFile( |
| OpenMode.DOCUMENT_FILE, |
| "content://com.android.externalstorage.documents/tree/primary:Android/obb/com.amaze.filemanager.debug/files/external", |
| ) |
| assertEquals( |
| "content://com.android.externalstorage.documents/tree/primary:Android/obb/com.amaze.filemanager.debug/files/", |
| file.getParent(AppConfig.getInstance()), |
| ) |
| file = |
| HybridFile( |
| OpenMode.DOCUMENT_FILE, |
| file.getParent(AppConfig.getInstance()), |
| ) |
| assertEquals( |
| "content://com.android.externalstorage.documents/tree/primary:Android/obb/com.amaze.filemanager.debug/", |
| file.getParent(AppConfig.getInstance()), |
| ) |
| file = |
| HybridFile( |
| OpenMode.DOCUMENT_FILE, |
| file.getParent(AppConfig.getInstance()), |
| ) |
| assertEquals( |
| File(Environment.getExternalStorageDirectory(), "Android/obb").absolutePath, |
| file.getParent(AppConfig.getInstance()), |
| ) |
| } |
|
|
| |
| |
| |
| @Test |
| fun testGetName() { |
| for ( |
| name: String in arrayOf( |
| "newfolder", |
| "new folder 2", |
| "new%20folder%203", |
| "あいうえお", |
| ) |
| ) { |
| val file = HybridFile(OpenMode.FTP, "ftp://user:password@127.0.0.1/$name") |
| assertEquals( |
| URLDecoder.decode(name, Charsets.UTF_8.name()), |
| file.getName(AppConfig.getInstance()), |
| ) |
| } |
| } |
|
|
| |
| |
| |
| @Test |
| fun testGetName2() { |
| val file = |
| HybridFile( |
| OpenMode.FTP, |
| "ftp://user:password@127.0.0.1:22222/multiple/levels/down the pipe", |
| ) |
| assertEquals("down the pipe", file.getName(AppConfig.getInstance())) |
| } |
|
|
| |
| |
| |
| @Test |
| fun testSanitizePathAsNecessary() { |
| assertEquals( |
| "ftp://user:password@127.0.0.1:22222/multiple/levels/down/the/pipe", |
| HybridFile( |
| OpenMode.FTP, |
| "ftp://user:password@127.0.0.1:22222//multiple///levels////down////the/pipe", |
| ).path, |
| ) |
| assertEquals( |
| "ssh://user@127.0.0.1/multiple/levels/down/the/pipe", |
| HybridFile( |
| OpenMode.SFTP, |
| "ssh://user@127.0.0.1//multiple///levels////down////the/pipe", |
| ).path, |
| ) |
| assertEquals( |
| "ssh://user@127.0.0.1/multiple/levels/down/the/pipe", |
| HybridFile( |
| OpenMode.SFTP, |
| "ssh://user@127.0.0.1/multiple/levels/down/the/pipe", |
| ).path, |
| ) |
| assertEquals( |
| "smb://127.0.0.1/legacy?disableIpcSigningCheck=true", |
| HybridFile( |
| OpenMode.SMB, |
| "smb://127.0.0.1/legacy?disableIpcSigningCheck=true", |
| ).path, |
| ) |
| assertEquals( |
| "smb://127.0.0.1/legacy/again/try/duplicate/folder?disableIpcSigningCheck=true", |
| HybridFile( |
| OpenMode.SMB, |
| "smb://127.0.0.1/legacy//again/try/duplicate/////folder?disableIpcSigningCheck=true", |
| ).path, |
| ) |
| } |
| } |
|
|