assaf-buildr 1.3.3

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 (163) hide show
  1. data/CHANGELOG +887 -0
  2. data/DISCLAIMER +7 -0
  3. data/LICENSE +176 -0
  4. data/NOTICE +26 -0
  5. data/README.rdoc +146 -0
  6. data/Rakefile +62 -0
  7. data/_buildr +38 -0
  8. data/addon/buildr/antlr.rb +65 -0
  9. data/addon/buildr/cobertura.rb +236 -0
  10. data/addon/buildr/emma.rb +238 -0
  11. data/addon/buildr/hibernate.rb +142 -0
  12. data/addon/buildr/javacc.rb +85 -0
  13. data/addon/buildr/jdepend.rb +60 -0
  14. data/addon/buildr/jetty.rb +248 -0
  15. data/addon/buildr/jibx.rb +86 -0
  16. data/addon/buildr/nailgun.rb +817 -0
  17. data/addon/buildr/openjpa.rb +90 -0
  18. data/addon/buildr/org/apache/buildr/BuildrNail$Main.class +0 -0
  19. data/addon/buildr/org/apache/buildr/BuildrNail.class +0 -0
  20. data/addon/buildr/org/apache/buildr/BuildrNail.java +41 -0
  21. data/addon/buildr/org/apache/buildr/JettyWrapper$1.class +0 -0
  22. data/addon/buildr/org/apache/buildr/JettyWrapper$BuildrHandler.class +0 -0
  23. data/addon/buildr/org/apache/buildr/JettyWrapper.class +0 -0
  24. data/addon/buildr/org/apache/buildr/JettyWrapper.java +144 -0
  25. data/addon/buildr/xmlbeans.rb +93 -0
  26. data/bin/buildr +28 -0
  27. data/buildr.buildfile +53 -0
  28. data/buildr.gemspec +58 -0
  29. data/doc/css/default.css +228 -0
  30. data/doc/css/print.css +100 -0
  31. data/doc/css/syntax.css +52 -0
  32. data/doc/images/apache-incubator-logo.png +0 -0
  33. data/doc/images/buildr-hires.png +0 -0
  34. data/doc/images/buildr.png +0 -0
  35. data/doc/images/favicon.png +0 -0
  36. data/doc/images/growl-icon.tiff +0 -0
  37. data/doc/images/note.png +0 -0
  38. data/doc/images/project-structure.png +0 -0
  39. data/doc/images/tip.png +0 -0
  40. data/doc/images/zbuildr.tif +0 -0
  41. data/doc/pages/artifacts.textile +207 -0
  42. data/doc/pages/building.textile +240 -0
  43. data/doc/pages/contributing.textile +208 -0
  44. data/doc/pages/download.textile +62 -0
  45. data/doc/pages/extending.textile +175 -0
  46. data/doc/pages/getting_started.textile +273 -0
  47. data/doc/pages/index.textile +42 -0
  48. data/doc/pages/languages.textile +407 -0
  49. data/doc/pages/mailing_lists.textile +17 -0
  50. data/doc/pages/more_stuff.textile +286 -0
  51. data/doc/pages/packaging.textile +427 -0
  52. data/doc/pages/projects.textile +274 -0
  53. data/doc/pages/recipes.textile +103 -0
  54. data/doc/pages/settings_profiles.textile +274 -0
  55. data/doc/pages/testing.textile +212 -0
  56. data/doc/pages/troubleshooting.textile +103 -0
  57. data/doc/pages/whats_new.textile +323 -0
  58. data/doc/print.haml +51 -0
  59. data/doc/print.toc.yaml +29 -0
  60. data/doc/scripts/buildr-git.rb +412 -0
  61. data/doc/scripts/install-jruby.sh +44 -0
  62. data/doc/scripts/install-linux.sh +64 -0
  63. data/doc/scripts/install-osx.sh +52 -0
  64. data/doc/site.haml +56 -0
  65. data/doc/site.toc.yaml +47 -0
  66. data/etc/KEYS +151 -0
  67. data/etc/git-svn-authors +16 -0
  68. data/lib/buildr.rb +35 -0
  69. data/lib/buildr/core.rb +27 -0
  70. data/lib/buildr/core/application.rb +489 -0
  71. data/lib/buildr/core/application_cli.rb +139 -0
  72. data/lib/buildr/core/build.rb +311 -0
  73. data/lib/buildr/core/checks.rb +382 -0
  74. data/lib/buildr/core/common.rb +154 -0
  75. data/lib/buildr/core/compile.rb +596 -0
  76. data/lib/buildr/core/environment.rb +120 -0
  77. data/lib/buildr/core/filter.rb +362 -0
  78. data/lib/buildr/core/generate.rb +195 -0
  79. data/lib/buildr/core/help.rb +118 -0
  80. data/lib/buildr/core/progressbar.rb +156 -0
  81. data/lib/buildr/core/project.rb +892 -0
  82. data/lib/buildr/core/test.rb +715 -0
  83. data/lib/buildr/core/transports.rb +558 -0
  84. data/lib/buildr/core/util.rb +289 -0
  85. data/lib/buildr/groovy.rb +18 -0
  86. data/lib/buildr/groovy/bdd.rb +105 -0
  87. data/lib/buildr/groovy/compiler.rb +138 -0
  88. data/lib/buildr/ide.rb +19 -0
  89. data/lib/buildr/ide/eclipse.rb +212 -0
  90. data/lib/buildr/ide/idea.ipr.template +300 -0
  91. data/lib/buildr/ide/idea.rb +189 -0
  92. data/lib/buildr/ide/idea7x.ipr.template +290 -0
  93. data/lib/buildr/ide/idea7x.rb +210 -0
  94. data/lib/buildr/java.rb +23 -0
  95. data/lib/buildr/java/ant.rb +92 -0
  96. data/lib/buildr/java/bdd.rb +449 -0
  97. data/lib/buildr/java/commands.rb +211 -0
  98. data/lib/buildr/java/compiler.rb +348 -0
  99. data/lib/buildr/java/deprecated.rb +141 -0
  100. data/lib/buildr/java/jruby.rb +117 -0
  101. data/lib/buildr/java/jtestr_runner.rb.erb +116 -0
  102. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.class +0 -0
  103. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.java +119 -0
  104. data/lib/buildr/java/packaging.rb +713 -0
  105. data/lib/buildr/java/pom.rb +178 -0
  106. data/lib/buildr/java/rjb.rb +155 -0
  107. data/lib/buildr/java/test_result.rb +308 -0
  108. data/lib/buildr/java/tests.rb +324 -0
  109. data/lib/buildr/java/version_requirement.rb +172 -0
  110. data/lib/buildr/packaging.rb +21 -0
  111. data/lib/buildr/packaging/artifact.rb +730 -0
  112. data/lib/buildr/packaging/artifact_namespace.rb +972 -0
  113. data/lib/buildr/packaging/artifact_search.rb +140 -0
  114. data/lib/buildr/packaging/gems.rb +102 -0
  115. data/lib/buildr/packaging/package.rb +233 -0
  116. data/lib/buildr/packaging/tar.rb +104 -0
  117. data/lib/buildr/packaging/zip.rb +722 -0
  118. data/lib/buildr/resources/buildr.icns +0 -0
  119. data/lib/buildr/scala.rb +19 -0
  120. data/lib/buildr/scala/compiler.rb +109 -0
  121. data/lib/buildr/scala/tests.rb +203 -0
  122. data/rakelib/apache.rake +191 -0
  123. data/rakelib/changelog.rake +57 -0
  124. data/rakelib/doc.rake +103 -0
  125. data/rakelib/package.rake +73 -0
  126. data/rakelib/release.rake +65 -0
  127. data/rakelib/rspec.rake +83 -0
  128. data/rakelib/rubyforge.rake +53 -0
  129. data/rakelib/scm.rake +49 -0
  130. data/rakelib/setup.rake +86 -0
  131. data/rakelib/stage.rake +48 -0
  132. data/spec/addon/cobertura_spec.rb +77 -0
  133. data/spec/addon/emma_spec.rb +120 -0
  134. data/spec/addon/test_coverage_spec.rb +255 -0
  135. data/spec/core/application_spec.rb +412 -0
  136. data/spec/core/artifact_namespace_spec.rb +646 -0
  137. data/spec/core/build_spec.rb +415 -0
  138. data/spec/core/checks_spec.rb +537 -0
  139. data/spec/core/common_spec.rb +664 -0
  140. data/spec/core/compile_spec.rb +566 -0
  141. data/spec/core/generate_spec.rb +33 -0
  142. data/spec/core/project_spec.rb +754 -0
  143. data/spec/core/test_spec.rb +1091 -0
  144. data/spec/core/transport_spec.rb +500 -0
  145. data/spec/groovy/bdd_spec.rb +80 -0
  146. data/spec/groovy/compiler_spec.rb +239 -0
  147. data/spec/ide/eclipse_spec.rb +243 -0
  148. data/spec/java/ant.rb +28 -0
  149. data/spec/java/bdd_spec.rb +358 -0
  150. data/spec/java/compiler_spec.rb +446 -0
  151. data/spec/java/java_spec.rb +88 -0
  152. data/spec/java/packaging_spec.rb +1103 -0
  153. data/spec/java/tests_spec.rb +466 -0
  154. data/spec/packaging/archive_spec.rb +503 -0
  155. data/spec/packaging/artifact_spec.rb +754 -0
  156. data/spec/packaging/packaging_helper.rb +63 -0
  157. data/spec/packaging/packaging_spec.rb +589 -0
  158. data/spec/sandbox.rb +137 -0
  159. data/spec/scala/compiler_spec.rb +228 -0
  160. data/spec/scala/tests_spec.rb +215 -0
  161. data/spec/spec_helpers.rb +304 -0
  162. data/spec/version_requirement_spec.rb +123 -0
  163. metadata +369 -0
