| # 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')) |
| |
| describe Buildr::Compiler::Ecj do |
| |
| before(:all) do |
| #Make ecj appear as a compiler that applies: |
| class Buildr::Compiler::Ecj |
| class << self |
| def applies_to?(project, task) |
| paths = task.sources + [sources].flatten.map { |src| Array(project.path_to(:source, task.usage, src.to_sym)) } |
| paths.flatten.each { |path| |
| path = path.to_s |
| Find.find(path) {|found| |
| if (!File.directory?(found)) && found.match(/.*\.#{Array(source_ext).join('|')}/) |
| return true |
| end |
| } if File.exist? path |
| } |
| false |
| end |
| end |
| end |
| end |
| |
| it "should be the default Java compiler once loaded" do |
| write 'src/main/java/Foo.java', 'public class Foo {}' |
| foo = define('foo') |
| foo.compile.compiler.should == :ecj |
| end |
| |
| describe "should compile a Java project just in the same way javac does" do |
| javac_spec = File.read(File.join(File.dirname(__FILE__), "compiler_spec.rb")) |
| javac_spec = javac_spec.match(Regexp.escape("require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helpers'))\n")).post_match |
| javac_spec.gsub!("javac", "ecj") |
| javac_spec.gsub!("nowarn", "warn:none") |
| eval(javac_spec) |
| end |
| |
| # Redirect the java error ouput, yielding so you can do something while it is |
| # and returning the content of the error buffer. |
| # |
| def redirect_java_err |
| pending "RJB doesn't support well instantiating a class that has several constructors" unless RUBY_PLATFORM =~ /java/ |
| err = Java.java.io.ByteArrayOutputStream.new |
| original_err = Java.java.lang.System.err |
| begin |
| printStream = Java.java.io.PrintStream |
| print = printStream.new(err) |
| Java.java.lang.System.setErr(print) |
| yield |
| ensure |
| Java.java.lang.System.setErr(original_err) |
| end |
| err.toString |
| end |
| |
| it "should not issue warnings for type casting when warnings are set to warn:none, by default" do |
| write "src/main/java/Main.java", "import java.util.List; public class Main {public List get() {return null;}}" |
| foo = define("foo") { |
| compile.options.source = "1.5" |
| compile.options.target = "1.5" |
| } |
| redirect_java_err { foo.compile.invoke }.should_not match(/WARNING/) |
| end |
| |
| it "should issue warnings for type casting when warnings are set" do |
| write "src/main/java/Main.java", "import java.util.List; public class Main {public List get() {return null;}}" |
| foo = define("foo") { |
| compile.options.source = "1.5" |
| compile.options.target = "1.5" |
| compile.options.warnings = true |
| } |
| redirect_java_err { foo.compile.invoke }.should match(/WARNING/) |
| end |
| |
| after(:all) do |
| #Make ecj appear as a compiler that doesn't apply: |
| module Buildr |
| module Compiler |
| class Ecj |
| class << self |
| def applies_to?(project, task) |
| false |
| end |
| end |
| end |
| end |
| end |
| end |
| end |