Repository: 7mind/izumi
Pull request #824 (2020-01-14 21:35:07)

Update scalatest to 3.1.0

codecov-io: # [Codecov](https://codecov.io/gh/7mind/izumi/pull/824?src=pr&el=h1) Report
> Merging [#824](https://codecov.io/gh/7mind/izumi/pull/824?src=pr&el=desc) into [develop](https://codecov.io/gh/7mind/izumi/commit/34ba0b7e74d9af411120b83693378385b697e8b7?src=pr&el=desc) will **decrease** coverage by `0.02%`.
> The diff coverage is `0%`.

[![Impacted file tree graph](https://codecov.io/gh/7mind/izumi/pull/824/graphs/tree.svg?width=650&token=77pa3UU1Je&height=150&src=pr)](https://codecov.io/gh/7mind/izumi/pull/824?src=pr&el=tree)

```diff
@@             Coverage Diff             @@
##           develop     #824      +/-   ##
===========================================
- Coverage    70.29%   70.26%   -0.03%     
===========================================
  Files          549      549              
  Lines        14043    14048       +5     
  Branches       791      735      -56     
===========================================
  Hits          9871     9871              
- Misses        4172     4177       +5
```


| [Impacted Files](https://codecov.io/gh/7mind/izumi/pull/824?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [...main/scala/izumi/distage/testkit/DistageSpec.scala](https://codecov.io/gh/7mind/izumi/pull/824/diff?src=pr&el=tree#diff-ZGlzdGFnZS9kaXN0YWdlLXRlc3RraXQtbGVnYWN5L3NyYy9tYWluL3NjYWxhL2l6dW1pL2Rpc3RhZ2UvdGVzdGtpdC9EaXN0YWdlU3BlYy5zY2FsYQ==) | `0% <ø> (ø)` | :arrow_up: |
| [...la/scalatest/adapter/specs/DistagePluginSpec.scala](https://codecov.io/gh/7mind/izumi/pull/824/diff?src=pr&el=tree#diff-ZGlzdGFnZS9kaXN0YWdlLXRlc3RraXQtbGVnYWN5L3NyYy9tYWluL3NjYWxhL3NjYWxhdGVzdC9hZGFwdGVyL3NwZWNzL0Rpc3RhZ2VQbHVnaW5TcGVjLnNjYWxh) | `0% <ø> (ø)` | :arrow_up: |
| [...c/main/scala/org/scalatest/ScalatestReporter.scala](https://codecov.io/gh/7mind/izumi/pull/824/diff?src=pr&el=tree#diff-ZGlzdGFnZS9kaXN0YWdlLXRlc3RraXQtc2NhbGF0ZXN0L3NyYy9tYWluL3NjYWxhL29yZy9zY2FsYXRlc3QvU2NhbGF0ZXN0UmVwb3J0ZXIuc2NhbGE=) | `70% <0%> (-1.8%)` | :arrow_down: |
| [...ge/testkit/scalatest/DistageBIOSpecScalatest.scala](https://codecov.io/gh/7mind/izumi/pull/824/diff?src=pr&el=tree#diff-ZGlzdGFnZS9kaXN0YWdlLXRlc3RraXQtc2NhbGF0ZXN0L3NyYy9tYWluL3NjYWxhL2l6dW1pL2Rpc3RhZ2UvdGVzdGtpdC9zY2FsYXRlc3QvRGlzdGFnZUJJT1NwZWNTY2FsYXRlc3Quc2NhbGE=) | `50% <0%> (-50%)` | :arrow_down: |
| [...i/fundamentals/platform/resources/IzManifest.scala](https://codecov.io/gh/7mind/izumi/pull/824/diff?src=pr&el=tree#diff-ZnVuZGFtZW50YWxzL2Z1bmRhbWVudGFscy1wbGF0Zm9ybS8uanZtL3NyYy9tYWluL3NjYWxhL2l6dW1pL2Z1bmRhbWVudGFscy9wbGF0Zm9ybS9yZXNvdXJjZXMvSXpNYW5pZmVzdC5zY2FsYQ==) | `85.36% <0%> (-2.44%)` | :arrow_down: |
| [...rg/scalatest/DistageScalatestTestSuiteRunner.scala](https://codecov.io/gh/7mind/izumi/pull/824/diff?src=pr&el=tree#diff-ZGlzdGFnZS9kaXN0YWdlLXRlc3RraXQtc2NhbGF0ZXN0L3NyYy9tYWluL3NjYWxhL29yZy9zY2FsYXRlc3QvRGlzdGFnZVNjYWxhdGVzdFRlc3RTdWl0ZVJ1bm5lci5zY2FsYQ==) | `65.85% <0%> (-1.62%)` | :arrow_down: |
| [...ge/testkit/services/dstest/DistageTestRunner.scala](https://codecov.io/gh/7mind/izumi/pull/824/diff?src=pr&el=tree#diff-ZGlzdGFnZS9kaXN0YWdlLXRlc3RraXQtY29yZS9zcmMvbWFpbi9zY2FsYS9penVtaS9kaXN0YWdlL3Rlc3RraXQvc2VydmljZXMvZHN0ZXN0L0Rpc3RhZ2VUZXN0UnVubmVyLnNjYWxh) | `79.62% <0%> (-1.14%)` | :arrow_down: |
| [...alatest/dstest/DistageTestsRegistrySingleton.scala](https://codecov.io/gh/7mind/izumi/pull/824/diff?src=pr&el=tree#diff-ZGlzdGFnZS9kaXN0YWdlLXRlc3RraXQtc2NhbGF0ZXN0L3NyYy9tYWluL3NjYWxhL2l6dW1pL2Rpc3RhZ2UvdGVzdGtpdC9zZXJ2aWNlcy9zY2FsYXRlc3QvZHN0ZXN0L0Rpc3RhZ2VUZXN0c1JlZ2lzdHJ5U2luZ2xldG9uLnNjYWxh) | `100% <0%> (ø)` | :arrow_up: |
| [.../izumi/fundamentals/platform/language/Quirks.scala](https://codecov.io/gh/7mind/izumi/pull/824/diff?src=pr&el=tree#diff-ZnVuZGFtZW50YWxzL2Z1bmRhbWVudGFscy1wbGF0Zm9ybS9zcmMvbWFpbi9zY2FsYS9penVtaS9mdW5kYW1lbnRhbHMvcGxhdGZvcm0vbGFuZ3VhZ2UvUXVpcmtzLnNjYWxh) | `100% <0%> (ø)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/7mind/izumi/pull/824?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/7mind/izumi/pull/824?src=pr&el=footer). Last update [34ba0b7...5da3d44](https://codecov.io/gh/7mind/izumi/pull/824?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).


Patch:
diff --git a/README.md b/README.md
index 14d213a53..f37cba9ae 100644
--- a/README.md
+++ b/README.md
@@ -44,10 +44,10 @@ Chats:
 
 Slides:
 
-* [Hyper-pragmatic Pure FP Testing with distage-testkit](https://github.com/7mind/slides/blob/master/07-distage-tests-functional-scala/distage-tests-functional-scala.pdf)
+* [Hyper-pragmatic Pure FP Testing with distage-testkit](https://www.slideshare.net/7mind/hyperpragmatic-pure-fp-testing-with-distagetestkit)
 * [distage: Staged Dependency Injection](https://www.slideshare.net/7mind/scalaua-distage-staged-dependency-injection)
 * [logstage: Zero-cost Structured Logging](https://www.slideshare.net/7mind/logstage-zerocosttructuredlogging)
-* [Other slides](https://github.com/7mind/slides)
+* [More slides](https://github.com/7mind/slides)
 
 Videos:
 
diff --git a/doc/microsite/src/main/tut/distage/distage-framework.md b/doc/microsite/src/main/tut/distage/distage-framework.md
index de2021502..cb5103caa 100644
--- a/doc/microsite/src/main/tut/distage/distage-framework.md
+++ b/doc/microsite/src/main/tut/distage/distage-framework.md
@@ -223,10 +223,10 @@ In test scope:
 // package com.example.test
 
 import com.example._
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 import izumi.distage.staticinjector.plugins.StaticPluginChecker
 
-final class AppPluginTest extends WordSpec {
+final class AppPluginTest extends AnyWordSpec {
   "App plugin will work (if OtherService is provided later)" in {
     StaticPluginChecker.checkWithConfig[AppPlugin, AppRequirements]("env:prod", ".*.application.conf")   
   }
diff --git a/project/Versions.scala b/project/Versions.scala
index 505f2c645..bfeadf3cb 100644
--- a/project/Versions.scala
+++ b/project/Versions.scala
@@ -3,7 +3,7 @@ object V {
   val collection_compat = "2.1.3"
 
   val kind_projector = "0.11.0"
-  val scalatest = "3.0.8"
+  val scalatest = "3.1.0"
 
   val boopickle = "1.3.1"
 


Test patch:
diff --git a/distage/distage-core-api/src/test/scala/izumi/SafeTypeTest.scala b/distage/distage-core-api/src/test/scala/izumi/SafeTypeTest.scala
index 1cfb66708..bee69194b 100644
--- a/distage/distage-core-api/src/test/scala/izumi/SafeTypeTest.scala
+++ b/distage/distage-core-api/src/test/scala/izumi/SafeTypeTest.scala
@@ -2,11 +2,11 @@ package izumi
 
 import izumi.distage.model.reflection.universe.RuntimeDIUniverse._
 import izumi.fundamentals.reflection.Tags.{Tag, TagK}
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
 import scala.reflect.ClassTag
 
-class SafeTypeTest extends WordSpec {
+class SafeTypeTest extends AnyWordSpec {
   "SafeType" should {
     "have consistent equals and hashcode" in {
       val t1 = SafeType.get[Int]
diff --git a/distage/distage-core-api/src/test/scala/izumi/TypeConstraintExperiment.scala b/distage/distage-core-api/src/test/scala/izumi/TypeConstraintExperiment.scala
index 5718a0e2c..ca19917aa 100644
--- a/distage/distage-core-api/src/test/scala/izumi/TypeConstraintExperiment.scala
+++ b/distage/distage-core-api/src/test/scala/izumi/TypeConstraintExperiment.scala
@@ -1,8 +1,8 @@
 package izumi
 
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class TypeConstraintExperiment extends WordSpec {
+class TypeConstraintExperiment extends AnyWordSpec {
 //  import izumi.fundamentals.platform.language.unused
 //  import scala.annotation.{StaticAnnotation, TypeConstraint}
 //  import scala.language.implicitConversions
diff --git a/distage/distage-core/.jvm/src/test/scala/izumi/distage/gc/GcBasicTestsJvm.scala b/distage/distage-core/.jvm/src/test/scala/izumi/distage/gc/GcBasicTestsJvm.scala
index df81301ce..3e50d09c1 100644
--- a/distage/distage-core/.jvm/src/test/scala/izumi/distage/gc/GcBasicTestsJvm.scala
+++ b/distage/distage-core/.jvm/src/test/scala/izumi/distage/gc/GcBasicTestsJvm.scala
@@ -4,11 +4,11 @@ import distage.DIKey
 import izumi.distage.model.PlannerInput
 import izumi.distage.model.definition.ModuleDef
 import izumi.distage.model.plan.GCMode
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
 import scala.collection.immutable
 
-class GcBasicTestsJvm extends WordSpec with MkGcInjector {
+class GcBasicTestsJvm extends AnyWordSpec with MkGcInjector {
   "Garbage-collecting injector" should {
     "keep proxies alive in case of intersecting loops" in {
       import GcCases.InjectorCase1._
diff --git a/distage/distage-core/.jvm/src/test/scala/izumi/distage/gc/GcIdempotenceTestsJvm.scala b/distage/distage-core/.jvm/src/test/scala/izumi/distage/gc/GcIdempotenceTestsJvm.scala
index fca47507e..c59f00115 100644
--- a/distage/distage-core/.jvm/src/test/scala/izumi/distage/gc/GcIdempotenceTestsJvm.scala
+++ b/distage/distage-core/.jvm/src/test/scala/izumi/distage/gc/GcIdempotenceTestsJvm.scala
@@ -4,9 +4,9 @@ import distage.DIKey
 import izumi.distage.model.PlannerInput
 import izumi.distage.model.definition.ModuleDef
 import izumi.distage.model.plan.GCMode
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class GcIdempotenceTestsJvm extends WordSpec with MkGcInjector {
+class GcIdempotenceTestsJvm extends AnyWordSpec with MkGcInjector {
   "Garbage-collecting injector" when {
     "plan is re-finished" should {
       "keep proxies alive in case of intersecting loops" in {
diff --git a/distage/distage-core/.jvm/src/test/scala/izumi/distage/impl/OptionalDependencyTest.scala b/distage/distage-core/.jvm/src/test/scala/izumi/distage/impl/OptionalDependencyTest.scala
index 40c2e7172..bb3ecaa68 100644
--- a/distage/distage-core/.jvm/src/test/scala/izumi/distage/impl/OptionalDependencyTest.scala
+++ b/distage/distage-core/.jvm/src/test/scala/izumi/distage/impl/OptionalDependencyTest.scala
@@ -6,9 +6,10 @@ import izumi.distage.model.definition.DIResource
 import izumi.distage.model.effect.{DIEffect, LowPriorityDIEffectInstances}
 import izumi.functional.bio.{BIO, BIOAsync, BIOTemporal}
 import izumi.fundamentals.platform.functional.Identity
-import org.scalatest.{GivenWhenThen, WordSpec}
+import org.scalatest.GivenWhenThen
+import org.scalatest.wordspec.AnyWordSpec
 
-class OptionalDependencyTest extends WordSpec with GivenWhenThen {
+class OptionalDependencyTest extends AnyWordSpec with GivenWhenThen {
 
   "Using DIResource & DIEffect objects succeeds event if there's no cats or zio on the classpath" in {
 
diff --git a/distage/distage-core/.jvm/src/test/scala/izumi/distage/injector/AnimalModel.scala b/distage/distage-core/.jvm/src/test/scala/izumi/distage/injector/AnimalModel.scala
index d2c810bdd..f86aa09da 100644
--- a/distage/distage-core/.jvm/src/test/scala/izumi/distage/injector/AnimalModel.scala
+++ b/distage/distage-core/.jvm/src/test/scala/izumi/distage/injector/AnimalModel.scala
@@ -3,9 +3,9 @@ package izumi.distage.injector
 import distage._
 import izumi.distage.model.PlannerInput
 import izumi.distage.planning.extensions.GraphDumpBootstrapModule
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class AnimalModel extends WordSpec with MkInjector {
+class AnimalModel extends AnyWordSpec with MkInjector {
   "animal model" must {
     "produce valid plans" in {
       import AnimalModel._
diff --git a/distage/distage-core/.jvm/src/test/scala/izumi/distage/injector/CglibProxiesTest.scala b/distage/distage-core/.jvm/src/test/scala/izumi/distage/injector/CglibProxiesTest.scala
index b23054ea5..df88a4d61 100644
--- a/distage/distage-core/.jvm/src/test/scala/izumi/distage/injector/CglibProxiesTest.scala
+++ b/distage/distage-core/.jvm/src/test/scala/izumi/distage/injector/CglibProxiesTest.scala
@@ -9,11 +9,11 @@ import izumi.distage.model.exceptions.ProvisioningException
 import izumi.distage.model.plan.GCMode
 import izumi.distage.provisioning.strategies.cglib.exceptions.CgLibInstantiationOpException
 import net.sf.cglib.core.CodeGenerationException
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
 import scala.collection.immutable.Queue
 
-class CglibProxiesTest extends WordSpec with MkInjector {
+class CglibProxiesTest extends AnyWordSpec with MkInjector {
 
   "CircularDependenciesTest" should {
 
diff --git a/distage/distage-core/src/test/scala/izumi/distage/StaticDSLTest.scala b/distage/distage-core/src/test/scala/izumi/distage/StaticDSLTest.scala
index f07052615..320c7e1e5 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/StaticDSLTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/StaticDSLTest.scala
@@ -2,9 +2,9 @@ package izumi.distage
 
 import distage.{ModuleBase, ModuleDef}
 import izumi.distage.fixtures.BasicCases._
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class StaticDSLTest extends WordSpec {
+class StaticDSLTest extends AnyWordSpec {
 
   "Static DSL" should {
 
diff --git a/distage/distage-core/src/test/scala/izumi/distage/dsl/DSLTest.scala b/distage/distage-core/src/test/scala/izumi/distage/dsl/DSLTest.scala
index cca32cdba..5d21a736e 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/dsl/DSLTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/dsl/DSLTest.scala
@@ -9,9 +9,9 @@ import izumi.distage.model.definition.Binding.{SetElementBinding, SingletonBindi
 import izumi.distage.model.definition.{BindingTag, Bindings, ImplDef, Module}
 import izumi.fundamentals.platform.functional.Identity
 import izumi.fundamentals.platform.language.SourceFilePosition
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class DSLTest extends WordSpec with MkInjector {
+class DSLTest extends AnyWordSpec with MkInjector {
 
   import TestTagOps._
 
diff --git a/distage/distage-core/src/test/scala/izumi/distage/dsl/LocatorDefTest.scala b/distage/distage-core/src/test/scala/izumi/distage/dsl/LocatorDefTest.scala
index 1be6a4aca..b70b9446d 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/dsl/LocatorDefTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/dsl/LocatorDefTest.scala
@@ -3,9 +3,9 @@ package izumi.distage.dsl
 import izumi.distage.fixtures.BasicCases.BasicCase1
 import izumi.distage.model.definition.{Id, LocatorDef}
 import izumi.distage.model.exceptions.LocatorDefUninstantiatedBindingException
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class LocatorDefTest extends WordSpec {
+class LocatorDefTest extends AnyWordSpec {
 
   "LocatorDef" should {
     "support singleton instances" in {
diff --git a/distage/distage-core/src/test/scala/izumi/distage/gc/GcBasicTests.scala b/distage/distage-core/src/test/scala/izumi/distage/gc/GcBasicTests.scala
index 8e521a78c..deef45b1a 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/gc/GcBasicTests.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/gc/GcBasicTests.scala
@@ -5,9 +5,9 @@ import izumi.distage.model.PlannerInput
 import izumi.distage.model.definition.ModuleDef
 import izumi.distage.model.exceptions.UnsupportedOpException
 import izumi.distage.model.plan.GCMode
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class GcBasicTests extends WordSpec with MkGcInjector {
+class GcBasicTests extends AnyWordSpec with MkGcInjector {
   "Garbage-collecting injector" should {
 
     "fail during planning on non-by-name loops involving only final classes" in {
diff --git a/distage/distage-core/src/test/scala/izumi/distage/gc/GcIdempotenceTests.scala b/distage/distage-core/src/test/scala/izumi/distage/gc/GcIdempotenceTests.scala
index 4fb06896a..61530912f 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/gc/GcIdempotenceTests.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/gc/GcIdempotenceTests.scala
@@ -4,10 +4,10 @@ import izumi.distage.model.PlannerInput
 import izumi.distage.model.definition.ModuleDef
 import distage.DIKey
 import izumi.distage.model.plan.GCMode
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
 
-class GcIdempotenceTests extends WordSpec with MkGcInjector {
+class GcIdempotenceTests extends AnyWordSpec with MkGcInjector {
   "Garbage-collecting injector" when {
     "plan is re-finished" should {
       "work with autosets" in {
diff --git a/distage/distage-core/src/test/scala/izumi/distage/impl/BootstrapTest.scala b/distage/distage-core/src/test/scala/izumi/distage/impl/BootstrapTest.scala
index 50578c514..e7591eba6 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/impl/BootstrapTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/impl/BootstrapTest.scala
@@ -5,9 +5,9 @@ import izumi.distage.model.exceptions.MissingInstanceException
 import izumi.distage.model.planning.PlanAnalyzer
 import izumi.distage.planning.PlanAnalyzerDefaultImpl
 import distage.DIKey
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class BootstrapTest extends WordSpec {
+class BootstrapTest extends AnyWordSpec {
 
   "Bootstrap Context" should {
     "contain expected definitions" in {
diff --git a/distage/distage-core/src/test/scala/izumi/distage/impl/ModelTest.scala b/distage/distage-core/src/test/scala/izumi/distage/impl/ModelTest.scala
index 848f07787..040660d35 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/impl/ModelTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/impl/ModelTest.scala
@@ -2,9 +2,9 @@ package izumi.distage.impl
 
 import izumi.distage.model.planning.PlanAnalyzer
 import distage._
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class ModelTest extends WordSpec {
+class ModelTest extends AnyWordSpec {
 
   "DI Keys" should {
     "support equality checks" in {
diff --git a/distage/distage-core/src/test/scala/izumi/distage/impl/ProviderMagnetTest.scala b/distage/distage-core/src/test/scala/izumi/distage/impl/ProviderMagnetTest.scala
index 505a0174e..f0c0c54be 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/impl/ProviderMagnetTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/impl/ProviderMagnetTest.scala
@@ -6,9 +6,9 @@ import izumi.distage.fixtures.ProviderCases.ProviderCase1
 import izumi.distage.model.providers.ProviderMagnet
 import izumi.distage.model.reflection.universe.RuntimeDIUniverse
 import izumi.fundamentals.platform.language.Quirks._
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class ProviderMagnetTest extends WordSpec {
+class ProviderMagnetTest extends AnyWordSpec {
   import ProviderCase1._
 
   def priv(@Id("locargann") x: Int): Unit = x.discard()
diff --git a/distage/distage-core/src/test/scala/izumi/distage/injector/AdvancedBindingsTest.scala b/distage/distage-core/src/test/scala/izumi/distage/injector/AdvancedBindingsTest.scala
index 19c81cdbd..19c323d6f 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/injector/AdvancedBindingsTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/injector/AdvancedBindingsTest.scala
@@ -5,11 +5,11 @@ import izumi.distage.fixtures.SetCases.SetCase2
 import izumi.distage.model.PlannerInput
 import izumi.distage.model.exceptions.TODOBindingException
 import distage.ModuleDef
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
 import scala.util.Try
 
-class AdvancedBindingsTest extends WordSpec with MkInjector {
+class AdvancedBindingsTest extends AnyWordSpec with MkInjector {
 
   "Support TODO bindings" in {
     import BasicCase1._
diff --git a/distage/distage-core/src/test/scala/izumi/distage/injector/AdvancedTypesTest.scala b/distage/distage-core/src/test/scala/izumi/distage/injector/AdvancedTypesTest.scala
index 347e05087..e4ef4194d 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/injector/AdvancedTypesTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/injector/AdvancedTypesTest.scala
@@ -7,12 +7,12 @@ import izumi.distage.fixtures.TypesCases._
 import izumi.distage.model.PlannerInput
 import izumi.fundamentals.platform.language.IzScala.ScalaRelease
 import izumi.fundamentals.reflection.ProjectAttributeMacro
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
 import scala.Ordering.Implicits.infixOrderingOps
 import scala.language.reflectiveCalls
 
-class AdvancedTypesTest extends WordSpec with MkInjector {
+class AdvancedTypesTest extends AnyWordSpec with MkInjector {
 
   "support generics" in {
     import TypesCase1._
diff --git a/distage/distage-core/src/test/scala/izumi/distage/injector/AutoSetTest.scala b/distage/distage-core/src/test/scala/izumi/distage/injector/AutoSetTest.scala
index 9f937b1c6..d45881637 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/injector/AutoSetTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/injector/AutoSetTest.scala
@@ -5,9 +5,9 @@ import izumi.distage.fixtures.SetCases._
 import izumi.distage.model.PlannerInput
 import izumi.distage.model.planning.PlanningHook
 import izumi.distage.planning.AutoSetHook
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class AutoSetTest extends WordSpec with MkInjector {
+class AutoSetTest extends AnyWordSpec with MkInjector {
 
   "AutoSets preserve dependency order" in {
     import SetCase3._
diff --git a/distage/distage-core/src/test/scala/izumi/distage/injector/AutoTraitsTest.scala b/distage/distage-core/src/test/scala/izumi/distage/injector/AutoTraitsTest.scala
index 331c50d1c..d8ea93684 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/injector/AutoTraitsTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/injector/AutoTraitsTest.scala
@@ -4,9 +4,9 @@ import distage.ModuleDef
 import izumi.distage.fixtures.TraitCases._
 import izumi.distage.fixtures.TypesCases.TypesCase3
 import izumi.distage.model.PlannerInput
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class AutoTraitsTest extends WordSpec with MkInjector {
+class AutoTraitsTest extends AnyWordSpec with MkInjector {
 
   "support trait fields" in {
     import TraitCase3._
diff --git a/distage/distage-core/src/test/scala/izumi/distage/injector/AxisTest.scala b/distage/distage-core/src/test/scala/izumi/distage/injector/AxisTest.scala
index a3c930ef5..dad55b59b 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/injector/AxisTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/injector/AxisTest.scala
@@ -5,9 +5,9 @@ import izumi.distage.model.PlannerInput
 import izumi.distage.model.definition.StandardAxis.Repo
 import izumi.distage.model.definition.{Activation, ModuleDef}
 import izumi.distage.model.plan.GCMode
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class AxisTest extends WordSpec with MkInjector {
+class AxisTest extends AnyWordSpec with MkInjector {
 
   "choose between dependency implementations" in {
     import izumi.distage.fixtures.BasicCases.BasicCase1._
diff --git a/distage/distage-core/src/test/scala/izumi/distage/injector/BasicTest.scala b/distage/distage-core/src/test/scala/izumi/distage/injector/BasicTest.scala
index 0797ea9d1..d4f78e4e8 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/injector/BasicTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/injector/BasicTest.scala
@@ -8,12 +8,12 @@ import izumi.distage.model.definition.Binding.SetElementBinding
 import izumi.distage.model.definition.{BindingTag, Id}
 import izumi.distage.model.exceptions.{ConflictingDIKeyBindingsException, ProvisioningException}
 import izumi.distage.model.plan.ExecutableOp.ImportDependency
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 import org.scalatest.exceptions.TestFailedException
 
 
 
-class BasicTest extends WordSpec with MkInjector {
+class BasicTest extends AnyWordSpec with MkInjector {
 
   "maintain correct operation order" in {
     import BasicCase1._
diff --git a/distage/distage-core/src/test/scala/izumi/distage/injector/CircularDependenciesTest.scala b/distage/distage-core/src/test/scala/izumi/distage/injector/CircularDependenciesTest.scala
index 6510efaca..931308c2c 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/injector/CircularDependenciesTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/injector/CircularDependenciesTest.scala
@@ -10,9 +10,9 @@ import izumi.distage.model.exceptions.{ProvisioningException, TraitInitializatio
 import izumi.distage.model.plan.ExecutableOp.InstantiationOp
 import izumi.distage.model.plan.ExecutableOp.ProxyOp.MakeProxy
 import izumi.distage.model.provisioning.proxies.ProxyDispatcher
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class CircularDependenciesTest extends WordSpec with MkInjector {
+class CircularDependenciesTest extends AnyWordSpec with MkInjector {
 
   "support trait initialization" in {
     import CircularCase2._
diff --git a/distage/distage-core/src/test/scala/izumi/distage/injector/CompactPlanFormatterTest.scala b/distage/distage-core/src/test/scala/izumi/distage/injector/CompactPlanFormatterTest.scala
index f5c882f06..f1c1540b0 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/injector/CompactPlanFormatterTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/injector/CompactPlanFormatterTest.scala
@@ -6,7 +6,7 @@ import izumi.distage.fixtures.HigherKindCases.HigherKindsCase1.OptionT
 import izumi.distage.injector.CompactPlanFormatterTest._
 import izumi.distage.model.PlannerInput
 import izumi.functional.Renderable._
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
 object CompactPlanFormatterTest {
   trait T1[A, B]
@@ -22,7 +22,7 @@ object CompactPlanFormatterTest {
   }
 }
 
-class CompactPlanFormatterTest extends WordSpec with MkInjector {
+class CompactPlanFormatterTest extends AnyWordSpec with MkInjector {
   "PlanFormatterTest should produce short class names if it's unique in plan" in {
     val injector = mkInjector()
     val plan = injector.plan(PlannerInput.noGc(new ModuleDef {
diff --git a/distage/distage-core/src/test/scala/izumi/distage/injector/FactoriesTest.scala b/distage/distage-core/src/test/scala/izumi/distage/injector/FactoriesTest.scala
index d5db2424a..474961dac 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/injector/FactoriesTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/injector/FactoriesTest.scala
@@ -5,12 +5,12 @@ import izumi.distage.constructors.FactoryConstructor
 import izumi.distage.fixtures.FactoryCases._
 import izumi.distage.model.PlannerInput
 import izumi.fundamentals.platform.functional.Identity
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 import org.scalatest.exceptions.TestFailedException
 
 import scala.language.reflectiveCalls
 
-class FactoriesTest extends WordSpec with MkInjector {
+class FactoriesTest extends AnyWordSpec with MkInjector {
 
   "handle factory injections" in {
     import FactoryCase1._
diff --git a/distage/distage-core/src/test/scala/izumi/distage/injector/HigherKindsTest.scala b/distage/distage-core/src/test/scala/izumi/distage/injector/HigherKindsTest.scala
index c9ac66bcb..5ac436bef 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/injector/HigherKindsTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/injector/HigherKindsTest.scala
@@ -4,9 +4,9 @@ import distage._
 import izumi.distage.fixtures.HigherKindCases._
 import izumi.distage.model.PlannerInput
 import izumi.fundamentals.reflection.macrortti.LTag
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class HigherKindsTest extends WordSpec with MkInjector {
+class HigherKindsTest extends AnyWordSpec with MkInjector {
 
   "support tagless final style module definitions" in {
     import HigherKindsCase1._
diff --git a/distage/distage-core/src/test/scala/izumi/distage/injector/ImplicitInjectionTest.scala b/distage/distage-core/src/test/scala/izumi/distage/injector/ImplicitInjectionTest.scala
index d0fa2ebbe..e51d312c1 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/injector/ImplicitInjectionTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/injector/ImplicitInjectionTest.scala
@@ -4,9 +4,9 @@ import izumi.distage.fixtures.ImplicitCases.{ImplicitCase1, ImplicitCase2}
 import izumi.distage.model.PlannerInput
 import izumi.fundamentals.platform.language.Quirks.discard
 import distage.ModuleDef
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class ImplicitInjectionTest extends WordSpec with MkInjector {
+class ImplicitInjectionTest extends AnyWordSpec with MkInjector {
 
   "Handle multiple parameter lists" in {
     import ImplicitCase2._
diff --git a/distage/distage-core/src/test/scala/izumi/distage/injector/InnerClassesTest.scala b/distage/distage-core/src/test/scala/izumi/distage/injector/InnerClassesTest.scala
index c5a2aa4eb..87c84366b 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/injector/InnerClassesTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/injector/InnerClassesTest.scala
@@ -4,9 +4,9 @@ import izumi.distage.constructors.FactoryConstructor
 import izumi.distage.fixtures.InnerClassCases._
 import izumi.distage.model.PlannerInput
 import izumi.distage.model.definition.ModuleDef
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class InnerClassesTest extends WordSpec with MkInjector {
+class InnerClassesTest extends AnyWordSpec with MkInjector {
   "can instantiate inner classes from stable objects where the classes are inherited from a trait" in {
     import InnerClassStablePathsCase._
 
diff --git a/distage/distage-core/src/test/scala/izumi/distage/injector/PlanOperationsTest.scala b/distage/distage-core/src/test/scala/izumi/distage/injector/PlanOperationsTest.scala
index be89ed40b..9a532f53b 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/injector/PlanOperationsTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/injector/PlanOperationsTest.scala
@@ -3,10 +3,10 @@ package izumi.distage.injector
 import distage._
 import izumi.distage.model.PlannerInput
 import izumi.distage.model.plan.ExecutableOp.ImportDependency
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
 
-class PlanOperationsTest extends WordSpec with MkInjector {
+class PlanOperationsTest extends AnyWordSpec with MkInjector {
 
   import PlanOperationsTest._
 
diff --git a/distage/distage-core/src/test/scala/izumi/distage/injector/ProvidersTest.scala b/distage/distage-core/src/test/scala/izumi/distage/injector/ProvidersTest.scala
index 8c08f1718..5e1d33e2f 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/injector/ProvidersTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/injector/ProvidersTest.scala
@@ -3,9 +3,9 @@ package izumi.distage.injector
 import izumi.distage.fixtures.ProviderCases.{ProviderCase2, ProviderCase3}
 import izumi.distage.model.PlannerInput
 import distage.{Id, ModuleDef}
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class ProvidersTest extends WordSpec with MkInjector {
+class ProvidersTest extends AnyWordSpec with MkInjector {
 
   "instantiate provider bindings" in {
     import ProviderCase2._
diff --git a/distage/distage-core/src/test/scala/izumi/distage/injector/ResourceEffectBindingsTest.scala b/distage/distage-core/src/test/scala/izumi/distage/injector/ResourceEffectBindingsTest.scala
index 6c35a5c27..824375849 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/injector/ResourceEffectBindingsTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/injector/ResourceEffectBindingsTest.scala
@@ -10,7 +10,7 @@ import izumi.distage.model.exceptions.ProvisioningException
 import izumi.distage.model.plan.GCMode
 import izumi.fundamentals.platform.functional.Identity
 import izumi.fundamentals.platform.language.Quirks._
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 import org.scalatest.exceptions.TestFailedException
 
 import scala.collection.mutable
@@ -21,7 +21,7 @@ object ResourceEffectBindingsTest {
   final type Ft[+A] = Suspend2[Throwable, A]
 }
 
-class ResourceEffectBindingsTest extends WordSpec with MkInjector {
+class ResourceEffectBindingsTest extends AnyWordSpec with MkInjector {
 
   "Effect bindings" should {
 
diff --git a/distage/distage-core/src/test/scala/izumi/distage/staticinjector/MacroAutoFactoriesTest.scala b/distage/distage-core/src/test/scala/izumi/distage/staticinjector/MacroAutoFactoriesTest.scala
index fe0c2a46d..83b9b58dd 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/staticinjector/MacroAutoFactoriesTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/staticinjector/MacroAutoFactoriesTest.scala
@@ -4,9 +4,9 @@ import izumi.distage.fixtures.FactoryCases.FactoryCase1
 import izumi.distage.injector.MkInjector
 import izumi.distage.model.PlannerInput
 import izumi.distage.model.definition.ModuleDef
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class MacroAutoFactoriesTest extends WordSpec with MkInjector {
+class MacroAutoFactoriesTest extends AnyWordSpec with MkInjector {
 
   "handle macro factory injections" in {
     import FactoryCase1._
diff --git a/distage/distage-core/src/test/scala/izumi/distage/staticinjector/MacroAutoTraitsTest.scala b/distage/distage-core/src/test/scala/izumi/distage/staticinjector/MacroAutoTraitsTest.scala
index 19f3810a5..1c2d13f56 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/staticinjector/MacroAutoTraitsTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/staticinjector/MacroAutoTraitsTest.scala
@@ -7,9 +7,9 @@ import izumi.distage.injector.MkInjector
 import izumi.distage.model.PlannerInput
 import izumi.distage.model.definition.ModuleDef
 import izumi.distage.model.reflection.universe.RuntimeDIUniverse.TypedRef
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class MacroAutoTraitsTest extends WordSpec with MkInjector {
+class MacroAutoTraitsTest extends AnyWordSpec with MkInjector {
 
   "construct a basic trait" in {
     val traitCtor = AnyConstructor[Aaa].provider.get
diff --git a/distage/distage-core/src/test/scala/izumi/distage/staticinjector/StaticHigherKindsTest.scala b/distage/distage-core/src/test/scala/izumi/distage/staticinjector/StaticHigherKindsTest.scala
index ec3721273..82a2d03bf 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/staticinjector/StaticHigherKindsTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/staticinjector/StaticHigherKindsTest.scala
@@ -5,9 +5,9 @@ import izumi.distage.fixtures.HigherKindCases.HigherKindsCase1
 import izumi.distage.injector.MkInjector
 import izumi.distage.model.PlannerInput
 import izumi.distage.model.definition.ModuleDef
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class StaticHigherKindsTest extends WordSpec with MkInjector {
+class StaticHigherKindsTest extends AnyWordSpec with MkInjector {
 
   "macros support tagless final style module definitions" in {
     import HigherKindsCase1._
diff --git a/distage/distage-core/src/test/scala/izumi/distage/staticinjector/StaticImplicitInjectionTest.scala b/distage/distage-core/src/test/scala/izumi/distage/staticinjector/StaticImplicitInjectionTest.scala
index 0f3dca4f1..54b8245bb 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/staticinjector/StaticImplicitInjectionTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/staticinjector/StaticImplicitInjectionTest.scala
@@ -4,9 +4,9 @@ import izumi.distage.fixtures.ImplicitCases.ImplicitCase2
 import izumi.distage.injector.MkInjector
 import izumi.distage.model.PlannerInput
 import izumi.distage.model.definition.ModuleDef
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class StaticImplicitInjectionTest extends WordSpec with MkInjector {
+class StaticImplicitInjectionTest extends AnyWordSpec with MkInjector {
 
   "Handle multiple parameter lists" in {
     import ImplicitCase2._
diff --git a/distage/distage-core/src/test/scala/izumi/distage/staticinjector/StaticInnerClassesTest.scala b/distage/distage-core/src/test/scala/izumi/distage/staticinjector/StaticInnerClassesTest.scala
index 2699682c0..45d9ecd56 100644
--- a/distage/distage-core/src/test/scala/izumi/distage/staticinjector/StaticInnerClassesTest.scala
+++ b/distage/distage-core/src/test/scala/izumi/distage/staticinjector/StaticInnerClassesTest.scala
@@ -4,9 +4,9 @@ import izumi.distage.fixtures.InnerClassCases.{InnerClassStablePathsCase, InnerC
 import izumi.distage.injector.MkInjector
 import izumi.distage.model.PlannerInput
 import izumi.distage.model.definition.ModuleDef
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class StaticInnerClassesTest extends WordSpec with MkInjector {
+class StaticInnerClassesTest extends AnyWordSpec with MkInjector {
 
   "macros can handle class local path-dependent injections" in {
     val definition = new ModuleDef {
diff --git a/distage/distage-extension-config/src/test/scala/izumi/distage/config/ConfigTest.scala b/distage/distage-extension-config/src/test/scala/izumi/distage/config/ConfigTest.scala
index bb3c7e469..077ccb22a 100644
--- a/distage/distage-extension-config/src/test/scala/izumi/distage/config/ConfigTest.scala
+++ b/distage/distage-extension-config/src/test/scala/izumi/distage/config/ConfigTest.scala
@@ -7,12 +7,12 @@
 //import distage.{Injector, ModuleDef}
 //import izumi.distage.config.model.AppConfig
 //import izumi.distage.model.PlannerInput
-//import org.scalatest.WordSpec
+//import org.scalatest.wordspec.AnyWordSpec
 //
 //import scala.collection.immutable.ListSet
 //import scala.collection.mutable
 //
-//class ConfigTest extends WordSpec {
+//class ConfigTest extends AnyWordSpec {
 //  def mkConfigModule(path: String): AppConfigModule = {
 //    mkModule(ConfigFactory.load(path))
 //  }
diff --git a/distage/distage-extension-config/src/test/scala/izumi/distage/config/StaticConfigTest.scala b/distage/distage-extension-config/src/test/scala/izumi/distage/config/StaticConfigTest.scala
index 5318daaa7..324c7cd24 100644
--- a/distage/distage-extension-config/src/test/scala/izumi/distage/config/StaticConfigTest.scala
+++ b/distage/distage-extension-config/src/test/scala/izumi/distage/config/StaticConfigTest.scala
@@ -7,9 +7,9 @@
 //import izumi.distage.injector.MkInjector
 //import izumi.distage.model.PlannerInput
 //import izumi.distage.model.definition.ModuleDef
-//import org.scalatest.WordSpec
+//import org.scalatest.wordspec.AnyWordSpec
 //
-//class StaticConfigTest extends WordSpec with MkInjector {
+//class StaticConfigTest extends AnyWordSpec with MkInjector {
 //
 //  "Inject config works for macro trait methods" in {
 //    import ConfigFixtures._
diff --git a/distage/distage-extension-logstage/src/test/scala/izumi/logstage/distage/LoggerInjectionTest.scala b/distage/distage-extension-logstage/src/test/scala/izumi/logstage/distage/LoggerInjectionTest.scala
index 0b7ebefc7..b95296467 100644
--- a/distage/distage-extension-logstage/src/test/scala/izumi/logstage/distage/LoggerInjectionTest.scala
+++ b/distage/distage-extension-logstage/src/test/scala/izumi/logstage/distage/LoggerInjectionTest.scala
@@ -4,7 +4,7 @@ import izumi.distage.model.PlannerInput
 import izumi.logstage.api.routing.ConfigurableLogRouter
 import izumi.logstage.api.{IzLogger, TestSink}
 import distage.{Injector, ModuleDef}
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
 class ExampleService(log: IzLogger) {
   def compute: Int = {
@@ -20,7 +20,7 @@ class ExampleApp(log: IzLogger, service: ExampleService) {
   }
 }
 
-class LoggerInjectionTest extends WordSpec {
+class LoggerInjectionTest extends AnyWordSpec {
   "Logging module for distage" should {
     "inject loggers" in {
       val testSink = new TestSink()
diff --git a/distage/distage-framework-docker/src/test/scala/izumi/distage/testkit/docker/DockerContainerProviderTest.scala b/distage/distage-framework-docker/src/test/scala/izumi/distage/testkit/docker/DockerContainerProviderTest.scala
index 83ae8266f..a529b5abe 100644
--- a/distage/distage-framework-docker/src/test/scala/izumi/distage/testkit/docker/DockerContainerProviderTest.scala
+++ b/distage/distage-framework-docker/src/test/scala/izumi/distage/testkit/docker/DockerContainerProviderTest.scala
@@ -5,9 +5,9 @@ import izumi.distage.docker.DockerContainer
 import izumi.distage.docker.examples.PostgresDocker
 import izumi.distage.model.definition.DIResource
 import izumi.fundamentals.platform.functional.Identity
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-final class DockerContainerProviderTest extends WordSpec {
+final class DockerContainerProviderTest extends AnyWordSpec {
   "Return type is correct" in {
     assert(PostgresDocker.make[Identity].get.ret == SafeType.get[DIResource[Identity, DockerContainer[PostgresDocker.Tag]]])
   }
diff --git a/distage/distage-framework/src/test/scala/izumi/distage/roles/test/RoleAppTest.scala b/distage/distage-framework/src/test/scala/izumi/distage/roles/test/RoleAppTest.scala
index db1368f4c..6e2566d72 100644
--- a/distage/distage-framework/src/test/scala/izumi/distage/roles/test/RoleAppTest.scala
+++ b/distage/distage-framework/src/test/scala/izumi/distage/roles/test/RoleAppTest.scala
@@ -20,9 +20,9 @@ import izumi.distage.roles.test.fixtures.roles.TestRole00
 import izumi.fundamentals.platform.functional.Identity
 import izumi.fundamentals.platform.resources.ArtifactVersion
 import izumi.logstage.api.IzLogger
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class RoleAppTest extends WordSpec
+class RoleAppTest extends AnyWordSpec
   with WithProperties {
   private val prefix = "target/configwriter"
 
diff --git a/distage/distage-framework/src/test/scala/izumi/distage/roles/test/StaticPluginCheckerTest.scala b/distage/distage-framework/src/test/scala/izumi/distage/roles/test/StaticPluginCheckerTest.scala
index df4658beb..16c9ea89c 100644
--- a/distage/distage-framework/src/test/scala/izumi/distage/roles/test/StaticPluginCheckerTest.scala
+++ b/distage/distage-framework/src/test/scala/izumi/distage/roles/test/StaticPluginCheckerTest.scala
@@ -2,10 +2,10 @@ package izumi.distage.roles.test
 
 import izumi.distage.staticinjector.plugins.{LogstageModuleRequirements, StaticPluginChecker}
 import com.github.pshirshov.test.plugins.{DependingPlugin, StaticTestPlugin}
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 import org.scalatest.exceptions.TestFailedException
 
-class StaticPluginCheckerTest extends WordSpec {
+class StaticPluginCheckerTest extends AnyWordSpec {
 
   "Check without config" in {
     StaticPluginChecker.check[StaticTestPlugin, LogstageModuleRequirements]("test:x")
diff --git a/distage/distage-testkit-core/src/test/scala/izumi/distage/testkit/catstest/CatsExtensionsTest.scala b/distage/distage-testkit-core/src/test/scala/izumi/distage/testkit/catstest/CatsExtensionsTest.scala
index 707bff595..e3970aeaa 100644
--- a/distage/distage-testkit-core/src/test/scala/izumi/distage/testkit/catstest/CatsExtensionsTest.scala
+++ b/distage/distage-testkit-core/src/test/scala/izumi/distage/testkit/catstest/CatsExtensionsTest.scala
@@ -3,16 +3,17 @@ package izumi.distage.testkit.catstest
 import cats.Id
 import cats.effect._
 import cats.instances.option._
+import distage.{DIKey, Injector}
 import izumi.distage.fixtures.BasicCases._
 import izumi.distage.fixtures.CircularCases._
 import izumi.distage.model.PlannerInput
 import izumi.distage.model.definition.ModuleDef
-import izumi.distage.model.plan.ExecutableOp.WiringOp.UseInstance
-import distage._
 import izumi.distage.model.plan.ExecutableOp.SemiplanOp
-import org.scalatest.{GivenWhenThen, WordSpec}
+import izumi.distage.model.plan.ExecutableOp.WiringOp.UseInstance
+import org.scalatest.GivenWhenThen
+import org.scalatest.wordspec.AnyWordSpec
 
-class CatsExtensionsTest extends WordSpec with GivenWhenThen {
+class CatsExtensionsTest extends AnyWordSpec with GivenWhenThen {
 
   "cats-effect extensions" should {
     "work" in {
diff --git a/distage/distage-testkit-core/src/test/scala/izumi/distage/testkit/catstest/CatsResourcesTest.scala b/distage/distage-testkit-core/src/test/scala/izumi/distage/testkit/catstest/CatsResourcesTest.scala
index 1650a42a3..a22430210 100644
--- a/distage/distage-testkit-core/src/test/scala/izumi/distage/testkit/catstest/CatsResourcesTest.scala
+++ b/distage/distage-testkit-core/src/test/scala/izumi/distage/testkit/catstest/CatsResourcesTest.scala
@@ -1,14 +1,15 @@
 package izumi.distage.testkit.catstest
 
 import cats.effect.{Bracket, IO, Resource, Sync}
+import distage._
 import izumi.distage.model.definition.Binding.SingletonBinding
 import izumi.distage.model.definition.{DIResource, ImplDef, ModuleDef}
 import izumi.distage.model.effect.LowPriorityDIEffectInstances
-import izumi.distage.testkit.catstest.CatsResourcesTest.{DBConnection, MessageQueueConnection, MyApp, Res, Res1}
-import izumi.fundamentals.platform.language.Quirks._
-import distage._
 import izumi.distage.model.plan.GCMode
-import org.scalatest.{GivenWhenThen, WordSpec}
+import izumi.distage.testkit.catstest.CatsResourcesTest._
+import izumi.fundamentals.platform.language.Quirks._
+import org.scalatest.GivenWhenThen
+import org.scalatest.wordspec.AnyWordSpec
 
 object CatsResourcesTest {
   class Res { var initialized = false }
@@ -25,7 +26,7 @@ object CatsResourcesTest {
   }
 }
 
-class CatsResourcesTest extends WordSpec with GivenWhenThen {
+class CatsResourcesTest extends AnyWordSpec with GivenWhenThen {
 
   "`No More Orphans` type provider is accessible" in {
     def y[R[_[_]]: LowPriorityDIEffectInstances._Sync]() = ()
diff --git a/distage/distage-testkit-core/src/test/scala/izumi/distage/testkit/catstest/ModuleBaseInstancesTest.scala b/distage/distage-testkit-core/src/test/scala/izumi/distage/testkit/catstest/ModuleBaseInstancesTest.scala
index ceb8e5cc1..269349e20 100644
--- a/distage/distage-testkit-core/src/test/scala/izumi/distage/testkit/catstest/ModuleBaseInstancesTest.scala
+++ b/distage/distage-testkit-core/src/test/scala/izumi/distage/testkit/catstest/ModuleBaseInstancesTest.scala
@@ -4,9 +4,9 @@ import cats.implicits._
 import izumi.distage.fixtures.BasicCases._
 import izumi.distage.model.definition.Bindings.binding
 import izumi.distage.model.definition._
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class ModuleBaseInstancesTest extends WordSpec {
+class ModuleBaseInstancesTest extends AnyWordSpec {
   "cats instances for ContextDefinition" should {
     "allow monoidal & Eq.eqv operations between different types of binding dsls" in {
       import BasicCase1._
diff --git a/distage/distage-testkit-legacy/src/main/scala/izumi/distage/testkit/DistageSpec.scala b/distage/distage-testkit-legacy/src/main/scala/izumi/distage/testkit/DistageSpec.scala
index 1531a69ef..99cca3095 100644
--- a/distage/distage-testkit-legacy/src/main/scala/izumi/distage/testkit/DistageSpec.scala
+++ b/distage/distage-testkit-legacy/src/main/scala/izumi/distage/testkit/DistageSpec.scala
@@ -2,10 +2,11 @@ package izumi.distage.testkit
 
 import izumi.distage.testkit.services.scalatest.adapter.DistageTestSupport
 import izumi.fundamentals.reflection.Tags.TagK
-import org.scalatest.{ScalatestSuite, WordSpecLike}
+import org.scalatest.ScalatestSuite
+import org.scalatest.wordspec.AnyWordSpecLike
 
 @deprecated("Use dstest", "2019/Jul/18")
-abstract class DistageSpec[F[_]: TagK] extends DistageTestSupport[F] with WordSpecLike {
+abstract class DistageSpec[F[_]: TagK] extends DistageTestSupport[F] with AnyWordSpecLike {
   override def toString: String = ScalatestSuite.suiteToString(None, this)
 }
 
diff --git a/distage/distage-testkit-legacy/src/main/scala/scalatest/adapter/specs/DistagePluginSpec.scala b/distage/distage-testkit-legacy/src/main/scala/scalatest/adapter/specs/DistagePluginSpec.scala
index 24fd2e400..ccab51b6b 100644
--- a/distage/distage-testkit-legacy/src/main/scala/scalatest/adapter/specs/DistagePluginSpec.scala
+++ b/distage/distage-testkit-legacy/src/main/scala/scalatest/adapter/specs/DistagePluginSpec.scala
@@ -2,10 +2,11 @@ package scalatest.adapter.specs
 
 import izumi.distage.testkit.services.scalatest.adapter.DistagePluginTestSupport
 import izumi.fundamentals.reflection.Tags.TagK
-import org.scalatest.{ScalatestSuite, WordSpecLike}
+import org.scalatest.ScalatestSuite
+import org.scalatest.wordspec.AnyWordSpecLike
 
 @deprecated("Use dstest", "2019/Jul/18")
-abstract class DistagePluginSpec[F[_]](implicit val tagMonoIO: TagK[F]) extends DistagePluginTestSupport[F] with WordSpecLike {
+abstract class DistagePluginSpec[F[_]](implicit val tagMonoIO: TagK[F]) extends DistagePluginTestSupport[F] with AnyWordSpecLike {
 
   override def toString: String = ScalatestSuite.suiteToString(None, this)
 }
diff --git a/distage/distage-testkit-scalatest/src/main/scala/org/scalatest/ScalatestReporter.scala b/distage/distage-testkit-scalatest/src/main/scala/org/scalatest/ScalatestReporter.scala
index 0e911e3b2..9b0c70e00 100644
--- a/distage/distage-testkit-scalatest/src/main/scala/org/scalatest/ScalatestReporter.scala
+++ b/distage/distage-testkit-scalatest/src/main/scala/org/scalatest/ScalatestReporter.scala
@@ -74,6 +74,7 @@ class ScalatestReporter(reporter: Reporter) extends TestReporter {
           testName,
           testName,
           recordedEvents = Vector.empty,
+          analysis = Vector.empty,
           throwable = Some(t),
           duration = Some(duration.toMillis),
           location = Some(LineInFile(test.pos.position.line, test.pos.position.file, None)),
diff --git a/fundamentals/fundamentals-bio/.jvm/src/test/scala/izumi/functional/bio/test/BlockingIOSyntaxTest.scala b/fundamentals/fundamentals-bio/.jvm/src/test/scala/izumi/functional/bio/test/BlockingIOSyntaxTest.scala
index b0f67ac59..8555f4cf5 100644
--- a/fundamentals/fundamentals-bio/.jvm/src/test/scala/izumi/functional/bio/test/BlockingIOSyntaxTest.scala
+++ b/fundamentals/fundamentals-bio/.jvm/src/test/scala/izumi/functional/bio/test/BlockingIOSyntaxTest.scala
@@ -2,11 +2,11 @@ package izumi.functional.bio.test
 
 import izumi.functional.bio.{BIOFunctor, BlockingIO, BlockingIO3, BlockingIOInstances, F}
 import izumi.fundamentals.bio.test.masking.BIOMonad3
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 import zio.ZIO
 import zio.blocking.Blocking
 
-class BlockingIOSyntaxTest extends WordSpec {
+class BlockingIOSyntaxTest extends AnyWordSpec {
 
   def `attach BlockingIO methods to a trifunctor BIO`[F[-_, +_, +_]: BIOMonad3: BlockingIO3]: F[Any, Throwable, Int] = {
     F.syncBlocking(2)
diff --git a/fundamentals/fundamentals-bio/src/test/scala/izumi/functional/CovariantHKTImplicitsBugTest.scala b/fundamentals/fundamentals-bio/src/test/scala/izumi/functional/CovariantHKTImplicitsBugTest.scala
index 47418ff2a..63781953e 100644
--- a/fundamentals/fundamentals-bio/src/test/scala/izumi/functional/CovariantHKTImplicitsBugTest.scala
+++ b/fundamentals/fundamentals-bio/src/test/scala/izumi/functional/CovariantHKTImplicitsBugTest.scala
@@ -1,20 +1,24 @@
 package izumi.functional
 
-import org.scalatest.{GivenWhenThen, WordSpec}
+import org.scalatest.GivenWhenThen
+import org.scalatest.exceptions.TestFailedException
+import org.scalatest.wordspec.AnyWordSpec
 
-class CovariantHKTImplicitsBugTest extends WordSpec with GivenWhenThen {
+class CovariantHKTImplicitsBugTest extends AnyWordSpec with GivenWhenThen {
 
   "progression test: covariant HKT implicits are broken" in {
     And("quite broken")
-    assertTypeError(
+    val res1 = intercept[TestFailedException](assertCompiles(
       """
         val alg: SomeAlg[IO] = SomeAlg.mk()
-      """)
+      """))
+    assert(res1.getMessage contains "could not find implicit value")
     And("really broken")
-    assertTypeError(
+    val res2 = intercept[TestFailedException](assertCompiles(
       """
         val alg: SomeAlg[IO] = SomeAlg.mk[IO]()
-      """)
+      """))
+    assert(res2.getMessage contains "could not find implicit value")
   }
 
   trait MonoIO[F[_]]
diff --git a/fundamentals/fundamentals-bio/src/test/scala/izumi/fundamentals/bio/MiniBIOCatsLaws.scala b/fundamentals/fundamentals-bio/src/test/scala/izumi/fundamentals/bio/MiniBIOCatsLaws.scala
index f4e0e1701..1102dd164 100644
--- a/fundamentals/fundamentals-bio/src/test/scala/izumi/fundamentals/bio/MiniBIOCatsLaws.scala
+++ b/fundamentals/fundamentals-bio/src/test/scala/izumi/fundamentals/bio/MiniBIOCatsLaws.scala
@@ -16,7 +16,7 @@
 //import izumi.functional.bio.{BIO, BIOExit}
 //import org.scalacheck.Arbitrary
 //import org.scalatest.prop.Checkers
-//import org.scalatest.{FunSuite, WordSpec}
+//import org.scalatest.{FunSuite, AnyWordSpec}
 //import org.typelevel.discipline.scalatest.Discipline
 //
 //class MiniBIOCatsLaws extends FunSuite with Discipline
diff --git a/fundamentals/fundamentals-bio/src/test/scala/izumi/fundamentals/bio/test/BIOSyntaxTest.scala b/fundamentals/fundamentals-bio/src/test/scala/izumi/fundamentals/bio/test/BIOSyntaxTest.scala
index 04e8c3809..8634e7acf 100644
--- a/fundamentals/fundamentals-bio/src/test/scala/izumi/fundamentals/bio/test/BIOSyntaxTest.scala
+++ b/fundamentals/fundamentals-bio/src/test/scala/izumi/fundamentals/bio/test/BIOSyntaxTest.scala
@@ -2,7 +2,7 @@ package izumi.fundamentals.bio.test
 
 import izumi.functional.bio.{BIO, BIOFunctor, BIOMonad, BIOMonadError, BIOPrimitives, BIOTemporal, F}
 import izumi.fundamentals.bio.test.masking._
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
 import scala.concurrent.duration._
 
@@ -16,7 +16,7 @@ object masking {
   type Primitives3[F[-_, +_, +_]] = BIOPrimitives3[F]
 }
 
-class BIOSyntaxTest extends WordSpec {
+class BIOSyntaxTest extends AnyWordSpec {
 
   "BIO.apply is callable" in {
     class X[F[+_, +_]: BIO] {
diff --git a/fundamentals/fundamentals-bio/src/test/scala/izumi/fundamentals/bio/test/CatsConversionTest.scala b/fundamentals/fundamentals-bio/src/test/scala/izumi/fundamentals/bio/test/CatsConversionTest.scala
index ec1f8eff9..92a77c0c5 100644
--- a/fundamentals/fundamentals-bio/src/test/scala/izumi/fundamentals/bio/test/CatsConversionTest.scala
+++ b/fundamentals/fundamentals-bio/src/test/scala/izumi/fundamentals/bio/test/CatsConversionTest.scala
@@ -4,9 +4,9 @@ import cats.effect.concurrent.Ref
 import cats.effect.{Async, Concurrent, Sync}
 import izumi.functional.bio.{BIO, F}
 import izumi.functional.bio.catz._
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class CatsConversionTest extends WordSpec {
+class CatsConversionTest extends AnyWordSpec {
 
   class X[F[+_, +_]: BIO](val ref: Ref[F[Throwable, ?], Int])
 
diff --git a/fundamentals/fundamentals-collections/src/test/scala/izumi/fundamentals/collections/AbstractDIGcTest.scala b/fundamentals/fundamentals-collections/src/test/scala/izumi/fundamentals/collections/AbstractDIGcTest.scala
index 883ec3d95..410f73f75 100644
--- a/fundamentals/fundamentals-collections/src/test/scala/izumi/fundamentals/collections/AbstractDIGcTest.scala
+++ b/fundamentals/fundamentals-collections/src/test/scala/izumi/fundamentals/collections/AbstractDIGcTest.scala
@@ -1,9 +1,9 @@
 package izumi.fundamentals.collections
 
 import izumi.fundamentals.graphs.{AbstractGCTracer, Loops}
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class AbstractDIGcTest extends WordSpec {
+class AbstractDIGcTest extends AnyWordSpec {
   import AbstractDIGcTest._
 
   private val graph = Vector(
diff --git a/fundamentals/fundamentals-collections/src/test/scala/izumi/fundamentals/collections/IzCollectionsTest.scala b/fundamentals/fundamentals-collections/src/test/scala/izumi/fundamentals/collections/IzCollectionsTest.scala
index b46cd3007..b7946ea29 100644
--- a/fundamentals/fundamentals-collections/src/test/scala/izumi/fundamentals/collections/IzCollectionsTest.scala
+++ b/fundamentals/fundamentals-collections/src/test/scala/izumi/fundamentals/collections/IzCollectionsTest.scala
@@ -2,11 +2,11 @@
 package izumi.fundamentals.collections
 
 import izumi.fundamentals.collections.IzCollections._
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
 import scala.collection.mutable
 
-class IzCollectionsTest extends WordSpec {
+class IzCollectionsTest extends AnyWordSpec {
   "Collection utils" should {
     "allow to convert mappings to multimaps" in {
       assert(List("a" -> 1, "a" -> 2).toMultimap == Map("a" -> Set(1, 2)))
diff --git a/fundamentals/fundamentals-collections/src/test/scala/izumi/fundamentals/collections/TagExprTest.scala b/fundamentals/fundamentals-collections/src/test/scala/izumi/fundamentals/collections/TagExprTest.scala
index 93fbf6118..374aac542 100644
--- a/fundamentals/fundamentals-collections/src/test/scala/izumi/fundamentals/collections/TagExprTest.scala
+++ b/fundamentals/fundamentals-collections/src/test/scala/izumi/fundamentals/collections/TagExprTest.scala
@@ -1,10 +1,10 @@
 package izumi.fundamentals.collections
 
 import izumi.fundamentals.tags.TagExpr
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
 
-class TagExprTest extends WordSpec {
+class TagExprTest extends AnyWordSpec {
 
   "Tag expression evaluator" should {
     "support pretty-printing" in {
diff --git a/fundamentals/fundamentals-collections/src/test/scala/izumi/fundamentals/collections/WildcardPrefixTreeTest.scala b/fundamentals/fundamentals-collections/src/test/scala/izumi/fundamentals/collections/WildcardPrefixTreeTest.scala
index 4d523c5cd..4f7b65e6e 100644
--- a/fundamentals/fundamentals-collections/src/test/scala/izumi/fundamentals/collections/WildcardPrefixTreeTest.scala
+++ b/fundamentals/fundamentals-collections/src/test/scala/izumi/fundamentals/collections/WildcardPrefixTreeTest.scala
@@ -1,9 +1,9 @@
 package izumi.fundamentals.collections
 
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
 
-class WildcardPrefixTreeTest extends WordSpec {
+class WildcardPrefixTreeTest extends AnyWordSpec {
   def call[K, V](tree: WildcardPrefixTree[K, V], path: K*): Set[V] = {
     tree.findSubtrees(path.toList).flatMap(_.subtreeValues).toSet
   }
diff --git a/fundamentals/fundamentals-functional/src/test/scala/izumi/functional/IzEitherTest.scala b/fundamentals/fundamentals-functional/src/test/scala/izumi/functional/IzEitherTest.scala
index 0a5d04758..1a300ba41 100644
--- a/fundamentals/fundamentals-functional/src/test/scala/izumi/functional/IzEitherTest.scala
+++ b/fundamentals/fundamentals-functional/src/test/scala/izumi/functional/IzEitherTest.scala
@@ -1,8 +1,8 @@
 package izumi.functional
 
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class IzEitherTest extends WordSpec {
+class IzEitherTest extends AnyWordSpec {
   type BuilderFail
   type IzType
   type Result[+T] = Either[List[BuilderFail], T]
diff --git a/fundamentals/fundamentals-json-circe/src/test/scala/izumi/flat/IzJsonFlattenerTest.scala b/fundamentals/fundamentals-json-circe/src/test/scala/izumi/flat/IzJsonFlattenerTest.scala
index 9e0531179..5c3e847f9 100644
--- a/fundamentals/fundamentals-json-circe/src/test/scala/izumi/flat/IzJsonFlattenerTest.scala
+++ b/fundamentals/fundamentals-json-circe/src/test/scala/izumi/flat/IzJsonFlattenerTest.scala
@@ -4,9 +4,10 @@ package izumi.flat
 import io.circe.Json
 import io.circe.literal._
 import izumi.fundamentals.json.flat.JsonFlattener
-import org.scalatest.{Assertion, WordSpec}
+import org.scalatest.Assertion
+import org.scalatest.wordspec.AnyWordSpec
 
-class IzJsonFlattenerTest extends WordSpec {
+class IzJsonFlattenerTest extends AnyWordSpec {
 
   "JSON flattener" should {
     "keep identity" in {
@@ -20,7 +21,6 @@ class IzJsonFlattenerTest extends WordSpec {
     }
   }
 
-
   private def check(original: Json): Assertion = {
     val flattened = new JsonFlattener().flatten(original)
     val inflated = new JsonFlattener().inflate(flattened)
diff --git a/fundamentals/fundamentals-platform/.jvm/src/test/scala/izumi/fundamentals/platform/IzFilesTest.scala b/fundamentals/fundamentals-platform/.jvm/src/test/scala/izumi/fundamentals/platform/IzFilesTest.scala
index 604aad5b5..e982d59e2 100644
--- a/fundamentals/fundamentals-platform/.jvm/src/test/scala/izumi/fundamentals/platform/IzFilesTest.scala
+++ b/fundamentals/fundamentals-platform/.jvm/src/test/scala/izumi/fundamentals/platform/IzFilesTest.scala
@@ -3,13 +3,13 @@ package izumi.fundamentals.platform
 import java.util.concurrent.TimeUnit
 
 import izumi.fundamentals.platform.files.IzFiles
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
 import scala.concurrent.Await
 import scala.concurrent.duration.Duration
 
 
-class IzFilesTest extends WordSpec {
+class IzFilesTest extends AnyWordSpec {
 
   "File tools" should {
     "resolve path entries on nix-like systems" in {
diff --git a/fundamentals/fundamentals-platform/.jvm/src/test/scala/izumi/fundamentals/platform/IzManifestTest.scala b/fundamentals/fundamentals-platform/.jvm/src/test/scala/izumi/fundamentals/platform/IzManifestTest.scala
index f86b2010c..8193f56cf 100644
--- a/fundamentals/fundamentals-platform/.jvm/src/test/scala/izumi/fundamentals/platform/IzManifestTest.scala
+++ b/fundamentals/fundamentals-platform/.jvm/src/test/scala/izumi/fundamentals/platform/IzManifestTest.scala
@@ -1,9 +1,9 @@
 package izumi.fundamentals.platform
 
 import izumi.fundamentals.platform.resources.IzManifest
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class IzManifestTest extends WordSpec {
+class IzManifestTest extends AnyWordSpec {
 
   "Manifest reader" should {
     "support classpath manifest loading" in {
@@ -20,7 +20,7 @@ class IzManifestTest extends WordSpec {
     }
 
     "support jar manifest loading" in {
-      val maybeMf = IzManifest.manifest[WordSpec]().map(IzManifest.read)
+      val maybeMf = IzManifest.manifest[AnyWordSpec]().map(IzManifest.read)
       assert(maybeMf.isDefined)
       val mf = maybeMf.get
       assert(mf.version.version.length > 2)
diff --git a/fundamentals/fundamentals-platform/.jvm/src/test/scala/izumi/fundamentals/platform/IzOsTest.scala b/fundamentals/fundamentals-platform/.jvm/src/test/scala/izumi/fundamentals/platform/IzOsTest.scala
index 10bccc518..fb8ace319 100644
--- a/fundamentals/fundamentals-platform/.jvm/src/test/scala/izumi/fundamentals/platform/IzOsTest.scala
+++ b/fundamentals/fundamentals-platform/.jvm/src/test/scala/izumi/fundamentals/platform/IzOsTest.scala
@@ -1,9 +1,9 @@
 package izumi.fundamentals.platform
 
 import izumi.fundamentals.platform.os.{IzOs, OsType}
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class IzOsTest extends WordSpec {
+class IzOsTest extends AnyWordSpec {
 
   "OS tools" should {
     "detect OS version" in {
diff --git a/fundamentals/fundamentals-platform/.jvm/src/test/scala/izumi/fundamentals/platform/IzZipTest.scala b/fundamentals/fundamentals-platform/.jvm/src/test/scala/izumi/fundamentals/platform/IzZipTest.scala
index ecea3d414..bc0781f66 100644
--- a/fundamentals/fundamentals-platform/.jvm/src/test/scala/izumi/fundamentals/platform/IzZipTest.scala
+++ b/fundamentals/fundamentals-platform/.jvm/src/test/scala/izumi/fundamentals/platform/IzZipTest.scala
@@ -4,9 +4,9 @@ import java.nio.file.Paths
 
 import izumi.fundamentals.platform.files.IzZip
 import izumi.fundamentals.platform.jvm.IzJvm
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class IzZipTest extends WordSpec {
+class IzZipTest extends AnyWordSpec {
 
   "zip tools" should {
     "be able to find files in jars" in {
diff --git a/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/IzHashTest.scala b/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/IzHashTest.scala
index 8e84edb1e..5f00fe651 100644
--- a/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/IzHashTest.scala
+++ b/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/IzHashTest.scala
@@ -1,9 +1,9 @@
 
 package izumi.fundamentals.platform
 
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class IzHashTest extends WordSpec {
+class IzHashTest extends AnyWordSpec {
 
 //  "murmur32 hash" should {
 //    "produce hex output" in {
diff --git a/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/IzStringEscapeTest.scala b/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/IzStringEscapeTest.scala
index 1b60c7d54..a293b7336 100644
--- a/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/IzStringEscapeTest.scala
+++ b/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/IzStringEscapeTest.scala
@@ -1,9 +1,9 @@
 package izumi.fundamentals.platform
 
 import izumi.fundamentals.platform.strings.IzEscape
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class IzStringEscapeTest extends WordSpec {
+class IzStringEscapeTest extends AnyWordSpec {
 
   "string escape tool" should {
     "keep identity" in {
diff --git a/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/IzStringTest.scala b/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/IzStringTest.scala
index 1cac7fdc7..32fe7033b 100644
--- a/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/IzStringTest.scala
+++ b/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/IzStringTest.scala
@@ -2,9 +2,9 @@
 package izumi.fundamentals.platform
 
 import izumi.fundamentals.platform.strings.IzString._
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class IzStringTest extends WordSpec {
+class IzStringTest extends AnyWordSpec {
 
   "Extended string" should {
     "support boolean parsing" in {
diff --git a/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/QuirksTest.scala b/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/QuirksTest.scala
index da4cca013..bfc62802a 100644
--- a/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/QuirksTest.scala
+++ b/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/QuirksTest.scala
@@ -2,9 +2,9 @@ package izumi.fundamentals.platform
 
 import izumi.fundamentals.platform.language.Quirks._
 import izumi.fundamentals.platform.language.unused
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class QuirksTest extends WordSpec {
+class QuirksTest extends AnyWordSpec {
   def boom: Int = throw new RuntimeException()
 
   "Discarder" should {
diff --git a/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/ScalaVersionTest.scala b/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/ScalaVersionTest.scala
index 70ea359cc..a11013611 100644
--- a/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/ScalaVersionTest.scala
+++ b/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/ScalaVersionTest.scala
@@ -2,9 +2,9 @@ package izumi.fundamentals.platform
 
 import izumi.fundamentals.platform.language.IzScala
 import izumi.fundamentals.platform.language.IzScala.ScalaRelease
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class ScalaVersionTest extends WordSpec {
+class ScalaVersionTest extends AnyWordSpec {
   "ScalaVersion" should {
     "support comparison" in {
       import Ordering.Implicits._
diff --git a/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/cli/CliParserTest.scala b/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/cli/CliParserTest.scala
index f2afbb2b5..3157ce441 100644
--- a/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/cli/CliParserTest.scala
+++ b/fundamentals/fundamentals-platform/src/test/scala/izumi/fundamentals/platform/cli/CliParserTest.scala
@@ -1,9 +1,9 @@
 package izumi.fundamentals.platform.cli
 
 import izumi.fundamentals.platform.cli.model.raw.{RawAppArgs, RawEntrypointParams, RawFlag, RawRoleParams, RawValue}
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class CliParserTest extends WordSpec {
+class CliParserTest extends AnyWordSpec {
 
   "CLI parser" should {
     "parse args" in {
diff --git a/fundamentals/fundamentals-reflection/.jvm/src/test/scala/izumi/fundamentals/reflection/test/LightTypeTagTestJvm.scala b/fundamentals/fundamentals-reflection/.jvm/src/test/scala/izumi/fundamentals/reflection/test/LightTypeTagTestJvm.scala
index 3edc4abc4..f0a071520 100644
--- a/fundamentals/fundamentals-reflection/.jvm/src/test/scala/izumi/fundamentals/reflection/test/LightTypeTagTestJvm.scala
+++ b/fundamentals/fundamentals-reflection/.jvm/src/test/scala/izumi/fundamentals/reflection/test/LightTypeTagTestJvm.scala
@@ -1,9 +1,9 @@
 package izumi.fundamentals.reflection.test
 
 import izumi.fundamentals.reflection.ReflectionUtil
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class LightTypeTagTestJvm extends WordSpec {
+class LightTypeTagTestJvm extends AnyWordSpec {
 
   type FP1[+T] = List[T]
   type Ap1[+F[+_], +T] = F[T]
diff --git a/fundamentals/fundamentals-reflection/src/test/scala/izumi.fundamentals.reflection.test/LightTypeTagTest.scala b/fundamentals/fundamentals-reflection/src/test/scala/izumi.fundamentals.reflection.test/LightTypeTagTest.scala
index eadd93c30..de2b0bf33 100644
--- a/fundamentals/fundamentals-reflection/src/test/scala/izumi.fundamentals.reflection.test/LightTypeTagTest.scala
+++ b/fundamentals/fundamentals-reflection/src/test/scala/izumi.fundamentals.reflection.test/LightTypeTagTest.scala
@@ -2,7 +2,7 @@ package izumi.fundamentals.reflection.test
 
 import izumi.fundamentals.platform.language.Quirks._
 import izumi.fundamentals.reflection.macrortti._
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
 import scala.annotation.StaticAnnotation
 import scala.collection.immutable.ListSet
@@ -16,7 +16,7 @@ trait YieldOpCounts {
 }
 object YieldOpCounts extends YieldOpCounts
 
-class LightTypeTagTest extends WordSpec {
+class LightTypeTagTest extends AnyWordSpec {
   trait T0[A[_], B[_]]
   final val str = "str"
 
diff --git a/fundamentals/fundamentals-reflection/src/test/scala/izumi.fundamentals.reflection.test/TagTest.scala b/fundamentals/fundamentals-reflection/src/test/scala/izumi.fundamentals.reflection.test/TagTest.scala
index 899bcc8b4..8ddf8b8e0 100644
--- a/fundamentals/fundamentals-reflection/src/test/scala/izumi.fundamentals.reflection.test/TagTest.scala
+++ b/fundamentals/fundamentals-reflection/src/test/scala/izumi.fundamentals.reflection.test/TagTest.scala
@@ -3,8 +3,9 @@ package izumi.fundamentals.reflection.test
 import izumi.fundamentals.platform.language.Quirks._
 import izumi.fundamentals.reflection.Tags._
 import izumi.fundamentals.reflection.macrortti._
+import org.scalatest.Assertions
 import org.scalatest.exceptions.TestFailedException
-import org.scalatest.{Assertions, WordSpec}
+import org.scalatest.wordspec.AnyWordSpec
 
 import scala.annotation.StaticAnnotation
 import scala.util.Try
@@ -52,7 +53,7 @@ final case class testTag3[F[_]: TagK]() {
   val res = Tag[X].tag
 }
 
-class TagTest extends WordSpec with XY[String] {
+class TagTest extends AnyWordSpec with XY[String] {
 
   import izumi.fundamentals.reflection.test.PlatformSpecific.fromRuntime
   def fromLTag[T: LTag]: LightTypeTag = LTag[T].tag
diff --git a/idealingua-v1/idealingua-v1-core/.jvm/src/test/scala/izumi/idealingua/il/parser/BasicParserTest.scala b/idealingua-v1/idealingua-v1-core/.jvm/src/test/scala/izumi/idealingua/il/parser/BasicParserTest.scala
index da8c0fbde..b6de4a4c2 100644
--- a/idealingua-v1/idealingua-v1-core/.jvm/src/test/scala/izumi/idealingua/il/parser/BasicParserTest.scala
+++ b/idealingua-v1/idealingua-v1-core/.jvm/src/test/scala/izumi/idealingua/il/parser/BasicParserTest.scala
@@ -2,11 +2,11 @@ package izumi.idealingua.il.parser
 
 import izumi.idealingua.il.parser.structure._
 import izumi.idealingua.model.il.ast.raw.defns.RawMethod
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 import fastparse._
 
 class BasicParserTest
-  extends WordSpec with ParserTestTools {
+  extends AnyWordSpec with ParserTestTools {
 
   import ctx._
 
diff --git a/idealingua-v1/idealingua-v1-core/.jvm/src/test/scala/izumi/idealingua/il/parser/DomainParserTest.scala b/idealingua-v1/idealingua-v1-core/.jvm/src/test/scala/izumi/idealingua/il/parser/DomainParserTest.scala
index 476ef4ff3..6be392d9e 100644
--- a/idealingua-v1/idealingua-v1-core/.jvm/src/test/scala/izumi/idealingua/il/parser/DomainParserTest.scala
+++ b/idealingua-v1/idealingua-v1-core/.jvm/src/test/scala/izumi/idealingua/il/parser/DomainParserTest.scala
@@ -1,10 +1,10 @@
 package izumi.idealingua.il.parser
 
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
 
 class DomainParserTest
-  extends WordSpec with ParserTestTools {
+  extends AnyWordSpec with ParserTestTools {
 
   "Domain parser" should {
     "parse domain definition" in {
diff --git a/idealingua-v1/idealingua-v1-core/.jvm/src/test/scala/izumi/idealingua/il/parser/structure/CommentsAndDocstringsTest.scala b/idealingua-v1/idealingua-v1-core/.jvm/src/test/scala/izumi/idealingua/il/parser/structure/CommentsAndDocstringsTest.scala
index 917115f22..feabf3d6d 100644
--- a/idealingua-v1/idealingua-v1-core/.jvm/src/test/scala/izumi/idealingua/il/parser/structure/CommentsAndDocstringsTest.scala
+++ b/idealingua-v1/idealingua-v1-core/.jvm/src/test/scala/izumi/idealingua/il/parser/structure/CommentsAndDocstringsTest.scala
@@ -1,10 +1,10 @@
 package izumi.idealingua.il.parser.structure
 
 import izumi.idealingua.il.parser.ParserTestTools
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
 class CommentsAndDocstringsTest
-  extends WordSpec with ParserTestTools {
+  extends AnyWordSpec with ParserTestTools {
 
   "IL parser" should {
 
diff --git a/idealingua-v1/idealingua-v1-model/.jvm/src/test/scala/izumi/idealingua/IdTest.scala b/idealingua-v1/idealingua-v1-model/.jvm/src/test/scala/izumi/idealingua/IdTest.scala
index dc7c56061..b91d66054 100644
--- a/idealingua-v1/idealingua-v1-model/.jvm/src/test/scala/izumi/idealingua/IdTest.scala
+++ b/idealingua-v1/idealingua-v1-model/.jvm/src/test/scala/izumi/idealingua/IdTest.scala
@@ -3,9 +3,9 @@ package izumi.idealingua
 import java.util._
 
 import izumi.idealingua.runtime.model._
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class IdTest extends WordSpec {
+class IdTest extends AnyWordSpec {
   import IdTest._
 
   "Identifiers" should {
diff --git a/idealingua-v1/idealingua-v1-runtime-rpc-http4s/src/test/scala/izumi/idealingua/runtime/rpc/http4s/Http4sTransportTest.scala b/idealingua-v1/idealingua-v1-runtime-rpc-http4s/src/test/scala/izumi/idealingua/runtime/rpc/http4s/Http4sTransportTest.scala
index 6eb3ff3e8..a9a2159c8 100644
--- a/idealingua-v1/idealingua-v1-runtime-rpc-http4s/src/test/scala/izumi/idealingua/runtime/rpc/http4s/Http4sTransportTest.scala
+++ b/idealingua-v1/idealingua-v1-runtime-rpc-http4s/src/test/scala/izumi/idealingua/runtime/rpc/http4s/Http4sTransportTest.scala
@@ -7,12 +7,12 @@ import izumi.r2.idealingua.test.generated.{GreeterServiceClientWrapped, GreeterS
 import org.http4s._
 import org.http4s.server.Router
 import org.http4s.server.blaze._
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 import zio.Task
 import zio.interop.catz._
 import zio.interop.catz.implicits._
 
-class Http4sTransportTest extends WordSpec {
+class Http4sTransportTest extends AnyWordSpec {
 
   import fixtures._
   import Http4sTestContext._
diff --git a/idealingua-v1/idealingua-v1-runtime-rpc-scala/src/test/scala/izumi/idealingua/runtime/circe/WithCirceTest.scala b/idealingua-v1/idealingua-v1-runtime-rpc-scala/src/test/scala/izumi/idealingua/runtime/circe/WithCirceTest.scala
index b3da19ad7..0390f5f9d 100644
--- a/idealingua-v1/idealingua-v1-runtime-rpc-scala/src/test/scala/izumi/idealingua/runtime/circe/WithCirceTest.scala
+++ b/idealingua-v1/idealingua-v1-runtime-rpc-scala/src/test/scala/izumi/idealingua/runtime/circe/WithCirceTest.scala
@@ -6,9 +6,9 @@ import io.circe
 import io.circe.Codec
 import io.circe.syntax._
 import izumi.idealingua.runtime.circe.WithCirceTest.{Cba, Enum, Enum1, Enum2, Nested, Sealed}
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-final class WithCirceTest extends WordSpec {
+final class WithCirceTest extends AnyWordSpec {
 
   "WithCirce" should {
     "WithCirce works with case classes" in {
diff --git a/idealingua-v1/idealingua-v1-transpilers/.jvm/src/test/scala/izumi/idealingua/CompilerTest.scala b/idealingua-v1/idealingua-v1-transpilers/.jvm/src/test/scala/izumi/idealingua/CompilerTest.scala
index b376c3b21..b7e975d47 100644
--- a/idealingua-v1/idealingua-v1-transpilers/.jvm/src/test/scala/izumi/idealingua/CompilerTest.scala
+++ b/idealingua-v1/idealingua-v1-transpilers/.jvm/src/test/scala/izumi/idealingua/CompilerTest.scala
@@ -2,11 +2,11 @@ package izumi.idealingua
 
 import izumi.fundamentals.platform.files.IzFiles
 import izumi.idealingua.model.publishing.manifests.{CSharpProjectLayout, GoProjectLayout, ScalaProjectLayout, TypeScriptProjectLayout}
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
 import scala.util.Properties
 
-class CompilerTest extends WordSpec {
+class CompilerTest extends AnyWordSpec {
 
   import IDLTestTools._
 
diff --git a/idealingua-v1/idealingua-v1-transpilers/.jvm/src/test/scala/izumi/idealingua/LoaderTest.scala b/idealingua-v1/idealingua-v1-transpilers/.jvm/src/test/scala/izumi/idealingua/LoaderTest.scala
index 8bca42d5b..63e27730c 100644
--- a/idealingua-v1/idealingua-v1-transpilers/.jvm/src/test/scala/izumi/idealingua/LoaderTest.scala
+++ b/idealingua-v1/idealingua-v1-transpilers/.jvm/src/test/scala/izumi/idealingua/LoaderTest.scala
@@ -5,10 +5,10 @@ import java.nio.file.Paths
 import izumi.fundamentals.platform.jvm.IzJvm
 import izumi.idealingua.il.loader.{FilesystemEnumerator, LocalFilesystemEnumerator, ModelLoaderImpl}
 import izumi.idealingua.il.renderer.{IDLRenderer, IDLRenderingOptions}
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
 
-class LoaderTest extends WordSpec {
+class LoaderTest extends AnyWordSpec {
 
   "IL loader" should {
     "parse all test domains" in {
diff --git a/logstage/logstage-adapter-slf4j/src/test/scala/izumi/logstage/adapter/slf4j/Slf4jAdapterTest.scala b/logstage/logstage-adapter-slf4j/src/test/scala/izumi/logstage/adapter/slf4j/Slf4jAdapterTest.scala
index 7fffa0735..fee8321aa 100644
--- a/logstage/logstage-adapter-slf4j/src/test/scala/izumi/logstage/adapter/slf4j/Slf4jAdapterTest.scala
+++ b/logstage/logstage-adapter-slf4j/src/test/scala/izumi/logstage/adapter/slf4j/Slf4jAdapterTest.scala
@@ -2,11 +2,11 @@ package izumi.logstage.adapter.slf4j
 
 import izumi.logstage.api.routing.{ConfigurableLogRouter, StaticLogRouter}
 import izumi.logstage.api.{IzLogger, TestSink}
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 import org.slf4j.LoggerFactory
 import org.slf4j.impl.StaticLoggerBinder
 
-class Slf4jAdapterTest extends WordSpec {
+class Slf4jAdapterTest extends AnyWordSpec {
 
   private final val logger = LoggerFactory.getLogger(getClass)
 
diff --git a/logstage/logstage-api/src/test/scala/izumi/logstage/api/LoggingModelTest.scala b/logstage/logstage-api/src/test/scala/izumi/logstage/api/LoggingModelTest.scala
index c91c0563d..ace1b99e4 100644
--- a/logstage/logstage-api/src/test/scala/izumi/logstage/api/LoggingModelTest.scala
+++ b/logstage/logstage-api/src/test/scala/izumi/logstage/api/LoggingModelTest.scala
@@ -1,9 +1,9 @@
 package izumi.logstage.api
 
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
 
-class LoggingModelTest extends WordSpec {
+class LoggingModelTest extends AnyWordSpec {
 
   "Log levels" should {
     "be comparable" in {
diff --git a/logstage/logstage-core/.js/src/test/scala/izumi/logstage/sink/LoggingAsyncSinkTest.scala b/logstage/logstage-core/.js/src/test/scala/izumi/logstage/sink/LoggingAsyncSinkTest.scala
index 2e64ec6a0..549f07279 100644
--- a/logstage/logstage-core/.js/src/test/scala/izumi/logstage/sink/LoggingAsyncSinkTest.scala
+++ b/logstage/logstage-core/.js/src/test/scala/izumi/logstage/sink/LoggingAsyncSinkTest.scala
@@ -1,9 +1,9 @@
 package izumi.logstage.sink
 
 import izumi.logstage.api.{IzLogger, TestSink}
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class LoggingAsyncSinkTest extends WordSpec {
+class LoggingAsyncSinkTest extends AnyWordSpec {
   "Log macro" should {
     "support async sink api in sync mode" in {
       val testSink = new TestSink()
diff --git a/logstage/logstage-core/.jvm/src/test/scala/izumi/logstage/ImplicitsTest.scala b/logstage/logstage-core/.jvm/src/test/scala/izumi/logstage/ImplicitsTest.scala
index 1e7e586ed..3d81b2a25 100644
--- a/logstage/logstage-core/.jvm/src/test/scala/izumi/logstage/ImplicitsTest.scala
+++ b/logstage/logstage-core/.jvm/src/test/scala/izumi/logstage/ImplicitsTest.scala
@@ -8,9 +8,9 @@ import izumi.fundamentals.platform.language.Quirks._
 import izumi.logstage.ImplicitsTest.Suspend2
 import izumi.logstage.api.IzLogger
 import logstage.{LogBIO, LogIO}
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class ImplicitsTest extends WordSpec {
+class ImplicitsTest extends AnyWordSpec {
 
   "create LogIO from IO and Sync" in {
     val log: LogIO[cats.effect.IO] = LogIO.fromLogger(IzLogger())
diff --git a/logstage/logstage-core/.jvm/src/test/scala/izumi/logstage/sink/LoggingAsyncSinkTest.scala b/logstage/logstage-core/.jvm/src/test/scala/izumi/logstage/sink/LoggingAsyncSinkTest.scala
index 460403d33..21b30989e 100644
--- a/logstage/logstage-core/.jvm/src/test/scala/izumi/logstage/sink/LoggingAsyncSinkTest.scala
+++ b/logstage/logstage-core/.jvm/src/test/scala/izumi/logstage/sink/LoggingAsyncSinkTest.scala
@@ -1,9 +1,9 @@
 package izumi.logstage.sink
 
 import izumi.logstage.api.{IzLogger, TestSink}
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class LoggingAsyncSinkTest extends WordSpec {
+class LoggingAsyncSinkTest extends AnyWordSpec {
   "Log macro" should {
     "support async sinks" in {
       val testSink = new TestSink()
diff --git a/logstage/logstage-core/.jvm/src/test/scala/izumi/logstage/sink/LoggingFileSinkTest.scala b/logstage/logstage-core/.jvm/src/test/scala/izumi/logstage/sink/LoggingFileSinkTest.scala
index 808ab066e..12fa2f7af 100644
--- a/logstage/logstage-core/.jvm/src/test/scala/izumi/logstage/sink/LoggingFileSinkTest.scala
+++ b/logstage/logstage-core/.jvm/src/test/scala/izumi/logstage/sink/LoggingFileSinkTest.scala
@@ -11,7 +11,8 @@ import izumi.logstage.sink.file.FileServiceImpl.RealFile
 import izumi.logstage.sink.file.FileSink.FileIdentity
 import izumi.logstage.sink.file.models.{FileRotation, FileSinkConfig, FileSinkState, LogFile}
 import izumi.logstage.sink.file.{FileService, FileServiceImpl, FileSink}
-import org.scalatest.{Assertion, GivenWhenThen, WordSpec}
+import org.scalatest.wordspec.AnyWordSpec
+import org.scalatest.{Assertion, GivenWhenThen}
 
 import scala.collection.mutable.ListBuffer
 import scala.util.{Random, Try}
@@ -39,7 +40,7 @@ object FileServiceUtils {
 }
 
 @ExposedTestScope
-trait LoggingFileSinkTest[T <: LogFile] extends WordSpec with GivenWhenThen {
+trait LoggingFileSinkTest[T <: LogFile] extends AnyWordSpec with GivenWhenThen {
 
   def fileSvcUtils: FileServiceUtils[T]
 
diff --git a/logstage/logstage-core/src/test/scala/izumi/logstage/api/BasicLoggingTest.scala b/logstage/logstage-core/src/test/scala/izumi/logstage/api/BasicLoggingTest.scala
index 2b64afea4..d0c9314d5 100644
--- a/logstage/logstage-core/src/test/scala/izumi/logstage/api/BasicLoggingTest.scala
+++ b/logstage/logstage-core/src/test/scala/izumi/logstage/api/BasicLoggingTest.scala
@@ -3,11 +3,11 @@ package izumi.logstage.api
 import izumi.fundamentals.platform.language.SourceFilePosition
 import izumi.logstage.api.Log._
 import izumi.logstage.api.rendering.{RenderingOptions, StringRenderingPolicy}
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
 import scala.util.Random
 
-class BasicLoggingTest extends WordSpec {
+class BasicLoggingTest extends AnyWordSpec {
 
   "Argument extraction macro" should {
     "extract argument names from an arbitrary string" in {
diff --git a/logstage/logstage-core/src/test/scala/izumi/logstage/sink/LoggingConsoleSinkTest.scala b/logstage/logstage-core/src/test/scala/izumi/logstage/sink/LoggingConsoleSinkTest.scala
index d250001b0..83e503fea 100644
--- a/logstage/logstage-core/src/test/scala/izumi/logstage/sink/LoggingConsoleSinkTest.scala
+++ b/logstage/logstage-core/src/test/scala/izumi/logstage/sink/LoggingConsoleSinkTest.scala
@@ -1,9 +1,9 @@
 package izumi.logstage.sink
 
 import izumi.logstage.api.IzLogger
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class LoggingConsoleSinkTest extends WordSpec {
+class LoggingConsoleSinkTest extends AnyWordSpec {
   import LoggingConsoleSinkTest._
 
   "Log macro" should {
diff --git a/logstage/logstage-rendering-circe/src/test/scala/izumi/logstage/api/rendering/json/LogstageCirceRenderingTest.scala b/logstage/logstage-rendering-circe/src/test/scala/izumi/logstage/api/rendering/json/LogstageCirceRenderingTest.scala
index 2548a103e..b055e7b04 100644
--- a/logstage/logstage-rendering-circe/src/test/scala/izumi/logstage/api/rendering/json/LogstageCirceRenderingTest.scala
+++ b/logstage/logstage-rendering-circe/src/test/scala/izumi/logstage/api/rendering/json/LogstageCirceRenderingTest.scala
@@ -4,9 +4,9 @@ import izumi.logstage.api.{IzLogger, TestSink}
 import izumi.logstage.sink.{ConsoleSink, ExampleService}
 import io.circe.literal._
 import io.circe.parser._
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class LogstageCirceRenderingTest extends WordSpec {
+class LogstageCirceRenderingTest extends AnyWordSpec {
 
   val debug = false
 
diff --git a/logstage/logstage-sink-slf4j/src/test/scala/izumi/logstage/sink/slf4j/LoggingSlf4jSinkTest.scala b/logstage/logstage-sink-slf4j/src/test/scala/izumi/logstage/sink/slf4j/LoggingSlf4jSinkTest.scala
index 7e768e342..d0107cd71 100644
--- a/logstage/logstage-sink-slf4j/src/test/scala/izumi/logstage/sink/slf4j/LoggingSlf4jSinkTest.scala
+++ b/logstage/logstage-sink-slf4j/src/test/scala/izumi/logstage/sink/slf4j/LoggingSlf4jSinkTest.scala
@@ -2,9 +2,9 @@ package izumi.logstage.sink.slf4j
 
 import izumi.logstage.api.IzLogger
 import izumi.logstage.sink.{ConsoleSink, ExampleService}
-import org.scalatest.WordSpec
+import org.scalatest.wordspec.AnyWordSpec
 
-class LoggingSlf4jSinkTest extends WordSpec {
+class LoggingSlf4jSinkTest extends AnyWordSpec {
 
   import LoggingSlf4jSinkTest._