doubleshot 0.1.0-java → 0.2.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. data/Doubleshot +21 -10
  2. data/README.textile +13 -5
  3. data/bin/doubleshot +9 -1
  4. data/ext/java/Aether.java +199 -0
  5. data/ext/java/ManualWagonProvider.java +24 -0
  6. data/ext/java/SimpleRepositoryListener.java +77 -0
  7. data/lib/doubleshot.rb +155 -9
  8. data/lib/doubleshot/cli.rb +2 -1
  9. data/lib/doubleshot/cli/options.rb +3 -1
  10. data/lib/doubleshot/commands/build.rb +47 -9
  11. data/lib/doubleshot/commands/gem.rb +30 -9
  12. data/lib/doubleshot/commands/init.rb +41 -10
  13. data/lib/doubleshot/commands/install.rb +4 -4
  14. data/lib/doubleshot/commands/jar.rb +60 -2
  15. data/lib/doubleshot/commands/pom.rb +29 -0
  16. data/lib/doubleshot/commands/test.rb +85 -32
  17. data/lib/doubleshot/compiler.rb +20 -17
  18. data/lib/doubleshot/compiler/classpath.rb +46 -0
  19. data/lib/doubleshot/configuration.rb +158 -8
  20. data/lib/doubleshot/dependencies/dependency.rb +16 -15
  21. data/lib/doubleshot/dependencies/dependency_list.rb +20 -5
  22. data/lib/doubleshot/dependencies/gem_dependency.rb +35 -0
  23. data/lib/doubleshot/dependencies/gem_dependency_list.rb +1 -1
  24. data/lib/doubleshot/dependencies/jar_dependency.rb +64 -1
  25. data/lib/doubleshot/dependencies/jar_dependency_list.rb +1 -1
  26. data/lib/doubleshot/jar.rb +13 -2
  27. data/lib/doubleshot/lockfile.rb +108 -0
  28. data/lib/doubleshot/pom.rb +42 -0
  29. data/lib/doubleshot/readonly_collection.rb +6 -2
  30. data/lib/doubleshot/resolver.rb +22 -0
  31. data/lib/doubleshot/resolver/jar_resolver.rb +36 -0
  32. data/lib/doubleshot/setup.rb +1 -47
  33. data/lib/ruby/blank.rb +3 -3
  34. data/lib/ruby/pathname.rb +8 -4
  35. data/lib/ruby/time.rb +1 -2
  36. data/target/doubleshot.jar +0 -0
  37. data/test/compiler/classpath_spec.rb +74 -0
  38. data/test/compiler_spec.rb +89 -10
  39. data/test/configuration/source_locations_spec.rb +2 -2
  40. data/test/configuration_spec.rb +115 -17
  41. data/test/dependencies/dependency_list_spec.rb +26 -4
  42. data/test/dependencies/dependency_spec.rb +19 -18
  43. data/test/dependencies/gem_dependency_list_spec.rb +0 -0
  44. data/test/dependencies/gem_dependency_spec.rb +54 -0
  45. data/test/dependencies/jar_dependency_list_spec.rb +0 -0
  46. data/test/dependencies/jar_dependency_spec.rb +62 -1
  47. data/test/dependencies_spec.rb +4 -4
  48. data/test/doubleshot_spec.rb +34 -2
  49. data/test/helper.rb +36 -1
  50. data/test/lockfile_spec.rb +236 -0
  51. data/test/pom_spec.rb +66 -0
  52. data/test/readonly_collection_spec.rb +10 -3
  53. data/test/resolver/jar_resolver_spec.rb +34 -0
  54. data/test/resolver_spec.rb +25 -0
  55. metadata +28 -28
  56. data/ext/java/Empty.java +0 -0
data/lib/ruby/pathname.rb CHANGED
@@ -1,11 +1,15 @@
1
1
  class Pathname
2
2
  def touch(path)
3
3
  file = self + path
4
- file.open("w+") { nil }
4
+ file.open("w+") { nil } unless file.exist?
5
5
  file
6
6
  end
7
-
7
+
8
8
  def child_of?(p2)
9
- expand_path.to_s.include? p2.expand_path.to_s
9
+ expand_path.to_s.include?(p2.expand_path.to_s)
10
10
  end
