diff --git a/app/src/test/java/com/google/samples/apps/sunflower/data/ConvertersTest.kt b/app/src/test/java/com/google/samples/apps/sunflower/data/ConvertersTest.kt index 1eca92cbb..a43601484 100644 --- a/app/src/test/java/com/google/samples/apps/sunflower/data/ConvertersTest.kt +++ b/app/src/test/java/com/google/samples/apps/sunflower/data/ConvertersTest.kt @@ -24,7 +24,7 @@ import java.util.Calendar.MONTH import java.util.Calendar.SEPTEMBER import java.util.Calendar.YEAR -class ConvertersTest { +internal class ConvertersTest { private val cal = Calendar.getInstance().apply { set(YEAR, 1998) diff --git a/app/src/test/java/com/google/samples/apps/sunflower/data/GardenPlantingTest.kt b/app/src/test/java/com/google/samples/apps/sunflower/data/GardenPlantingTest.kt index 545e07601..404b72313 100644 --- a/app/src/test/java/com/google/samples/apps/sunflower/data/GardenPlantingTest.kt +++ b/app/src/test/java/com/google/samples/apps/sunflower/data/GardenPlantingTest.kt @@ -16,30 +16,20 @@ package com.google.samples.apps.sunflower.data -import org.hamcrest.CoreMatchers.equalTo +import com.google.samples.apps.sunflower.test.CalendarMatcher.Companion.equalTo +import org.hamcrest.CoreMatchers.`is` import org.hamcrest.MatcherAssert.assertThat -import org.junit.Assert.assertEquals import org.junit.Test import java.util.Calendar -import java.util.Calendar.DAY_OF_MONTH -import java.util.Calendar.MONTH -import java.util.Calendar.YEAR -class GardenPlantingTest { +internal class GardenPlantingTest { @Test fun testDefaultValues() { val gardenPlanting = GardenPlanting("1") - val cal = Calendar.getInstance() - assertYMD(cal, gardenPlanting.plantDate) - assertYMD(cal, gardenPlanting.lastWateringDate) - assertEquals(0L, gardenPlanting.gardenPlantingId) - } - - // Only Year/Month/Day precision is needed for comparing GardenPlanting Calendar entries - private fun assertYMD(expectedCal: Calendar, actualCal: Calendar) { - assertThat(actualCal.get(YEAR), equalTo(expectedCal.get(YEAR))) - assertThat(actualCal.get(MONTH), equalTo(expectedCal.get(MONTH))) - assertThat(actualCal.get(DAY_OF_MONTH), equalTo(expectedCal.get(DAY_OF_MONTH))) + val calendar = Calendar.getInstance() + assertThat(gardenPlanting.plantDate, equalTo(calendar)) + assertThat(gardenPlanting.lastWateringDate, equalTo(calendar)) + assertThat(gardenPlanting.gardenPlantingId, `is`(0L)) } } diff --git a/app/src/test/java/com/google/samples/apps/sunflower/data/PlantTest.kt b/app/src/test/java/com/google/samples/apps/sunflower/data/PlantTest.kt index da847f144..5c20f0130 100644 --- a/app/src/test/java/com/google/samples/apps/sunflower/data/PlantTest.kt +++ b/app/src/test/java/com/google/samples/apps/sunflower/data/PlantTest.kt @@ -24,7 +24,7 @@ import org.junit.Test import java.util.Calendar import java.util.Calendar.DAY_OF_YEAR -class PlantTest { +internal class PlantTest { private lateinit var plant: Plant diff --git a/app/src/test/java/com/google/samples/apps/sunflower/test/CalendarMatcher.kt b/app/src/test/java/com/google/samples/apps/sunflower/test/CalendarMatcher.kt new file mode 100644 index 000000000..7c406a66a --- /dev/null +++ b/app/src/test/java/com/google/samples/apps/sunflower/test/CalendarMatcher.kt @@ -0,0 +1,69 @@ +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.sunflower.test + +import org.hamcrest.Description +import org.hamcrest.Factory +import org.hamcrest.Matcher +import org.hamcrest.TypeSafeDiagnosingMatcher +import java.text.SimpleDateFormat +import java.util.Calendar +import java.util.Calendar.DAY_OF_MONTH +import java.util.Calendar.MONTH +import java.util.Calendar.YEAR + +/** + * Calendar matcher. + * Only Year/Month/Day precision is needed for comparing GardenPlanting Calendar entries + */ +internal class CalendarMatcher( + private val expected: Calendar +) : TypeSafeDiagnosingMatcher() { + private val formatter = SimpleDateFormat("dd.MM.yyyy") + + override fun describeTo(description: Description?) { + description?.appendText(formatter.format(expected.time)) + } + + override fun matchesSafely(actual: Calendar?, mismatchDescription: Description?): Boolean { + if (actual == null) { + mismatchDescription?.appendText("was null") + return false + } + if (actual.get(YEAR) == expected.get(YEAR) && + actual.get(MONTH) == expected.get(MONTH) && + actual.get(DAY_OF_MONTH) == expected.get(DAY_OF_MONTH) + ) + return true + mismatchDescription?.appendText("was ")?.appendText(formatter.format(actual.time)) + return false + } + + companion object { + /** + * Creates a matcher for [Calendar]s that only matches when year, month and day of + * actual calendar are equal to year, month and day of expected calendar. + * + * For example: + * assertThat(someDate, hasSameDateWith(Calendar.getInstance())) + * + * @param expected calendar that has expected year, month and day [Calendar] + */ + @Factory + fun equalTo(expected: Calendar): Matcher = CalendarMatcher(expected) + } +} diff --git a/app/src/test/java/com/google/samples/apps/sunflower/utilities/GrowZoneUtilTest.kt b/app/src/test/java/com/google/samples/apps/sunflower/utilities/GrowZoneUtilTest.kt index 7279389be..54d09e7c2 100644 --- a/app/src/test/java/com/google/samples/apps/sunflower/utilities/GrowZoneUtilTest.kt +++ b/app/src/test/java/com/google/samples/apps/sunflower/utilities/GrowZoneUtilTest.kt @@ -19,7 +19,7 @@ package com.google.samples.apps.sunflower.utilities import org.junit.Assert.assertEquals import org.junit.Test -class GrowZoneUtilTest { +internal class GrowZoneUtilTest { @Test fun getZoneForLatitude() { assertEquals(13, getZoneForLatitude(0.0))