How to make scalatest matcher to ignore white-spaces when compare two strings?

3.1k views Asked by At

I have the following test

  "Matchers" should "ignore whitespace if configured so" in {
    " aaa \n \n\r bbb".replaceAll("\\s+", " ") shouldBe "\naaa bbb".replaceAll("\\s+", " ")
  }

There is a scalatest idiomatic way to do this?

1

There are 1 answers

1
raisercostin On

I found that there is some normalization for case insensitive comparisons at http://www.scalatest.org/user_guide/using_matchers

import org.scalatest.Matchers._
import org.scalactic.Explicitly._
import org.scalactic.StringNormalizations._
"Hi" should equal ("hi") (after being lowerCased)

I created the following normalizer

import org.scalactic._
val whiteSpaceNormalised: Uniformity[String] =
  new AbstractStringUniformity {
    /**Returns the string with all consecutive white spaces reduced to a single space.*/
    def normalized(s: String): String = s.replaceAll("\\s+", " ")
    override def toString: String = "whiteSpaceNormalised"
  }

The test is now

import org.scalatest.Matchers._
import org.scalactic.Explicitly._
import org.scalactic.StringNormalizations._
" aaa \n \n\r bbb " should equal("\naaa bbb      \t")(after being whiteSpaceNormalised)