11
- end
11
+
12
+ def to_url
13
+ java.io.File.new(to_s).to_url.to_s
14
+ end
15
+ end
data/lib/ruby/time.rb CHANGED
@@ -1,8 +1,7 @@
1
1
  class Time
2
-
3
2
  def self.measure
4
3
  start = now
5
4
  yield
6
5
  now - start
7
6
  end
8
- end
7
+ end
Binary file
@@ -0,0 +1,74 @@
1
+ #!/usr/bin/env jruby
2
+
3
+ require_relative "../helper"
4
+
5
+ describe Doubleshot::Compiler::Classpath do
6
+ before do
7
+ @classpath = Doubleshot::Compiler::Classpath.new
8
+ end
9
+
10
+ describe "add" do
11
+ it "must return self" do
12
+ Helper::tmp do |tmp|
13
+ @classpath.add(tmp.to_s).must_be_same_as @classpath
14
+ end
15
+ end
16
+
17
+ it "must raise an exception if the file does not exist" do
18
+ Helper::tmp do |tmp|
19
+ -> do
20
+ @classpath.add(tmp + "asdf")
21
+ end.must_raise(ArgumentError)
22
+ end
23
+ end
24
+
25
+ it "must alias to <<" do
26
+ @classpath.must_respond_to :<<
27
+ Helper::tmp do |tmp|
28
+ @classpath << tmp
29
+ @classpath.wont_be_empty
30
+ end
31
+ end
32
+ end
33
+
34
+ it "must return Pathnames" do
35
+ Helper::tmp do |tmp|
36
+ @classpath.add tmp
37
+
38
+ @classpath.entries.wont_be_empty
39
+ @classpath.each do |path|
40
+ path.must_be_kind_of Pathname
41
+ end
42
+ end
43
+ end
44
+
45
+ it "must return unique paths" do
46
+ Helper::tmp do |tmp|
47
+ @classpath.add(tmp.to_s)
48
+ @classpath.add(tmp.to_s)
49
+
50
+ @classpath.size.must_equal 1
51
+ end
52
+ end
53
+
54
+ it "must return only directories" do
55
+ Helper::tmp do |tmp|
56
+ dir1 = tmp + "dir1"
57
+ dir2 = tmp + "dir2"
58
+
59
+ dir1.mkdir
60
+ dir2.mkdir
61
+
62
+ jar1 = dir1.touch "some.jar"
63
+ jar2 = dir2.touch "other.jar"
64
+
65
+ @classpath.add dir1
66
+ @classpath.add jar1
67
+ @classpath.add jar2
68
+
69
+ @classpath.size.must_equal 2
70
+ @classpath.must_include(dir1.expand_path)
71
+ @classpath.must_include(dir2.expand_path)
72
+ end
73
+ end
74
+ end
@@ -4,13 +4,7 @@ require_relative "helper"
4
4
 
5
5
  describe Doubleshot::Compiler do
6
6
 
7
- it "must accept source and target paths" do
8
- compiler = Doubleshot::Compiler.new "ext/java", "target"
9
- compiler.source.must_equal Pathname("ext/java")
10
- compiler.target.must_equal Pathname("target")
11
- end
12
-
13
- it "must compile a cow" do
7
+ def compile
14
8
  Helper::tmp do |tmp|
15
9
  source = tmp + "java"
16
10
  source.mkdir
@@ -32,13 +26,98 @@ describe Doubleshot::Compiler do
32
26
  EOS
33
27
  end
34
28
 
