File: ant_spec.rb

package info (click to toggle)
jruby 9.4.8.0%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 89,244 kB
  • sloc: ruby: 548,574; java: 276,189; yacc: 25,873; ansic: 6,178; xml: 6,111; sh: 1,855; sed: 94; makefile: 78; jsp: 48; tcl: 40; exp: 12
file content (148 lines) | stat: -rw-r--r-- 3,993 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
require File.expand_path('../../ant_spec_helper', __FILE__)

describe Ant, '.load' do
  include Ant::RSpec::AntExampleGroup

  before :each do
    @previous_java_home = ENV['JAVA_HOME'] || ENV_JAVA['java.home']

    if (TestHelper::WINDOWS)
      ENV['JAVA_HOME'] = '/C:/java6'
    else
      ENV['JAVA_HOME'] = '/System/Library/Frameworks/JavaVM.framework/Home'
    end
    @tools_jar = "#{ENV['JAVA_HOME']}/lib/tools.jar"
    @classes_zip = "#{ENV['JAVA_HOME']}/lib/classes.zip"

    Ant.instance_eval do
      remove_const(:JAVA_HOME) rescue nil
    end
  end

  after :each do
    ENV['JAVA_HOME'] = @previous_java_home
    Ant.instance_eval do
      begin
        remove_const(:JAVA_HOME)
        const_set(:JAVA_HOME, @previous_java_home)
      rescue NameError
        # ignore, JAVA_HOME constant is not necessarily set now
      end
    end
  end

  it "adds tools.jar to the CLASSPATH when JAVA_HOME is set and it exists" do
    stub_File!
    Ant.load
    expect($CLASSPATH).to include("file:#{@tools_jar}")
  end

  it "adds classes.zip to the CLASSPATH when JAVA_HOME is set and it exists" do
    stub_File!
    Ant.load
    expect($CLASSPATH).to include("file:#{@classes_zip}")
  end

  def stub_File!
    allow(File).to receive(:exist?).and_return false
    expect(File).to receive(:exist?).with(ENV['JAVA_HOME']).and_return true
    expect(File).to receive(:exist?).with(@tools_jar).and_return true
    expect(File).to receive(:exist?).with(@classes_zip).and_return true
  end
end

describe Ant, ".new" do
  include Ant::RSpec::AntExampleGroup

  it "can be instantiated with a block" do
    klass = nil

    Ant.new do
      klass = self.class
    end

    expect(klass).to eq(Ant)
  end

  it "can be instantiated with a block whose single argument receives the Ant instance" do
    klass = nil
    ant_klass = nil

    Ant.new do |ant|
      klass = self.class
      ant_klass = ant.class
    end

    expect(klass).not_to eq(Ant)
    expect(ant_klass).to eq(Ant)
  end

  it "should execute top-level tasks as it encounters them" do
    Ant.new do |ant|
      expect(ant.properties["foo"]).to_not eq("bar")
      ant.property :name => "foo", :value => "bar"
      expect(ant.properties["foo"]).to eq("bar")
    end
  end

  it "should have a valid location" do
    expect(File).to be_exist(Ant.new.location.file_name)
  end
end

describe Ant do
  include Ant::RSpec::AntExampleGroup

  before :each do
    @ant = example_ant
  end

  it "should define methods corresponding to ant tasks" do
    expect(@ant.methods).to include(:java, :antcall, :property, :import, :path, :patternset)
  end

  it "should execute the default target" do
    @ant.target("default") { property :name => "spec", :value => "example" }
    @ant.project.default = "default"
    @ant.execute_default
    expect(@ant.properties["spec"]).to eq("example")
  end

  it "should execute the specified target" do
    @ant.target("a") { property :name => "a", :value => "true" }
    @ant.target("b") { property :name => "b", :value => "true" }
    @ant.execute_target("a")
    expect(@ant.properties["a"]).to eq("true")
    @ant["b"].execute
    expect(@ant.properties["b"]).to eq("true")
  end

  it "should raise when a bogus target is executed" do
    expect { @ant["bogus"].execute }.to raise_error(RuntimeError)
  end

  it "should handle -Dkey=value arguments from the command-line" do
    @ant.project.default = "help"
    @ant.process_arguments(["-Dcommand.line.msg=hello", "help"], false)
    @ant.define_tasks do
      target :help do
        property :name => "msg", :value => "${command.line.msg}"
      end
    end
    @ant.run
    expect(@ant.properties["msg"]).to eq("hello")
  end
end

describe Ant, '.ant' do
  it "prefers $ANT_HOME to $PATH" do
    if ENV['ANT_HOME']
      with_hidden_ant_path do
        expect { Ant.ant(:basedir => File.join(File.dirname(__FILE__), '..', '..', '..')) }.
        to_not raise_error
      end
    else
      skip '$ANT_HOME is not set'
    end
  end
end