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
@@ -13,6 +13,28 @@ describe Doubleshot::Dependencies::DependencyList do
13
13
  @list.must_be_kind_of Enumerable
14
14
  end
15
15
 
16
+ describe "+" do
17
+ it "must allow you to concatenate two collections" do
18
+ one = Doubleshot::Dependencies::DependencyList.new
19
+ two = Doubleshot::Dependencies::DependencyList.new
20
+
21
+ listen = one.fetch "listen"
22
+ minitest = two.fetch "minitest"
23
+
24
+ (one + two).entries.must_equal [ listen, minitest ]
25
+ end
26
+
27
+ it "must raise an ArgumentError if the lists are not the same type" do
28
+ one = Doubleshot::Dependencies::DependencyList.new
29
+ two = Doubleshot::Dependencies::GemDependencyList.new
30
+
31
+ listen = one.fetch "listen"
32
+ minitest = two.fetch "minitest"
33
+
34
+ -> { one + two }.must_raise ArgumentError
35
+ end
36
+ end
37
+
16
38
  describe "add" do
17
39
  it "must only accept Dependency instances" do
18
40
  assert_raises(ArgumentError) do
@@ -30,18 +52,18 @@ describe Doubleshot::Dependencies::DependencyList do
30
52
  @list.add @dependency
31
53
  @list.size.must_equal 1
32
54
  end
33
-
55
+
34
56
  it "must always return self for chainability" do
35
57
  @list.add(@dependency).must_equal @list
36
58
  end
37
59
  end
38
-
60
+
39
61
  describe "fetch" do
40
62
  it "must find matching dependencies by name" do
41
63
  @list.add @dependency
42
64
  @list.fetch("listen").must_equal @dependency
43
65
  end
44
-
66
+
45
67
  it "must always return a dependency" do
46
68
  @list.fetch("example").must_be_kind_of Doubleshot::Dependencies::Dependency
47
69
  end
@@ -70,4 +92,4 @@ describe Doubleshot::Dependencies::DependencyList do
70
92
  end
71
93
  end
72
94
 
73
- end
95
+ end
@@ -9,18 +9,6 @@ describe Doubleshot::Dependencies::Dependency do
9
9
  @other = Doubleshot::Dependencies::Dependency.new "listen"
10
10
  end
11
11
 
12
- describe "add_requirement" do
13
- it "must return a Gem::Requirement object" do
14
- @dependency.add_requirement("1.0").must_be_kind_of Gem::Requirement
15
- end
16
-
17
- it "must not duplicate requirements" do
18
- @dependency.add_requirement("2.0")
19
- @dependency.add_requirement("2.0")
20
- @dependency.requirements.size.must_equal 1
21
- end
22
- end
23
-
24
12
  describe "Hash contract" do
25
13
 
26
14
  # Dependency#name must be immutable since
@@ -38,12 +26,25 @@ describe Doubleshot::Dependencies::Dependency do
38
26
  end
39
27
  end
40
28
 
41
- describe "equality" do
29
+ describe "lock" do
30
+ it "must lock to a specific version" do
31
+ @dependency.lock "0.5.3"
32
+ @dependency.must_be :locked?
33
+ end
34
+ end
35
+
36
+ describe "to_s" do
37
+ before do
38
+ @dependency.lock "0.5.3"
39
+ end
40
+
41
+ it "must have a short-form" do
42
+ @dependency.to_s.must_equal "listen"
43
+ end
42
44
 
43
- it "must override the equality operator to consider requirements" do
44
- @dependency.must_be :==, @other
45
- @other.add_requirement ">= 0.1.0"
46
- @dependency.wont_be :==, @other
45
+ it "must have a long-form" do
46
+ @dependency.to_s(true).must_equal "listen (0.5.3)"
47
47
  end
48
48
  end
49
- end
49
+
50
+ end
File without changes
@@ -4,4 +4,58 @@ require_relative "../helper"
4
4
 
