All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.scalatest.matchers.LazyArg.scala Maven / Gradle / Ivy


/*
 * Copyright 2001-2013 Artima, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.scalatest.matchers

/**
 * Transforms a given object's toString with a given function lazily.
 *
 * 

* This class is intended to be used with the mapResult method of * MatcherProducers, which you can use to * modify error messages when composing matchers. This class exists to enable those error messages * to be modified lazily, so that toString is invoked on the given * arg, and its result transformed by the given function f, only when and if * the toString method is invoked on the LazyArg. As a performance optimization, ScalaTest's * MatchResult avoids invoking toString on objects * until and unless an error message is actually needed, to minimize unecessary creation and concatenation * of strings. The LazyArg class enables this same performance optimization when composing * matchers. *

* *

* The other design goal of LazyArg is to make the internal arg available for inspection * in an IDE. In a future version of ScalaTest, the args of MatchResult that were used * to create the error message will be included in the TestFailedException, so they can be inspected * in IDEs. This is why the arg field of LazyArg is public. *

* *

* For an example of using LazyArg, see the Composing matchers * section in the main documentation for trait Matcher. *

* * @param arg the argument * @param f a function that given the arg will produce a String */ final case class LazyArg(val arg: Any)(f: Any => String) { /** * Returns the result of invoking the function f, passed to the LazyArg * constructor, on field arg. */ override def toString = f(arg.toString) }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy