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

org.scalatest.verb.CanVerb.scala Maven / Gradle / Ivy

There is a newer version: 2.0.M6-SNAP27
Show newest version
/*
 * Copyright 2001-2009 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.verb

import org.scalatest._

/**
 * Provides an implicit conversion that adds can methods to String
 * to support the syntax of FlatSpec, WordSpec, org.scalatest.fixture.FlatSpec,
 * and org.scalatest.fixture.WordSpec.
 *
 * 

* For example, this trait enables syntax such as the following test registration in FlatSpec * and org.scalatest.fixture.FlatSpec: *

* *
 * "A Stack (when empty)" can "be empty" in { ... }
 *                        ^
 * 
* *

* It also enables syntax such as the following shared test registration in FlatSpec * and org.scalatest.fixture.FlatSpec: *

* *
 * "A Stack (with one item)" can behave like nonEmptyStack(stackWithOneItem, lastValuePushed)
 *                           ^
 * 
* *

* In addition, it supports the registration of subject descriptions in WordSpec * and org.scalatest.fixture.WordSpec, such as: *

* *
 * "A Stack (when empty)" can { ...
 *                        ^
 * 
* *

* And finally, it also supportds the registration of subject descriptions with after words * in WordSpec and org.scalatest.fixture.WordSpec. For example: *

* *
 *    def provide = afterWord("provide")
 *
 *   "The ScalaTest Matchers DSL" can provide {
 *                                ^
 * 
* *

* The reason this implicit conversion is provided in a separate trait, instead of being provided * directly in FlatSpec, WordSpec, org.scalatest.fixture.FlatSpec, and * org.scalatest.fixture.WordSpec, is primarily for design symmetry with ShouldVerb * and MustVerb. Both ShouldVerb and MustVerb must exist * as a separate trait because an implicit conversion provided directly would conflict * with the implicit conversion that provides should or must methods on String * in the ShouldMatchers and MustMatchers traits. *

* * @author Bill Venners */ trait CanVerb { // This one can be final, because it isn't extended by anything in the matchers DSL. /** * This class supports the syntax of FlatSpec, WordSpec, org.scalatest.fixture.FlatSpec, * and org.scalatest.fixture.WordSpec. * *

* This class is used in conjunction with an implicit conversion to enable can methods to * be invoked on Strings. *

* * @author Bill Venners */ final class StringCanWrapperForVerb(left: String) { /** * Supports test registration in FlatSpec and org.scalatest.fixture.FlatSpec. * *

* For example, this method enables syntax such as the following in FlatSpec * and org.scalatest.fixture.FlatSpec: *

* *
     * "A Stack (when empty)" can "be empty" in { ... }
     *                        ^
     * 
* *

* FlatSpec passes in a function via the implicit parameter that takes * three strings and results in a ResultOfStringPassedToVerb. This method * simply invokes this function, passing in left, the verb string * "can", and right, and returns the result. *

*/ def can(right: String)(implicit fun: (String, String, String) => ResultOfStringPassedToVerb): ResultOfStringPassedToVerb = { fun(left, "can", right) } /** * Supports shared test registration in FlatSpec and org.scalatest.fixture.FlatSpec. * *

* For example, this method enables syntax such as the following in FlatSpec * and org.scalatest.fixture.FlatSpec: *

* *
     * "A Stack (with one item)" can behave like nonEmptyStack(stackWithOneItem, lastValuePushed)
     *                           ^
     * 
* *

* FlatSpec and org.scalatest.fixture.FlatSpec passes in a function via the implicit parameter that takes * a string and results in a BehaveWord. This method * simply invokes this function, passing in left, and returns the result. *

*/ def can(right: BehaveWord)(implicit fun: (String) => BehaveWord): BehaveWord = { fun(left) } /** * Supports the registration of subject descriptions in WordSpec * and org.scalatest.fixture.WordSpec. * *

* For example, this method enables syntax such as the following in WordSpec * and org.scalatest.fixture.WordSpec: *

* *
     * "A Stack (when empty)" can { ...
     *                        ^
     * 
* *

* WordSpec passes in a function via the implicit parameter of type StringVerbBlockRegistration, * a function that takes two strings and a no-arg function and results in Unit. This method * simply invokes this function, passing in left, the verb string * "can", and the right by-name parameter transformed into a * no-arg function. *

*/ def can(right: => Unit)(implicit fun: StringVerbBlockRegistration) { fun(left, "can", right _) } /** * Supports the registration of subject descriptions with after words * in WordSpec and org.scalatest.fixture.WordSpec. * *

* For example, this method enables syntax such as the following in WordSpec * and org.scalatest.fixture.WordSpec: *

* *
     *    def provide = afterWord("provide")
     *
     *   "The ScalaTest Matchers DSL" can provide {
     *                                ^
     * 
* *

* WordSpec passes in a function via the implicit parameter that takes * two strings and a ResultOfAfterWordApplication and results in Unit. This method * simply invokes this function, passing in left, the verb string * "can", and the ResultOfAfterWordApplication passed to can. *

*/ def can(resultOfAfterWordApplication: ResultOfAfterWordApplication)(implicit fun: (String, String, ResultOfAfterWordApplication) => Unit) { fun(left, "can", resultOfAfterWordApplication) } } /** * Implicitly converts an object of type String to a StringCanWrapper, * to enable can methods to be invokable on that object. */ implicit def convertToStringCanWrapper(o: String): StringCanWrapperForVerb = new StringCanWrapperForVerb(o) }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy