blob: c52e20f90e92dee354a987f4dc5d922434c9150a [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.
module Buildr::Scala #:nodoc:
class Specs2 < Buildr::TestFramework::JavaBDD
@lang = :scala
@bdd_dir = :spec
VERSION = case
when Buildr::Scala.version?('2.8.0'), Buildr::Scala.version?('2.8.1'), Buildr::Scala.version?('2.8.2')
'1.5'
when Buildr::Scala.version?('2.9')
'1.11'
when Buildr::Scala.version?('2.10')
'1.12.3'
else
'3.7' # default for Scala 2.11 and beyond
end
class << self
def version
custom = Buildr.settings.build['scala.specs2']
(custom =~ /:/) ? Buildr.artifact(custom).version : VERSION
end
def specs
custom = Buildr.settings.build['scala.specs2']
[ (custom =~ /:/) ? custom : "org.specs2:#{artifact}:pom:#{version}" ]
end
def artifact
case
when Buildr.settings.build['scala.specs2.artifact']
Buildr.settings.build['scala.specs2.artifact']
else
if Buildr::Scala.version < '2.11'
"specs2_#{Buildr::Scala.version_without_build_number}"
else
"specs2_#{Buildr::Scala.version_major_minor}"
end
end
end
def type
if Buildr::Scala.version < '2.11'
'jar'
else
'pom'
end
end
def scalaz_dependencies
if Buildr::Scala.version?('2.8')
[]
elsif Buildr::Scala.version < '2.11'
default_version = '6.0.1'
custom_version = Buildr.settings.build['scala.specs2-scalaz']
version = (custom_version =~ /:/) ? Buildr.artifact(custom_version).version : default_version
artifact = Buildr.settings.build['scala.specs2-scalaz.artifact'] || "specs2-scalaz-core_#{Buildr::Scala.version_without_build}"
custom_spec = Buildr.settings.build['scala.specs2-scalaz']
spec = [ (custom_spec =~ /:/) ? custom_spec : "org.specs2:#{artifact}:jar:#{version}" ]
Buildr.transitive(spec, :scopes => [nil, 'compile', 'runtime', 'provided', 'optional'], :optional => true)
else
default_version = '7.2.2'
custom_version = Buildr.settings.build['scala.specs2-scalaz']
version = (custom_version =~ /:/) ? Buildr.artifact(custom_version).version : default_version
artifact = Buildr.settings.build['scala.specs2-scalaz.artifact'] || "scalaz-core_#{Buildr::Scala.version_major_minor}"
custom_spec = Buildr.settings.build['scala.specs2-scalaz']
spec = [ (custom_spec =~ /:/) ? custom_spec : "org.scalaz:#{artifact}:jar:#{version}" ]
[Buildr.transitive(spec, :scopes => [nil, 'compile', 'runtime', 'provided', 'optional'], :optional => true), 'org.scala-lang.modules:scala-xml_2.11:jar:1.0.1']
end
end
def dependencies
unless @dependencies
super
# Add utility classes and other dependencies
options = {
:scopes => [nil, 'compile', 'runtime', 'provided', 'optional'],
:optional => true
}
@dependencies |= [ File.join(File.dirname(__FILE__)) ] + Buildr.transitive(specs, options) +
scalaz_dependencies + Check.dependencies + JUnit.dependencies +
Scalac.dependencies
end
@dependencies
end
def applies_to?(project) #:nodoc:
scala_files = Dir[project.path_to(:source, bdd_dir, lang, '**/*.scala')]
return false if scala_files.empty?
scala_files.detect { |f| find(f, /\s+(org\.specs2\.)/) }
end
private
def find(file, pattern)
File.open(file, 'r') do |infile|
while (line = infile.gets)
return true if line.match(pattern)
end
end
false
end
end
def initialize(task, options) #:nodoc:
super
specs = task.project.path_to(:source, :spec, :scala)
task.compile.from specs if File.directory?(specs)
resources = task.project.path_to(:source, :spec, :resources)
task.resources.from resources if File.directory?(resources)
end
def tests(dependencies)
filter_classes(dependencies, :interfaces => %w(org.specs2.Specification org.specs2.mutable.Specification))
end
def run(specs, dependencies) #:nodoc:
properties = {'specs2.outDir' => task.compile.target.to_s }
cmd_options = { :properties => options[:properties].merge(properties),
:java_args => options[:java_args],
:classpath => dependencies,
:name => false }
runner = 'org.specs2.runner.ClassRunner'
specs.inject [] do |passed, spec|
begin
Java::Commands.java('io.tmio.scalamain.Main', runner, 'run', spec, cmd_options)
rescue => e
passed
else
passed << spec
end
end
end
end
end
Buildr::TestFramework << Buildr::Scala::Specs2