35
- Doubleshot::Compiler.new(source, target).build!
29
+ sleep 1 # Sleep because file mtime does not
30
+ # have enough resolution to allow us to accurately
31
+ # detect changes quickly enough in tests. It's
32
+ # very unlikely you'd ever run into this in your
33
+ # actual work.
34
+ yield Doubleshot::Compiler.new(source, target)
35
+ end
36
+ end
37
+
38
+ it "must accept source and target paths" do
39
+ compiler = Doubleshot::Compiler.new "ext/java", "target"
40
+ compiler.source.must_equal Pathname("ext/java")
41
+ compiler.target.must_equal Pathname("target")
42
+ end
43
+
44
+ describe "#pending?" do
45
+
46
+ it "wont be pending after a build" do
47
+ compile do |compiler|
48
+ compiler.build!
49
+ compiler.wont_be :pending
50
+ end
51
+ end
52
+
53
+ it "must be pending if target has not been built" do
54
+ compile do |compiler|
55
+ compiler.must_be :pending
56
+ end
57
+ end
58
+
59
+ it "must be pending if existing source is modified" do
60
+ compile do |compiler|
61
+ compiler.build!
62
+ sleep 1 # Refer to comment for 'sleep 1' in #compile helper
63
+ (compiler.source + "Cow.java").open("w+") do |cow|
64
+ cow << <<-EOS.margin
65
+ package org.sam.doubleshot;
66
+
67
+ public class Cow {
68
+ public Cow() {}
36
69
 
37
- cow = target + "org/sam/doubleshot/Cow.class"
38
- cow.exist?.must_equal true
70
+ public String moo() {
71
+ return "FRANCIS!";
72
+ }
73
+ }
74
+ EOS
75
+ end
76
+
77
+ compiler.must_be :pending
78
+ end
79
+ end
80
+
81
+ it "must be pending if a new source file is added" do
82
+ compile do |compiler|
83
+ compiler.build!
84
+ sleep 1 # Refer to comment for 'sleep 1' in #compile helper
85
+ (compiler.source + "Moo.java").open("w+") do |cow|
86
+ cow << <<-EOS.margin
87
+ package org.sam.doubleshot;
88
+
89
+ public class Moo {
90
+ public Moo() {}
91
+
92
+ public String moo() {
93
+ return "COW!";
94
+ }
95
+ }
96
+ EOS
97
+ end
98
+
99
+ compiler.must_be :pending
100
+ end
101
+ end
102
+ end
103
+
104
+ it "must compile a cow" do
105
+ compile do |compiler|
106
+ # We pass the add_target_to_current_classpath=true option
107
+ # so that we can then load a Cow instance a few lines
108
+ # further down.
109
+ compiler.build!(true).must_be_same_as compiler
110
+
111
+ cow = compiler.target + "org/sam/doubleshot/Cow.class"
112
+ cow.must :exist
39
113
 
40
114
  org.sam.doubleshot.Cow.new.moo.must_equal "MOO!"
41
115
  end
42
116
  end
43
117
 
118
+ it "must have a classpath" do
119
+ compiler = Doubleshot::Compiler.new "ext/java", "target"
120
+ compiler.classpath.must_be_kind_of Doubleshot::Compiler::Classpath
121
+ end
122
+
44
123
  end
@@ -37,7 +37,7 @@ describe Doubleshot::Configuration::SourceLocations do
37
37
  Doubleshot::Configuration::SourceLocations.send(:private, :validate_path)
38
38
  end
39
39
 
40
- describe "validate_path" do
40
+ describe "validate_path" do
41
41
  it "must call to_s on any passed object" do
42
42
  mock = MockWrapper.new
43
43
  mock.expect(:to_string, "test")
@@ -50,7 +50,7 @@ describe Doubleshot::Configuration::SourceLocations do
50
50
  end
51
51
 
52
52
  it "must return a valid path" do
53
- @source.validate_path("lib").exist?.must_equal true
53
+ @source.validate_path("lib").must :exist
54
54
 
55
55
  assert_raises(IOError) do
56
56
  @source.validate_path "nothing"
@@ -8,6 +8,43 @@ describe Doubleshot::Configuration do
8
8
  @config = Doubleshot::Configuration.new
9
9
  end
10
10
 
11
+ describe "project" do
12
+ it "must accept a project name" do
13
+ @config.project = "doubleshot"
14
+ @config.project.must_equal "doubleshot"
15
+ end
16
+
17
+ it "must default the gem name to the project name" do
18
+ @config.project = "doubleshot"
19
+ @config.gemspec.name.must_equal "doubleshot"
20
+ end
21
+ end
22
+
23
+ describe "group" do
24
+ it "must allow you to set a group (for JAR packaging)" do
25
+ @config.group = "org.sam.doubleshot"
26
+ @config.group.must_equal "org.sam.doubleshot"
27
+ end
28
+
29
+ it "must default to the project name if none is provided" do
30
+ @config.project = "doubleshot"
31
+ @config.group.must_equal "doubleshot"
32
+ end
33
+ end
34
+
35
+ describe "version" do
36
+ it "must allow you to set the version" do
37
+ @config.version = "1.0"
38
+ @config.version.must_equal "1.0"
39
+ end
40
+
41
+ it "must default the gem version to the project version" do
42
+ @config.version = "1.0"
43
+ @config.gemspec.version.to_s.must_equal "1.0"
44
+ end
45
+
46
+ end
47
+
11
48
  describe "gem" do
