| # 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 |