eclipse-archived / smarthome

Eclipse SmartHome™ project
https://www.eclipse.org/smarthome/
Eclipse Public License 2.0
863 stars 782 forks source link

Move groovy unit tests to JUnit, mockito & hamcrest #3305

Closed htreu closed 6 years ago

htreu commented 7 years ago

In addition to the move to Java 8 with #2926 we want to move the existing groovy unit tests to a pure Java setup with JUnit, mockito and hamcrest. By getting rid of groovy we want to streamline the tooling and reduce complexity.

Steps to take:

kaikreuzer commented 7 years ago

@maggu2810 I assume that plan gets your approval?

maggu2810 commented 7 years ago

Sure :wink: :+1:

svilenvul commented 7 years ago

In addition to the move to Java 8 with #2926 we want to move the existing groovy unit tests to a pure Java setup with JUnit, mockito and hamcrest.

This is great! Some of these tests actually doesn't require an OSGi runtime anymore, but Tycho Surefire plugin still launches one for them. Eclipse test plugins can be executed by the Maven Surefire plugin as pure unit tests.

sjsf commented 6 years ago

Just an update on this:

➜  find . -name "*.groovy" | grep "/src/" | wc -l                                                                                                                                                               
     100

Exactly 100 left 😄

maggu2810 commented 6 years ago

Still some work left.

$ find . -name "*.groovy" | grep "/src/" | wc -l
96
=== automation ===

./bundles/automation/org.eclipse.smarthome.automation.event.test/src/test/groovy/org/eclipse/smarthome/automation/event/RuleEventTest.groovy

./bundles/automation/org.eclipse.smarthome.automation.integration.test/src/test/groovy/org/eclipse/smarthome/automation/integration/test/AutomationIntegrationJsonTest.groovy
./bundles/automation/org.eclipse.smarthome.automation.integration.test/src/test/groovy/org/eclipse/smarthome/automation/integration/test/AutomationIntegrationTest.groovy
./bundles/automation/org.eclipse.smarthome.automation.integration.test/src/test/groovy/org/eclipse/smarthome/automation/integration/test/HostFragmentSupportTest.groovy

./bundles/automation/org.eclipse.smarthome.automation.module.script.test/src/main/groovy/org/eclipse/smarthome/automation/module/script/ScriptRuleTest.groovy
./bundles/automation/org.eclipse.smarthome.automation.module.timer.test/src/test/groovy/org/eclipse/smarthome/automation/module/timer/internal/DayOfWeekConditionHandlerTest.groovy
./bundles/automation/org.eclipse.smarthome.automation.module.timer.test/src/test/groovy/org/eclipse/smarthome/automation/module/timer/internal/RuntimeRuleTest.groovy
./bundles/automation/org.eclipse.smarthome.automation.module.timer.test/src/test/groovy/org/eclipse/smarthome/automation/module/timer/internal/TimeOfDayTriggerHandlerTest.groovy

=== config ===

./bundles/config/org.eclipse.smarthome.config.core.test/src/test/groovy/org/eclipse/smarthome/config/core/normalization/NormalizerTest.groovy
./bundles/config/org.eclipse.smarthome.config.core.test/src/test/groovy/org/eclipse/smarthome/config/core/status/test/ConfigStatusInfoTest.groovy
./bundles/config/org.eclipse.smarthome.config.core.test/src/test/groovy/org/eclipse/smarthome/config/core/status/test/ConfigStatusServiceOSGiTest.groovy
./bundles/config/org.eclipse.smarthome.config.core.test/src/test/groovy/org/eclipse/smarthome/config/core/test/ConfigDescriptionParameterBuilderTest.groovy
./bundles/config/org.eclipse.smarthome.config.core.test/src/test/groovy/org/eclipse/smarthome/config/core/test/ConfigOptionRegistryOSGiTest.groovy
./bundles/config/org.eclipse.smarthome.config.core.test/src/test/groovy/org/eclipse/smarthome/config/core/test/ConfigurationTest.groovy
./bundles/config/org.eclipse.smarthome.config.core.test/src/test/groovy/org/eclipse/smarthome/config/core/validation/test/ConfigDescriptionValidatorTest.groovy
./bundles/config/org.eclipse.smarthome.config.core.test/src/test/groovy/org/eclipse/smarthome/config/core/validation/test/ConfigValidationExceptionTest.groovy

