Skip to content
This repository has been archived by the owner on Aug 2, 2024. It is now read-only.

Replace additional function with custom matcher for better assertion errors. #911

Merged
merged 13 commits into from
Oct 20, 2023
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Original file line number Diff line number Diff line change
@@ -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<Calendar>() {
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:
* <code>assertThat(someDate, hasSameDateWith(Calendar.getInstance()))</code>
*
* @param expected calendar that has expected year, month and day [Calendar]
*/
@Factory
fun equalTo(expected: Calendar): Matcher<Calendar> = CalendarMatcher(expected)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down