ScalaTest/Scalactic 3.2.0 Release Notes

ScalaTest/Scalactic 3.2.0 (for Scala 2.10, 2.11, 2.12, and 2.13; on the JVM, JavaScript, native, and Dotty) includes the enhancements and bug fixes listed below. No source code using ScalaTest/Scalactic 3.1.2 should break, so long as you fix all deprecation warnings prior to upgrading, but this release is not binary compatible with 3.1.2.

For information on how to include ScalaTest in your project, see the install page. For information on how to use Scalactic in your production code, see its install page.



ScalaTest


The main change in ScalaTest 3.2.0 is carrying out the modularization that we prepared for in 3.0.8 and 3.1.0. As a result, many deprecated names have been removed, because the deprecations would cross module boundaries. Other than these deprecation expirations, the actual modularization, and some changes to support more recent versions of Dotty and Scala.js, ScalaTest 3.2.0 is identical with ScalaTest 3.1.2.

Modularization required that we rename many traits, classes, and objects so that all the members of each package would belong to a single module. In the monolithic ScalaTest artifact, which everyone is currently using in their build, the old names were deprecated in the 3.0.8 and 3.1.0 releases. To upgrade to 3.2.0, we recommend you first upgrade to 3.1.0 (3.1.1 or 3.1.2 is also fine). To upgrade to 3.1.0, we recommend that you first upgrade to 3.0.8 and clear all deprecation warnings. We offer a ScalaFix tool to help you fix the 3.0.8 deprecation warnings. Then, just change the version to 3.1.0. Your project should compile as before, but you'll get deprecation warnings about the name changes made in 3.1.0. To help you with all those renames, we provide a ScalaFix tool to help you fix the 3.1.0 deprecation warnings. Once you've cleared all deprecation warnings in 3.1.0 (or 3.1.1 or 3.1.2, if you are already using either of those releases), you can just change the ScalaTest and Scalactic versions in your build to 3.2.0 and recompile. Everything should work as before, there should be no source-breaking changes in 3.2.0 compared to 3.1.0 so long a you clear deprecation warning prior to upgrading to 3.2.0 and do a full recompile.

Improvements

  • Updates to support Scala.js 1.1.0.
  • Updates to support Dotty 0.24.0
  • Modularization!

If you upgrade to 3.2.0 by changing 3.1.2 to 3.2.0 in your build, everything should work exactly the same as before after a recompile, provided you remove all deprecation warnings under 3.1.2 prior to upgrading. In 3.2.0, we are releasing the same artifacts as before, and they contain the same software, even though behind the scenes they are composed of more artifacts in 3.2.0. In 3.1.0, we moved third-party dependencies of ScalaTest to their own artifacts, so we could evolve them independently to match both ScalaTest and the third-party dependencies. This organization of artifacts is shown in the following diagram:

3.1.0 Modularization Diagram

In 3.2.0, we modularized ScalaTest further into the organization shown in the following diagram:

3.2.0 Modularization Diagram

As the diagram illustrates, the scalatest artifact is now composed of more sub-artifacts than in 3.1.0. Nevertheless, through its transitive dependencies, it still contains all the same software as it did in 3.1.0, except for the deprecation expirations described below. As an example, this is how you add full ScalaTest 3.2.0 to an sbt build:

 libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.0" % "test"
 

Alternatively, as of 3.2.0 you can depend on a smaller subset of full ScalaTest, which can help you achieve consistent style choices among team members, because only the modules you add to your build will be available to the project. First, each ScalaTest style now has its own artifact. For example, the FunSuite style is distributed in the scalatest-funsuite artifact. Here's how you would add this module to an sbt build:

libraryDependencies += "org.scalatest" %% "scalatest-funsuite" % "3.2.0" % "test"

This dependency would enable you to use just ScalaTest's FunSuite style in your project, with ScalaTest's default assertions. You would not be able to use any other ScalaTest style, matchers, or diagrammed assertions, unless you added more dependencies. For example, if you wanted to use the FunSuite style with must matchers, you could add the following to an sbt build:

libraryDependencies ++= Seq(
  "org.scalatest" %% "scalatest-funsuite" % "3.2.0" % "test",
  "org.scalatest" %% "scalatest-mustmatchers" % "3.2.0" % "test"
)

The style trait modules are given in the following table.

ScalaTest testing style modules
Testing style artifact name
FunSuite scalatest-funsuite
FlatSpec scalatest-flatspec
FunSpec scalatest-funspec
WordSpec scalatest-wordspec
FreeSpec scalatest-freespec
PropSpec scalatest-propspec
FeatureSpec scalatest-featurespec
RefSpec scalatest-refspec

The assertion modules are given in the following table.

ScalaTest assertion style modules
Assertion style artifact name
Diagrams scalatest-diagrams
should.Matchers scalatest-shouldmatchers
must.Matchers scalatest-mustmatchers

Deprecations

ScalaTest 3.2.0 contains no new deprecations.

Deprecation Expirations

  • Removed the style traits and classes that were renamed and deprecated in 3.1.0 to prepare the way for modularization of Scalatest. For example, in 3.1.0 we moved all style traits and classes for the FunSuite style, to package org.scalatest.funsuite. The old names still worked in 3.1.0, but gave a deprecation warning. These old names have now been removed in 3.2.0.

    The reason we renamed and deprecated ScalaTest's style traits and classes in 3.1.0, and removed the old, deprecated names in 3.2.0, was to enable modularization that we have implemented in 3.2.0. Modularization must be done on package boundaries, and prior to 3.1.0, ScalaTest's different style traits and classes resided in common packages such as org.scalatest, org.scalatest.fixture, and org.scalatest.path. Because we wanted to modularize along style boundaries, we needed to move the classes and traits for each style into its own package. For example, we moved all traits related to the FunSuite style to package org.scalatest.funsuite.

    Note that we also slightly renamed some of the traits and classes when we moved them in 3.1.0. We prefixed “Any” to the names of the main style traits and classes whose test bodies have a result type of Any. For example, org.scalatest.FunSuite was renamed to org.scalatest.funsuite.AnyFunSuite in 3.1.0.

    The Any styles are backwards compatible with ScalaTest's original style traits, which allow you to use assertions from any other testing library no matter the result type of those assertions. The reason for this name change is that in a future version of ScalaTest we plan to add a new set of style traits and classes with the original names, such as FunSuite (but in the org.scalatest.funsuite package), whose test bodies will have a result type of Assertion.

    In addition, we prefixed “Fixture” to the simple names of the traits and classes in package org.scalatest.fixture package. For example, org.scalatest.fixture.FunSuite was renamed to org.scalatest.funsuite.FixtureAnyFunSuite. Similarly, we prefixed “Path” to the simple names of the traits and classes in package org.scalatest.path. For example, org.scalatest.path.FunSpec was renamed to org.scalatest.funsuite.PathAnyFunSpec.

    Here are the details:

    FunSuite style (scalatest-funsuite module)
    removed in 3.2.0 new name
    org.scalatest.FunSuite org.scalatest.funsuite.AnyFunSuite
    org.scalatest.FunSuiteLike org.scalatest.funsuite.AnyFunSuiteLike
    org.scalatest.AsyncFunSuite org.scalatest.funsuite.AsyncFunSuite
    org.scalatest.AsyncFunSuiteLike org.scalatest.funsuite.AsyncFunSuiteLike
    org.scalatest.fixture.FunSuite org.scalatest.funsuite.FixtureAnyFunSuite
    org.scalatest.fixture.FunSuiteLike org.scalatest.funsuite.FixtureAnyFunSuiteLike
    org.scalatest.fixture.AsyncFunSuite org.scalatest.funsuite.FixtureAsyncFunSuite
    org.scalatest.fixture.AsyncFunSuiteLike org.scalatest.funsuite.FixtureAsyncFunSuiteLike

    FlatSpec style (scalatest-flatspec module)
    removed in 3.2.0 new name
    org.scalatest.FlatSpec org.scalatest.flatspec.AnyFlatSpec
    org.scalatest.FlatSpecLike org.scalatest.flatspec.AnyFlatSpecLike
    org.scalatest.AsyncFlatSpec org.scalatest.flatspec.AsyncFlatSpec
    org.scalatest.AsyncFlatSpecLike org.scalatest.flatspec.AsyncFlatSpecLike
    org.scalatest.fixture.FlatSpec org.scalatest.flatspec.FixtureAnyFlatSpec
    org.scalatest.fixture.FlatSpecLike org.scalatest.flatspec.FixtureAnyFlatSpecLike
    org.scalatest.fixture.AsyncFlatSpec org.scalatest.flatspec.FixtureAsyncFlatSpec
    org.scalatest.fixture.AsyncFlatSpecLike org.scalatest.flatspec.FixtureAsyncFlatSpecLike

    FunSpec style (scalatest-funspec module)
    removed in 3.2.0 new name
    org.scalatest.FunSpec org.scalatest.funspec.AnyFunSpec
    org.scalatest.FunSpecLike org.scalatest.funspec.AnyFunSpecLike
    org.scalatest.AsyncFunSpec org.scalatest.funspec.AsyncFunSpec
    org.scalatest.AsyncFunSpecLike org.scalatest.funspec.AsyncFunSpecLike
    org.scalatest.fixture.FunSpec org.scalatest.funspec.FixtureAnyFunSpec
    org.scalatest.fixture.FunSpecLike org.scalatest.funspec.FixtureAnyFunSpecLike
    org.scalatest.fixture.AsyncFunSpec org.scalatest.funspec.FixtureAsyncFunSpec
    org.scalatest.fixture.AsyncFunSpecLike org.scalatest.funspec.FixtureAsyncFunSpecLike
    org.scalatest.path.FunSpec org.scalatest.funspec.PathAnyFunSpec
    org.scalatest.path.FunSpecLike org.scalatest.funspec.PathAnyFunSpecLike

    WordSpec style (scalatest-wordspec module)
    removed in 3.2.0 new name
    org.scalatest.WordSpec org.scalatest.wordspec.AnyWordSpec
    org.scalatest.WordSpecLike org.scalatest.wordspec.AnyWordSpecLike
    org.scalatest.AsyncWordSpec org.scalatest.wordspec.AsyncWordSpec
    org.scalatest.AsyncWordSpecLike org.scalatest.wordspec.AsyncWordSpecLike
    org.scalatest.fixture.WordSpec org.scalatest.wordspec.FixtureAnyWordSpec
    org.scalatest.fixture.WordSpecLike org.scalatest.wordspec.FixtureAnyWordSpecLike
    org.scalatest.fixture.AsyncWordSpec org.scalatest.wordspec.FixtureAsyncWordSpec
    org.scalatest.fixture.AsyncWordSpecLike org.scalatest.wordspec.FixtureAsyncWordSpecLike

    FreeSpec style (scalatest-freespec module)
    removed in 3.2.0 new name
    org.scalatest.FreeSpec org.scalatest.freespec.AnyFreeSpec
    org.scalatest.FreeSpecLike org.scalatest.freespec.AnyFreeSpecLike
    org.scalatest.AsyncFreeSpec org.scalatest.freespec.AsyncFreeSpec
    org.scalatest.AsyncFreeSpecLike org.scalatest.freespec.AsyncFreeSpecLike
    org.scalatest.fixture.FreeSpec org.scalatest.freespec.FixtureAnyFreeSpec
    org.scalatest.fixture.FreeSpecLike org.scalatest.freespec.FixtureAnyFreeSpecLike
    org.scalatest.fixture.AsyncFreeSpec org.scalatest.freespec.FixtureAsyncFreeSpec
    org.scalatest.fixture.AsyncFreeSpecLike org.scalatest.freespec.FixtureAsyncFreeSpecLike
    org.scalatest.path.FreeSpec org.scalatest.freespec.PathAnyFreeSpec
    org.scalatest.path.FreeSpecLike org.scalatest.freespec.PathAnyFreeSpecLike

    PropSpec style (scalatest-propspec module)
    removed in 3.2.0 new name
    org.scalatest.PropSpec org.scalatest.propspec.AnyPropSpec
    org.scalatest.PropSpecLike org.scalatest.propspec.AnyPropSpecLike
    org.scalatest.AsyncPropSpec org.scalatest.propspec.AsyncPropSpec
    org.scalatest.AsyncPropSpecLike org.scalatest.propspec.AsyncPropSpecLike
    org.scalatest.fixture.PropSpec org.scalatest.propspec.FixtureAnyPropSpec
    org.scalatest.fixture.PropSpecLike org.scalatest.propspec.FixtureAnyPropSpecLike
    org.scalatest.fixture.AsyncPropSpec org.scalatest.propspec.FixtureAsyncPropSpec
    org.scalatest.fixture.AsyncPropSpecLike org.scalatest.propspec.FixtureAsyncPropSpecLike

    FeatureSpec style (scalatest-featurespec module)
    removed in 3.2.0 new name
    org.scalatest.FeatureSpec org.scalatest.featurespec.AnyFeatureSpec
    org.scalatest.FeatureSpecLike org.scalatest.featurespec.AnyFeatureSpecLike
    org.scalatest.AsyncFeatureSpec org.scalatest.featurespec.AsyncFeatureSpec
    org.scalatest.AsyncFeatureSpecLike org.scalatest.featurespec.AsyncFeatureSpecLike
    org.scalatest.fixture.FeatureSpec org.scalatest.featurespec.FixtureAnyFeatureSpec
    org.scalatest.fixture.FeatureSpecLike org.scalatest.featurespec.FixtureAnyFeatureSpecLike
    org.scalatest.fixture.AsyncFeatureSpec org.scalatest.featurespec.FixtureAsyncFeatureSpec
    org.scalatest.fixture.AsyncFeatureSpecLike org.scalatest.featurespec.FixtureAsyncFeatureSpecLike

  • We also removed the handful of top level traits from the org.scalatest.fixture package that had been deprecated and renamed in 3.1.0. Here are the details:

    top-level fixture traits
    removed in 3.2.0 new name
    org.scalatest.fixture.Suite org.scalatest.FixtureSuite
    org.scalatest.fixture.TestSuite org.scalatest.FixtureTestSuite
    org.scalatest.fixture.AsyncTestSuite org.scalatest.FixtureAsyncTestSuite
    org.scalatest.fixture.TestRegistration org.scalatest.FixtureTestRegistration
    org.scalatest.fixture.AsyncTestRegistration org.scalatest.FixtureAsyncTestRegistration
  • We also removed the old names for the matchers and diagrammed assertions traits and objects that were deprecated and renamed in 3.1.0 to support the modularization by assertion style that we've implemented in ScalaTest 3.2.0. Here are the details:

    Assertion style
    removed in 3.2.0 new name
    org.scalatest.Matchers org.scalatest.matchers.should.Matchers
    (scalatest-shouldmatchers module)
    org.scalatest.MustMatchers org.scalatest.matchers.must.Matchers
    (scalatest-mustmatchers module)
    org.scalatest.DiagrammedAssertions org.scalatest.diagrams.Diagrams
    (scalatest-diagrams module)

  • To facilate modularization of matchers, we moved org.scalatest.words members that were only needed by matchers to org.scalatest.matchers.dsl in 3.1.0. We moved the remaining members of words to org.scalatest.verbs in 3.1.0, and deprecated the old names under words. In 3.2.0, we have removed the words package, which only contained deprecated names as of 3.1.0.


Scalactic


Improvements

  • Updates to support Scala.js 1.1.0.
  • Updates to support Dotty 0.24.0

Deprecations

Scalactic 3.2.0 contains no new deprecations.




ScalaTest/Scalactic Contributors

Thanks to the contributors for the ScalaTest/Scalactic 3.2.0 release:

Visit ScalaTest Release Notes for links to the release notes of all previous versions, or step back in time by visiting the release notes for the previous version.

ScalaTest is brought to you by Bill Venners and Artima.
ScalaTest is free, open-source software released under the Apache 2.0 license.

If your company loves ScalaTest, please consider sponsoring the project.

Copyright © 2009-2020 Artima, Inc. All Rights Reserved.

artima