diff --git a/project/build.scala b/project/build.scala index 268ac22d1..e8ddd3c61 100644 --- a/project/build.scala +++ b/project/build.scala @@ -175,7 +175,9 @@ object ScalatraBuild extends Build { httpclient, httpmime, jodaTime % "provided", - jodaConvert % "provided" + jodaConvert % "provided", + scalatest(sv), + seleniumjava )), description := "The abstract Scalatra test framework" ) @@ -282,6 +284,7 @@ object ScalatraBuild extends Build { lazy val scalate: MM = sv => "org.fusesource.scalate" % scalateArtifact(sv) % scalateVersion(sv) lazy val scalatest: MM = sv => "org.scalatest" %% "scalatest" % scalatestVersion(sv) lazy val scalaz = "org.scalaz" %% "scalaz-core" % "7.0.0-M8" + lazy val seleniumjava = "org.seleniumhq.selenium" % "selenium-java" % "2.31.0" lazy val servletApi = "org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" artifacts (Artifact("javax.servlet", "jar", "jar")) lazy val slf4jSimple = "org.slf4j" % "slf4j-simple" % "1.7.2" lazy val specs: MM = sv => "org.scala-tools.testing" % "specs" % specsVersion(sv) cross specsCross @@ -327,7 +330,7 @@ object ScalatraBuild extends Build { private val scalatestVersion: String => String = { case sv if sv startsWith "2.8." => "1.8" - case _ => "1.9.1" + case _ => "2.0.M5b" } private val specsCross = CrossVersion.binaryMapped { diff --git a/specs2/src/main/scala/org/scalatra/test/specs2/SeleniumSpec.scala b/specs2/src/main/scala/org/scalatra/test/specs2/SeleniumSpec.scala new file mode 100644 index 000000000..c328553c1 --- /dev/null +++ b/specs2/src/main/scala/org/scalatra/test/specs2/SeleniumSpec.scala @@ -0,0 +1,22 @@ +package org.scalatra +package test +package specs2 + +import org.specs2.Specification +import org.specs2.specification._ +import org.specs2.main.ArgumentsShortcuts._ + +import SeleniumWebBrowser._ + +/** + * A base specification structure that starts the tester before the + * specification and stops it afterward. Clients probably want to extend + * ScalatraSpec or MutableScalatraSpec. + */ +trait BaseSeleniumSpec extends BaseSpecification with SeleniumTests { + override def map(fs: =>Fragments) = sequential ^ Step(start()) ^ super.map(fs) ^ Step(stop()) +} + +trait MutableSeleniumSpec extends Specification with BaseSeleniumSpec + +trait SeleniumSpec extends Specification with BaseSeleniumSpec \ No newline at end of file diff --git a/test/src/main/scala/org/scalatra/test/SeleniumWebBrowser.scala b/test/src/main/scala/org/scalatra/test/SeleniumWebBrowser.scala new file mode 100644 index 000000000..f4430b361 --- /dev/null +++ b/test/src/main/scala/org/scalatra/test/SeleniumWebBrowser.scala @@ -0,0 +1,55 @@ +package org.scalatra.test + +object SeleniumWebBrowser { + trait Chrome extends org.scalatest.selenium.Chrome { + /** + * remapping of a selenium/scalatest method since it conflicts with + * a specs2 method + */ + def nameQuery(elementName: String): NameQuery = { + name(elementName) + } + } + + trait Firefox extends org.scalatest.selenium.Firefox { + /** + * remapping of a selenium/scalatest method since it conflicts with + * a specs2 method + */ + def nameQuery(elementName: String): NameQuery = { + name(elementName) + } + } + + trait HtmlUnit extends org.scalatest.selenium.HtmlUnit { + /** + * remapping of a selenium/scalatest method since it conflicts with + * a specs2 method + */ + def nameQuery(elementName: String): NameQuery = { + name(elementName) + } + } + + trait InternetExplorer extends org.scalatest.selenium.InternetExplorer { + /** + * remapping of a selenium/scalatest method since it conflicts with + * a specs2 method + */ + def nameQuery(elementName: String): NameQuery = { + name(elementName) + } + } + + trait Safari extends org.scalatest.selenium.Safari { + /** + * remapping of a selenium/scalatest method since it conflicts with + * a specs2 method + */ + def nameQuery(elementName: String): NameQuery = { + name(elementName) + } + } + + trait SeleniumTests extends EmbeddedJettyContainer with HttpComponentsClient { } +} \ No newline at end of file