12
49
  it "must accept a gem name" do
13
50
  @config.gem "listen"
@@ -17,9 +54,42 @@ describe Doubleshot::Configuration do
17
54
  it "must accept a list of requirements" do
18
55
  @config.gem "listen", ">0.4.0"
19
56
  end
20
-
57
+
58
+ it "must return a dependency" do
59
+ @config.gem("listen").must_be_kind_of Doubleshot::Dependencies::GemDependency
60
+ end
61
+ end
62
+
63
+ describe "repositories" do
64
+ it "must add Maven repositories" do
65
+ @config.mvn_repository "http://repository.jboss.com/maven2/"
66
+ @config.mvn_repositories.must_include "http://repository.jboss.com/maven2/"
67
+ end
68
+
69
+ it "must return the passed value from mvn_repository" do
70
+ example = "http://repository.jboss.com/maven2/"
71
+ @config.mvn_repository(example).must_be_same_as example
72
+ end
73
+
74
+ it "must add Rubygems repositories" do
75
+ @config.gem_repository "http://rubyforge.org"
76
+ @config.gem_repositories.must_include "http://rubyforge.org"
77
+ end
78
+
79
+ it "must return the passed value from gem_repository" do
80
+ example = "http://rubyforge.org"
81
+ @config.gem_repository(example).must_be_same_as example
82
+ end
83
+ end
84
+
85
+ describe "jar" do
86
+ it "must accept a Buildr style JAR dependency string" do
87
+ @config.jar "org.sonatype.aether:aether-api:jar:1.13.1"
88
+ @config.runtime.jars.must_include "org.sonatype.aether:aether-api:jar:1.13.1"
89
+ end
90
+
21
91
  it "must return a dependency" do
22
- @config.gem("listen").must_be_kind_of Doubleshot::Dependencies::Dependency
92
+ @config.jar("org.sonatype.aether:aether-api:jar:1.13.1").must_be_kind_of Doubleshot::Dependencies::JarDependency
23
93
  end
24
94
  end
25
95
 
@@ -45,13 +115,16 @@ describe Doubleshot::Configuration do
45
115
  spec.email = "ssmoot@gmail.com"
46
116
  spec.version = "1.0"
47
117
  spec.license = "MIT-LICENSE"
48
- spec.executables = [ "doubleshot" ]
49
118
  end
50
119
  rescue Exception => e
51
120
  fail e
52
121
  end
53
122
 
54
- @config.gemspec.validate.must_equal true
123
+ @config.gemspec.must :validate
124
+ end
125
+
126
+ it "must include executables from your bin folder" do
127
+ @config.gemspec.executables.must_equal [ "doubleshot" ]
55
128
  end
56
129
 
57
130
  it "must add dependencies to the gemspec" do
@@ -69,7 +142,7 @@ describe Doubleshot::Configuration do
69
142
  end
70
143
 
71
144
  it "must provide sane defaults for rdoc" do
72
- @config.gemspec.name = "Doubleshot"
145
+ @config.project = "Doubleshot"
73
146
  @config.gemspec.rdoc_options.must_equal([
74
147
  "--line-numbers",
75
148
  "--main", "README.textile",
@@ -77,13 +150,13 @@ describe Doubleshot::Configuration do
77
150
  "lib", "README.textile" ])
78
151
  end
79
152
 
80
- it "require_paths must default to the ruby source location" do
81
- @config.gemspec.require_paths.must_equal [ "lib" ]
153
+ it "require_paths must include the ruby source location" do
154
+ @config.gemspec.require_paths.must_include "lib"
82
155
  end
83
156
 
84
157
  it "require_paths must be updated when ruby source location is modified" do
85
158
  @config.source.ruby = "test"
86
- @config.gemspec.require_paths.must_equal [ "test" ]
159
+ @config.gemspec.require_paths.must_equal [ "test", "target" ]
87
160
  end
88
161
 