./bundles/config/org.eclipse.smarthome.config.discovery.test/src/test/groovy/org/eclipse/smarthome/config/discovery/inbox/events/InboxEventFactoryTest.groovy
./bundles/config/org.eclipse.smarthome.config.discovery.test/src/test/groovy/org/eclipse/smarthome/config/setup/test/discovery/DiscoveryResultImplTest.groovy
./bundles/config/org.eclipse.smarthome.config.discovery.test/src/test/groovy/org/eclipse/smarthome/config/setup/test/inbox/DynamicThingUpdateOSGITest.groovy
./bundles/config/org.eclipse.smarthome.config.discovery.test/src/test/groovy/org/eclipse/smarthome/config/setup/test/inbox/InboxOSGITest.groovy

./bundles/config/org.eclipse.smarthome.config.xml.test/src/test/groovy/org/eclipse/smarthome/config/xml/test/ConfigDescriptionI18nTest.groovy
./bundles/config/org.eclipse.smarthome.config.xml.test/src/test/groovy/org/eclipse/smarthome/config/xml/test/ConfigDescriptionsTest.groovy

=== core ===

./bundles/core/org.eclipse.smarthome.core.audio.test/src/test/groovy/org/eclipse/smarthome/core/audio/test/AudioConsoleTest.groovy
./bundles/core/org.eclipse.smarthome.core.audio.test/src/test/groovy/org/eclipse/smarthome/core/audio/test/AudioFormatTest.groovy
./bundles/core/org.eclipse.smarthome.core.audio.test/src/test/groovy/org/eclipse/smarthome/core/audio/test/AudioManagerTest.groovy
./bundles/core/org.eclipse.smarthome.core.audio.test/src/test/groovy/org/eclipse/smarthome/core/audio/test/AudioOSGiTest.groovy
./bundles/core/org.eclipse.smarthome.core.audio.test/src/test/groovy/org/eclipse/smarthome/core/audio/test/AudioServletTest.groovy
./bundles/core/org.eclipse.smarthome.core.audio.test/src/test/groovy/org/eclipse/smarthome/core/audio/test/fake/AudioSinkFake.groovy

./bundles/core/org.eclipse.smarthome.core.binding.xml.test/src/test/groovy/org/eclipse/smarthome/core/binding/xml/test/BindingInfoI18nTest.groovy
./bundles/core/org.eclipse.smarthome.core.binding.xml.test/src/test/groovy/org/eclipse/smarthome/core/binding/xml/test/BindingInfoTest.groovy

./bundles/core/org.eclipse.smarthome.core.id.test/src/test/groovy/org/eclipse/smarthome/core/id/UUIDTest.groovy

./bundles/core/org.eclipse.smarthome.core.test/src/test/groovy/org/eclipse/smarthome/core/common/osgi/ResourceBundleClassLoaderGroovyTest.groovy
./bundles/core/org.eclipse.smarthome.core.test/src/test/groovy/org/eclipse/smarthome/core/common/ThreadPoolManagerTest.groovy
./bundles/core/org.eclipse.smarthome.core.test/src/test/groovy/org/eclipse/smarthome/core/events/AbstractEventFactoryTest.groovy
./bundles/core/org.eclipse.smarthome.core.test/src/test/groovy/org/eclipse/smarthome/core/internal/events/OSGiEventManagerOSGiTest.groovy
./bundles/core/org.eclipse.smarthome.core.test/src/test/groovy/org/eclipse/smarthome/core/internal/ItemRegistryOSGiTest.groovy
./bundles/core/org.eclipse.smarthome.core.test/src/test/groovy/org/eclipse/smarthome/core/internal/items/ItemUpdaterOSGiTest.groovy
./bundles/core/org.eclipse.smarthome.core.test/src/test/groovy/org/eclipse/smarthome/core/internal/ItemTagTest.groovy
./bundles/core/org.eclipse.smarthome.core.test/src/test/groovy/org/eclipse/smarthome/core/items/events/AbstractItemEventSubscriberOSGiTest.groovy
./bundles/core/org.eclipse.smarthome.core.test/src/test/groovy/org/eclipse/smarthome/core/items/events/ItemEventFactoryTest.groovy
./bundles/core/org.eclipse.smarthome.core.test/src/test/groovy/org/eclipse/smarthome/core/items/GenericItemTest.groovy
./bundles/core/org.eclipse.smarthome.core.test/src/test/groovy/org/eclipse/smarthome/core/storage/ManagedItemProviderOSGiTest.groovy