5
5
  describe Doubleshot::Dependencies::GemDependency do
6
6
 
7
+ before do
8
+ @dependency = Doubleshot::Dependencies::GemDependency.new "listen"
9
+ @other = Doubleshot::Dependencies::GemDependency.new "listen"
10
+ end
11
+
12
+ describe "add_requirement" do
13
+ it "must return a Gem::Requirement object" do
14
+ @dependency.add_requirement("1.0").must_be_kind_of Gem::Requirement
15
+ end
16
+
17
+ it "must not duplicate requirements" do
18
+ @dependency.add_requirement("2.0")
19
+ @dependency.add_requirement("2.0")
20
+ @dependency.requirements.size.must_equal 1
21
+ end
22
+ end
23
+
24
+ describe "equality" do
25
+ it "must override the equality operator to consider requirements" do
26
+ @dependency.must_be :==, @other
27
+ @other.add_requirement ">= 0.1.0"
28
+ @dependency.wont_be :==, @other
29
+ end
30
+ end
31
+
32
+ describe "to_s" do
33
+ before do
34
+ @dependency.add_requirement ">= 0.5"
35
+ @dependency.add_requirement "= 0.5.3"
36
+ end
37
+
38
+ it "must have a short-form" do
39
+ @dependency.to_s.must_equal "listen"
40
+ end
41
+
42
+ it "must have a long-form that includes requirements" do
43
+ @dependency.to_s(true).must_equal "listen (= 0.5.3, >= 0.5)"
44
+ end
45
+ end
46
+
47
+ describe "gemspec" do
48
+ it "must return a Gem::Specification" do
49
+ skip
50
+ @dependency.gemspec = Gem::Specification.new
51
+ @dependency.gemspec.must_be_kind_of Gem::Specification
52
+ end
53
+ end
54
+
55
+ describe "dependencies" do
56
+ it "must return a Doubleshot::Dependencies::DependencyList" do
57
+ skip
58
+ @dependency.dependencies.must_be_kind_of Doubleshot::Dependencies::DependencyList
59
+ end
60
+ end
7
61
  end
File without changes
@@ -3,5 +3,66 @@
3
3
  require_relative "../helper"
4
4
 
5
5
  describe Doubleshot::Dependencies::JarDependency do
6
+ # ch.qos.logback:logback-core:1.0.6
7
+ # ch.qos.logback:logback-core:jar:1.0.6
8
+ # ch.qos.logback:logback-core:jar:someclassifier:1.0.6
9
+ # <#JarDependency type: [pom|jar|maven-plugin|ejb|war|ear|rar|par|bundle] artifact: "logback-core" group: "ch.qos.logback" version: "1.0.6" classifier: "someclassifier">
6
10
 
