/spec/scala/tests_spec.rb
Ruby | 260 lines | 231 code | 9 blank | 20 comment | 1 complexity | 03ae2d1ce0bc571eeaeeec9afaa6e10b MD5 | raw file
Possible License(s): Apache-2.0
- # 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.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 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.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._
- class PropertyTestSuite extends FunSuite {
- var properties = Map[String, Any]()
- test("testProperty") {
- assert(properties("name") === "value")
- }
-
- protected override def runTests(testName: Option[String], reporter: Reporter, stopper: Stopper,
- includes: Set[String], excludes: Set[String], properties: Map[String, Any]) {
- this.properties = properties;
- super.runTests(testName, reporter, stopper, includes, excludes, properties)
- }
- }
- 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.prop.PropSuite
- import org.scalacheck.Arbitrary._
- import org.scalacheck.Prop._
-
- class MySuite extends PropSuite {
-
- 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",
- (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.prop.PropSuite
- import org.scalacheck.Arbitrary._
- import org.scalacheck.Prop._
- class StringSuite extends PropSuite {
- 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