@@ -0,0 +1,466 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with this
3
+ # work for additional information regarding copyright ownership. The ASF
4
+ # licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations under
14
+ # the License.
15
+
16
+
17
+ require File.join(File.dirname(__FILE__), '../spec_helpers')
18
+
19
+
20
+ describe Buildr::JUnit do
21
+ it 'should be the default test framework when test cases are in java' do
22
+ write 'src/test/java/com/exampe/FirstTest.java', <<-JAVA
23
+ package com.example;
24
+ public class FirstTest extends junit.framework.TestCase { }
25
+ JAVA
26
+ define 'foo'
27
+ project('foo').test.framework.should eql(:junit)
28
+ end
29
+
30
+ it 'should be picked if the test language is Java' do
31
+ define 'foo' do
32
+ test.compile.using(:javac)
33
+ test.framework.should eql(:junit)
34
+ end
35
+ end
36
+
37
+ it 'should include JUnit dependencies' do
38
+ define('foo') { test.using(:junit) }
39
+ project('foo').test.compile.dependencies.should include(artifact("junit:junit:jar:#{JUnit.version}"))
40
+ project('foo').test.dependencies.should include(artifact("junit:junit:jar:#{JUnit.version}"))
41
+ end
42
+
43
+ it 'should pick JUnit version from junit build settings' do
44
+ Buildr::JUnit.instance_eval { @dependencies = nil }
45
+ write 'build.yaml', 'junit: 1.2.3'
46
+ define('foo') { test.using(:junit) }
47
+ project('foo').test.compile.dependencies.should include(artifact("junit:junit:jar:1.2.3"))
48
+ end
49
+
50
+ it 'should include JMock dependencies' do
51
+ define('foo') { test.using(:junit) }
52
+ project('foo').test.compile.dependencies.should include(artifact("jmock:jmock:jar:#{JMock.version}"))
53
+ project('foo').test.dependencies.should include(artifact("jmock:jmock:jar:#{JMock.version}"))
54
+ end
55
+
56
+ it 'should pick JUnit version from junit build settings' do
57
+ Buildr::JUnit.instance_eval { @dependencies = nil } # JUnit caches JMock dependencies
58
+ Buildr::JMock.instance_eval { @dependencies = nil }
59
+ write 'build.yaml', 'jmock: 1.2.3'
60
+ define('foo') { test.using(:junit) }
61
+ project('foo').test.compile.dependencies.should include(artifact("jmock:jmock:jar:1.2.3"))
62
+ end
63
+
64
+ it 'should include public classes extending junit.framework.TestCase' do
65
+ write 'src/test/java/com/example/FirstTest.java', <<-JAVA
66
+ package com.example;
67
+ public class FirstTest extends junit.framework.TestCase {
68
+ public void testNothing() { }
69
+ }
70
+ JAVA
71
+ write 'src/test/java/com/example/AnotherOne.java', <<-JAVA
72
+ package com.example;
73
+ public class AnotherOne extends junit.framework.TestCase {
74
+ public void testNothing() { }
75
+ }
76
+ JAVA
77
+ define('foo').test.invoke
78
+ project('foo').test.tests.should include('com.example.FirstTest', 'com.example.AnotherOne')
79
+ end
80
+
81
+ it 'should include public classes with annotated test cases' do
82
+ write 'src/test/java/com/example/FirstTest.java', <<-JAVA
83
+ package com.example;
84
+ import org.junit.Test;
85
+ public class FirstTest {
86
+ public void utilityMethod() { }
87
+ @Test
88
+ public void annotated() { }
89
+ }
90
+ JAVA
91
+ define('foo').test.invoke
92
+ project('foo').test.tests.should include('com.example.FirstTest')
93
+ end
94
+
95
+ it 'should include public classes with RunWith annotation' do
96
+ write 'src/test/java/com/example/TestSuite.java', <<-JAVA
97
+ package com.example;
98
+ import org.junit.Test;
99
+ public class TestSuite {
100
+ @Test
101
+ public void annotated() { }
102
+ }
103
+ JAVA
104
+ write 'src/test/java/com/example/RunSuite.java', <<-JAVA
105
+ package com.example;
106
+ import org.junit.runner.RunWith;
107
+ import org.junit.runners.Suite;
108
+ @RunWith(Suite.class)
109
+ @Suite.SuiteClasses({TestSuite.class})
110
+ public class RunSuite {
111
+ }
112
+ JAVA
113
+ define('foo').test.invoke
114
+ project('foo').test.tests.should include('com.example.RunSuite')
115
+ end
116
+
117
+ it 'should ignore classes not extending junit.framework.TestCase' do
118
+ write 'src/test/java/NotATest.java', <<-JAVA
119
+ public class NotATest { }
120
+ JAVA
121
+ define('foo').test.invoke
122
+ project('foo').test.tests.should be_empty
123
+ end
124
+
125
+ it 'should ignore inner classes' do
126
+ write 'src/test/java/InnerClassTest.java', <<-JAVA
127
+ public class InnerClassTest extends junit.framework.TestCase {
128
+ public void testNothing() { }
129
+
130
+ public class InnerTest extends junit.framework.TestCase {
131
+ public void testNothing() { }
132
+ }
133
+ }
134
+ JAVA
135
+ define('foo').test.invoke
136
+ project('foo').test.tests.should eql(['InnerClassTest'])
137
+ end
138
+
139
+ it 'should ignore abstract classes' do
140
+ write 'src/test/java/AbstractClassTest.java', <<-JAVA
141
+ public abstract class AbstractClassTest extends junit.framework.TestCase {
142
+ public void testNothing() { }
143
+ }
144
+ JAVA
145
+ define('foo').test.invoke
146
+ project('foo').test.tests.should be_empty
147
+ end
148
+
149
+ it 'should ignore classes with no tests in them' do
150
+ write 'src/test/java/NoTests.java', <<-JAVA
151
+ public class NoTests {
152
+ }
153
+ JAVA
154
+ define('foo').test.invoke
155
+ project('foo').test.tests.should be_empty
156
+ end
157
+
158
+ it 'should pass when JUnit test case passes' do
159
+ write 'src/test/java/PassingTest.java', <<-JAVA
160
+ public class PassingTest extends junit.framework.TestCase {
161
+ public void testNothing() {}
162
+ }
163
+ JAVA
164
+ lambda { define('foo').test.invoke }.should_not raise_error
165
+ end
166
+
167
+ it 'should fail when JUnit test case fails' do
168
+ write 'src/test/java/FailingTest.java', <<-JAVA
169
+ public class FailingTest extends junit.framework.TestCase {
170
+ public void testFailure() {
171
+ assertTrue(false);
172
+ }
173
+ }
174
+ JAVA
175
+ lambda { define('foo').test.invoke }.should raise_error(RuntimeError, /Tests failed/) rescue nil
176
+ end
177
+
178
+ it 'should report failed test names' do
179
+ write 'src/test/java/FailingTest.java', <<-JAVA
180
+ public class FailingTest extends junit.framework.TestCase {
181
+ public void testFailure() {
182
+ assertTrue(false);
183
+ }
184
+ }
185
+ JAVA
186
+ define('foo').test.invoke rescue
187
+ project('foo').test.failed_tests.should include('FailingTest')
188
+ end
189
+
190
+ it 'should report to reports/junit' do
191
+ write 'src/test/java/PassingTest.java', <<-JAVA
192
+ public class PassingTest extends junit.framework.TestCase {
193
+ public void testNothing() {}
194
+ }
195
+ JAVA
196
+ define 'foo' do
197
+ test.report_to.should be(file('reports/junit'))
198
+ end
199
+ project('foo').test.invoke
200
+ project('foo').file('reports/junit/TEST-PassingTest.txt').should exist
201
+ project('foo').file('reports/junit/TEST-PassingTest.xml').should exist
202
+ end
203
+
204
+ it 'should pass properties to JVM' do
205
+ write 'src/test/java/PropertyTest.java', <<-JAVA
206
+ public class PropertyTest extends junit.framework.TestCase {
207
+ public void testProperty() {
208
+ assertEquals("value", System.getProperty("name"));
209
+ }
210
+ }
211
+ JAVA
212
+ define('foo').test.using :properties=>{ 'name'=>'value' }
213
+ project('foo').test.invoke
214
+ end
215
+
216
+ it 'should pass environment to JVM' do
217
+ write 'src/test/java/EnvironmentTest.java', <<-JAVA
218
+ public class EnvironmentTest extends junit.framework.TestCase {
219
+ public void testEnvironment() {
220
+ assertEquals("value", System.getenv("NAME"));
221
+ }
222
+ }
223
+ JAVA
224
+ define('foo').test.using :environment=>{ 'NAME'=>'value' }
225
+ project('foo').test.invoke
226
+ end
227
+
228
+ it 'should set current directory' do
229
+ mkpath 'baz'
230
+ expected = File.expand_path('baz')
231
+ expected.gsub!('/', '\\') if expected =~ /^[A-Z]:/ # Java returns back slashed paths for windows
232
+ write 'baz/src/test/java/CurrentDirectoryTest.java', <<-JAVA
233
+ public class CurrentDirectoryTest extends junit.framework.TestCase {
234
+ public void testCurrentDirectory() throws Exception {
235
+ assertEquals(#{expected.inspect}, new java.io.File(".").getCanonicalPath());
236
+ }
237
+ }
238
+ JAVA
239
+ define 'bar' do
240
+ define 'baz' do
241
+ test.include 'CurrentDirectoryTest'
242
+ end
243
+ end
244
+ project('bar:baz').test.invoke
245
+ end
246
+
247
+ def fork_tests(mode)
248
+ write 'src/test/java/Shared.java', <<-JAVA
249
+ public class Shared {
250
+ public static boolean flag = false;
251
+ }
252
+ JAVA
253
+ write 'src/test/java/TestCase1.java', <<-JAVA
254
+ public class TestCase1 extends junit.framework.TestCase {
255
+ public void testSameVM() {
256
+ assertFalse(Shared.flag);
257
+ Shared.flag = true;
258
+ }
259
+ }
260
+ JAVA
261
+ write 'src/test/java/TestCase2.java', <<-JAVA
262
+ public class TestCase2 extends junit.framework.TestCase {
263
+ public void testSameVM() {
264
+ assertFalse(Shared.flag);
265
+ Shared.flag = true;
266
+ }
267
+ }
268
+ JAVA
269
+ define 'foo' do
270
+ test.using :fork=>mode, :fail_on_failure=>false
271
+ end
272
+ project('foo').test.invoke
273
+ end
274
+
275
+ it 'should run all test cases in same VM if fork is once' do
276
+ fork_tests :once
277
+ project('foo').test.failed_tests.size.should eql(1)
278
+ end
279
+
280
+ it 'should run each test case in separate same VM if fork is each' do
281
+ fork_tests :each
282
+ project('foo').test.failed_tests.should be_empty
283
+ end
284
+
285
+ after do
286
+ # Yes, this is ugly. Better solution?
287
+ Buildr::JUnit.instance_eval { @dependencies = nil }
288
+ Buildr::JMock.instance_eval { @dependencies = nil }
289
+ end
290
+ end
291
+
292
+
293
+ describe Buildr::JUnit, 'report' do
294
+ it 'should default to the target directory reports/junit' do
295
+ JUnit.report.target.should eql('reports/junit')
296
+ end
297
+
298
+ it 'should generate report into the target directory' do
299
+ JUnit.report.target = 'test-report'
300
+ lambda { task('junit:report').invoke }.should change { File.exist?(JUnit.report.target) }.to(true)
301
+ end
302
+
303
+ it 'should clean after itself' do
304
+ mkpath JUnit.report.target
305
+ lambda { task('clean').invoke }.should change { File.exist?(JUnit.report.target) }.to(false)
306
+ end
307
+
308
+ it 'should generate a consolidated XML report' do
309
+ lambda { task('junit:report').invoke }.should change { File.exist?('reports/junit/TESTS-TestSuites.xml') }.to(true)
310
+ end
311
+
312
+ it 'should default to generating a report with frames' do
313
+ JUnit.report.frames.should be_true
314
+ end
315
+
316
+ it 'should generate single page when frames is false' do
317
+ JUnit.report.frames = false
318
+ task('junit:report').invoke
319
+ file('reports/junit/html/junit-noframes.html').should exist
320
+ end
321
+
322
+ it 'should generate frame page when frames is false' do
323
+ JUnit.report.frames = true
324
+ task('junit:report').invoke
325
+ file('reports/junit/html/index.html').should exist
326
+ end
327
+
328
+ it 'should generate reports from all projects that ran test cases' do
329
+ write 'src/test/java/TestSomething.java', <<-JAVA
330
+ public class TestSomething extends junit.framework.TestCase {
331
+ public void testNothing() {}
332
+ }
333
+ JAVA
334
+ define 'foo'
335
+ project('foo').test.invoke
336
+ task('junit:report').invoke
337
+ FileList['reports/junit/html/*TestSomething.html'].size.should be(1)
338
+ end
339
+
340
+ after do
341
+ JUnit.instance_eval { @report = nil }
342
+ end
343
+ end
344
+
345
+
346
+ describe Buildr::TestNG do
347
+ it 'should be selectable in project' do
348
+ define 'foo' do
349
+ test.using(:testng)
350
+ test.framework.should eql(:testng)
351
+ end
352
+ end
353
+
354
+ it 'should be selectable in parent project' do
355
+ write 'bar/src/test/java/TestCase.java'
356
+ define 'foo' do
357
+ test.using(:testng)
358
+ define 'bar'
359
+ end
360
+ project('foo:bar').test.framework.should eql(:testng)
361
+ end
362
+
363
+ it 'should include TestNG dependencies' do
364
+ define('foo') { test.using :testng }
365
+ project('foo').test.compile.dependencies.should include(artifact("org.testng:testng:jar:jdk15:#{TestNG.version}"))
366
+ project('foo').test.dependencies.should include(artifact("org.testng:testng:jar:jdk15:#{TestNG.version}"))
367
+ end
368
+
369
+ it 'should include TestNG dependencies' do
370
+ define('foo') { test.using :testng }
371
+ project('foo').test.compile.dependencies.should include(artifact("jmock:jmock:jar:#{JMock.version}"))
372
+ project('foo').test.dependencies.should include(artifact("jmock:jmock:jar:#{JMock.version}"))
373
+ end
374
+
375
+ it 'should include classes using TestNG annotations' do
376
+ write 'src/test/java/com/example/AnnotatedClass.java', <<-JAVA
377
+ package com.example;
378
+ @org.testng.annotations.Test
379
+ public class AnnotatedClass { }
380
+ JAVA
381
+ write 'src/test/java/com/example/AnnotatedMethod.java', <<-JAVA
382
+ package com.example;
383
+ public class AnnotatedMethod {
384
+ @org.testng.annotations.Test
385
+ public void annotated() { }
386
+ }
387
+ JAVA
388
+ define('foo') { test.using(:testng) }
389
+ project('foo').test.invoke
390
+ project('foo').test.tests.should include('com.example.AnnotatedClass', 'com.example.AnnotatedMethod')
391
+ end
392
+
393
+ it 'should ignore classes not using TestNG annotations' do
394
+ write 'src/test/java/NotATestClass.java', 'public class NotATestClass {}'
395
+ define('foo') { test.using(:testng) }
396
+ project('foo').test.invoke
397
+ project('foo').test.tests.should be_empty
398
+ end
399
+
400
+ it 'should ignore inner classes' do
401
+ write 'src/test/java/InnerClassTest.java', <<-JAVA
402
+ @org.testng.annotations.Test
403
+ public class InnerClassTest {
404
+ public class InnerTest {
405
+ }
406
+ }
407
+ JAVA
408
+ define('foo') { test.using(:testng) }
409
+ project('foo').test.invoke
410
+ project('foo').test.tests.should eql(['InnerClassTest'])
411
+ end
412
+
413
+ it 'should pass when TestNG test case passes' do
414
+ write 'src/test/java/PassingTest.java', <<-JAVA
415
+ public class PassingTest {
416
+ @org.testng.annotations.Test
417
+ public void testNothing() {}
418
+ }
419
+ JAVA
420
+ define('foo') { test.using(:testng) }
421
+ lambda { project('foo').test.invoke }.should_not raise_error
422
+ end
423
+
424
+ it 'should fail when TestNG test case fails' do
425
+ write 'src/test/java/FailingTest.java', <<-JAVA
426
+ public class FailingTest {
427
+ @org.testng.annotations.Test
428
+ public void testNothing() {
429
+ org.testng.AssertJUnit.assertTrue(false);
430
+ }
431
+ }
432
+ JAVA
433
+ define('foo') { test.using(:testng) }
434
+ lambda { project('foo').test.invoke }.should raise_error(RuntimeError, /Tests failed/)
435
+ end
436
+
437
+ it 'should report failed test names' do
438
+ write 'src/test/java/FailingTest.java', <<-JAVA
439
+ public class FailingTest {
440
+ @org.testng.annotations.Test
441
+ public void testNothing() {
442
+ org.testng.AssertJUnit.assertTrue(false);
443
+ }
444
+ }
445
+ JAVA
446
+ define('foo') { test.using(:testng) }
447
+ project('foo').test.invoke rescue nil
448
+ project('foo').test.failed_tests.should include('FailingTest')
449
+ end
450
+
451
+ it 'should report to reports/testng' do
452
+ define('foo') { test.using(:testng) }
453
+ project('foo').test.report_to.should be(project('foo').file('reports/testng'))
454
+ end
455
+
456
+ it 'should generate reports' do
457
+ write 'src/test/java/PassingTest.java', <<-JAVA
458
+ public class PassingTest {
459
+ @org.testng.annotations.Test
460
+ public void testNothing() {}
461
+ }
462
+ JAVA
463
+ define('foo') { test.using(:testng) }
464
+ lambda { project('foo').test.invoke }.should change { File.exist?('reports/testng/foo/index.html') }.to(true)
465
+ end
466
+ end