blob: 03e6404b4302a036ae4da77c28a5e9acb8705d91 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with this
# work for additional information regarding copyright ownership. The ASF
# licenses this file to you 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.
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helpers'))
# TODO's
# -test passing System props
# -test passing ENV variables
# -test exclude group
# -test include Suite's
# -test exclude Suite's
#
describe "scalatest version" do
case
when Buildr::Scala.version?(2.8)
it 'should be 1.3 for scala 2.8' do
Scala::ScalaTest.dependencies.should include("org.scalatest:scalatest:jar:1.3")
end
when Buildr::Scala.version?(2.9)
it 'should be 1.8 for scala 2.9' do
Scala::ScalaTest.dependencies.should include("org.scalatest:scalatest_2.9.2:jar:1.8")
end
end
end
describe Buildr::Scala::ScalaTest do
it 'should be the default test framework when test cases are in Scala' do
write 'src/test/scala/com/example/MySuite.scala', <<-SCALA
package com.example
import org.scalatest.FunSuite
class MySuite extends FunSuite {
test("addition") {
val sum = 1 + 1
assert(sum === 2)
}
}
SCALA
define 'foo'
project('foo').test.framework.should eql(:scalatest)
end
it 'should include Scalatest dependencies' do
define('foo') { test.using(:scalatest) }
project('foo').test.compile.dependencies.should include(*artifacts(Scala::ScalaTest.dependencies))
project('foo').test.dependencies.should include(*artifacts(Scala::ScalaTest.dependencies))
end
it 'should include JMock dependencies' do
define('foo') { test.using(:scalatest) }
project('foo').test.compile.dependencies.should include(*artifacts(JMock.dependencies))
project('foo').test.dependencies.should include(*artifacts(JMock.dependencies))
end
it 'should include ScalaCheck dependencies' do
define('foo') { test.using(:scalatest) }
project('foo').test.compile.dependencies.should include(*artifacts(Scala::Check.dependencies))
project('foo').test.dependencies.should include(*artifacts(Scala::Check.dependencies))
end
it 'should set current directory' do
mkpath 'baz'
expected = File.expand_path('baz')
expected.gsub!('/', '\\') if expected =~ /^[A-Z]:/ # Java returns back slashed paths for windows
write 'baz/src/test/scala/CurrentDirectoryTestSuite.scala', <<-SCALA
class CurrentDirectoryTestSuite extends org.scalatest.FunSuite {
test("testCurrentDirectory") {
assert("value" === System.getenv("NAME"))
assert(#{expected.inspect} === new java.io.File(".").getCanonicalPath())
}
}
SCALA
define 'bar' do
define 'baz' do
test.include 'CurrentDirectoryTest'
end
end
project('bar:baz').test.invoke
end
it 'should include public classes extending org.scalatest.FunSuite' do
write 'src/test/scala/com/example/MySuite.scala', <<-SCALA
package com.example
import org.scalatest.FunSuite
class MySuite extends FunSuite {
test("addition") {
val sum = 1 + 1
assert(sum === 2)
}
}
SCALA
define('foo').test.invoke
project('foo').test.tests.should include('com.example.MySuite')
end
it 'should ignore classes not extending org.scalatest.FunSuite' do
write 'src/test/scala/com/example/NotASuite.scala', <<-SCALA
package com.example
class Another {
}
SCALA
define('foo').test.invoke
project('foo').test.tests.should be_empty
end
it 'should ignore inner classes' do
write 'src/test/scala/com/example/InnerClassTest.scala', <<-SCALA
package com.example
import org.scalatest.FunSuite
class InnerClassTest extends FunSuite {
test("addition") {
val sum = 1 + 1
assert(sum === 2)
}
class InnerSuite extends FunSuite {
test("addition") {
val sum = 1 + 1
assert(sum === 2)
}
}
}
SCALA
define('foo').test.invoke
project('foo').test.tests.should eql(['com.example.InnerClassTest'])
end
it 'should pass when ScalaTest test case passes' do
write 'src/test/scala/PassingSuite.scala', <<-SCALA
class PassingSuite extends org.scalatest.FunSuite {
test("addition") {
val sum = 1 + 1
assert(sum === 2)
}
}
SCALA
lambda { define('foo').test.invoke }.should_not raise_error
end
it 'should fail when ScalaTest test case fails' do
write 'src/test/scala/FailingSuite.scala', <<-SCALA
class FailingSuite extends org.scalatest.FunSuite {
test("failing") {
assert(false)
}
}
SCALA
lambda { define('foo').test.invoke }.should raise_error(RuntimeError, /Tests failed/) rescue nil
end
it 'should report failed test names' do
write 'src/test/scala/FailingSuite.scala', <<-SCALA
class FailingSuite extends org.scalatest.FunSuite {
test("failing") {
assert(false)
}
}
SCALA
define('foo').test.invoke rescue
project('foo').test.failed_tests.should include('FailingSuite')
end
it 'should report to reports/scalatest/TEST-TestSuiteName.xml' do
write 'src/test/scala/PassingSuite.scala', <<-SCALA
class PassingSuite extends org.scalatest.FunSuite {
test("passing") {
assert(true)
}
}
SCALA
define 'foo' do
test.report_to.should be(file('reports/scalatest'))
end
project('foo').test.invoke
project('foo').file('reports/scalatest/TEST-PassingSuite.xml').should exist
end
it 'should report to reports/scalatest/TEST-TestSuiteName.txt' do
write 'src/test/scala/PassingSuite.scala', <<-SCALA
class PassingSuite extends org.scalatest.FunSuite {
test("passing") {
assert(true)
}
}
SCALA
define 'foo' do
test.report_to.should be(file('reports/scalatest'))
end
project('foo').test.invoke
project('foo').file('reports/scalatest/TEST-PassingSuite.txt').should exist
end
it 'should pass properties to Suite' do
write 'src/test/scala/PropertyTestSuite.scala', <<-SCALA
import org.scalatest._
import org.scalatest.fixture.FunSuite
import org.scalatest.fixture.ConfigMapFixture
class PropertyTestSuite extends FunSuite with ConfigMapFixture {
test("testProperty") { (configMap: Map[String, Any]) =>
assert(configMap("name") === "value")
}
}
SCALA
define('foo').test.using :properties=>{ 'name'=>'value' }
project('foo').test.invoke
end
it 'should run with ScalaCheck automatic test case generation' do
write 'src/test/scala/MySuite.scala', <<-SCALA
import org.scalatest.FunSuite
import org.scalatest.prop.Checkers
import org.scalacheck.Arbitrary._
import org.scalacheck.Prop._
class MySuite extends FunSuite with Checkers {
test("list concatenation") {
val x = List(1, 2, 3)
val y = List(4, 5, 6)
assert(x ::: y === List(1, 2, 3, 4, 5, 6))
check((a: List[Int], b: List[Int]) => a.size + b.size == (a ::: b).size)
}
test("list concatenation using a test method") {
check((a: List[Int], b: List[Int]) => a.size + b.size == (a ::: b).size)
}
}
SCALA
define('foo')
project('foo').test.invoke
project('foo').test.passed_tests.should include('MySuite')
end
it 'should fail if ScalaCheck test case fails' do
write 'src/test/scala/StringSuite.scala', <<-SCALA
import org.scalatest.FunSuite
import org.scalatest.prop.Checkers
import org.scalacheck.Arbitrary._
import org.scalacheck.Prop._
class StringSuite extends FunSuite with Checkers {
test("startsWith") {
check( (a: String, b: String) => (a+b).startsWith(a) )
}
test("endsWith") {
check( (a: String, b: String) => (a+b).endsWith(b) )
}
// Is this really always true?
test("concat") {
check( (a: String, b: String) => (a+b).length > a.length && (a+b).length > b.length )
}
test("substring2") {
check( (a: String, b: String) => (a+b).substring(a.length) == b )
}
test("substring3") {
check( (a: String, b: String, c: String) =>
(a+b+c).substring(a.length, a.length+b.length) == b )
}
}
SCALA
define('foo')
project('foo').test.invoke rescue
project('foo').test.failed_tests.should include('StringSuite')
end
end