./bundles/core/org.eclipse.smarthome.core.thing.test/src/test/groovy/org/eclipse/smarthome/core/thing/binding/BindingBaseClassesOSGiTest.groovy
./bundles/core/org.eclipse.smarthome.core.thing.test/src/test/groovy/org/eclipse/smarthome/core/thing/binding/ChangeThingTypeOSGiTest.groovy
./bundles/core/org.eclipse.smarthome.core.thing.test/src/test/groovy/org/eclipse/smarthome/core/thing/binding/ThingBuilderTest.groovy
./bundles/core/org.eclipse.smarthome.core.thing.test/src/test/groovy/org/eclipse/smarthome/core/thing/binding/ThingFactoryTest.groovy
./bundles/core/org.eclipse.smarthome.core.thing.test/src/test/groovy/org/eclipse/smarthome/core/thing/events/ThingEventFactoryTest.groovy
./bundles/core/org.eclipse.smarthome.core.thing.test/src/test/groovy/org/eclipse/smarthome/core/thing/factory/ManagedThingProviderOSGiTest.groovy
./bundles/core/org.eclipse.smarthome.core.thing.test/src/test/groovy/org/eclipse/smarthome/core/thing/firmware/FirmwareRegistryOSGiTest.groovy
./bundles/core/org.eclipse.smarthome.core.thing.test/src/test/groovy/org/eclipse/smarthome/core/thing/firmware/ProgressCallbackTest.groovy
./bundles/core/org.eclipse.smarthome.core.thing.test/src/test/groovy/org/eclipse/smarthome/core/thing/i18n/ThingStatusInfoI18nLocalizationServiceOSGiTest.groovy
./bundles/core/org.eclipse.smarthome.core.thing.test/src/test/groovy/org/eclipse/smarthome/core/thing/internal/ThingLinkManagerOSGiTest.groovy
./bundles/core/org.eclipse.smarthome.core.thing.test/src/test/groovy/org/eclipse/smarthome/core/thing/internal/ThingManagerOSGiTest.groovy
./bundles/core/org.eclipse.smarthome.core.thing.test/src/test/groovy/org/eclipse/smarthome/core/thing/link/ItemChannelLinkOSGiTest.groovy
./bundles/core/org.eclipse.smarthome.core.thing.test/src/test/groovy/org/eclipse/smarthome/core/thing/link/LinkEventOSGiTest.groovy
./bundles/core/org.eclipse.smarthome.core.thing.test/src/test/groovy/org/eclipse/smarthome/core/thing/ThingPropertiesTest.groovy
./bundles/core/org.eclipse.smarthome.core.thing.test/src/test/groovy/org/eclipse/smarthome/core/thing/ThingUIDTest.groovy
./bundles/core/org.eclipse.smarthome.core.thing.test/src/test/groovy/org/eclipse/smarthome/core/thing/UIDTest.groovy
./bundles/core/org.eclipse.smarthome.core.thing.test/src/test/groovy/org/eclipse/smarthome/core/thing/util/ThingHandlerHelperTest.groovy
./bundles/core/org.eclipse.smarthome.core.thing.test/src/test/groovy/org/eclipse/smarthome/core/thing/util/ThingHelperTest.groovy

=== io ===

./bundles/io/org.eclipse.smarthome.io.rest.core.test/src/test/groovy/org/eclipse/smarthome/io/rest/core/internal/discovery/InboxResourceOSGITest.groovy
./bundles/io/org.eclipse.smarthome.io.rest.core.test/src/test/groovy/org/eclipse/smarthome/io/rest/core/service/test/ConfigurableServiceResourceOSGiTest.groovy

./bundles/io/org.eclipse.smarthome.io.rest.sse.test/src/test/groovy/org/eclipse/smarthome/io/rest/sse/test/SseResourceOSGiTest.groovy

