gjp 0.29.0 → 0.30.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +86 -111
- data/lib/gjp.rb +2 -2
- data/lib/gjp/ant_runner.rb +27 -0
- data/lib/gjp/cli.rb +27 -26
- data/lib/gjp/kit_runner.rb +2 -42
- data/lib/gjp/limited_network_user.rb +1 -1
- data/lib/gjp/maven_runner.rb +47 -0
- data/lib/gjp/pom.rb +10 -17
- data/lib/gjp/pom_getter.rb +10 -3
- data/lib/gjp/project.rb +5 -5
- data/lib/gjp/script_generator.rb +4 -3
- data/lib/gjp/source_getter.rb +12 -81
- data/lib/gjp/version.rb +1 -1
- data/lib/gjp/version_matcher.rb +2 -2
- data/spec/lib/ant_runner_spec.rb +46 -0
- data/spec/lib/kit_runner_spec.rb +5 -76
- data/spec/lib/maven_runner_spec.rb +67 -0
- data/spec/lib/pom_getter_spec.rb +6 -0
- data/spec/lib/pom_spec.rb +12 -22
- data/spec/lib/source_getter_spec.rb +9 -42
- data/spec/spec_helper.rb +28 -11
- metadata +8 -8
- data/lib/gjp/parent_pom_getter.rb +0 -22
- data/lib/gjp/source_address_getter.rb +0 -51
- data/spec/lib/parent_pom_getter_spec.rb +0 -16
- data/spec/lib/source_address_getter_spec.rb +0 -20
@@ -0,0 +1,47 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Gjp
|
4
|
+
# runs Maven with gjp-specific options
|
5
|
+
class MavenRunner < KitRunner
|
6
|
+
include Logger
|
7
|
+
|
8
|
+
# runs Maven in a subprocess
|
9
|
+
def mvn(options)
|
10
|
+
run_executable("#{get_maven_commandline(@project.full_path)} #{options.join(' ')}")
|
11
|
+
end
|
12
|
+
|
13
|
+
# runs Maven to attempt getting a source jar
|
14
|
+
# returns true if successful
|
15
|
+
def get_source_jar(group_id, artifact_id, version)
|
16
|
+
mvn(["dependency:get", "-Dartifact=#{group_id}:#{artifact_id}:#{version}:jar:sources", "-Dtransitive=false"])
|
17
|
+
end
|
18
|
+
|
19
|
+
# runs Maven to get the effective POM from an existing POM
|
20
|
+
# returns effective pom path or nil if not found
|
21
|
+
def get_effective_pom(pom_path)
|
22
|
+
effective_pom_path = "#{pom_path}.effective"
|
23
|
+
success = mvn(["help:effective-pom", "-f#{pom_path}", "-Doutput=#{File.split(effective_pom_path)[1]}"])
|
24
|
+
if success
|
25
|
+
effective_pom_path
|
26
|
+
else
|
27
|
+
nil
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# returns a command line for running Maven from the specified
|
32
|
+
# prefix
|
33
|
+
def get_maven_commandline(prefix)
|
34
|
+
executable = find_executable("mvn")
|
35
|
+
|
36
|
+
if executable != nil
|
37
|
+
mvn_path = File.join(prefix, executable)
|
38
|
+
repo_path = File.join(prefix, "kit", "m2")
|
39
|
+
config_path = File.join(prefix, "kit", "m2", "settings.xml")
|
40
|
+
|
41
|
+
"#{mvn_path} -Dmaven.repo.local=#{repo_path} -s#{config_path}"
|
42
|
+
else
|
43
|
+
raise ExecutableNotFoundError.new("mvn")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/gjp/pom.rb
CHANGED
@@ -10,14 +10,7 @@ module Gjp
|
|
10
10
|
@doc = Nokogiri::XML(open(filename).read)
|
11
11
|
@doc.remove_namespaces!
|
12
12
|
end
|
13
|
-
|
14
|
-
def connection_address
|
15
|
-
connection_nodes = @doc.xpath("//scm/connection/text()")
|
16
|
-
if connection_nodes.any?
|
17
|
-
connection_nodes.first.to_s.sub(/^scm:/, "")
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
13
|
+
|
21
14
|
def group_id
|
22
15
|
@doc.xpath("project/groupId").text
|
23
16
|
end
|
@@ -26,6 +19,10 @@ module Gjp
|
|
26
19
|
@doc.xpath("project/artifactId").text
|
27
20
|
end
|
28
21
|
|
22
|
+
def name
|
23
|
+
@doc.xpath("project/name").text
|
24
|
+
end
|
25
|
+
|
29
26
|
def version
|
30
27
|
@doc.xpath("project/version").text
|
31
28
|
end
|
@@ -48,16 +45,12 @@ module Gjp
|
|
48
45
|
end
|
49
46
|
end
|
50
47
|
|
51
|
-
def
|
52
|
-
@doc.xpath("project/
|
53
|
-
end
|
54
|
-
|
55
|
-
def parent_artifact_id
|
56
|
-
@doc.xpath("project/parent/artifactId").text
|
48
|
+
def scm_connection
|
49
|
+
@doc.xpath("project/scm/connection").text
|
57
50
|
end
|
58
|
-
|
59
|
-
def
|
60
|
-
@doc.xpath("project/
|
51
|
+
|
52
|
+
def scm_url
|
53
|
+
@doc.xpath("project/scm/url").text
|
61
54
|
end
|
62
55
|
end
|
63
56
|
end
|
data/lib/gjp/pom_getter.rb
CHANGED
@@ -26,6 +26,7 @@ module Gjp
|
|
26
26
|
|
27
27
|
# returns a pom embedded in a jar file
|
28
28
|
def get_pom_from_jar(file)
|
29
|
+
log.debug("Attempting unpack of #{file} to find a POM")
|
29
30
|
begin
|
30
31
|
Zip::ZipFile.foreach(file) do |entry|
|
31
32
|
if entry.name =~ /\/pom.xml$/
|
@@ -43,6 +44,7 @@ module Gjp
|
|
43
44
|
|
44
45
|
# returns a pom from search.maven.org with a jar sha1 search
|
45
46
|
def get_pom_from_sha1(file)
|
47
|
+
log.debug("Attempting SHA1 POM lookup for #{file}")
|
46
48
|
begin
|
47
49
|
if File.file?(file)
|
48
50
|
site = MavenWebsite.new
|
@@ -55,24 +57,28 @@ module Gjp
|
|
55
57
|
return site.download_pom(group_id, artifact_id, version), :found_via_sha1
|
56
58
|
end
|
57
59
|
end
|
58
|
-
return nil
|
59
60
|
rescue RestClient::ResourceNotFound
|
60
|
-
log.
|
61
|
+
log.warn("Got a 404 error while looking for #{file}'s SHA1 in search.maven.org")
|
61
62
|
end
|
63
|
+
nil
|
62
64
|
end
|
63
65
|
|
64
66
|
# returns a pom from search.maven.org with a heuristic name search
|
65
67
|
def get_pom_from_heuristic(filename)
|
66
68
|
begin
|
69
|
+
log.debug("Attempting heuristic POM search for #{filename}")
|
67
70
|
site = MavenWebsite.new
|
68
71
|
filename = cleanup_name(filename)
|
69
72
|
version_matcher = VersionMatcher.new
|
70
73
|
my_artifact_id, my_version = version_matcher.split_version(filename)
|
74
|
+
log.debug("Guessed artifact id: #{my_artifact_id}, version: #{my_version}")
|
71
75
|
|
72
76
|
result = site.search_by_name(my_artifact_id).first
|
77
|
+
log.debug("Artifact id search result: #{result}")
|
73
78
|
if result != nil
|
74
79
|
group_id, artifact_id, version = site.get_maven_id_from result
|
75
80
|
results = site.search_by_group_id_and_artifact_id(group_id, artifact_id)
|
81
|
+
log.debug("All versions: #{results}")
|
76
82
|
their_versions = results.map {|doc| doc["v"]}
|
77
83
|
best_matched_version = if my_version != nil then version_matcher.best_match(my_version, their_versions) else their_versions.max end
|
78
84
|
best_matched_result = (results.select{|result| result["v"] == best_matched_version}).first
|
@@ -83,8 +89,9 @@ module Gjp
|
|
83
89
|
return site.download_pom(group_id, artifact_id, version), :found_via_heuristic
|
84
90
|
end
|
85
91
|
rescue RestClient::ResourceNotFound
|
86
|
-
log.
|
92
|
+
log.warn("Got a 404 error while looking for #{filename} heuristically in search.maven.org")
|
87
93
|
end
|
94
|
+
nil
|
88
95
|
end
|
89
96
|
|
90
97
|
# get a heuristic name from a path
|
data/lib/gjp/project.rb
CHANGED
@@ -26,7 +26,7 @@ module Gjp
|
|
26
26
|
# finds the project directory up in the tree, like git does
|
27
27
|
def self.find_project_dir(starting_dir)
|
28
28
|
result = starting_dir
|
29
|
-
while is_project(result) == false
|
29
|
+
while is_project(result) == false && result != "/"
|
30
30
|
result = File.expand_path("..", result)
|
31
31
|
end
|
32
32
|
|
@@ -37,8 +37,8 @@ module Gjp
|
|
37
37
|
|
38
38
|
# returns true if the specified directory is a valid gjp project
|
39
39
|
def self.is_project(dir)
|
40
|
-
File.directory?(File.join(dir, "src"))
|
41
|
-
File.directory?(File.join(dir, "kit"))
|
40
|
+
File.directory?(File.join(dir, "src")) &&
|
41
|
+
File.directory?(File.join(dir, "kit")) &&
|
42
42
|
File.directory?(File.join(dir, ".git"))
|
43
43
|
end
|
44
44
|
|
@@ -49,7 +49,7 @@ module Gjp
|
|
49
49
|
dir_path = Pathname.new(File.expand_path(dir)).relative_path_from(Pathname.new(@full_path))
|
50
50
|
components = dir_path.to_s.split(File::SEPARATOR)
|
51
51
|
|
52
|
-
if components.count >= 2
|
52
|
+
if components.count >= 2 && components.first == "src" && Dir.exist?(File.join(@full_path, components[0], components[1]))
|
53
53
|
components[1]
|
54
54
|
else
|
55
55
|
raise NoPackageDirectoryError
|
@@ -210,7 +210,7 @@ module Gjp
|
|
210
210
|
from_directory do
|
211
211
|
result = []
|
212
212
|
Find.find("src") do |file|
|
213
|
-
if file =~ /.jar$/
|
213
|
+
if file =~ /.jar$/ && !File.symlink?(file)
|
214
214
|
new_location = File.join("kit", "jars", Pathname.new(file).split[1])
|
215
215
|
FileUtils.mv(file, new_location)
|
216
216
|
|
data/lib/gjp/script_generator.rb
CHANGED
@@ -7,7 +7,8 @@ module Gjp
|
|
7
7
|
|
8
8
|
def initialize(project, history_path)
|
9
9
|
@project = project
|
10
|
-
@
|
10
|
+
@ant_runner = Gjp::AntRunner.new(project)
|
11
|
+
@maven_runner = Gjp::MavenRunner.new(project)
|
11
12
|
@history_path = history_path
|
12
13
|
end
|
13
14
|
|
@@ -29,9 +30,9 @@ module Gjp
|
|
29
30
|
] +
|
30
31
|
relevant_lines.map do |line|
|
31
32
|
if line =~ /gjp +mvn/
|
32
|
-
line.gsub(/gjp +mvn/, "#{@
|
33
|
+
line.gsub(/gjp +mvn/, "#{@maven_runner.get_maven_commandline("$PROJECT_PREFIX")}")
|
33
34
|
elsif line =~ /gjp +ant/
|
34
|
-
line.gsub(/gjp +ant/, "#{@
|
35
|
+
line.gsub(/gjp +ant/, "#{@ant_runner.get_ant_commandline("$PROJECT_PREFIX")}")
|
35
36
|
else
|
36
37
|
line
|
37
38
|
end
|
data/lib/gjp/source_getter.rb
CHANGED
@@ -7,107 +7,38 @@ module Gjp
|
|
7
7
|
class SourceGetter
|
8
8
|
include Logger
|
9
9
|
|
10
|
+
# attempts to download a project's sources
|
11
|
+
def get_maven_source_jar(project, pom_path)
|
12
|
+
maven_runner = Gjp::MavenRunner.new(project)
|
13
|
+
pom = Pom.new(pom_path)
|
14
|
+
maven_runner.get_source_jar(pom.group_id, pom.artifact_id, pom.version)
|
15
|
+
end
|
16
|
+
|
10
17
|
# looks for jars in maven's local repo and downloads corresponding
|
11
18
|
# source jars
|
12
19
|
def get_maven_source_jars(project)
|
13
|
-
|
20
|
+
maven_runner = Gjp::MavenRunner.new(project)
|
14
21
|
|
15
22
|
project.from_directory do
|
16
23
|
paths = Find.find(".").reject {|path| artifact_from_path(path) == nil}.sort
|
17
24
|
|
18
25
|
succeded_paths = paths.select.with_index do |path, i|
|
19
|
-
|
20
|
-
log.info("attempting source download for #{path} (#{
|
21
|
-
|
22
|
-
status.exitstatus == 0
|
26
|
+
group_id, artifact_id, version = artifact_from_path(path)
|
27
|
+
log.info("attempting source download for #{path} (#{group_id}:#{artifact_id}:#{version})")
|
28
|
+
maven_runner.get_source_jar(group_id, artifact_id, version)
|
23
29
|
end
|
24
30
|
|
25
31
|
[succeded_paths, (paths - succeded_paths)]
|
26
32
|
end
|
27
33
|
end
|
28
34
|
|
29
|
-
# downloads a project's source into a specified directory
|
30
|
-
def get_source(address, pomfile, directory)
|
31
|
-
log.info("downloading: #{address} in #{directory}, pomfile: #{pomfile}")
|
32
|
-
|
33
|
-
dummy, prefix, scm_address = address.split(/^([^:]+):(.*)$/)
|
34
|
-
log.info("prefix: #{prefix}, scm_address: #{scm_address}")
|
35
|
-
|
36
|
-
get_source_from_scm(prefix, scm_address, pomfile, directory)
|
37
|
-
end
|
38
|
-
|
39
|
-
# checks code out from an scm
|
40
|
-
def get_source_from_scm(prefix, scm_address, pomfile, directory)
|
41
|
-
pom = Pom.new(pomfile)
|
42
|
-
dir = File.join(directory, "#{pom.group_id}:#{pom.artifact_id}:#{pom.version}")
|
43
|
-
begin
|
44
|
-
Dir::mkdir(dir)
|
45
|
-
rescue Errno::EEXIST
|
46
|
-
log.warn("Source directory exists, leaving...")
|
47
|
-
end
|
48
|
-
|
49
|
-
if prefix == "git"
|
50
|
-
get_source_from_git(scm_address, dir, pom.version)
|
51
|
-
elsif prefix == "svn"
|
52
|
-
get_source_from_svn(scm_address, dir, pom.version)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
# checks code out of git
|
57
|
-
def get_source_from_git(scm_address, dir, version)
|
58
|
-
`git clone #{scm_address} #{dir}`
|
59
|
-
|
60
|
-
Dir.chdir(dir) do
|
61
|
-
tags = `git tag`.split("\n")
|
62
|
-
|
63
|
-
if tags.any?
|
64
|
-
best_tag = get_best_tag(tags, version)
|
65
|
-
log.info("checking out tag: #{best_tag}")
|
66
|
-
|
67
|
-
`git checkout #{best_tag}`
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
# checks code out of svn
|
73
|
-
def get_source_from_svn(scm_address, dir, version)
|
74
|
-
`svn checkout #{scm_address} #{dir}`
|
75
|
-
|
76
|
-
Dir.chdir(dir) do
|
77
|
-
tags = `svn ls "^/tags"`.split("\n")
|
78
|
-
|
79
|
-
if tags.any?
|
80
|
-
best_tag = get_best_tag(tags, version)
|
81
|
-
log.info("checking out tag: #{best_tag}")
|
82
|
-
|
83
|
-
`svn checkout ^/tags/#{best_tag}`
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
# return the (heuristically) most similar tag to the specified version
|
89
|
-
def get_best_tag(tags, version)
|
90
|
-
version_matcher = VersionMatcher.new
|
91
|
-
|
92
|
-
versions_to_tags = Hash[
|
93
|
-
*tags.map do |tag|
|
94
|
-
[version_matcher.split_version(tag)[1], tag]
|
95
|
-
end.flatten
|
96
|
-
]
|
97
|
-
|
98
|
-
log.info("found the following versions and tags: #{versions_to_tags}")
|
99
|
-
|
100
|
-
best_version = version_matcher.best_match(version, versions_to_tags.keys)
|
101
|
-
versions_to_tags[best_version]
|
102
|
-
end
|
103
|
-
|
104
35
|
private
|
105
36
|
|
106
37
|
# if possible, turn path into a Maven artifact name, otherwise return nil
|
107
38
|
def artifact_from_path(path)
|
108
39
|
match = path.match(/\.\/kit\/m2\/(.+)\/(.+)\/(.+)\/\2-\3.*\.jar$/)
|
109
40
|
if match != nil
|
110
|
-
|
41
|
+
[match[1].gsub("/", "."), match[2], match[3]]
|
111
42
|
end
|
112
43
|
end
|
113
44
|
end
|
data/lib/gjp/version.rb
CHANGED
data/lib/gjp/version_matcher.rb
CHANGED
@@ -13,7 +13,7 @@ module Gjp
|
|
13
13
|
# returns a [name, version] pair
|
14
14
|
def split_version(full_name)
|
15
15
|
matches = full_name.match(/(.*?)(?:[\.\-\_ ~,]?([0-9].*))?$/)
|
16
|
-
if matches != nil
|
16
|
+
if matches != nil && matches.length > 1
|
17
17
|
[matches[1], matches[2]]
|
18
18
|
else
|
19
19
|
[full_string, nil]
|
@@ -82,7 +82,7 @@ module Gjp
|
|
82
82
|
if their_chunk == nil
|
83
83
|
their_chunk = "0"
|
84
84
|
end
|
85
|
-
if my_chunk.is_i?
|
85
|
+
if my_chunk.is_i? && their_chunk.is_i?
|
86
86
|
return [(my_chunk.to_i - their_chunk.to_i).abs, 99].min
|
87
87
|
else
|
88
88
|
return [Text::Levenshtein.distance(my_chunk.upcase, their_chunk.upcase), 99].min
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'lib/kit_runner_spec'
|
5
|
+
|
6
|
+
describe Gjp::AntRunner do
|
7
|
+
it_behaves_like Gjp::KitRunner
|
8
|
+
include Gjp::Mockers
|
9
|
+
|
10
|
+
before(:each) do
|
11
|
+
create_mock_project
|
12
|
+
@kit_runner = Gjp::AntRunner.new(@project)
|
13
|
+
end
|
14
|
+
|
15
|
+
after(:each) do
|
16
|
+
delete_mock_project
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#get_ant_commandline" do
|
20
|
+
it "returns commandline options for running Ant" do
|
21
|
+
executable_path = create_mock_executable("ant")
|
22
|
+
@project.from_directory do
|
23
|
+
commandline = @kit_runner.get_ant_commandline(".")
|
24
|
+
commandline.should eq "./#{executable_path}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
it "doesn't return commandline options if Ant is not available" do
|
28
|
+
expect { @kit_runner.get_ant_commandline(".") }.to raise_error(Gjp::ExecutableNotFoundError)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "#ant" do
|
33
|
+
it "runs Ant" do
|
34
|
+
executable_path = create_mock_executable("ant")
|
35
|
+
@project.from_directory do
|
36
|
+
@kit_runner.ant(["extra-option"])
|
37
|
+
File.read("test_out").strip.should match /extra-option$/
|
38
|
+
end
|
39
|
+
end
|
40
|
+
it "doesn't run Ant if it is not available" do
|
41
|
+
@project.from_directory do
|
42
|
+
expect { @kit_runner.ant([]) }.to raise_error(Gjp::ExecutableNotFoundError)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/spec/lib/kit_runner_spec.rb
CHANGED
@@ -2,87 +2,16 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
before(:each) do
|
8
|
-
@project_path = File.join("spec", "data", "test-project")
|
9
|
-
Dir.mkdir(@project_path)
|
10
|
-
|
11
|
-
Gjp::Project.init(@project_path)
|
12
|
-
@project = Gjp::Project.new(@project_path)
|
13
|
-
@kit_runner = Gjp::KitRunner.new(@project)
|
14
|
-
end
|
15
|
-
|
16
|
-
after(:each) do
|
17
|
-
FileUtils.rm_rf(@project_path)
|
18
|
-
end
|
5
|
+
shared_examples_for Gjp::KitRunner do
|
6
|
+
include Gjp::Mockers
|
19
7
|
|
20
8
|
describe "#find_executable" do
|
21
9
|
it "finds an executable in kit" do
|
22
|
-
executable_path =
|
23
|
-
@kit_runner.find_executable("
|
10
|
+
executable_path = create_mock_executable("any")
|
11
|
+
@kit_runner.find_executable("any").should eq executable_path
|
24
12
|
end
|
25
13
|
it "doesn't find a Maven executable in kit" do
|
26
|
-
@kit_runner.find_executable("
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe "#get_maven_commandline" do
|
31
|
-
it "returns commandline options for running maven" do
|
32
|
-
executable_path = mock_executable("mvn", @project_path)
|
33
|
-
|
34
|
-
@project.from_directory do
|
35
|
-
commandline = @kit_runner.get_maven_commandline(".")
|
36
|
-
commandline.should eq "./#{executable_path} -Dmaven.repo.local=./kit/m2 -s./kit/m2/settings.xml"
|
37
|
-
end
|
38
|
-
end
|
39
|
-
it "doesn't return commandline options if Maven is not available" do
|
40
|
-
expect { @kit_runner.get_maven_commandline(".") }.to raise_error(Gjp::ExecutableNotFoundError)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe "#mvn" do
|
45
|
-
it "runs maven" do
|
46
|
-
mock_executable("mvn", @project_path)
|
47
|
-
@project.from_directory do
|
48
|
-
@kit_runner.mvn(["extra-option"])
|
49
|
-
File.read("test_out").strip.should match /extra-option$/
|
50
|
-
end
|
51
|
-
end
|
52
|
-
it "doesn't run Maven if it is not available" do
|
53
|
-
@project.from_directory do
|
54
|
-
expect { @kit_runner.mvn([]) }.to raise_error(Gjp::ExecutableNotFoundError)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
|
60
|
-
describe "#get_ant_commandline" do
|
61
|
-
it "returns commandline options for running Ant" do
|
62
|
-
executable_path = mock_executable("ant", @project_path)
|
63
|
-
|
64
|
-
@project.from_directory do
|
65
|
-
commandline = @kit_runner.get_ant_commandline(".")
|
66
|
-
commandline.should eq "./#{executable_path}"
|
67
|
-
end
|
68
|
-
end
|
69
|
-
it "doesn't return commandline options if Ant is not available" do
|
70
|
-
expect { @kit_runner.get_ant_commandline(".") }.to raise_error(Gjp::ExecutableNotFoundError)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
describe "#ant" do
|
75
|
-
it "runs Ant" do
|
76
|
-
mock_executable("ant", @project_path)
|
77
|
-
@project.from_directory do
|
78
|
-
@kit_runner.ant(["extra-option"])
|
79
|
-
File.read("test_out").strip.should match /extra-option$/
|
80
|
-
end
|
81
|
-
end
|
82
|
-
it "doesn't run Ant if it is not available" do
|
83
|
-
@project.from_directory do
|
84
|
-
expect { @kit_runner.ant([]) }.to raise_error(Gjp::ExecutableNotFoundError)
|
85
|
-
end
|
14
|
+
@kit_runner.find_executable("any").should be_nil
|
86
15
|
end
|
87
16
|
end
|
88
17
|
end
|