89
162
  it "should include test_files if present" do
@@ -102,6 +175,12 @@ describe Doubleshot::Configuration do
102
175
  end
103
176
  end
104
177
 
178
+ describe "java_main" do
179
+ it 'must default to "org.jruby.Main"' do
180
+ @config.java_main.must_equal "org.jruby.Main"
181
+ end
182
+ end
183
+
105
184
  describe "paths" do
106
185
  it "must return a readonly collection of paths" do
107
186
  @config.paths.must_be_kind_of Doubleshot::ReadonlyCollection
@@ -122,6 +201,7 @@ describe Doubleshot::Configuration do
122
201
  it "files must contain Ruby sources, Java sources, Doubleshot, LICENSE, README and any build files" do
123
202
  @config.gemspec.files.sort.must_equal(
124
203
  Dir[
204
+ "bin/doubleshot",
125
205
  "lib/**/*.rb",
126
206
  "ext/java/**/*.java",
127
207
  "Doubleshot",
@@ -129,7 +209,10 @@ describe Doubleshot::Configuration do
129
209
  "README*",
130
210
  "target/**/*",
131
211
  "test/**/*"
132
- ].select { |path| Pathname(path).file? }.sort
212
+ ].select do |path|
213
+ path = Pathname(path)
214
+ path.file? && path.extname != ".class"
215
+ end.sort
133
216
  )
134
217
  end
135
218
 
@@ -192,8 +275,9 @@ describe Doubleshot::Configuration do
192
275
 
193
276
  describe "to_ruby" do
194
277
  before do
278
+ @config.project = "doubleshot"
279
+ @config.version = "9000.1"
195
280
  @config.gemspec do |spec|
196
- spec.name = "doubleshot"
197
281
  spec.summary = "This is my summary."
198
282
  spec.description = <<-DESCRIPTION.margin
199
283
  A very detailed description.
@@ -202,12 +286,10 @@ describe Doubleshot::Configuration do
202
286
  spec.author = "Sam Smoot"
203
287
  spec.homepage = "http://example.com/doubleshot"
204
288
  spec.email = "ssmoot@gmail.com"
205
- spec.version = "9000.1"
206
289
  spec.license = "MIT-LICENSE"
207
- spec.executables = [ "doubleshot" ]
208
290
  end
209
291
  end
210
-
292
+
211
293
  it "must equal generated output" do
212
294
  @config.must_equal eval(@config.to_ruby).config
213
295
  end
@@ -215,6 +297,25 @@ describe Doubleshot::Configuration do
215
297
  describe "to_ruby_body" do
216
298
  before do
217
299
  @output = <<-EOS.margin
300
+ #{Doubleshot::Configuration::PROJECT_MESSAGE}
301
+ config.project = "doubleshot"
302
+
303
+ #{Doubleshot::Configuration::GROUP_MESSAGE}
304
+ # config.group = "doubleshot"
305
+
306
+ #{Doubleshot::Configuration::VERSION_MESSAGE}
307
+ config.version = "9000.1"
308
+
309
+
310
+ #{Doubleshot::Configuration::GEM_REPOSITORY_MESSAGE}
311
+ # config.gem_repository "https://rubygems.org"
312
+ # config.gem_repository "http://gems.example.com"
313
+
314
+ #{Doubleshot::Configuration::MVN_REPOSITORY_MESSAGE}
315
+ # config.mvn_repository "http://repo1.maven.org/maven2"
316
+ # config.mvn_repository "http://repository.jboss.com/maven2"
317
+
318
+
218
319
  #{Doubleshot::Configuration::SOURCE_RUBY_MESSAGE}
219
320
  # config.source.ruby = "lib"
220
321
 
@@ -244,8 +345,6 @@ describe Doubleshot::Configuration do
244
345
 
245
346
  #{Doubleshot::Configuration::GEMSPEC_MESSAGE}
246
347
  config.gemspec do |spec|
247
- spec.name = "doubleshot"
248
- spec.version = "9000.1"
249
348
  spec.summary = "This is my summary."
250
349
  spec.description = <<-DESCRIPTION
251
350
  A very detailed description.
@@ -291,5 +390,4 @@ describe Doubleshot::Configuration do
291
390
  end
292
391
  end
293
392
  end
294
-
295
- end
393
+ end