./bundles/io/org.eclipse.smarthome.io.rest.test/src/test/groovy/org/eclipse/smarthome/io/rest/test/filter/CorsFilterTest.groovy
./bundles/io/org.eclipse.smarthome.io.rest.test/src/test/groovy/org/eclipse/smarthome/io/rest/test/filter/ProxyFilterTest.groovy
./bundles/io/org.eclipse.smarthome.io.rest.test/src/test/groovy/org/eclipse/smarthome/io/rest/test/filter/SatisfiableResourceFilterTest.groovy

./bundles/io/org.eclipse.smarthome.io.transport.upnp.test/src/test/groovy/org/eclipse/smarthome/io/transport/upnp/test/UpnpIOServiceTest.groovy

=== model ===

./bundles/model/org.eclipse.smarthome.model.item.tests/src/org/eclipse/smarthome/model/item/internal/GenericItemProviderTest.groovy

./bundles/model/org.eclipse.smarthome.model.thing.tests/src/org/eclipse/smarthome/model/thing/test/hue/TestHueConfigDescriptionProvider.groovy
./bundles/model/org.eclipse.smarthome.model.thing.tests/src/org/eclipse/smarthome/model/thing/tests/GenericItemChannelLinkProviderTest.groovy
./bundles/model/org.eclipse.smarthome.model.thing.tests/src/org/eclipse/smarthome/model/thing/tests/GenericThingProviderTest2.groovy
./bundles/model/org.eclipse.smarthome.model.thing.tests/src/org/eclipse/smarthome/model/thing/tests/GenericThingProviderTest3.groovy
./bundles/model/org.eclipse.smarthome.model.thing.tests/src/org/eclipse/smarthome/model/thing/tests/GenericThingProviderTest4.groovy
./bundles/model/org.eclipse.smarthome.model.thing.tests/src/org/eclipse/smarthome/model/thing/tests/GenericThingProviderTest.groovy

=== storage ===

./bundles/storage/org.eclipse.smarthome.storage.mapdb.test/src/main/groovy/org/eclipse/smarthome/storage/mapdb/StorageServiceOSGiTest.groovy

=== ui ===

./bundles/ui/org.eclipse.smarthome.ui.icon.test/src/test/groovy/org/eclipse/smarthome/ui/icon/test/AbstractResourceIconProviderTest.groovy
./bundles/ui/org.eclipse.smarthome.ui.icon.test/src/test/groovy/org/eclipse/smarthome/ui/icon/test/IconServletTest.groovy

=== binding ===

./extensions/binding/org.eclipse.smarthome.binding.astro.test/src/test/groovy/org/eclipse/smarthome/binding/astro/handler/test/AstroCommandTest.groovy
./extensions/binding/org.eclipse.smarthome.binding.astro.test/src/test/groovy/org/eclipse/smarthome/binding/astro/handler/test/AstroValidConfigurationTest.groovy
./extensions/binding/org.eclipse.smarthome.binding.astro.test/src/test/groovy/org/eclipse/smarthome/binding/astro/test/AstroStateTest.groovy
./extensions/binding/org.eclipse.smarthome.binding.astro.test/src/test/groovy/org/eclipse/smarthome/binding/astro/test/cases/AstroBindingTestsData.groovy
./extensions/binding/org.eclipse.smarthome.binding.astro.test/src/test/groovy/org/eclipse/smarthome/binding/astro/test/cases/AstroParametrizedTestCases.groovy

./extensions/binding/org.eclipse.smarthome.binding.hue.test/src/test/groovy/org/eclipse/smarthome/binding/hue/test/HueBridgeHandlerOSGiTest.groovy
./extensions/binding/org.eclipse.smarthome.binding.hue.test/src/test/groovy/org/eclipse/smarthome/binding/hue/test/HueLightHandlerOSGiTest.groovy