7
- end
11
+ it "must only accept Maven coordinate syntax" do
12
+ assert_raises(ArgumentError) do
13
+ Doubleshot::Dependencies::JarDependency.new "ch.qos.logback:logback-core:jar"
14
+ end
15
+
16
+ assert_raises(ArgumentError) do
17
+ Doubleshot::Dependencies::JarDependency.new "ch.qos.logback"
18
+ end
19
+
20
+ assert_raises(ArgumentError) do
21
+ Doubleshot::Dependencies::JarDependency.new "ch.qos.logback:logback-core:jar:"
22
+ end
23
+
24
+ assert_raises(ArgumentError) do
25
+ Doubleshot::Dependencies::JarDependency.new "ch.qos.logback:logback-core::1.0.6"
26
+ end
27
+
28
+ assert_raises(ArgumentError) do
29
+ Doubleshot::Dependencies::JarDependency.new "ch.qos.logback::jar:1.0.6"
30
+ end
31
+
32
+ assert_raises(ArgumentError) do
33
+ Doubleshot::Dependencies::JarDependency.new ":logback-core:jar:1.0.6"
34
+ end
35
+
36
+ assert_raises(ArgumentError) do
37
+ Doubleshot::Dependencies::JarDependency.new ":::"
38
+ end
39
+ end
40
+
41
+ it "returns a Maven coordinate as the name" do
42
+ Doubleshot::Dependencies::JarDependency.new("ch.qos.logback:logback-core:jar:1.0.6")
43
+ .name.must_equal "ch.qos.logback:logback-core:jar:1.0.6"
44
+ end
45
+
46
+ it "correctly parses the Maven coordinate" do
47
+ dependency = Doubleshot::Dependencies::JarDependency.new "ch.qos.logback:logback-core:jar:1.0.6"
48
+ dependency.packaging.must_equal "jar"
49
+ dependency.artifact.must_equal "logback-core"
50
+ dependency.group.must_equal "ch.qos.logback"
51
+ dependency.version.must_equal "1.0.6"
52
+ end
53
+
54
+ it "returns a Maven coordinate as the long form of to_s" do
55
+ Doubleshot::Dependencies::JarDependency.new("ch.qos.logback:logback-core:jar:1.0.6")
56
+ .to_s(true).must_equal "ch.qos.logback:logback-core:jar:1.0.6"
57
+ end
58
+
59
+ it "returns a 4-part Maven coordinate as the name if you used a 3-part Maven coordinate to create the dependency" do
60
+ Doubleshot::Dependencies::JarDependency.new("ch.qos.logback:logback-core:1.0.6")
61
+ .name.must_equal "ch.qos.logback:logback-core:jar:1.0.6"
62
+ end
63
+
64
+ it "returns a 4-part Maven coordinate as the long form of to_s if you used a 3-part Maven coordinate to create the dependency" do
65
+ Doubleshot::Dependencies::JarDependency.new("ch.qos.logback:logback-core:1.0.6")
66
+ .to_s(true).must_equal "ch.qos.logback:logback-core:jar:1.0.6"
67
+ end
68
+ end
@@ -10,7 +10,7 @@ describe Doubleshot::Dependencies do
10
10
 
11
11
  describe "gems" do
12
12
  it "must be a DependencyList" do
13
- @dependencies.gems.must_be_kind_of Doubleshot::Dependencies::DependencyList
13
+ @dependencies.gems.must_be_kind_of Doubleshot::Dependencies::DependencyList
14
14
  end
15
15
  end
16
16
 
@@ -27,16 +27,16 @@ describe Doubleshot::Dependencies do
27
27
  # NOTE: #fetch will add the dependency if it does
28
28
  # not yet exist in the List.
29
29
  @dependencies.gems.fetch "listen"
30
- @dependencies.jars.fetch "jetty"
30
+ @dependencies.jars.fetch "commons-cli:commons-cli:jar:1.2"
31
31
  end
32
32
 
33
33
  it "must equal if their DependencyLists are equal" do
34
34
  @dependencies.wont_equal @other
35
35
 
36
36
  @other.gems.fetch "listen"
37
- @other.jars.fetch "jetty"
37
+ @other.jars.fetch "commons-cli:commons-cli:jar:1.2"
38
38
 
39
39
  @dependencies.must_equal @other
40
40
  end
41
41
  end
42
- end
42
+ end
@@ -4,6 +4,32 @@ require_relative "helper.rb"
4
4
 
5
5
  describe Doubleshot do
6
6
 
7
+ describe "classpath_cache" do
8
+ it "must be a Pathname" do
9
+ Doubleshot.new.classpath_cache.must_be_kind_of Pathname
10
+ end
11
+ end
12
+
13
+ describe "classpath" do
14
+ before do
15
+ @doubleshot = Doubleshot.new do |config|
16
+ config.jar "ch.qos.logback:logback-core:1.0.6"
17
+ end
18
+ Helper::tmp do |tmp|
19
+ @doubleshot.path = tmp + "Doubleshot.test"
20
+ end
21
+ end
22
+
23
+ it "must be empty on instantiation" do
24
+ @doubleshot.classpath.must_be_empty
25
+ end
26
+
27
+ it "won't be empty after setup (if you have JAR dependencies)" do
28
+ @doubleshot.setup!
29
+ @doubleshot.classpath.wont_be_empty
30
+ end
31
+ end
32
+
7
33
  describe "configuration" do
8
34
  it "must pass a Configuration object to the block" do
9
35
  called = false
@@ -12,7 +38,7 @@ describe Doubleshot do
12
38
  config.must_be_kind_of Doubleshot::Configuration
13
39
  end
14
40
  assert called, "block not called"
15
- end
41
+ end
16
42
  end
17
43
 
18
44
  it "must generate a valid gemspec" do
@@ -44,8 +70,14 @@ describe Doubleshot do
44
70
  config.source.ruby.to_s.must_equal "lib"
45
71
  config.target.to_s.must_equal "target"
46
72
  end
73
+
74
+ describe "lockfile" do
75
+ it "must return a Lockfile instance" do
76
+ Doubleshot::current.lockfile.must_be_kind_of Doubleshot::Lockfile
77
+ end
78
+ end
47
79
  end
48
80
 
49
81
 
50
82
 
51
- end
83
+ end
data/test/helper.rb CHANGED
@@ -1,9 +1,44 @@
1
- require_relative "../lib/doubleshot"
1
+ require_relative "../lib/doubleshot/setup"
2
+
3
+ require "doubleshot/resolver"
2
4
 
3
5
  require "minitest/autorun"
4
6
  require "minitest/pride"
5
7
  require "minitest/wscolor"
6
8
 
9
+ module MiniTest
10
+ module Assertions
11
+ def assert_predicate o1, op, msg = nil
12
+ msg = message(msg) { "Expected #{mu_pp(o1)} to be #{op}" }
13
+ if !o1.respond_to?(op) && o1.respond_to?("#{op}?")
14
+ assert o1.__send__("#{op}?"), msg
15
+ else
16
+ assert o1.__send__(op), msg
17
+ end
18
+ end
19
+
20
+ def refute_predicate o1, op, msg = nil
21
+ msg = message(msg) { "Expected #{mu_pp(o1)} to not be #{op}" }
22
+ if !o1.respond_to?(op) && o1.respond_to?("#{op}?")
23
+ refute o1.__send__("#{op}?"), msg
24
+ else
25
+ refute o1.__send__(op), msg
26
+ end
27
+ end
28
+ end
29
+
30
+ module Expectations
31
+ # This is for aesthetics, so instead of:
32
+ # something.must_be :validate
33
+ # Or:
34
+ # something.validate.must_equal true
35
+ # Which are both terribly ugly, we can:
36
+ # something.must :validate
37
+ infect_an_assertion :assert_operator, :must, :reverse
38
+ infect_an_assertion :refute_operator, :wont, :reverse
39
+ end
40
+ end
41
+
7
42
  module Helper
8
43
  def self.tmp(path = "tmp")
9
44
  dir = Pathname(path.to_s)
@@ -0,0 +1,236 @@
1
+ #!/usr/bin/env jruby
2
+
3
+ # encoding: utf-8
4
+
5
+ require_relative "helper"
6
+
7
+ describe Doubleshot::Lockfile do
8
+
9
+ def lockfile(name = "test.lock")
10
+ Helper::tmp do |tmp|
11
+ (tmp + name).open("w+") do |file|
12
+ file << {}.to_yaml
13
+ end
14
+ yield Doubleshot::Lockfile.new(tmp + name)
15
+ end
16
+ end
17
+
18
+ before do
19
+ @jar = Doubleshot::Dependencies::JarDependency.new("ch.qos.logback:logback-core:jar:1.0.6")
20
+ @gem = Doubleshot::Dependencies::GemDependency.new("listen")
21
+ @gem.lock("0.5.3")
22
+ end
23
+
24
+ describe "Pathname delegations" do
25
+ it "#exist?" do
26
+ lockfile do |lockfile|
27
+ lockfile.must :exist
28
+ end
29
+ end
30
+
31
+ it "#mtime" do
32
+ lockfile do |lockfile|
33
+ lockfile.mtime.must_be_kind_of Time
34
+ end
35
+ end
36
+
37
+ it "#delete" do
38
+ lockfile do |lockfile|
39
+ lockfile.must :exist
40
+ lockfile.delete
41
+ lockfile.wont :exist
42
+ end
43
+ end
44
+ end
45
+
46
+ describe "flush!" do
47
+ it "must write the JarDependencyList to the lockfile on disk such that an equal JarDependencyList will be loaded from that lockfile" do
48
+ lockfile do |lockfile|
49
+ lockfile.add Doubleshot::Dependencies::JarDependency.new("ch.qos.logback:logback-core:jar:1.0.6")
50
+ lockfile.flush!
51
+ Doubleshot::Lockfile.new(lockfile.path).jars.must_equal lockfile.jars
52
+ end
53
+ end
54
+ end
55
+
56
+ describe "path" do
57
+ it "must default to 'Doubleshot.lock'" do
58
+ Doubleshot::Lockfile.new.path.must_equal Pathname("Doubleshot.lock")
59
+ end
60
+
61
+ it "must let you specify a path" do
62
+ Doubleshot::Lockfile.new("myproject.lock").path.must_equal Pathname("myproject.lock")
63
+ end
64
+
65
+ it "must not create the lockfile on disk implicitly" do
66
+ Doubleshot::Lockfile.new "myproject.lock"
67
+ Pathname("myproject.lock").exist?.wont_equal true
68
+ end
69
+ end
70
+
71
+ describe "add" do
72
+ it "must not be empty after adding a dependency" do
73
+ lockfile do |lockfile|
74
+ lockfile.add @jar
75
+ lockfile.wont_be_empty
76
+ end
77
+ end
78
+
79
+ it "must return self" do
80
+ lockfile do |lockfile|
81
+ lockfile.add(@jar).must_be_same_as lockfile
82
+ end
83
+ end
84
+
85
+ it "must raise an ArgumentError if passing an abstract Dependency instance" do
86
+ assert_raises(ArgumentError) do
87
+ lockfile do |lockfile|
88
+ lockfile.add Doubleshot::Dependencies::Dependency.new "listen"
89
+ end
90
+ end
91
+ end
92
+
93
+ it "must raise if a non-dependency is passed" do
94
+ assert_raises(ArgumentError) do
95
+ lockfile do |lockfile|
96
+ lockfile.add "listen"
97
+ end
98
+ end
99
+ end
100
+
101
+ it "must not add a dependency twice" do
102
+ lockfile do |lockfile|
103
+ lockfile.add @jar
104
+ lockfile.add Doubleshot::Dependencies::JarDependency.new("ch.qos.logback:logback-core:jar:1.0.6")
105
+ lockfile.jars.size.must_equal 1
106
+ end
107
+ end
108
+
109
+ it "must reject unlocked dependencies" do
110
+ assert_raises(Doubleshot::Lockfile::UnlockedDependencyError) do
111
+ lockfile do |lockfile|
112
+ lockfile.add Doubleshot::Dependencies::GemDependency.new("listen")
113
+ end
114
+ end
115
+ end
116
+
117
+ it "must raise an error if it doesn't know how to handle the dependency you've passed" do
118
+ assert_raises(Doubleshot::Lockfile::UnknownDependencyTypeError) do
119
+ dependency = Class.new(Doubleshot::Dependencies::Dependency) do
120
+ def locked?
121
+ true
122
+ end
123
+ end.new("some-raa-tar")
124
+
125
+ lockfile do |lockfile|
126
+ lockfile.add(dependency)
127
+ end
128
+ end
129
+ end
130
+ end
131
+
132
+ describe "jars" do
133
+ it "must return the list of JAR dependencies" do
134
+ lockfile do |lockfile|
135
+ lockfile.add @jar
136
+ lockfile.jars.size.must_equal 1
137
+ end
138
+ end
139
+
140
+ it "must be readonly" do
141
+ lockfile do |lockfile|
142
+ lockfile.jars.must_be_kind_of Doubleshot::ReadonlyCollection
143
+ end
144
+ end
145
+ end
146
+
147
+ describe "gems" do
148
+ it "must return the list of Gem dependencies" do
149
+ lockfile do |lockfile|
150
+ lockfile.add @gem
151
+ lockfile.gems.size.must_equal 1
152
+ end
153
+ end
154
+
155
+ it "must be readonly" do
156
+ lockfile do |lockfile|
157
+ lockfile.gems.must_be_kind_of Doubleshot::ReadonlyCollection
158
+ end
159
+ end
160
+ end
161
+
162
+ describe "jar format" do
163
+ before do
164
+ @lockfile_contents = <<-EOS.margin
165
+ ---
166
+ GEMS: []
167
+ JARS:
168
+ - com.pyx4j:maven-plugin-log4j:jar:1.0.1
169
+ - org.springframework:spring-core:jar:3.1.2.RELEASE
170
+ - org.hibernate:hibernate-core:jar:4.1.7.Final
171
+ EOS
172
+ end
173
+
174
+ it "must handle proper YAML format" do
175
+ lockfile "test_good.lock" do |lockfile|
176
+ lockfile.path.open("w+") do |file|
177
+ file << @lockfile_contents
178
+ end
179
+ lockfile.jars.size.must_equal 3
180
+ end
181
+ end
182
+
183
+ it "must raise a Psych::SyntaxError for invalid YAML" do
184
+ lockfile "test_bad.lock" do |lockfile|
185
+ lockfile.path.open("w+") do |file|
186
+ file << "<(^.^)> <(^.^<) (>^.^)>" << @lockfile_contents
187
+ end
188
+ -> { lockfile.jars }.must_raise Psych::SyntaxError
189
+ end
190
+ end
191
+ end
192
+
193
+ describe "gem format" do
194
+ before do
195
+ @lockfile_contents = <<-EOS.margin
196
+ ---
197
+ GEMS:
198
+ backports (2.6.4): []
199
+ ffi (1.0.11): []
200
+ ffi (1.0.11-java): []
201
+ hitimes (1.1.1): []
202
+ hitimes (1.1.1-java): []
203
+ minitest (3.4.0): []
204
+ minitest-wscolor (0.0.3):
205
+ - minitest (>= 2.3.1)
206
+ multi_json (1.3.6): []
207
+ path (1.3.1): []
208
+ perfer (0.2.0):
209
+ - backports (~> 2.6.3)
210
+ - ffi (~> 1.0.11)
211
+ - hitimes (~> 1.1.1)
212
+ - path (~> 1.3.1)
213
+ JARS: []
214
+ EOS
215
+ end
216
+
217
+ it "must handle proper YAML format" do
218
+ skip
219
+ lockfile "test_good.lock" do |lockfile|
220
+ lockfile.path.open("w+") do |file|
221
+ file << @lockfile_contents
222
+ end
223
+ lockfile.gems.size.must_equal 10
224
+ end
225
+ end
226
+
227
+ it "must raise a Psych::SyntaxError for invalid YAML" do
228
+ lockfile "test_bad.lock" do |lockfile|
229
+ lockfile.path.open("w+") do |file|
230
+ file << "<(^.^)> <(^.^<) (>^.^)>" << @lockfile_contents
231
+ end
232
+ -> { lockfile.gems }.must_raise Psych::SyntaxError
233
+ end
234
+ end
235
+ end
236
+ end