|
Lift Framework example source code file (MockWebSpec.scala)
The Lift Framework MockWebSpec.scala source code/* * Copyright 2011 WorldWide Conferencing, LLC * * 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 net.liftweb package mockweb import scala.xml.{Null,Text,UnprefixedAttribute} import org.specs.Specification import common._ import util._ import http._ import provider.servlet.HTTPRequestServlet import mocks.MockHttpServletRequest /** * System under specification for MockWeb. This does the double duty as both a spec * against the MockWeb object as well as an example of how to use it. */ object MockWebSpec extends Specification("MockWeb Specification") { import MockWeb._ /** We can create our own LiftRules instance for the purpose of this spec. In the * examples below we can call LiftRulesMocker.devTestLiftRulesInstance.doWit(mockLiftRules) {...} * whenever we want to evaluate LiftRules. For simpler usage, WebSpecSpec provides * full-featured LiftRules mocking. */ val mockLiftRules = new LiftRules() // Set up our mock LiftRules instance LiftRulesMocker.devTestLiftRulesInstance.doWith(mockLiftRules) { // Global LiftRules setup LiftRules.statelessRewrite.append { case RewriteRequest(ParsePath(List("test", "stateless"), _, _, _), _, _) => { RewriteResponse(List("stateless", "works")) } } LiftRules.statefulRewrite.append { case RewriteRequest(ParsePath(List("test", "stateful"), _, _, _), _, _) => { RewriteResponse(List("stateful", "works")) } } LiftRules.early.append { req => req match { case httpReq : HTTPRequestServlet => { httpReq.req match { case mocked : MockHttpServletRequest => { mocked.remoteAddr = "1.2.3.4" } case _ => println("Not a mocked request?") } } case _ => println("Not a servlet request?") } } } "MockWeb" should { shareVariables() // Avoid setting up LiftRules multiple times "provide a Req corresponding to a string url" in { testReq("http://foo.com/test/this?a=b&a=c", "/test") { req => req.uri must_== "/this" req.params("a") must_== List("b","c") } } "provide a Req corresponding to a HttpServletRequest" in { val mockReq = new MockHttpServletRequest("http://foo.com/test/this", "/test") mockReq.method = "POST" import json.JsonDSL._ mockReq.body = ("name" -> "joe") ~ ("age" -> 35) testReq(mockReq) { req => req.json_? must_== true } } "process LiftRules.early when configured" in { LiftRulesMocker.devTestLiftRulesInstance.doWith(mockLiftRules) { useLiftRules.doWith(true) { testReq("http://foo.com/test/this") { req => req.remoteAddr must_== "1.2.3.4" } } } } "process LiftRules stateless rewrites when configured" in { LiftRulesMocker.devTestLiftRulesInstance.doWith(mockLiftRules) { useLiftRules.doWith(true) { testReq("http://foo.com/test/stateless") { req => req.path.partPath must_== List("stateless", "works") } } } } "initialize S based on a string url" in { testS("http://foo.com/test/that?a=b&b=c") { S.param("b") must_== Full("c") } } "initialize S based on a HttpServletRequest" in { val mockReq = new MockHttpServletRequest("http://foo.com/test/this?foo=bar", "/test") testS(mockReq) { S.param("foo") must_== Full("bar") S.uri must_== "/this" } } "process S with stateless rewrites" in { LiftRulesMocker.devTestLiftRulesInstance.doWith(mockLiftRules) { useLiftRules.doWith(true) { testS("http://foo.com/test/stateless") { S.request.foreach(_.path.partPath must_== List("stateless", "works")) } } } } "process S with stateful rewrites" in { LiftRulesMocker.devTestLiftRulesInstance.doWith(mockLiftRules) { useLiftRules.doWith(true) { testS("http://foo.com/test/stateful") { S.request.foreach(_.path.partPath must_== List("stateful", "works")) } } } } "emulate a snippet invocation" in { testS("http://foo.com/test/stateful") { withSnippet("MyWidget.foo", new UnprefixedAttribute("bar", Text("bat"), Null)) { S.currentSnippet must_== Full("MyWidget.foo") S.attr("bar") must_== Full("bat") } } } "simplify shared sessions" in { object testVar extends SessionVar[String]("Empty") val session = testS("http://foo.com/test") { testVar("Foo!") S.session // returns the current session } // A second test testS("http://foo.com/test2", session) { testVar.is must_== "Foo!" } } } } Other Lift Framework examples (source code examples)Here is a short list of links related to this Lift Framework MockWebSpec.scala source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.