./extensions/binding/org.eclipse.smarthome.binding.wemo.test/src/main/groovy/org/eclipse/smarthome/binding/wemo/discovery/test/WemoDiscoveryOSGiTest.groovy
./extensions/binding/org.eclipse.smarthome.binding.wemo.test/src/main/groovy/org/eclipse/smarthome/binding/wemo/discovery/test/WemoDiscoveryParticipantTest.groovy
./extensions/binding/org.eclipse.smarthome.binding.wemo.test/src/main/groovy/org/eclipse/smarthome/binding/wemo/discovery/test/WemoLinkDiscoveryServiceOSGiTest.groovy
./extensions/binding/org.eclipse.smarthome.binding.wemo.test/src/main/groovy/org/eclipse/smarthome/binding/wemo/handler/test/WemoHandlerOSGiTest.groovy
./extensions/binding/org.eclipse.smarthome.binding.wemo.test/src/main/groovy/org/eclipse/smarthome/binding/wemo/handler/test/WemoHandlerTest.groovy
./extensions/binding/org.eclipse.smarthome.binding.wemo.test/src/main/groovy/org/eclipse/smarthome/binding/wemo/handler/test/WemoLightHandlerOSGiTest.groovy
./extensions/binding/org.eclipse.smarthome.binding.wemo.test/src/main/groovy/org/eclipse/smarthome/binding/wemo/handler/test/WemoMakerHandlerOSGiTest.groovy
./extensions/binding/org.eclipse.smarthome.binding.wemo.test/src/main/groovy/org/eclipse/smarthome/binding/wemo/internal/http/test/WemoHttpCallOSGiTest.groovy
./extensions/binding/org.eclipse.smarthome.binding.wemo.test/src/main/groovy/org/eclipse/smarthome/binding/wemo/test/GenericWemoLightOSGiTest.groovy
./extensions/binding/org.eclipse.smarthome.binding.wemo.test/src/main/groovy/org/eclipse/smarthome/binding/wemo/test/GenericWemoOSGiTest.groovy

=== Groovy test environment ===

./bundles/test/org.eclipse.smarthome.test/src/main/groovy/org/eclipse/smarthome/test/AsyncResultWrapper.groovy
./bundles/test/org.eclipse.smarthome.test/src/main/groovy/org/eclipse/smarthome/test/OSGiTest.groovy
sjsf commented 6 years ago

If we keep our current pace the migration will be completed in February 2022 😁

kaikreuzer commented 6 years ago

@sjka's pure optimism, as always 🤣

maggu2810 commented 6 years ago
$ find . -name "*.groovy" | grep "/src/" | wc -l
51

The 51 files are part of 16 bundles

$ find . -name "*.groovy" | grep "/src/" | sed 's:\(.*\)/src/.*:\1:g' | sort -u
./bundles/automation/org.eclipse.smarthome.automation.event.test
./bundles/automation/org.eclipse.smarthome.automation.module.script.test
./bundles/automation/org.eclipse.smarthome.automation.module.timer.test
./bundles/config/org.eclipse.smarthome.config.core.test
./bundles/config/org.eclipse.smarthome.config.discovery.test
./bundles/config/org.eclipse.smarthome.config.xml.test
./bundles/core/org.eclipse.smarthome.core.audio.test
./bundles/core/org.eclipse.smarthome.core.binding.xml.test
./bundles/core/org.eclipse.smarthome.core.id.test
./bundles/core/org.eclipse.smarthome.core.thing.test
./bundles/io/org.eclipse.smarthome.io.rest.core.test
./bundles/io/org.eclipse.smarthome.io.rest.sse.test
./bundles/io/org.eclipse.smarthome.io.rest.test
./bundles/model/org.eclipse.smarthome.model.item.tests
./bundles/model/org.eclipse.smarthome.model.thing.tests
./bundles/ui/org.eclipse.smarthome.ui.icon.test
maggu2810 commented 6 years ago

Thanks @wborn for your recent cleanups:

wborn commented 6 years ago

When the open Groovy to Java migration PRs are merged @maggu2810 , the remaining Groovy file and bundle counts should be 0. :smile:

After that I think we could do a final cleanup of documentation, infra (e.g. OSGiTest) and other leftovers to get this issue closed.

maggu2810 commented 6 years ago

Thank you for your amazing migration work.

I could try to do some further cleanup of the base pom.xml the next days.

kaikreuzer commented 6 years ago

final cleanup of documentation, infra (e.g. OSGiTest)

Note that the groovy base test classes are still in use by others (see https://github.com/eclipse/smarthome/issues/6183), so we should keep them in place for backward compatibility, but certainly not recommend anybody to use them anymore.

htreu commented 6 years ago

With #6187 merged and #6191 for tracking the final groovy clean up we can close here. Thank you all for the hard work!