mirror of https://github.com/iSoron/uhabits.git
parent
8378d88186
commit
e0894c9313
@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016-2019 Álinson Santos Xavier <isoron@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of Loop Habit Tracker.
|
||||||
|
*
|
||||||
|
* Loop Habit Tracker is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* Loop Habit Tracker is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@file:Suppress("UNCHECKED_CAST")
|
||||||
|
|
||||||
|
package org.isoron.platform.io
|
||||||
|
|
||||||
|
import platform.Foundation.*
|
||||||
|
|
||||||
|
class IosFileOpener : FileOpener {
|
||||||
|
override fun openResourceFile(path: String): ResourceFile {
|
||||||
|
val resPath = NSBundle.mainBundle.resourcePath!!
|
||||||
|
return IosFile("$resPath/$path")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun openUserFile(path: String): UserFile {
|
||||||
|
val manager = NSFileManager.defaultManager
|
||||||
|
val basePath = manager.URLsForDirectory(NSDocumentDirectory,
|
||||||
|
NSUserDomainMask) as List<NSURL>
|
||||||
|
val filePath = basePath.first().URLByAppendingPathComponent(path)!!.path!!
|
||||||
|
return IosFile(filePath)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class IosFile(val path: String) : UserFile, ResourceFile {
|
||||||
|
override suspend fun delete() {
|
||||||
|
NSFileManager.defaultManager.removeItemAtPath(path, null)
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun exists(): Boolean {
|
||||||
|
return NSFileManager.defaultManager.fileExistsAtPath(path)
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun lines(): List<String> {
|
||||||
|
if (!exists()) throw Exception("File not found: $path")
|
||||||
|
val contents = NSString.stringWithContentsOfFile(path)
|
||||||
|
return contents.toString().lines()
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun copyTo(dest: UserFile) {
|
||||||
|
NSFileManager.defaultManager.copyItemAtPath(path, (dest as IosFile).path, null)
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016-2019 Álinson Santos Xavier <isoron@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of Loop Habit Tracker.
|
||||||
|
*
|
||||||
|
* Loop Habit Tracker is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* Loop Habit Tracker is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.isoron
|
||||||
|
|
||||||
|
import kotlinx.coroutines.*
|
||||||
|
import org.isoron.platform.io.*
|
||||||
|
import org.isoron.uhabits.models.*
|
||||||
|
import kotlin.test.*
|
||||||
|
|
||||||
|
class IosAsyncTests {
|
||||||
|
@Test
|
||||||
|
fun testFiles() = runBlocking { FilesTest().testLines() }
|
||||||
|
|
||||||
|
// @Test
|
||||||
|
// fun testDatabase() = runBlocking { DatabaseTest().testUsage() }
|
||||||
|
//
|
||||||
|
// @Test
|
||||||
|
// fun testCheckmarkRepository() = runBlocking { CheckmarkRepositoryTest().testCRUD() }
|
||||||
|
//
|
||||||
|
// @Test
|
||||||
|
// fun testHabitRepository() = runBlocking { HabitRepositoryTest().testCRUD() }
|
||||||
|
//
|
||||||
|
// @Test
|
||||||
|
// fun testPreferencesRepository() = runBlocking { PreferencesRepositoryTest().testUsage() }
|
||||||
|
}
|
@ -1,83 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2016-2019 Álinson Santos Xavier <isoron@gmail.com>
|
|
||||||
*
|
|
||||||
* This file is part of Loop Habit Tracker.
|
|
||||||
*
|
|
||||||
* Loop Habit Tracker is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by the
|
|
||||||
* Free Software Foundation, either version 3 of the License, or (at your
|
|
||||||
* option) any later version.
|
|
||||||
*
|
|
||||||
* Loop Habit Tracker is distributed in the hope that it will be useful, but
|
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
||||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import Foundation
|
|
||||||
|
|
||||||
class IosResourceFile : NSObject, ResourceFile {
|
|
||||||
|
|
||||||
var path: String
|
|
||||||
var fileManager = FileManager.default
|
|
||||||
|
|
||||||
init(forPath path: String) {
|
|
||||||
self.path = path
|
|
||||||
}
|
|
||||||
|
|
||||||
func readLines() -> [String] {
|
|
||||||
do {
|
|
||||||
let contents = try String(contentsOfFile: self.path, encoding: .utf8)
|
|
||||||
return contents.components(separatedBy: CharacterSet.newlines)
|
|
||||||
} catch {
|
|
||||||
return ["ERROR"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func doCopyTo(dest: UserFile) {
|
|
||||||
try! fileManager.copyItem(atPath: self.path, toPath: (dest as! IosUserFile).path)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class IosUserFile : NSObject, UserFile {
|
|
||||||
|
|
||||||
var path: String
|
|
||||||
|
|
||||||
init(forPath path: String) {
|
|
||||||
self.path = path
|
|
||||||
}
|
|
||||||
|
|
||||||
func delete() {
|
|
||||||
do {
|
|
||||||
try FileManager.default.removeItem(atPath: path)
|
|
||||||
} catch {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func exists() -> Bool {
|
|
||||||
return FileManager.default.fileExists(atPath: path)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class IosFileOpener : NSObject, FileOpener {
|
|
||||||
func openResourceFile(filename: String) -> ResourceFile {
|
|
||||||
let path = "\(Bundle.main.resourcePath!)/\(filename)"
|
|
||||||
return IosResourceFile(forPath: path)
|
|
||||||
}
|
|
||||||
|
|
||||||
func openUserFile(filename: String) -> UserFile {
|
|
||||||
do {
|
|
||||||
let root = try FileManager.default.url(for: .documentDirectory,
|
|
||||||
in: .userDomainMask,
|
|
||||||
appropriateFor: nil,
|
|
||||||
create: false).path
|
|
||||||
return IosUserFile(forPath: "\(root)/\(filename)")
|
|
||||||
} catch {
|
|
||||||
return IosUserFile(forPath: "invalid")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,45 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2016-2019 Álinson Santos Xavier <isoron@gmail.com>
|
|
||||||
*
|
|
||||||
* This file is part of Loop Habit Tracker.
|
|
||||||
*
|
|
||||||
* Loop Habit Tracker is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by the
|
|
||||||
* Free Software Foundation, either version 3 of the License, or (at your
|
|
||||||
* option) any later version.
|
|
||||||
*
|
|
||||||
* Loop Habit Tracker is distributed in the hope that it will be useful, but
|
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
||||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import XCTest
|
|
||||||
@testable import uhabits
|
|
||||||
|
|
||||||
class IosFilesTest: XCTestCase {
|
|
||||||
func testResourceFiles() {
|
|
||||||
let fileOpener = IosFileOpener()
|
|
||||||
let file = fileOpener.openResourceFile(filename: "migrations/010.sql")
|
|
||||||
let lines = file.readLines()
|
|
||||||
XCTAssertEqual(lines[0], "delete from Score")
|
|
||||||
}
|
|
||||||
|
|
||||||
func testUserFiles() throws {
|
|
||||||
let fm = FileManager.default
|
|
||||||
let root = try fm.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).path
|
|
||||||
let path = "\(root)/test.txt"
|
|
||||||
print(path)
|
|
||||||
fm.createFile(atPath: path, contents: "Hello world\nThis is line 2".data(using: .utf8), attributes: nil)
|
|
||||||
|
|
||||||
let fileOpener = IosFileOpener()
|
|
||||||
let file = fileOpener.openUserFile(filename: "test.txt")
|
|
||||||
XCTAssertTrue(file.exists())
|
|
||||||
|
|
||||||
file.delete()
|
|
||||||
XCTAssertFalse(file.exists())
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in new issue