mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-07 09:38:52 -06:00
Compare commits
36 Commits
2530afa735
...
0f408be07e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0f408be07e | ||
|
|
ef7454ae75 | ||
|
|
b51f6abfce | ||
|
|
a013635224 | ||
|
|
a9f028a34b | ||
|
|
3b0fba12f5 | ||
|
|
4139f09fb7 | ||
|
|
248ff2ec62 | ||
|
|
cc7178eb21 | ||
|
|
334dabb407 | ||
|
|
b2fc79a3ab | ||
|
|
f0e8643e6b | ||
|
|
5cd616f967 | ||
|
|
b53ef758ec | ||
|
|
5add03bf23 | ||
|
|
b465ee588b | ||
|
|
b9253d41ea | ||
|
|
ca0a9dd85f | ||
|
|
9951525cbe | ||
|
|
98b2c9cce2 | ||
|
|
19de2a2d1c | ||
|
|
80f783b669 | ||
|
|
761fe59c5e | ||
|
|
f58d8a52ff | ||
|
|
f4e5b68258 | ||
|
|
5df3ee0d61 | ||
|
|
9f66a27b82 | ||
|
|
4bbb20e18e | ||
|
|
4f9ab6d263 | ||
|
|
af21fd25db | ||
|
|
35097e1263 | ||
|
|
8e4274d923 | ||
|
|
12649141b1 | ||
|
|
0526d37fbd | ||
|
|
b083899ec8 | ||
|
|
6b793c7c16 |
1
.github/dependabot.yml
vendored
1
.github/dependabot.yml
vendored
@@ -4,6 +4,7 @@ updates:
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "monthly"
|
||||
open-pull-requests-limit: 10
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
plugins {
|
||||
val kotlinVersion = "1.7.21"
|
||||
id("com.android.application") version ("7.3.1") apply (false)
|
||||
val kotlinVersion = "1.8.20"
|
||||
id("com.android.application") version "7.4.2" apply (false)
|
||||
id("org.jetbrains.kotlin.android") version kotlinVersion apply (false)
|
||||
id("org.jetbrains.kotlin.kapt") version kotlinVersion apply (false)
|
||||
id("org.jetbrains.kotlin.android.extensions") version kotlinVersion apply (false)
|
||||
id("org.jetbrains.kotlin.multiplatform") version kotlinVersion apply (false)
|
||||
id("org.jlleitschuh.gradle.ktlint") version "11.4.2"
|
||||
id("org.jlleitschuh.gradle.ktlint") version "11.5.1"
|
||||
}
|
||||
|
||||
apply {
|
||||
|
||||
@@ -18,11 +18,10 @@
|
||||
*/
|
||||
|
||||
plugins {
|
||||
id("com.github.triplet.play") version "3.7.0"
|
||||
id("com.android.application")
|
||||
id("com.github.triplet.play") version "3.8.4"
|
||||
id("com.android.application") version "7.4.2"
|
||||
id("org.jetbrains.kotlin.android")
|
||||
id("org.jetbrains.kotlin.kapt")
|
||||
id("org.jetbrains.kotlin.android.extensions")
|
||||
id("org.jlleitschuh.gradle.ktlint")
|
||||
}
|
||||
|
||||
@@ -30,6 +29,17 @@ tasks.compileLint {
|
||||
dependsOn("updateTranslators")
|
||||
}
|
||||
|
||||
/*
|
||||
Added on top of kotlinOptions to work around this issue:
|
||||
https://youtrack.jetbrains.com/issue/KTIJ-24311/task-current-target-is-17-and-kaptGenerateStubsProductionDebugKotlin-task-current-target-is-1.8-jvm-target-compatibility-should#focus=Comments-27-6798448.0-0
|
||||
Updating gradle might fix this, so try again in the future to remove this and run:
|
||||
./gradlew --rerun-tasks :uhabits-android:kaptGenerateStubsReleaseKotlin
|
||||
If this doesn't produce any warning, try to remove it.
|
||||
*/
|
||||
kotlin {
|
||||
jvmToolchain(11)
|
||||
}
|
||||
|
||||
android {
|
||||
|
||||
compileSdk = 32
|
||||
@@ -38,7 +48,7 @@ android {
|
||||
versionCode = 20200
|
||||
versionName = "2.2.0"
|
||||
minSdk = 28
|
||||
targetSdk = 31
|
||||
targetSdk = 32
|
||||
applicationId = "org.isoron.uhabits"
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
@@ -70,8 +80,11 @@ android {
|
||||
|
||||
compileOptions {
|
||||
isCoreLibraryDesugaringEnabled = true
|
||||
targetCompatibility(JavaVersion.VERSION_1_8)
|
||||
sourceCompatibility(JavaVersion.VERSION_1_8)
|
||||
targetCompatibility(JavaVersion.VERSION_11)
|
||||
sourceCompatibility(JavaVersion.VERSION_11)
|
||||
}
|
||||
kotlinOptions {
|
||||
jvmTarget = JavaVersion.VERSION_11.toString()
|
||||
}
|
||||
|
||||
buildFeatures {
|
||||
@@ -80,9 +93,9 @@ android {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
val daggerVersion = "2.46"
|
||||
val kotlinVersion = "1.7.21"
|
||||
val kxCoroutinesVersion = "1.6.4"
|
||||
val daggerVersion = "2.48"
|
||||
val kotlinVersion = "1.8.20"
|
||||
val kxCoroutinesVersion = "1.7.3"
|
||||
val ktorVersion = "1.6.8"
|
||||
val espressoVersion = "3.5.1"
|
||||
|
||||
@@ -92,17 +105,17 @@ dependencies {
|
||||
androidTestImplementation("com.linkedin.dexmaker:dexmaker-mockito:2.28.3")
|
||||
androidTestImplementation("io.ktor:ktor-client-mock:$ktorVersion")
|
||||
androidTestImplementation("io.ktor:ktor-jackson:$ktorVersion")
|
||||
androidTestImplementation("androidx.annotation:annotation:1.5.0")
|
||||
androidTestImplementation("androidx.annotation:annotation:1.6.0")
|
||||
androidTestImplementation("androidx.test.ext:junit:1.1.5")
|
||||
androidTestImplementation("androidx.test.uiautomator:uiautomator:2.2.0")
|
||||
androidTestImplementation("androidx.test:rules:1.5.0")
|
||||
androidTestImplementation("com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0")
|
||||
androidTestImplementation("org.mockito.kotlin:mockito-kotlin:5.0.0")
|
||||
compileOnly("javax.annotation:jsr250-api:1.0")
|
||||
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.2.2")
|
||||
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.3")
|
||||
implementation("com.github.AppIntro:AppIntro:6.2.0")
|
||||
implementation("com.google.code.findbugs:jsr305:3.0.2")
|
||||
implementation("com.google.dagger:dagger:$daggerVersion")
|
||||
implementation("com.google.guava:guava:31.1-android")
|
||||
implementation("com.google.guava:guava:32.1.2-android")
|
||||
implementation("io.ktor:ktor-client-android:$ktorVersion")
|
||||
implementation("io.ktor:ktor-client-core:$ktorVersion")
|
||||
implementation("io.ktor:ktor-client-jackson:$ktorVersion")
|
||||
@@ -113,14 +126,14 @@ dependencies {
|
||||
implementation("androidx.appcompat:appcompat:1.5.1")
|
||||
implementation("androidx.legacy:legacy-preference-v14:1.0.0")
|
||||
implementation("androidx.legacy:legacy-support-v4:1.0.0")
|
||||
implementation("com.google.android.material:material:1.8.0")
|
||||
implementation("com.opencsv:opencsv:5.7.1")
|
||||
implementation("com.google.android.material:material:1.9.0")
|
||||
implementation("com.opencsv:opencsv:5.8")
|
||||
implementation(project(":uhabits-core"))
|
||||
kapt("com.google.dagger:dagger-compiler:$daggerVersion")
|
||||
kaptAndroidTest("com.google.dagger:dagger-compiler:$daggerVersion")
|
||||
testImplementation("com.google.dagger:dagger:$daggerVersion")
|
||||
testImplementation("junit:junit:4.13.2")
|
||||
testImplementation("com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0")
|
||||
testImplementation("org.mockito.kotlin:mockito-kotlin:5.0.0")
|
||||
}
|
||||
|
||||
kapt {
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
|
||||
package org.isoron.uhabits
|
||||
|
||||
import com.nhaarman.mockitokotlin2.mock
|
||||
import dagger.Component
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
@@ -35,6 +34,7 @@ import org.isoron.uhabits.inject.ActivityScope
|
||||
import org.isoron.uhabits.inject.HabitModule
|
||||
import org.isoron.uhabits.inject.HabitsActivityModule
|
||||
import org.isoron.uhabits.inject.HabitsApplicationComponent
|
||||
import org.mockito.kotlin.mock
|
||||
|
||||
@Module
|
||||
class TestModule {
|
||||
|
||||
@@ -20,7 +20,6 @@ package org.isoron.uhabits.acceptance.steps
|
||||
|
||||
import android.os.Build
|
||||
import android.os.Build.VERSION.SDK_INT
|
||||
import android.os.Build.VERSION_CODES
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.test.espresso.Espresso
|
||||
@@ -33,11 +32,11 @@ import androidx.test.espresso.matcher.ViewMatchers
|
||||
import androidx.test.uiautomator.By
|
||||
import androidx.test.uiautomator.UiSelector
|
||||
import androidx.test.uiautomator.Until
|
||||
import junit.framework.Assert.assertTrue
|
||||
import org.hamcrest.CoreMatchers
|
||||
import org.isoron.uhabits.BaseUserInterfaceTest
|
||||
import org.isoron.uhabits.R
|
||||
import org.isoron.uhabits.activities.habits.list.ListHabitsActivity
|
||||
import org.junit.Assert.assertTrue
|
||||
|
||||
object CommonSteps : BaseUserInterfaceTest() {
|
||||
fun pressBack() {
|
||||
@@ -148,15 +147,19 @@ object CommonSteps : BaseUserInterfaceTest() {
|
||||
Screen.LIST_HABITS ->
|
||||
Espresso.onView(ViewMatchers.withClassName(CoreMatchers.endsWith("ListHabitsRootView")))
|
||||
.check(ViewAssertions.matches(ViewMatchers.isDisplayed()))
|
||||
|
||||
Screen.SHOW_HABIT ->
|
||||
Espresso.onView(ViewMatchers.withId(R.id.subtitleCard))
|
||||
.check(ViewAssertions.matches(ViewMatchers.isDisplayed()))
|
||||
|
||||
Screen.EDIT_HABIT ->
|
||||
Espresso.onView(ViewMatchers.withId(R.id.questionInput))
|
||||
.check(ViewAssertions.matches(ViewMatchers.isDisplayed()))
|
||||
|
||||
Screen.SELECT_HABIT_TYPE ->
|
||||
Espresso.onView(ViewMatchers.withText(R.string.yes_or_no_example))
|
||||
.check(ViewAssertions.matches(ViewMatchers.isDisplayed()))
|
||||
|
||||
else -> throw IllegalStateException()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,9 +21,9 @@ package org.isoron.uhabits.acceptance.steps
|
||||
import android.os.Build.VERSION.SDK_INT
|
||||
import androidx.test.uiautomator.UiScrollable
|
||||
import androidx.test.uiautomator.UiSelector
|
||||
import junit.framework.Assert.assertFalse
|
||||
import junit.framework.Assert.assertTrue
|
||||
import org.isoron.uhabits.BaseUserInterfaceTest
|
||||
import org.junit.Assert.assertFalse
|
||||
import org.junit.Assert.assertTrue
|
||||
|
||||
object WidgetSteps {
|
||||
@Throws(Exception::class)
|
||||
|
||||
@@ -20,15 +20,15 @@ package org.isoron.uhabits.activities.habits.list.views
|
||||
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import androidx.test.filters.MediumTest
|
||||
import com.nhaarman.mockitokotlin2.doReturn
|
||||
import com.nhaarman.mockitokotlin2.mock
|
||||
import com.nhaarman.mockitokotlin2.verify
|
||||
import com.nhaarman.mockitokotlin2.verifyNoMoreInteractions
|
||||
import com.nhaarman.mockitokotlin2.whenever
|
||||
import org.isoron.uhabits.BaseViewTest
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.mockito.kotlin.doReturn
|
||||
import org.mockito.kotlin.mock
|
||||
import org.mockito.kotlin.verify
|
||||
import org.mockito.kotlin.verifyNoMoreInteractions
|
||||
import org.mockito.kotlin.whenever
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
@MediumTest
|
||||
|
||||
@@ -20,9 +20,6 @@ package org.isoron.uhabits.activities.habits.list.views
|
||||
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import androidx.test.filters.MediumTest
|
||||
import com.nhaarman.mockitokotlin2.doReturn
|
||||
import com.nhaarman.mockitokotlin2.mock
|
||||
import com.nhaarman.mockitokotlin2.whenever
|
||||
import org.hamcrest.CoreMatchers.equalTo
|
||||
import org.hamcrest.MatcherAssert.assertThat
|
||||
import org.isoron.uhabits.BaseViewTest
|
||||
@@ -30,6 +27,9 @@ import org.isoron.uhabits.core.ui.screens.habits.list.HintList
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.mockito.kotlin.doReturn
|
||||
import org.mockito.kotlin.mock
|
||||
import org.mockito.kotlin.whenever
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
@MediumTest
|
||||
|
||||
@@ -22,7 +22,6 @@ import java.util.Locale;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
@@ -23,14 +23,13 @@ import android.graphics.Paint.*;
|
||||
import android.os.*;
|
||||
import androidx.core.view.*;
|
||||
import androidx.core.view.accessibility.*;
|
||||
import androidx.core.widget.*;
|
||||
|
||||
import android.text.format.*;
|
||||
import android.view.*;
|
||||
import android.view.accessibility.*;
|
||||
|
||||
import androidx.customview.widget.ExploreByTouchHelper;
|
||||
|
||||
import com.android.*;
|
||||
import com.android.datetimepicker.*;
|
||||
import com.android.datetimepicker.date.MonthAdapter.*;
|
||||
|
||||
|
||||
@@ -23,7 +23,6 @@ import android.graphics.Paint.*;
|
||||
import android.util.*;
|
||||
import android.view.*;
|
||||
|
||||
import com.android.*;
|
||||
import com.android.datetimepicker.*;
|
||||
|
||||
import org.isoron.uhabits.R;
|
||||
|
||||
@@ -28,7 +28,6 @@ import android.view.View.*;
|
||||
import android.view.accessibility.*;
|
||||
import android.widget.*;
|
||||
|
||||
import com.android.*;
|
||||
import com.android.datetimepicker.*;
|
||||
|
||||
import org.isoron.uhabits.R;
|
||||
|
||||
@@ -22,97 +22,101 @@ package org.isoron.uhabits.activities.common.dialogs
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.widget.EditText
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.RadioButton
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.app.AppCompatDialogFragment
|
||||
import kotlinx.android.synthetic.main.frequency_picker_dialog.view.*
|
||||
import org.isoron.uhabits.R
|
||||
import org.isoron.uhabits.databinding.FrequencyPickerDialogBinding
|
||||
|
||||
class FrequencyPickerDialog(
|
||||
var freqNumerator: Int,
|
||||
var freqDenominator: Int
|
||||
) : AppCompatDialogFragment() {
|
||||
private var _binding: FrequencyPickerDialogBinding? = null
|
||||
private val binding get() = _binding!!
|
||||
|
||||
lateinit var contentView: View
|
||||
var onFrequencyPicked: (num: Int, den: Int) -> Unit = { _, _ -> }
|
||||
|
||||
constructor() : this(1, 1)
|
||||
|
||||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
_binding = null
|
||||
}
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
val inflater = LayoutInflater.from(requireActivity())
|
||||
contentView = inflater.inflate(R.layout.frequency_picker_dialog, null)
|
||||
_binding = FrequencyPickerDialogBinding.inflate(LayoutInflater.from(requireActivity()))
|
||||
|
||||
addBeforeAfterText(
|
||||
this.getString(R.string.every_x_days),
|
||||
contentView.everyXDaysContainer
|
||||
binding.everyXDaysContainer
|
||||
)
|
||||
|
||||
addBeforeAfterText(
|
||||
this.getString(R.string.x_times_per_week),
|
||||
contentView.xTimesPerWeekContainer
|
||||
binding.xTimesPerWeekContainer
|
||||
)
|
||||
|
||||
addBeforeAfterText(
|
||||
this.getString(R.string.x_times_per_month),
|
||||
contentView.xTimesPerMonthContainer
|
||||
binding.xTimesPerMonthContainer
|
||||
)
|
||||
|
||||
addBeforeAfterText(
|
||||
this.getString(R.string.x_times_per_y_days),
|
||||
contentView.xTimesPerYDaysContainer
|
||||
binding.xTimesPerYDaysContainer
|
||||
)
|
||||
|
||||
contentView.everyDayRadioButton.setOnClickListener {
|
||||
check(contentView.everyDayRadioButton)
|
||||
binding.everyDayRadioButton.setOnClickListener {
|
||||
check(binding.everyDayRadioButton)
|
||||
}
|
||||
|
||||
contentView.everyXDaysRadioButton.setOnClickListener {
|
||||
check(contentView.everyXDaysRadioButton)
|
||||
val everyXDaysTextView = contentView.everyXDaysTextView
|
||||
binding.everyXDaysRadioButton.setOnClickListener {
|
||||
check(binding.everyXDaysRadioButton)
|
||||
val everyXDaysTextView = binding.everyXDaysTextView
|
||||
selectInputField(everyXDaysTextView)
|
||||
}
|
||||
|
||||
contentView.everyXDaysTextView.setOnFocusChangeListener { v, hasFocus ->
|
||||
if (hasFocus) check(contentView.everyXDaysRadioButton)
|
||||
binding.everyXDaysTextView.setOnFocusChangeListener { v, hasFocus ->
|
||||
if (hasFocus) check(binding.everyXDaysRadioButton)
|
||||
}
|
||||
|
||||
contentView.xTimesPerWeekRadioButton.setOnClickListener {
|
||||
check(contentView.xTimesPerWeekRadioButton)
|
||||
selectInputField(contentView.xTimesPerWeekTextView)
|
||||
binding.xTimesPerWeekRadioButton.setOnClickListener {
|
||||
check(binding.xTimesPerWeekRadioButton)
|
||||
selectInputField(binding.xTimesPerWeekTextView)
|
||||
}
|
||||
|
||||
contentView.xTimesPerWeekTextView.setOnFocusChangeListener { v, hasFocus ->
|
||||
if (hasFocus) check(contentView.xTimesPerWeekRadioButton)
|
||||
binding.xTimesPerWeekTextView.setOnFocusChangeListener { v, hasFocus ->
|
||||
if (hasFocus) check(binding.xTimesPerWeekRadioButton)
|
||||
}
|
||||
|
||||
contentView.xTimesPerMonthRadioButton.setOnClickListener {
|
||||
check(contentView.xTimesPerMonthRadioButton)
|
||||
selectInputField(contentView.xTimesPerMonthTextView)
|
||||
binding.xTimesPerMonthRadioButton.setOnClickListener {
|
||||
check(binding.xTimesPerMonthRadioButton)
|
||||
selectInputField(binding.xTimesPerMonthTextView)
|
||||
}
|
||||
|
||||
contentView.xTimesPerMonthTextView.setOnFocusChangeListener { v, hasFocus ->
|
||||
if (hasFocus) check(contentView.xTimesPerMonthRadioButton)
|
||||
binding.xTimesPerMonthTextView.setOnFocusChangeListener { v, hasFocus ->
|
||||
if (hasFocus) check(binding.xTimesPerMonthRadioButton)
|
||||
}
|
||||
|
||||
contentView.xTimesPerYDaysRadioButton.setOnClickListener {
|
||||
check(contentView.xTimesPerYDaysRadioButton)
|
||||
selectInputField(contentView.xTimesPerYDaysXTextView)
|
||||
binding.xTimesPerYDaysRadioButton.setOnClickListener {
|
||||
check(binding.xTimesPerYDaysRadioButton)
|
||||
selectInputField(binding.xTimesPerYDaysXTextView)
|
||||
}
|
||||
|
||||
contentView.xTimesPerYDaysXTextView.setOnFocusChangeListener { v, hasFocus ->
|
||||
if (hasFocus) check(contentView.xTimesPerYDaysRadioButton)
|
||||
binding.xTimesPerYDaysXTextView.setOnFocusChangeListener { v, hasFocus ->
|
||||
if (hasFocus) check(binding.xTimesPerYDaysRadioButton)
|
||||
}
|
||||
|
||||
contentView.xTimesPerYDaysYTextView.setOnFocusChangeListener { v, hasFocus ->
|
||||
if (hasFocus) check(contentView.xTimesPerYDaysRadioButton)
|
||||
binding.xTimesPerYDaysYTextView.setOnFocusChangeListener { v, hasFocus ->
|
||||
if (hasFocus) check(binding.xTimesPerYDaysRadioButton)
|
||||
}
|
||||
|
||||
return AlertDialog.Builder(requireActivity())
|
||||
.setView(contentView)
|
||||
.setView(binding.root)
|
||||
.setPositiveButton(R.string.save) { _, _ -> onSaveClicked() }
|
||||
.create()
|
||||
}
|
||||
@@ -134,31 +138,35 @@ class FrequencyPickerDialog(
|
||||
var numerator = 1
|
||||
var denominator = 1
|
||||
when {
|
||||
contentView.everyDayRadioButton.isChecked -> {
|
||||
binding.everyDayRadioButton.isChecked -> {
|
||||
// NOP
|
||||
}
|
||||
contentView.everyXDaysRadioButton.isChecked -> {
|
||||
if (contentView.everyXDaysTextView.text.isNotEmpty()) {
|
||||
denominator = Integer.parseInt(contentView.everyXDaysTextView.text.toString())
|
||||
|
||||
binding.everyXDaysRadioButton.isChecked -> {
|
||||
if (binding.everyXDaysTextView.text.isNotEmpty()) {
|
||||
denominator = Integer.parseInt(binding.everyXDaysTextView.text.toString())
|
||||
}
|
||||
}
|
||||
contentView.xTimesPerWeekRadioButton.isChecked -> {
|
||||
if (contentView.xTimesPerWeekTextView.text.isNotEmpty()) {
|
||||
numerator = Integer.parseInt(contentView.xTimesPerWeekTextView.text.toString())
|
||||
|
||||
binding.xTimesPerWeekRadioButton.isChecked -> {
|
||||
if (binding.xTimesPerWeekTextView.text.isNotEmpty()) {
|
||||
numerator = Integer.parseInt(binding.xTimesPerWeekTextView.text.toString())
|
||||
denominator = 7
|
||||
}
|
||||
}
|
||||
contentView.xTimesPerYDaysRadioButton.isChecked -> {
|
||||
if (contentView.xTimesPerYDaysXTextView.text.isNotEmpty() && contentView.xTimesPerYDaysYTextView.text.isNotEmpty()) {
|
||||
|
||||
binding.xTimesPerYDaysRadioButton.isChecked -> {
|
||||
if (binding.xTimesPerYDaysXTextView.text.isNotEmpty() && binding.xTimesPerYDaysYTextView.text.isNotEmpty()) {
|
||||
numerator =
|
||||
Integer.parseInt(contentView.xTimesPerYDaysXTextView.text.toString())
|
||||
Integer.parseInt(binding.xTimesPerYDaysXTextView.text.toString())
|
||||
denominator =
|
||||
Integer.parseInt(contentView.xTimesPerYDaysYTextView.text.toString())
|
||||
Integer.parseInt(binding.xTimesPerYDaysYTextView.text.toString())
|
||||
}
|
||||
}
|
||||
|
||||
else -> {
|
||||
if (contentView.xTimesPerMonthTextView.text.isNotEmpty()) {
|
||||
numerator = Integer.parseInt(contentView.xTimesPerMonthTextView.text.toString())
|
||||
if (binding.xTimesPerMonthTextView.text.isNotEmpty()) {
|
||||
numerator = Integer.parseInt(binding.xTimesPerMonthTextView.text.toString())
|
||||
denominator = 30
|
||||
}
|
||||
}
|
||||
@@ -185,27 +193,27 @@ class FrequencyPickerDialog(
|
||||
private fun populateViews() {
|
||||
uncheckAll()
|
||||
if (freqDenominator == 30 || freqDenominator == 31) {
|
||||
contentView.xTimesPerMonthRadioButton.isChecked = true
|
||||
contentView.xTimesPerMonthTextView.setText(freqNumerator.toString())
|
||||
selectInputField(contentView.xTimesPerMonthTextView)
|
||||
binding.xTimesPerMonthRadioButton.isChecked = true
|
||||
binding.xTimesPerMonthTextView.setText(freqNumerator.toString())
|
||||
selectInputField(binding.xTimesPerMonthTextView)
|
||||
} else {
|
||||
if (freqNumerator == 1) {
|
||||
if (freqDenominator == 1) {
|
||||
contentView.everyDayRadioButton.isChecked = true
|
||||
binding.everyDayRadioButton.isChecked = true
|
||||
} else {
|
||||
contentView.everyXDaysRadioButton.isChecked = true
|
||||
contentView.everyXDaysTextView.setText(freqDenominator.toString())
|
||||
selectInputField(contentView.everyXDaysTextView)
|
||||
binding.everyXDaysRadioButton.isChecked = true
|
||||
binding.everyXDaysTextView.setText(freqDenominator.toString())
|
||||
selectInputField(binding.everyXDaysTextView)
|
||||
}
|
||||
} else {
|
||||
if (freqDenominator == 7) {
|
||||
contentView.xTimesPerWeekRadioButton.isChecked = true
|
||||
contentView.xTimesPerWeekTextView.setText(freqNumerator.toString())
|
||||
selectInputField(contentView.xTimesPerWeekTextView)
|
||||
binding.xTimesPerWeekRadioButton.isChecked = true
|
||||
binding.xTimesPerWeekTextView.setText(freqNumerator.toString())
|
||||
selectInputField(binding.xTimesPerWeekTextView)
|
||||
} else {
|
||||
contentView.xTimesPerYDaysRadioButton.isChecked = true
|
||||
contentView.xTimesPerYDaysXTextView.setText(freqNumerator.toString())
|
||||
contentView.xTimesPerYDaysYTextView.setText(freqDenominator.toString())
|
||||
binding.xTimesPerYDaysRadioButton.isChecked = true
|
||||
binding.xTimesPerYDaysXTextView.setText(freqNumerator.toString())
|
||||
binding.xTimesPerYDaysYTextView.setText(freqDenominator.toString())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -216,10 +224,10 @@ class FrequencyPickerDialog(
|
||||
}
|
||||
|
||||
private fun uncheckAll() {
|
||||
contentView.everyDayRadioButton.isChecked = false
|
||||
contentView.everyXDaysRadioButton.isChecked = false
|
||||
contentView.xTimesPerWeekRadioButton.isChecked = false
|
||||
contentView.xTimesPerMonthRadioButton.isChecked = false
|
||||
contentView.xTimesPerYDaysRadioButton.isChecked = false
|
||||
binding.everyDayRadioButton.isChecked = false
|
||||
binding.everyXDaysRadioButton.isChecked = false
|
||||
binding.xTimesPerWeekRadioButton.isChecked = false
|
||||
binding.xTimesPerMonthRadioButton.isChecked = false
|
||||
binding.xTimesPerYDaysRadioButton.isChecked = false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,11 +35,6 @@ import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import com.android.datetimepicker.time.RadialPickerLayout
|
||||
import com.android.datetimepicker.time.TimePickerDialog
|
||||
import kotlinx.android.synthetic.main.activity_edit_habit.nameInput
|
||||
import kotlinx.android.synthetic.main.activity_edit_habit.notesInput
|
||||
import kotlinx.android.synthetic.main.activity_edit_habit.questionInput
|
||||
import kotlinx.android.synthetic.main.activity_edit_habit.targetInput
|
||||
import kotlinx.android.synthetic.main.activity_edit_habit.unitInput
|
||||
import org.isoron.platform.gui.toInt
|
||||
import org.isoron.uhabits.HabitsApplication
|
||||
import org.isoron.uhabits.R
|
||||
@@ -271,9 +266,9 @@ class EditHabitActivity : AppCompatActivity() {
|
||||
habit.copyFrom(original)
|
||||
}
|
||||
|
||||
habit.name = nameInput.text.trim().toString()
|
||||
habit.question = questionInput.text.trim().toString()
|
||||
habit.description = notesInput.text.trim().toString()
|
||||
habit.name = binding.nameInput.text.trim().toString()
|
||||
habit.question = binding.questionInput.text.trim().toString()
|
||||
habit.description = binding.notesInput.text.trim().toString()
|
||||
habit.color = color
|
||||
if (reminderHour >= 0) {
|
||||
habit.reminder = Reminder(reminderHour, reminderMin, reminderDays)
|
||||
@@ -283,9 +278,9 @@ class EditHabitActivity : AppCompatActivity() {
|
||||
|
||||
habit.frequency = Frequency(freqNum, freqDen)
|
||||
if (habitType == HabitType.NUMERICAL) {
|
||||
habit.targetValue = targetInput.text.toString().toDouble()
|
||||
habit.targetValue = binding.targetInput.text.toString().toDouble()
|
||||
habit.targetType = targetType
|
||||
habit.unit = unitInput.text.trim().toString()
|
||||
habit.unit = binding.unitInput.text.trim().toString()
|
||||
}
|
||||
habit.type = habitType
|
||||
|
||||
@@ -308,13 +303,13 @@ class EditHabitActivity : AppCompatActivity() {
|
||||
|
||||
private fun validate(): Boolean {
|
||||
var isValid = true
|
||||
if (nameInput.text.isEmpty()) {
|
||||
nameInput.error = getFormattedValidationError(R.string.validation_cannot_be_blank)
|
||||
if (binding.nameInput.text.isEmpty()) {
|
||||
binding.nameInput.error = getFormattedValidationError(R.string.validation_cannot_be_blank)
|
||||
isValid = false
|
||||
}
|
||||
if (habitType == HabitType.NUMERICAL) {
|
||||
if (targetInput.text.isEmpty()) {
|
||||
targetInput.error = getString(R.string.validation_cannot_be_blank)
|
||||
if (binding.targetInput.text.isEmpty()) {
|
||||
binding.targetInput.error = getString(R.string.validation_cannot_be_blank)
|
||||
isValid = false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -127,6 +127,7 @@ class ListHabitsActivity : AppCompatActivity(), Preferences.Listener {
|
||||
return menu.onItemSelected(item)
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onActivityResult(request: Int, result: Int, data: Intent?) {
|
||||
super.onActivityResult(request, result, data)
|
||||
screen.onResult(request, result, data)
|
||||
|
||||
@@ -38,7 +38,7 @@ class BarCardView(context: Context, attrs: AttributeSet) : LinearLayout(context,
|
||||
|
||||
fun setState(state: BarCardState) {
|
||||
val androidColor = state.theme.color(state.color).toInt()
|
||||
binding.chart.view = BarChart(state.theme, JavaLocalDateFormatter(Locale.US)).apply {
|
||||
binding.chart.view = BarChart(state.theme, JavaLocalDateFormatter(Locale.getDefault())).apply {
|
||||
series = mutableListOf(state.entries.map { it.value / 1000.0 })
|
||||
colors = mutableListOf(theme.color(state.color.paletteIndex))
|
||||
axis = state.entries.map { it.timestamp.toLocalDate() }
|
||||
|
||||
@@ -53,6 +53,8 @@ class SettingsFragment : PreferenceFragmentCompat(), OnSharedPreferenceChangeLis
|
||||
private var ringtoneManager: RingtoneManager? = null
|
||||
private lateinit var prefs: Preferences
|
||||
private var widgetUpdater: WidgetUpdater? = null
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
if (requestCode == RINGTONE_REQUEST_CODE) {
|
||||
ringtoneManager!!.update(data)
|
||||
|
||||
@@ -60,12 +60,14 @@ class AndroidTaskRunner : TaskRunner {
|
||||
publishProgress(progress)
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun doInBackground(vararg params: Void?): Void? {
|
||||
if (isCancelled) return null
|
||||
task.doInBackground()
|
||||
return null
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onPostExecute(aVoid: Void?) {
|
||||
if (isCancelled) return
|
||||
task.onPostExecute()
|
||||
@@ -74,6 +76,7 @@ class AndroidTaskRunner : TaskRunner {
|
||||
for (l in listeners) l.onTaskFinished(task)
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onPreExecute() {
|
||||
if (isCancelled) return
|
||||
for (l in listeners) l.onTaskStarted(task)
|
||||
@@ -82,6 +85,7 @@ class AndroidTaskRunner : TaskRunner {
|
||||
task.onPreExecute()
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onProgressUpdate(vararg values: Int?) {
|
||||
values[0]?.let { task.onProgressUpdate(it) }
|
||||
}
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
*/
|
||||
package org.isoron.uhabits
|
||||
|
||||
import com.nhaarman.mockitokotlin2.spy
|
||||
import org.isoron.uhabits.core.commands.CommandRunner
|
||||
import org.isoron.uhabits.core.models.HabitList
|
||||
import org.isoron.uhabits.core.models.memory.MemoryModelFactory
|
||||
@@ -31,6 +30,7 @@ import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.mockito.junit.MockitoJUnitRunner
|
||||
import org.mockito.kotlin.spy
|
||||
|
||||
@RunWith(MockitoJUnitRunner::class)
|
||||
open class BaseAndroidJVMTest {
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
*/
|
||||
package org.isoron.uhabits.receivers
|
||||
|
||||
import com.nhaarman.mockitokotlin2.mock
|
||||
import com.nhaarman.mockitokotlin2.verify
|
||||
import com.nhaarman.mockitokotlin2.verifyNoMoreInteractions
|
||||
import org.isoron.uhabits.BaseAndroidJVMTest
|
||||
import org.isoron.uhabits.core.models.Habit
|
||||
import org.isoron.uhabits.core.models.Timestamp
|
||||
@@ -28,6 +25,9 @@ import org.isoron.uhabits.core.preferences.Preferences
|
||||
import org.isoron.uhabits.core.reminders.ReminderScheduler
|
||||
import org.isoron.uhabits.core.ui.NotificationTray
|
||||
import org.junit.Test
|
||||
import org.mockito.kotlin.mock
|
||||
import org.mockito.kotlin.verify
|
||||
import org.mockito.kotlin.verifyNoMoreInteractions
|
||||
|
||||
class ReminderControllerTest : BaseAndroidJVMTest() {
|
||||
private lateinit var controller: ReminderController
|
||||
|
||||
@@ -24,6 +24,7 @@ plugins {
|
||||
|
||||
kotlin {
|
||||
jvm().withJava()
|
||||
jvmToolchain(11)
|
||||
|
||||
sourceSets {
|
||||
val commonMain by getting {
|
||||
@@ -43,14 +44,14 @@ kotlin {
|
||||
val jvmMain by getting {
|
||||
dependencies {
|
||||
implementation(kotlin("stdlib-jdk8"))
|
||||
compileOnly("com.google.dagger:dagger:2.46")
|
||||
implementation("com.google.guava:guava:31.1-android")
|
||||
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4")
|
||||
implementation("androidx.annotation:annotation:1.5.0")
|
||||
compileOnly("com.google.dagger:dagger:2.48")
|
||||
implementation("com.google.guava:guava:32.1.2-android")
|
||||
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3")
|
||||
implementation("androidx.annotation:annotation:1.6.0")
|
||||
implementation("com.google.code.findbugs:jsr305:3.0.2")
|
||||
implementation("com.opencsv:opencsv:5.7.1")
|
||||
implementation("commons-codec:commons-codec:1.15")
|
||||
implementation("org.apache.commons:commons-lang3:3.12.0")
|
||||
implementation("com.opencsv:opencsv:5.8")
|
||||
implementation("commons-codec:commons-codec:1.16.0")
|
||||
implementation("org.apache.commons:commons-lang3:3.13.0")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,10 +59,11 @@ kotlin {
|
||||
dependencies {
|
||||
implementation(kotlin("test"))
|
||||
implementation(kotlin("test-junit"))
|
||||
implementation("org.xerial:sqlite-jdbc:3.40.0.0")
|
||||
implementation("org.xerial:sqlite-jdbc:3.42.0.0")
|
||||
implementation("org.hamcrest:hamcrest:2.2")
|
||||
implementation("org.apache.commons:commons-io:1.3.2")
|
||||
implementation("com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0")
|
||||
implementation("org.mockito.kotlin:mockito-kotlin:5.0.0")
|
||||
implementation("org.junit.jupiter:junit-jupiter:5.10.0")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,8 +82,8 @@ class JavaUserFile(val path: Path) : UserFile {
|
||||
@Suppress("NewApi")
|
||||
class JavaFileOpener : FileOpener {
|
||||
override fun openUserFile(path: String): UserFile {
|
||||
val path = Paths.get("/tmp/$path")
|
||||
return JavaUserFile(path)
|
||||
val resolvedPath = Paths.get("/tmp/$path")
|
||||
return JavaUserFile(resolvedPath)
|
||||
}
|
||||
|
||||
override fun openResourceFile(path: String): ResourceFile {
|
||||
|
||||
@@ -45,14 +45,14 @@ internal class Tokenizer(
|
||||
if (s == null || s.isEmpty()) {
|
||||
return false
|
||||
}
|
||||
if (s[0].toInt() != mCurrent) {
|
||||
if (s[0].code != mCurrent) {
|
||||
return false
|
||||
}
|
||||
val len = s.length
|
||||
mStream.mark(len - 1)
|
||||
for (n in 1 until len) {
|
||||
val value = mStream.read()
|
||||
if (value != s[n].toInt()) {
|
||||
if (value != s[n].code) {
|
||||
mStream.reset()
|
||||
return false
|
||||
}
|
||||
@@ -68,10 +68,9 @@ object SQLParser {
|
||||
private const val STATE_COMMENT_BLOCK = 3
|
||||
|
||||
fun parse(stream: InputStream): List<String> {
|
||||
val buffer = BufferedInputStream(stream)
|
||||
val commands: MutableList<String> = ArrayList()
|
||||
val sb = StringBuffer()
|
||||
buffer.use { buffer ->
|
||||
BufferedInputStream(stream).use { buffer ->
|
||||
val tokenizer = Tokenizer(buffer)
|
||||
var state = STATE_NONE
|
||||
while (tokenizer.hasNext()) {
|
||||
|
||||
@@ -25,5 +25,5 @@ fun interface Task {
|
||||
fun onAttached(runner: TaskRunner) {}
|
||||
fun onPostExecute() {}
|
||||
fun onPreExecute() {}
|
||||
fun onProgressUpdate(value: Int) {}
|
||||
fun onProgressUpdate(currentPosition: Int) {}
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ class HabitListHeader(
|
||||
|
||||
repeat(nButtons) { index ->
|
||||
val date = today.minus(nButtons - index - 1)
|
||||
val name = fmt.shortWeekdayName(date).toUpperCase()
|
||||
val name = fmt.shortWeekdayName(date).uppercase()
|
||||
val number = date.day.toString()
|
||||
|
||||
val x = width - (index + 1) * buttonSize + buttonSize / 2
|
||||
|
||||
@@ -19,9 +19,9 @@
|
||||
|
||||
package org.isoron.platform.gui
|
||||
|
||||
import junit.framework.Assert.fail
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.isoron.platform.io.JavaFileOpener
|
||||
import org.junit.Assert.fail
|
||||
import org.junit.Test
|
||||
import java.awt.image.BufferedImage
|
||||
import java.awt.image.BufferedImage.TYPE_INT_ARGB
|
||||
|
||||
@@ -18,8 +18,6 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core
|
||||
|
||||
import com.nhaarman.mockitokotlin2.spy
|
||||
import com.nhaarman.mockitokotlin2.validateMockitoUsage
|
||||
import org.apache.commons.io.IOUtils
|
||||
import org.isoron.uhabits.core.commands.CommandRunner
|
||||
import org.isoron.uhabits.core.database.Database
|
||||
@@ -40,6 +38,8 @@ import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.mockito.junit.MockitoJUnitRunner
|
||||
import org.mockito.kotlin.spy
|
||||
import org.mockito.kotlin.validateMockitoUsage
|
||||
import java.io.File
|
||||
import java.io.FileInputStream
|
||||
import java.io.FileOutputStream
|
||||
|
||||
@@ -18,12 +18,12 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.commands
|
||||
|
||||
import junit.framework.Assert.assertFalse
|
||||
import junit.framework.Assert.assertTrue
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
import org.isoron.uhabits.core.models.Habit
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import kotlin.test.assertFalse
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class ArchiveHabitsCommandTest : BaseUnitTest() {
|
||||
private lateinit var command: ArchiveHabitsCommand
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.commands
|
||||
|
||||
import junit.framework.Assert.assertTrue
|
||||
import org.hamcrest.CoreMatchers.equalTo
|
||||
import org.hamcrest.MatcherAssert.assertThat
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
@@ -27,6 +26,7 @@ import org.isoron.uhabits.core.models.Reminder
|
||||
import org.isoron.uhabits.core.models.WeekdayList
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class CreateHabitCommandTest : BaseUnitTest() {
|
||||
private lateinit var command: CreateHabitCommand
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.commands
|
||||
|
||||
import junit.framework.Assert.assertEquals
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
import org.isoron.uhabits.core.models.Entry
|
||||
import org.isoron.uhabits.core.models.Habit
|
||||
@@ -26,6 +25,7 @@ import org.isoron.uhabits.core.models.Timestamp
|
||||
import org.isoron.uhabits.core.utils.DateUtils.Companion.getToday
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
class CreateRepetitionCommandTest : BaseUnitTest() {
|
||||
private lateinit var command: CreateRepetitionCommand
|
||||
|
||||
@@ -23,18 +23,13 @@ import org.hamcrest.MatcherAssert.assertThat
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
import org.isoron.uhabits.core.models.Habit
|
||||
import org.junit.Before
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.rules.ExpectedException
|
||||
import java.util.LinkedList
|
||||
import java.util.*
|
||||
|
||||
class DeleteHabitsCommandTest : BaseUnitTest() {
|
||||
private lateinit var command: DeleteHabitsCommand
|
||||
private lateinit var selected: LinkedList<Habit>
|
||||
|
||||
@get:Rule
|
||||
var thrown = ExpectedException.none()!!
|
||||
|
||||
@Before
|
||||
@Throws(Exception::class)
|
||||
override fun setUp() {
|
||||
|
||||
@@ -18,12 +18,12 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.commands
|
||||
|
||||
import junit.framework.Assert.assertFalse
|
||||
import junit.framework.Assert.assertTrue
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
import org.isoron.uhabits.core.models.Habit
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import kotlin.test.assertFalse
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class UnarchiveHabitsCommandTest : BaseUnitTest() {
|
||||
private lateinit var command: UnarchiveHabitsCommand
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.database
|
||||
|
||||
import junit.framework.Assert.assertNull
|
||||
import org.apache.commons.lang3.builder.EqualsBuilder
|
||||
import org.apache.commons.lang3.builder.HashCodeBuilder
|
||||
import org.apache.commons.lang3.builder.ToStringBuilder
|
||||
@@ -27,6 +26,7 @@ import org.hamcrest.core.IsEqual.equalTo
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import kotlin.test.assertNull
|
||||
|
||||
class RepositoryTest : BaseUnitTest() {
|
||||
private lateinit var repository: Repository<ThingRecord>
|
||||
|
||||
@@ -27,13 +27,10 @@ import org.isoron.uhabits.core.database.Database
|
||||
import org.isoron.uhabits.core.database.MigrationHelper
|
||||
import org.isoron.uhabits.core.models.sqlite.SQLModelFactory
|
||||
import org.isoron.uhabits.core.test.HabitFixtures
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.rules.ExpectedException
|
||||
import org.junit.jupiter.api.Assertions.assertThrows
|
||||
|
||||
class Version22Test : BaseUnitTest() {
|
||||
@get:Rule
|
||||
var exception = ExpectedException.none()!!
|
||||
private lateinit var db: Database
|
||||
private lateinit var helper: MigrationHelper
|
||||
|
||||
@@ -76,8 +73,8 @@ class Version22Test : BaseUnitTest() {
|
||||
@Throws(Exception::class)
|
||||
fun testDisallowNewRepsWithInvalidRef() {
|
||||
helper.migrateTo(22)
|
||||
exception.expectMessage(Matchers.containsString("SQLITE_CONSTRAINT"))
|
||||
db.execute("insert into Repetitions(habit, timestamp, value) values (99999, 100, 2)")
|
||||
val exception = assertThrows(java.lang.RuntimeException::class.java) { db.execute("insert into Repetitions(habit, timestamp, value) values (99999, 100, 2)") }
|
||||
assertThat(exception.message, Matchers.containsString("SQLITE_CONSTRAINT"))
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -97,8 +94,12 @@ class Version22Test : BaseUnitTest() {
|
||||
@Throws(Exception::class)
|
||||
fun testDisallowNullTimestamp() {
|
||||
helper.migrateTo(22)
|
||||
exception.expectMessage(Matchers.containsString("SQLITE_CONSTRAINT"))
|
||||
db.execute("insert into Repetitions(habit, value) " + "values (0, 2)")
|
||||
|
||||
val exception = assertThrows(java.lang.RuntimeException::class.java) {
|
||||
db.execute("insert into Repetitions(habit, value) " + "values (0, 2)")
|
||||
}
|
||||
|
||||
assertThat(exception.message, Matchers.containsString("SQLITE_CONSTRAINT"))
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -118,8 +119,12 @@ class Version22Test : BaseUnitTest() {
|
||||
@Throws(Exception::class)
|
||||
fun testDisallowNullHabit() {
|
||||
helper.migrateTo(22)
|
||||
exception.expectMessage(Matchers.containsString("SQLITE_CONSTRAINT"))
|
||||
db.execute("insert into Repetitions(timestamp, value) " + "values (5, 2)")
|
||||
|
||||
val exception = assertThrows(java.lang.RuntimeException::class.java) {
|
||||
db.execute("insert into Repetitions(timestamp, value) " + "values (5, 2)")
|
||||
}
|
||||
|
||||
assertThat(exception.message, Matchers.containsString("SQLITE_CONSTRAINT"))
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -142,7 +147,11 @@ class Version22Test : BaseUnitTest() {
|
||||
fun testDisallowNewDuplicateTimestamps() {
|
||||
helper.migrateTo(22)
|
||||
db.execute("insert into repetitions(habit, timestamp, value)values (0, 100, 2)")
|
||||
exception.expectMessage(Matchers.containsString("SQLITE_CONSTRAINT"))
|
||||
db.execute("insert into repetitions(habit, timestamp, value)values (0, 100, 5)")
|
||||
|
||||
val exception = assertThrows(java.lang.RuntimeException::class.java) {
|
||||
db.execute("insert into repetitions(habit, timestamp, value)values (0, 100, 5)")
|
||||
}
|
||||
|
||||
assertThat(exception.message, Matchers.containsString("SQLITE_CONSTRAINT"))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.io
|
||||
|
||||
import junit.framework.Assert.assertTrue
|
||||
import org.apache.commons.io.FileUtils
|
||||
import org.apache.commons.io.IOUtils
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
@@ -29,8 +28,9 @@ import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
import java.io.IOException
|
||||
import java.nio.file.Files
|
||||
import java.util.LinkedList
|
||||
import java.util.*
|
||||
import java.util.zip.ZipFile
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class HabitsCSVExporterTest : BaseUnitTest() {
|
||||
private lateinit var baseDir: File
|
||||
@@ -102,9 +102,8 @@ class HabitsCSVExporterTest : BaseUnitTest() {
|
||||
private fun assertAbsolutePathExists(s: String) {
|
||||
val file = File(s)
|
||||
assertTrue(
|
||||
String.format("File %s should exist", file.absolutePath),
|
||||
file.exists()
|
||||
)
|
||||
String.format("File %s should exist", file.absolutePath)
|
||||
) { file.exists() }
|
||||
}
|
||||
|
||||
private fun assertFileAndReferenceAreEqual(s: String) {
|
||||
|
||||
@@ -18,8 +18,6 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.io
|
||||
|
||||
import junit.framework.Assert.assertFalse
|
||||
import junit.framework.Assert.assertTrue
|
||||
import org.hamcrest.MatcherAssert.assertThat
|
||||
import org.hamcrest.core.IsEqual.equalTo
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
@@ -34,6 +32,8 @@ import org.junit.Before
|
||||
import org.junit.Test
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
import kotlin.test.assertFalse
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class ImportTest : BaseUnitTest() {
|
||||
@Before
|
||||
|
||||
@@ -18,23 +18,19 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.models
|
||||
|
||||
import junit.framework.Assert.assertEquals
|
||||
import junit.framework.Assert.assertFalse
|
||||
import junit.framework.Assert.assertNull
|
||||
import org.hamcrest.CoreMatchers.equalTo
|
||||
import org.hamcrest.CoreMatchers.not
|
||||
import org.hamcrest.MatcherAssert.assertThat
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
import org.junit.Rule
|
||||
import org.junit.Assert.assertThrows
|
||||
import org.junit.Test
|
||||
import org.junit.rules.ExpectedException
|
||||
import java.io.IOException
|
||||
import java.io.StringWriter
|
||||
import java.util.ArrayList
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertFalse
|
||||
import kotlin.test.assertNull
|
||||
|
||||
class HabitListTest : BaseUnitTest() {
|
||||
@get:Rule
|
||||
var thrown = ExpectedException.none()!!
|
||||
private lateinit var habitsArray: ArrayList<Habit>
|
||||
private lateinit var activeHabits: HabitList
|
||||
private lateinit var reminderHabits: HabitList
|
||||
@@ -173,8 +169,9 @@ class HabitListTest : BaseUnitTest() {
|
||||
fun testReorder_withInvalidArguments() {
|
||||
val h1 = habitsArray[0]
|
||||
val h2 = fixtures.createEmptyHabit()
|
||||
thrown.expect(IllegalArgumentException::class.java)
|
||||
habitList.reorder(h1, h2)
|
||||
assertThrows(IllegalArgumentException::class.java) {
|
||||
habitList.reorder(h1, h2)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -235,15 +232,17 @@ class HabitListTest : BaseUnitTest() {
|
||||
@Test
|
||||
@Throws(Exception::class)
|
||||
fun testAdd_withFilteredList() {
|
||||
thrown.expect(IllegalStateException::class.java)
|
||||
activeHabits.add(fixtures.createEmptyHabit())
|
||||
assertThrows(IllegalStateException::class.java) {
|
||||
activeHabits.add(fixtures.createEmptyHabit())
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@Throws(Exception::class)
|
||||
fun testRemove_onFilteredList() {
|
||||
thrown.expect(IllegalStateException::class.java)
|
||||
activeHabits.remove(fixtures.createEmptyHabit())
|
||||
assertThrows(IllegalStateException::class.java) {
|
||||
activeHabits.remove(fixtures.createEmptyHabit())
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -251,8 +250,9 @@ class HabitListTest : BaseUnitTest() {
|
||||
fun testReorder_onFilteredList() {
|
||||
val h1 = fixtures.createEmptyHabit()
|
||||
val h2 = fixtures.createEmptyHabit()
|
||||
thrown.expect(IllegalStateException::class.java)
|
||||
activeHabits.reorder(h1, h2)
|
||||
assertThrows(IllegalStateException::class.java) {
|
||||
activeHabits.reorder(h1, h2)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -261,7 +261,8 @@ class HabitListTest : BaseUnitTest() {
|
||||
habitList.primaryOrder = HabitList.Order.BY_SCORE_DESC
|
||||
val h1 = habitsArray[1]
|
||||
val h2 = habitsArray[2]
|
||||
thrown.expect(IllegalStateException::class.java)
|
||||
habitList.reorder(h1, h2)
|
||||
assertThrows(IllegalStateException::class.java) {
|
||||
habitList.reorder(h1, h2)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,21 +18,18 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.models
|
||||
|
||||
import junit.framework.Assert.assertFalse
|
||||
import junit.framework.Assert.assertTrue
|
||||
import org.hamcrest.CoreMatchers.`is`
|
||||
import org.hamcrest.MatcherAssert.assertThat
|
||||
import org.hamcrest.core.IsEqual.equalTo
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
import org.isoron.uhabits.core.utils.DateUtils.Companion.getToday
|
||||
import org.junit.Assert.assertNotEquals
|
||||
import org.junit.Assert.assertThat
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.rules.ExpectedException
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertFalse
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class HabitTest : BaseUnitTest() {
|
||||
@get:Rule
|
||||
val exception = ExpectedException.none()!!
|
||||
|
||||
@Throws(Exception::class)
|
||||
override fun setUp() {
|
||||
@@ -55,7 +52,7 @@ class HabitTest : BaseUnitTest() {
|
||||
model.reminder = Reminder(8, 30, WeekdayList(1))
|
||||
val habit = modelFactory.buildHabit()
|
||||
habit.copyFrom(model)
|
||||
assertTrue(habit.isArchived == model.isArchived)
|
||||
assertEquals(habit.isArchived, model.isArchived)
|
||||
assertThat(habit.isArchived, `is`(model.isArchived))
|
||||
assertThat(habit.color, `is`(model.color))
|
||||
assertThat(habit.frequency, equalTo(model.frequency))
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.models
|
||||
|
||||
import junit.framework.Assert.assertTrue
|
||||
import org.hamcrest.MatcherAssert.assertThat
|
||||
import org.hamcrest.number.IsCloseTo
|
||||
import org.hamcrest.number.OrderingComparison
|
||||
@@ -28,6 +27,7 @@ import org.isoron.uhabits.core.utils.DateUtils.Companion.getToday
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import java.util.ArrayList
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
open class BaseScoreListTest : BaseUnitTest() {
|
||||
protected lateinit var habit: Habit
|
||||
|
||||
@@ -18,8 +18,6 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.models
|
||||
|
||||
import junit.framework.Assert.assertFalse
|
||||
import junit.framework.Assert.assertTrue
|
||||
import org.hamcrest.MatcherAssert.assertThat
|
||||
import org.hamcrest.Matchers.equalTo
|
||||
import org.hamcrest.Matchers.greaterThan
|
||||
@@ -27,6 +25,8 @@ import org.hamcrest.Matchers.lessThan
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
import org.isoron.uhabits.core.utils.DateUtils.Companion.getToday
|
||||
import org.junit.Test
|
||||
import kotlin.test.assertFalse
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class TimestampTest : BaseUnitTest() {
|
||||
@Test
|
||||
|
||||
@@ -18,12 +18,12 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.models
|
||||
|
||||
import junit.framework.Assert.assertFalse
|
||||
import junit.framework.Assert.assertTrue
|
||||
import org.hamcrest.CoreMatchers.equalTo
|
||||
import org.hamcrest.MatcherAssert.assertThat
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
import org.junit.Test
|
||||
import kotlin.test.assertFalse
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class WeekdayListTest : BaseUnitTest() {
|
||||
@Test
|
||||
|
||||
@@ -19,8 +19,6 @@
|
||||
|
||||
package org.isoron.uhabits.core.models.sqlite
|
||||
|
||||
import junit.framework.Assert.assertEquals
|
||||
import junit.framework.Assert.assertNull
|
||||
import org.isoron.uhabits.core.BaseUnitTest.Companion.buildMemoryDatabase
|
||||
import org.isoron.uhabits.core.database.Repository
|
||||
import org.isoron.uhabits.core.models.Entry
|
||||
@@ -30,6 +28,8 @@ import org.isoron.uhabits.core.models.sqlite.records.EntryRecord
|
||||
import org.isoron.uhabits.core.utils.DateUtils
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertNull
|
||||
|
||||
class SQLiteEntryListTest {
|
||||
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.models.sqlite
|
||||
|
||||
import com.nhaarman.mockitokotlin2.mock
|
||||
import com.nhaarman.mockitokotlin2.verify
|
||||
import junit.framework.Assert.assertNull
|
||||
import org.hamcrest.CoreMatchers.equalTo
|
||||
import org.hamcrest.MatcherAssert.assertThat
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
@@ -34,14 +31,14 @@ import org.isoron.uhabits.core.models.Reminder
|
||||
import org.isoron.uhabits.core.models.WeekdayList
|
||||
import org.isoron.uhabits.core.models.sqlite.records.HabitRecord
|
||||
import org.isoron.uhabits.core.test.HabitFixtures
|
||||
import org.junit.Rule
|
||||
import org.junit.Assert.assertThrows
|
||||
import org.junit.Test
|
||||
import org.junit.rules.ExpectedException
|
||||
import org.mockito.kotlin.mock
|
||||
import org.mockito.kotlin.verify
|
||||
import java.util.ArrayList
|
||||
import kotlin.test.assertNull
|
||||
|
||||
class SQLiteHabitListTest : BaseUnitTest() {
|
||||
@get:Rule
|
||||
var exception = ExpectedException.none()!!
|
||||
private lateinit var repository: Repository<HabitRecord>
|
||||
private var listener: ModelObservable.Listener = mock()
|
||||
private lateinit var habitsArray: ArrayList<Habit>
|
||||
@@ -90,8 +87,9 @@ class SQLiteHabitListTest : BaseUnitTest() {
|
||||
val habit = modelFactory.buildHabit()
|
||||
habitList.add(habit)
|
||||
verify(listener).onModelChange()
|
||||
exception.expect(IllegalArgumentException::class.java)
|
||||
habitList.add(habit)
|
||||
assertThrows(IllegalArgumentException::class.java) {
|
||||
habitList.add(habit)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -18,10 +18,6 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.preferences
|
||||
|
||||
import com.nhaarman.mockitokotlin2.mock
|
||||
import junit.framework.Assert.assertFalse
|
||||
import junit.framework.Assert.assertNull
|
||||
import junit.framework.Assert.assertTrue
|
||||
import org.hamcrest.CoreMatchers.equalTo
|
||||
import org.hamcrest.MatcherAssert.assertThat
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
@@ -30,7 +26,11 @@ import org.isoron.uhabits.core.models.Timestamp.Companion.ZERO
|
||||
import org.isoron.uhabits.core.ui.ThemeSwitcher
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.mockito.kotlin.mock
|
||||
import java.io.File
|
||||
import kotlin.test.assertFalse
|
||||
import kotlin.test.assertNull
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class PreferencesTest : BaseUnitTest() {
|
||||
private lateinit var prefs: Preferences
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.preferences
|
||||
|
||||
import junit.framework.Assert.assertEquals
|
||||
import junit.framework.Assert.assertFalse
|
||||
import junit.framework.Assert.assertTrue
|
||||
import org.hamcrest.CoreMatchers.equalTo
|
||||
import org.hamcrest.MatcherAssert.assertThat
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
@@ -28,6 +25,9 @@ import org.junit.Before
|
||||
import org.junit.Test
|
||||
import java.io.File
|
||||
import java.util.Arrays
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertFalse
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class PropertiesStorageTest : BaseUnitTest() {
|
||||
private lateinit var storage: PropertiesStorage
|
||||
|
||||
@@ -18,10 +18,6 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.reminders
|
||||
|
||||
import com.nhaarman.mockitokotlin2.eq
|
||||
import com.nhaarman.mockitokotlin2.mock
|
||||
import com.nhaarman.mockitokotlin2.verify
|
||||
import com.nhaarman.mockitokotlin2.whenever
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
import org.isoron.uhabits.core.models.Habit
|
||||
import org.isoron.uhabits.core.models.Reminder
|
||||
@@ -37,6 +33,10 @@ import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.mockito.ArgumentMatchers.anyLong
|
||||
import org.mockito.junit.MockitoJUnitRunner
|
||||
import org.mockito.kotlin.eq
|
||||
import org.mockito.kotlin.mock
|
||||
import org.mockito.kotlin.verify
|
||||
import org.mockito.kotlin.whenever
|
||||
import java.util.Calendar
|
||||
import java.util.TimeZone
|
||||
|
||||
|
||||
@@ -18,12 +18,12 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.tasks
|
||||
|
||||
import com.nhaarman.mockitokotlin2.inOrder
|
||||
import com.nhaarman.mockitokotlin2.mock
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.junit.runners.JUnit4
|
||||
import org.mockito.kotlin.inOrder
|
||||
import org.mockito.kotlin.mock
|
||||
|
||||
@RunWith(JUnit4::class)
|
||||
class SingleThreadTaskRunnerTest : BaseUnitTest() {
|
||||
|
||||
@@ -18,10 +18,6 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.ui.screens.habits.list
|
||||
|
||||
import com.nhaarman.mockitokotlin2.mock
|
||||
import com.nhaarman.mockitokotlin2.reset
|
||||
import com.nhaarman.mockitokotlin2.verify
|
||||
import com.nhaarman.mockitokotlin2.verifyNoMoreInteractions
|
||||
import org.hamcrest.CoreMatchers.equalTo
|
||||
import org.hamcrest.MatcherAssert.assertThat
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
@@ -30,6 +26,10 @@ import org.isoron.uhabits.core.commands.DeleteHabitsCommand
|
||||
import org.isoron.uhabits.core.models.Entry
|
||||
import org.isoron.uhabits.core.utils.DateUtils.Companion.getToday
|
||||
import org.junit.Test
|
||||
import org.mockito.kotlin.mock
|
||||
import org.mockito.kotlin.reset
|
||||
import org.mockito.kotlin.verify
|
||||
import org.mockito.kotlin.verifyNoMoreInteractions
|
||||
|
||||
class HabitCardListCacheTest : BaseUnitTest() {
|
||||
private lateinit var cache: HabitCardListCache
|
||||
|
||||
@@ -18,12 +18,6 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.ui.screens.habits.list
|
||||
|
||||
import com.nhaarman.mockitokotlin2.mock
|
||||
import com.nhaarman.mockitokotlin2.verify
|
||||
import com.nhaarman.mockitokotlin2.whenever
|
||||
import junit.framework.Assert.assertFalse
|
||||
import junit.framework.Assert.assertNull
|
||||
import junit.framework.Assert.assertTrue
|
||||
import org.hamcrest.MatcherAssert.assertThat
|
||||
import org.hamcrest.Matchers.equalTo
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
@@ -31,6 +25,12 @@ import org.isoron.uhabits.core.models.Timestamp
|
||||
import org.isoron.uhabits.core.preferences.Preferences
|
||||
import org.isoron.uhabits.core.utils.DateUtils.Companion.getToday
|
||||
import org.junit.Test
|
||||
import org.mockito.kotlin.mock
|
||||
import org.mockito.kotlin.verify
|
||||
import org.mockito.kotlin.whenever
|
||||
import kotlin.test.assertFalse
|
||||
import kotlin.test.assertNull
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class HintListTest : BaseUnitTest() {
|
||||
private lateinit var hintList: HintList
|
||||
|
||||
@@ -18,16 +18,6 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.ui.screens.habits.list
|
||||
|
||||
import com.nhaarman.mockitokotlin2.KArgumentCaptor
|
||||
import com.nhaarman.mockitokotlin2.any
|
||||
import com.nhaarman.mockitokotlin2.argumentCaptor
|
||||
import com.nhaarman.mockitokotlin2.clearInvocations
|
||||
import com.nhaarman.mockitokotlin2.eq
|
||||
import com.nhaarman.mockitokotlin2.mock
|
||||
import com.nhaarman.mockitokotlin2.verify
|
||||
import com.nhaarman.mockitokotlin2.whenever
|
||||
import junit.framework.Assert.assertFalse
|
||||
import junit.framework.Assert.assertTrue
|
||||
import org.apache.commons.io.FileUtils
|
||||
import org.hamcrest.MatcherAssert.assertThat
|
||||
import org.hamcrest.core.IsEqual.equalTo
|
||||
@@ -39,8 +29,18 @@ import org.isoron.uhabits.core.utils.DateUtils.Companion.getToday
|
||||
import org.isoron.uhabits.core.utils.DateUtils.Companion.getTodayWithOffset
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.mockito.kotlin.KArgumentCaptor
|
||||
import org.mockito.kotlin.any
|
||||
import org.mockito.kotlin.argumentCaptor
|
||||
import org.mockito.kotlin.clearInvocations
|
||||
import org.mockito.kotlin.eq
|
||||
import org.mockito.kotlin.mock
|
||||
import org.mockito.kotlin.verify
|
||||
import org.mockito.kotlin.whenever
|
||||
import java.io.IOException
|
||||
import java.nio.file.Files
|
||||
import kotlin.test.assertFalse
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class ListHabitsBehaviorTest : BaseUnitTest() {
|
||||
private val dirFinder: ListHabitsBehavior.DirFinder = mock()
|
||||
|
||||
@@ -18,17 +18,6 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.ui.screens.habits.list
|
||||
|
||||
import com.nhaarman.mockitokotlin2.KArgumentCaptor
|
||||
import com.nhaarman.mockitokotlin2.any
|
||||
import com.nhaarman.mockitokotlin2.argumentCaptor
|
||||
import com.nhaarman.mockitokotlin2.clearInvocations
|
||||
import com.nhaarman.mockitokotlin2.mock
|
||||
import com.nhaarman.mockitokotlin2.never
|
||||
import com.nhaarman.mockitokotlin2.verify
|
||||
import com.nhaarman.mockitokotlin2.verifyNoMoreInteractions
|
||||
import com.nhaarman.mockitokotlin2.whenever
|
||||
import junit.framework.Assert.assertFalse
|
||||
import junit.framework.Assert.assertTrue
|
||||
import org.hamcrest.MatcherAssert.assertThat
|
||||
import org.hamcrest.Matchers.equalTo
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
@@ -37,6 +26,17 @@ import org.isoron.uhabits.core.models.HabitMatcher
|
||||
import org.isoron.uhabits.core.preferences.Preferences
|
||||
import org.isoron.uhabits.core.ui.ThemeSwitcher
|
||||
import org.junit.Test
|
||||
import org.mockito.kotlin.KArgumentCaptor
|
||||
import org.mockito.kotlin.any
|
||||
import org.mockito.kotlin.argumentCaptor
|
||||
import org.mockito.kotlin.clearInvocations
|
||||
import org.mockito.kotlin.mock
|
||||
import org.mockito.kotlin.never
|
||||
import org.mockito.kotlin.verify
|
||||
import org.mockito.kotlin.verifyNoMoreInteractions
|
||||
import org.mockito.kotlin.whenever
|
||||
import kotlin.test.assertFalse
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class ListHabitsMenuBehaviorTest : BaseUnitTest() {
|
||||
private lateinit var behavior: ListHabitsMenuBehavior
|
||||
|
||||
@@ -18,15 +18,6 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.ui.screens.habits.list
|
||||
|
||||
import com.nhaarman.mockitokotlin2.KArgumentCaptor
|
||||
import com.nhaarman.mockitokotlin2.argumentCaptor
|
||||
import com.nhaarman.mockitokotlin2.eq
|
||||
import com.nhaarman.mockitokotlin2.mock
|
||||
import com.nhaarman.mockitokotlin2.verify
|
||||
import com.nhaarman.mockitokotlin2.whenever
|
||||
import junit.framework.Assert.assertFalse
|
||||
import junit.framework.Assert.assertNull
|
||||
import junit.framework.Assert.assertTrue
|
||||
import org.hamcrest.MatcherAssert.assertThat
|
||||
import org.hamcrest.Matchers.equalTo
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
@@ -35,6 +26,15 @@ import org.isoron.uhabits.core.models.PaletteColor
|
||||
import org.isoron.uhabits.core.ui.callbacks.OnColorPickedCallback
|
||||
import org.isoron.uhabits.core.ui.callbacks.OnConfirmedCallback
|
||||
import org.junit.Test
|
||||
import org.mockito.kotlin.KArgumentCaptor
|
||||
import org.mockito.kotlin.argumentCaptor
|
||||
import org.mockito.kotlin.eq
|
||||
import org.mockito.kotlin.mock
|
||||
import org.mockito.kotlin.verify
|
||||
import org.mockito.kotlin.whenever
|
||||
import kotlin.test.assertFalse
|
||||
import kotlin.test.assertNull
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class ListHabitsSelectionMenuBehaviorTest : BaseUnitTest() {
|
||||
private val screen: ListHabitsSelectionMenuBehavior.Screen = mock()
|
||||
|
||||
@@ -18,15 +18,15 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.ui.screens.habits.show
|
||||
|
||||
import com.nhaarman.mockitokotlin2.mock
|
||||
import com.nhaarman.mockitokotlin2.verify
|
||||
import com.nhaarman.mockitokotlin2.whenever
|
||||
import org.apache.commons.io.FileUtils
|
||||
import org.hamcrest.CoreMatchers.equalTo
|
||||
import org.hamcrest.MatcherAssert.assertThat
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
import org.isoron.uhabits.core.models.Habit
|
||||
import org.junit.Test
|
||||
import org.mockito.kotlin.mock
|
||||
import org.mockito.kotlin.verify
|
||||
import org.mockito.kotlin.whenever
|
||||
import java.nio.file.Files
|
||||
|
||||
class ShowHabitMenuPresenterTest : BaseUnitTest() {
|
||||
|
||||
@@ -19,10 +19,6 @@
|
||||
|
||||
package org.isoron.uhabits.core.ui.views
|
||||
|
||||
import com.nhaarman.mockitokotlin2.mock
|
||||
import com.nhaarman.mockitokotlin2.reset
|
||||
import com.nhaarman.mockitokotlin2.verify
|
||||
import com.nhaarman.mockitokotlin2.verifyNoMoreInteractions
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.isoron.platform.gui.assertRenders
|
||||
import org.isoron.platform.time.DayOfWeek
|
||||
@@ -35,6 +31,10 @@ import org.isoron.uhabits.core.ui.views.HistoryChart.Square.HATCHED
|
||||
import org.isoron.uhabits.core.ui.views.HistoryChart.Square.OFF
|
||||
import org.isoron.uhabits.core.ui.views.HistoryChart.Square.ON
|
||||
import org.junit.Test
|
||||
import org.mockito.kotlin.mock
|
||||
import org.mockito.kotlin.reset
|
||||
import org.mockito.kotlin.verify
|
||||
import org.mockito.kotlin.verifyNoMoreInteractions
|
||||
import java.util.Locale
|
||||
|
||||
class HistoryChartTest {
|
||||
|
||||
@@ -18,11 +18,6 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.ui.widgets
|
||||
|
||||
import com.nhaarman.mockitokotlin2.mock
|
||||
import com.nhaarman.mockitokotlin2.reset
|
||||
import com.nhaarman.mockitokotlin2.verify
|
||||
import com.nhaarman.mockitokotlin2.verifyZeroInteractions
|
||||
import com.nhaarman.mockitokotlin2.whenever
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
import org.isoron.uhabits.core.commands.CreateRepetitionCommand
|
||||
import org.isoron.uhabits.core.models.Entry
|
||||
@@ -34,6 +29,11 @@ import org.isoron.uhabits.core.ui.NotificationTray
|
||||
import org.isoron.uhabits.core.utils.DateUtils.Companion.getTodayWithOffset
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.mockito.kotlin.mock
|
||||
import org.mockito.kotlin.reset
|
||||
import org.mockito.kotlin.verify
|
||||
import org.mockito.kotlin.verifyNoInteractions
|
||||
import org.mockito.kotlin.whenever
|
||||
|
||||
class WidgetBehaviorTest : BaseUnitTest() {
|
||||
private lateinit var notificationTray: NotificationTray
|
||||
@@ -61,7 +61,7 @@ class WidgetBehaviorTest : BaseUnitTest() {
|
||||
CreateRepetitionCommand(habitList, habit, today, Entry.YES_MANUAL, "")
|
||||
)
|
||||
verify(notificationTray).cancel(habit)
|
||||
verifyZeroInteractions(preferences)
|
||||
verifyNoInteractions(preferences)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -71,7 +71,7 @@ class WidgetBehaviorTest : BaseUnitTest() {
|
||||
CreateRepetitionCommand(habitList, habit, today, Entry.NO, "")
|
||||
)
|
||||
verify(notificationTray).cancel(habit)
|
||||
verifyZeroInteractions(preferences)
|
||||
verifyNoInteractions(preferences)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -113,7 +113,7 @@ class WidgetBehaviorTest : BaseUnitTest() {
|
||||
CreateRepetitionCommand(habitList, habit, today, 600, "")
|
||||
)
|
||||
verify(notificationTray).cancel(habit)
|
||||
verifyZeroInteractions(preferences)
|
||||
verifyNoInteractions(preferences)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -126,6 +126,6 @@ class WidgetBehaviorTest : BaseUnitTest() {
|
||||
CreateRepetitionCommand(habitList, habit, today, 400, "")
|
||||
)
|
||||
verify(notificationTray).cancel(habit)
|
||||
verifyZeroInteractions(preferences)
|
||||
verifyNoInteractions(preferences)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
*/
|
||||
package org.isoron.uhabits.core.utils
|
||||
|
||||
import junit.framework.Assert.assertEquals
|
||||
import org.hamcrest.MatcherAssert.assertThat
|
||||
import org.hamcrest.core.IsEqual.equalTo
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
@@ -40,6 +39,7 @@ import java.util.Calendar
|
||||
import java.util.GregorianCalendar
|
||||
import java.util.Locale
|
||||
import java.util.TimeZone
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
class DateUtilsTest : BaseUnitTest() {
|
||||
var firstWeekday = Calendar.SUNDAY
|
||||
|
||||
@@ -22,7 +22,11 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
|
||||
plugins {
|
||||
application
|
||||
id("kotlin")
|
||||
id("com.github.johnrengelman.shadow") version "7.1.2"
|
||||
id("com.github.johnrengelman.shadow") version "8.1.1"
|
||||
}
|
||||
|
||||
kotlin {
|
||||
jvmToolchain(17)
|
||||
}
|
||||
|
||||
|
||||
@@ -34,8 +38,8 @@ application {
|
||||
|
||||
dependencies {
|
||||
val ktorVersion = "1.6.8"
|
||||
val kotlinVersion = "1.7.21"
|
||||
val logbackVersion = "1.4.5"
|
||||
val kotlinVersion = "1.8.20"
|
||||
val logbackVersion = "1.4.9"
|
||||
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion")
|
||||
implementation("io.ktor:ktor-server-netty:$ktorVersion")
|
||||
implementation("ch.qos.logback:logback-classic:$logbackVersion")
|
||||
@@ -47,7 +51,7 @@ dependencies {
|
||||
implementation("io.prometheus:simpleclient_httpserver:0.16.0")
|
||||
implementation("io.prometheus:simpleclient_hotspot:0.16.0")
|
||||
testImplementation("io.ktor:ktor-server-tests:$ktorVersion")
|
||||
testImplementation("com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0")
|
||||
testImplementation("org.mockito.kotlin:mockito-kotlin:5.0.0")
|
||||
testImplementation(kotlin("test"))
|
||||
testImplementation(kotlin("test-junit"))
|
||||
}
|
||||
@@ -57,3 +61,4 @@ tasks.withType<ShadowJar> {
|
||||
archiveClassifier.set("")
|
||||
archiveVersion.set("")
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
package org.isoron.uhabits.sync.app
|
||||
|
||||
import com.nhaarman.mockitokotlin2.mock
|
||||
import org.mockito.kotlin.mock
|
||||
import io.ktor.application.*
|
||||
import org.isoron.uhabits.sync.server.*
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
package org.isoron.uhabits.sync.app
|
||||
|
||||
import com.nhaarman.mockitokotlin2.whenever
|
||||
import org.mockito.kotlin.whenever
|
||||
import io.ktor.http.ContentType
|
||||
import io.ktor.http.HttpHeaders
|
||||
import io.ktor.http.HttpMethod
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
package org.isoron.uhabits.sync.app
|
||||
|
||||
import com.nhaarman.mockitokotlin2.whenever
|
||||
import org.mockito.kotlin.whenever
|
||||
import io.ktor.http.HttpMethod
|
||||
import io.ktor.http.HttpStatusCode
|
||||
import io.ktor.server.testing.handleRequest
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
|
||||
package org.isoron.uhabits.sync.app
|
||||
|
||||
import com.nhaarman.mockitokotlin2.verify
|
||||
import com.nhaarman.mockitokotlin2.whenever
|
||||
import org.mockito.kotlin.verify
|
||||
import org.mockito.kotlin.whenever
|
||||
import io.ktor.http.*
|
||||
import io.ktor.server.testing.*
|
||||
import kotlinx.coroutines.*
|
||||
|
||||
Reference in New Issue
Block a user