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