buildr 1.4.16-java → 1.4.17-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 (82) hide show
  1. checksums.yaml +8 -8
  2. data/CHANGELOG +20 -0
  3. data/addon/buildr/bnd.rb +158 -158
  4. data/addon/buildr/checkstyle-report.xsl +87 -0
  5. data/addon/buildr/checkstyle.rb +213 -205
  6. data/addon/buildr/css_lint-report.xsl +83 -0
  7. data/addon/buildr/css_lint.rake +196 -0
  8. data/addon/buildr/custom_pom.rb +282 -0
  9. data/addon/buildr/drb.rb +0 -1
  10. data/addon/buildr/git_auto_version.rb +34 -34
  11. data/addon/buildr/gwt.rb +171 -171
  12. data/addon/buildr/hibernate.rb +8 -8
  13. data/addon/buildr/javancss.rb +155 -155
  14. data/addon/buildr/jaxb_xjc.rb +74 -74
  15. data/addon/buildr/jibx.rb +0 -1
  16. data/addon/buildr/org/apache/buildr/BuildrNail.java +2 -2
  17. data/addon/buildr/org/apache/buildr/JettyWrapper.java +3 -3
  18. data/addon/buildr/package_as_nsis.rb +2 -2
  19. data/addon/buildr/pmd.rb +166 -166
  20. data/addon/buildr/scss_lint-report.xsl +79 -0
  21. data/addon/buildr/scss_lint.rb +199 -0
  22. data/addon/buildr/wsgen.rb +4 -0
  23. data/doc/building.textile +3 -3
  24. data/doc/css/default.css +3 -3
  25. data/doc/css/print.css +1 -1
  26. data/doc/download.textile +18 -7
  27. data/doc/index.textile +8 -1
  28. data/doc/installing.textile +3 -3
  29. data/doc/languages.textile +0 -1
  30. data/doc/mailing_lists.textile +0 -4
  31. data/doc/more_stuff.textile +127 -3
  32. data/doc/preface.textile +1 -1
  33. data/doc/projects.textile +6 -6
  34. data/doc/releasing.textile +0 -1
  35. data/lib/buildr/clojure/shell.rb +0 -1
  36. data/lib/buildr/core/build.rb +16 -16
  37. data/lib/buildr/core/filter.rb +3 -3
  38. data/lib/buildr/core/jrebel.rb +0 -1
  39. data/lib/buildr/core/linux.rb +0 -1
  40. data/lib/buildr/core/run.rb +0 -1
  41. data/lib/buildr/core/shell.rb +0 -1
  42. data/lib/buildr/groovy/doc.rb +0 -1
  43. data/lib/buildr/ide/eclipse.rb +0 -2
  44. data/lib/buildr/ide/idea.rb +44 -8
  45. data/lib/buildr/java/bdd.rb +0 -1
  46. data/lib/buildr/java/commands.rb +2 -3
  47. data/lib/buildr/java/jruby.rb +2 -2
  48. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.java +5 -5
  49. data/lib/buildr/java/tests.rb +0 -1
  50. data/lib/buildr/packaging/artifact_namespace.rb +0 -2
  51. data/lib/buildr/resources/icons-license.txt +14 -17
  52. data/lib/buildr/scala/bdd.rb +0 -1
  53. data/lib/buildr/scala/compiler.rb +0 -1
  54. data/lib/buildr/scala/org/apache/buildr/Specs2Runner.class +0 -0
  55. data/lib/buildr/scala/org/apache/buildr/Specs2Runner.java +0 -2
  56. data/lib/buildr/version.rb +1 -1
  57. data/rakelib/metrics.rake +3 -3
  58. data/rakelib/release.rake +8 -2
  59. data/spec/addon/bnd_spec.rb +383 -383
  60. data/spec/addon/custom_pom_spec.rb +149 -0
  61. data/spec/addon/drb_spec.rb +0 -1
  62. data/spec/addon/jaxb_xjc_spec.rb +130 -130
  63. data/spec/core/application_spec.rb +0 -1
  64. data/spec/core/build_spec.rb +1 -1
  65. data/spec/core/console_spec.rb +0 -1
  66. data/spec/core/doc_spec.rb +0 -1
  67. data/spec/core/extension_spec.rb +0 -1
  68. data/spec/core/generate_from_eclipse_spec.rb +9 -9
  69. data/spec/core/run_spec.rb +2 -3
  70. data/spec/core/shell_spec.rb +0 -1
  71. data/spec/ide/idea_spec.rb +1979 -1941
  72. data/spec/java/cobertura_spec.rb +6 -6
  73. data/spec/java/commands_spec.rb +11 -11
  74. data/spec/java/compiler_spec.rb +0 -1
  75. data/spec/java/doc_spec.rb +0 -1
  76. data/spec/java/ecj_spec.rb +1 -3
  77. data/spec/java/external_spec.rb +0 -2
  78. data/spec/java/java_spec.rb +3 -3
  79. data/spec/java/run_spec.rb +0 -1
  80. data/spec/java/tests_spec.rb +15 -0
  81. data/spec/xpath_matchers.rb +121 -120
  82. metadata +10 -2
@@ -16,7 +16,7 @@
16
16
  require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helpers'))
17
17
 
18
18
  module EclipseHelper
19
-
19
+
20
20
  def setupExample(group, projectName, options = {})
21
21
  options[:symName] ? symName = options[:symName] :symName = File.basename(projectName)
22
22
  requiredPlugins = nil
@@ -102,12 +102,12 @@ describe Buildr::Generate do
102
102
  include EclipseHelper
103
103
  describe 'it should find a single eclipse project' do
104
104
  top = "top_#{__LINE__}"
105
-
105
+
106
106
  before do
107
107
  setupExample(top, 'single')
108
108
  File.open(File.join(top, 'buildfile'), 'w') { |file| file.write Generate.from_eclipse(File.join(Dir.pwd, top)).join("\n") }
109
109
  end
110
-
110
+
111
111
  it 'should create a valid buildfile' do
112
112
  define('first')
113
113
  File.exists?(File.join(top, 'single', '.project')).should be_true
@@ -149,7 +149,7 @@ describe Buildr::Generate do
149
149
  file(buildFile).should contain('layout[:source, :main, :scala]')
150
150
  lambda { Buildr.application.run }.should_not raise_error
151
151
  end
152
-
152
+
153
153
  it "should pass output in build.properties to layout[:target, :main], etc" do
154
154
  define('layout_target')
155
155
  buildFile = File.join(top, 'buildfile')
@@ -161,7 +161,7 @@ describe Buildr::Generate do
161
161
  file(buildFile).should contain('layout[:target, :main, :scala]')
162
162
  lambda { Buildr.application.run }.should_not raise_error
163
163
  end
164
-
164
+
165
165
  it "should package an eclipse plugin" do
166
166
  define('layout_target')
167
167
  buildFile = File.join(top, 'buildfile')
@@ -186,14 +186,14 @@ describe Buildr::Generate do
186
186
  lambda { Buildr.application.run }.should_not raise_error
187
187
  end
188
188
  end
189
-
189
+
190
190
  describe 'it should accecpt singleton SymbolicName in MANIFEST.MF' do
191
191
  top = "top_#{__LINE__}"
192
192
  before do
193
193
  setupExample(top, 'single', { :symName => 'singleSymbolicName;singleton:=true'})
194
194
  File.open(File.join(top, 'buildfile'), 'w') { |file| file.write Generate.from_eclipse(File.join(Dir.pwd, top)).join("\n") }
195
195
  end
196
-
196
+
197
197
  it "should not get confused if SymbolicName in MANIFEST.MF is a singleton:=true" do
198
198
  buildFile = File.join(top, 'buildfile')
199
199
  file(buildFile).should exist
@@ -220,7 +220,7 @@ describe Buildr::Generate do
220
220
  file(buildFile).should contain('define "single"')
221
221
  lambda { Buildr.application.run }.should_not raise_error
222
222
  end
223
-
223
+
224
224
  it "should correct the path for a nested plugin" do
225
225
  define('base_dir')
226
226
  buildFile = File.join(top, 'buildfile')
@@ -264,7 +264,7 @@ describe Buildr::Generate do
264
264
  file(buildFile).should contain(/define "second".*do.*dependencies << projects\("first"\).* end/m)
265
265
  lambda { Buildr.application.run }.should_not raise_error
266
266
  end
267
-
267
+
268
268
  # Fragments are only supported with buildr4osi which is not (yet?) part of buildr
269
269
  it 'should skip fragments.' do
270
270
  define('base_dir')
@@ -34,7 +34,7 @@ describe Project, :run do
34
34
  end
35
35
  project('foo').run.classpath.should include(artifact('group:compile:jar:1.0'))
36
36
  end
37
-
37
+
38
38
  it 'should not include test dependencies' do
39
39
  define('foo') do
40
40
  compile.using(:javac).with 'group:compile:jar:1.0'
@@ -70,7 +70,7 @@ describe Project, :run do
70
70
  end
71
71
  project('foo').run.runner.should be_a(Run::JavaRunner)
72
72
  end
73
-
73
+
74
74
  it "should run with the project resources" do
75
75
  write 'src/main/java/Test.java', 'class Test {}'
76
76
  write 'src/main/resources/test.properties', ''
@@ -103,4 +103,3 @@ describe Project, :run do
103
103
  end
104
104
 
105
105
  end
106
-
@@ -143,4 +143,3 @@ Shell.providers.each do |provider|
143
143
  end
144
144
  end
145
145
  end
146
-
@@ -1,1941 +1,1979 @@
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.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helpers'))
18
- require File.expand_path(File.join(File.dirname(__FILE__), '..', 'xpath_matchers'))
19
-
20
- def ensure_facet_xpath(doc, type, name)
21
- facet_xpath = "/module/component[@name='FacetManager']/facet"
22
- doc.should have_xpath(facet_xpath)
23
- web_facet_xpath = "#{facet_xpath}[@type='#{type}', @name='#{name}']"
24
- doc.should have_xpath(web_facet_xpath)
25
- web_facet_xpath
26
- end
27
-
28
- describe Buildr::IntellijIdea do
29
-
30
- def invoke_generate_task
31
- task('idea').invoke
32
- end
33
-
34
- def invoke_clean_task
35
- task('idea:clean').invoke
36
- end
37
-
38
- def root_project_filename(project)
39
- project._("#{project.name}#{Buildr::IntellijIdea::IdeaFile::DEFAULT_SUFFIX}.ipr")
40
- end
41
-
42
- def root_project_xml(project)
43
- xml_document(root_project_filename(project))
44
- end
45
-
46
- def root_module_filename(project)
47
- project._("#{project.name}#{Buildr::IntellijIdea::IdeaFile::DEFAULT_SUFFIX}.iml")
48
- end
49
-
50
- def root_module_xml(project)
51
- xml_document(root_module_filename(project))
52
- end
53
-
54
- def subproject_module_filename(project, sub_project_name)
55
- project._("#{sub_project_name}/#{sub_project_name}#{Buildr::IntellijIdea::IdeaFile::DEFAULT_SUFFIX}.iml")
56
- end
57
-
58
- def subproject_module_xml(project, sub_project_name)
59
- xml_document(subproject_module_filename(project, sub_project_name))
60
- end
61
-
62
- def xml_document(filename)
63
- File.should be_exist(filename)
64
- REXML::Document.new(File.read(filename))
65
- end
66
-
67
- def xpath_to_module
68
- "/project/component[@name='ProjectModuleManager']/modules/module"
69
- end
70
-
71
- describe "idea:clean" do
72
- before do
73
- write "foo.ipr"
74
- write "foo.iml"
75
- write "other.ipr"
76
- write "other.iml"
77
- mkdir_p 'bar'
78
- write "bar/bar.iml"
79
- write "bar/other.ipr"
80
- write "bar/other.iml"
81
-
82
- @foo = define "foo" do
83
- define "bar"
84
- end
85
- invoke_clean_task
86
- end
87
-
88
- it "should remove the ipr file" do
89
- File.exists?("foo.ipr").should be_false
90
- end
91
-
92
- it "should remove the project iml file" do
93
- File.exists?("foo.iml").should be_false
94
- end
95
-
96
- it "should remove the subproject iml file" do
97
- File.exists?("foo.iml").should be_false
98
- end
99
-
100
- it "should not remove other iml and ipr files" do
101
- File.exists?("other.ipr").should be_true
102
- File.exists?("other.iml").should be_true
103
- File.exists?("bar/other.ipr").should be_true
104
- File.exists?("bar/other.iml").should be_true
105
- end
106
- end
107
-
108
- describe "idea task" do
109
-
110
- def order_entry_xpath
111
- "/module/component[@name='NewModuleRootManager']/orderEntry"
112
- end
113
-
114
- describe "with a single dependency" do
115
- describe "of type compile" do
116
- before do
117
- artifact('group:id:jar:1.0') { |t| write t.to_s }
118
- @foo = define "foo" do
119
- compile.with 'group:id:jar:1.0'
120
- end
121
- invoke_generate_task
122
- end
123
-
124
- it "generates one exported 'module-library' orderEntry in IML" do
125
- root_module_xml(@foo).should have_nodes("#{order_entry_xpath}[@type='module-library', @exported='']/library/CLASSES/root", 1)
126
- end
127
- end
128
-
129
- describe "with iml.main_dependencies override" do
130
- before do
131
- artifact('group:id:jar:1.0') { |t| write t.to_s }
132
- @foo = define "foo" do
133
- iml.main_dependencies << 'group:id:jar:1.0'
134
- end
135
- invoke_generate_task
136
- end
137
-
138
- it "generates one exported 'module-library' orderEntry in IML" do
139
- root_module_xml(@foo).should have_nodes("#{order_entry_xpath}[@type='module-library', @exported='']/library/CLASSES/root", 1)
140
- end
141
- end
142
-
143
- describe "of type test" do
144
- before do
145
- artifact('group:id:jar:1.0') { |t| write t.to_s }
146
- @foo = define "foo" do
147
- test.with 'group:id:jar:1.0'
148
- end
149
- invoke_generate_task
150
- end
151
-
152
- it "generates one non-exported test scope 'module-library' orderEntry in IML" do
153
- root_module_xml(@foo).should have_nodes("#{order_entry_xpath}[@type='module-library' and @exported]/library/CLASSES/root", 0)
154
- root_module_xml(@foo).should have_nodes("#{order_entry_xpath}[@type='module-library' and @scope='TEST']/library/CLASSES/root", 1)
155
- end
156
- end
157
-
158
- describe "with iml.test_dependencies override" do
159
- before do
160
- artifact('group:id:jar:1.0') { |t| write t.to_s }
161
- @foo = define "foo" do
162
- iml.test_dependencies << 'group:id:jar:1.0'
163
- end
164
- invoke_generate_task
165
- end
166
-
167
- it "generates one non-exported 'module-library' orderEntry in IML" do
168
- root_module_xml(@foo).should have_nodes("#{order_entry_xpath}[@type='module-library' and @exported]/library/CLASSES/root", 0)
169
- root_module_xml(@foo).should have_nodes("#{order_entry_xpath}[@type='module-library']/library/CLASSES/root", 1)
170
- end
171
- end
172
-
173
- describe "with sources artifact present" do
174
- before do
175
- artifact('group:id:jar:1.0') { |t| write t.to_s }
176
- artifact('group:id:jar:sources:1.0') { |t| write t.to_s }
177
- @foo = define "foo" do
178
- compile.with 'group:id:jar:1.0'
179
- end
180
- invoke_generate_task
181
- end
182
-
183
- it "generates 'module-library' orderEntry in IML with SOURCES specified" do
184
- root_module_xml(@foo).should have_nodes("#{order_entry_xpath}[@type='module-library', @exported='']/library/SOURCES/root", 1)
185
- end
186
- end
187
-
188
- describe "with local_repository_env_override set to nil" do
189
- before do
190
- Buildr.repositories.instance_eval do
191
- @local = @remote = @release_to = nil
192
- end
193
- artifact('group:id:jar:1.0') { |t| write t.to_s }
194
- @foo = define "foo" do
195
- iml.local_repository_env_override = nil
196
- compile.with 'group:id:jar:1.0'
197
- end
198
- invoke_generate_task
199
- end
200
-
201
- it "generates orderEntry with absolute path for classes jar" do
202
- root_module_xml(@foo).should match_xpath("#{order_entry_xpath}/library/CLASSES/root/@url",
203
- "jar://$MODULE_DIR$/home/.m2/repository/group/id/1.0/id-1.0.jar!/")
204
- end
205
- end
206
- describe "with local_repository_env_override set to MAVEN_REPOSITORY" do
207
- before do
208
- artifact('group:id:jar:1.0') { |t| write t.to_s }
209
- @foo = define "foo" do
210
- iml.local_repository_env_override = 'MAVEN_REPOSITORY'
211
- compile.with 'group:id:jar:1.0'
212
- end
213
- invoke_generate_task
214
- end
215
-
216
- it "generates orderEntry with absolute path for classes jar" do
217
- root_module_xml(@foo).should match_xpath("#{order_entry_xpath}/library/CLASSES/root/@url",
218
- "jar://$MAVEN_REPOSITORY$/group/id/1.0/id-1.0.jar!/")
219
- end
220
- end
221
- end
222
-
223
- describe "with multiple dependencies" do
224
- before do
225
- artifact('group:id:jar:1.0') { |t| write t.to_s }
226
- artifact('group:id2:jar:1.0') { |t| write t.to_s }
227
- @foo = define "foo" do
228
- compile.with 'group:id:jar:1.0', 'group:id2:jar:1.0'
229
- end
230
- invoke_generate_task
231
- end
232
-
233
- it "generates multiple 'module-library' orderEntry in IML" do
234
- root_module_xml(@foo).should have_nodes("#{order_entry_xpath}[@type='module-library']", 2)
235
- end
236
- end
237
-
238
- describe "with a single non artifact dependency" do
239
- before do
240
- @foo = define "foo" do
241
- filename = _("foo-dep.jar")
242
- File.open(filename, "wb") { |t| write "Hello" }
243
- compile.with filename
244
- end
245
- invoke_generate_task
246
- end
247
-
248
- it "generates one exported 'module-library' orderEntry in IML" do
249
- root_module_xml(@foo).should match_xpath("#{order_entry_xpath}/library/CLASSES/root/@url",
250
- "jar://$MODULE_DIR$/foo-dep.jar!/")
251
- end
252
- end
253
-
254
- describe "with extra_modules specified" do
255
- before do
256
- @foo = define "foo" do
257
- ipr.extra_modules << 'other.iml'
258
- ipr.extra_modules << 'other_other.iml'
259
- end
260
- invoke_generate_task
261
- end
262
-
263
- it "generate an IPR with extra modules specified" do
264
- doc = xml_document(@foo._("foo.ipr"))
265
- doc.should have_nodes("#{xpath_to_module}", 3)
266
- module_ref = "$PROJECT_DIR$/foo.iml"
267
- doc.should have_xpath("#{xpath_to_module}[@fileurl='file://#{module_ref}', @filepath='#{module_ref}']")
268
- module_ref = "$PROJECT_DIR$/other.iml"
269
- doc.should have_xpath("#{xpath_to_module}[@fileurl='file://#{module_ref}', @filepath='#{module_ref}']")
270
- module_ref = "$PROJECT_DIR$/other_other.iml"
271
- doc.should have_xpath("#{xpath_to_module}[@fileurl='file://#{module_ref}', @filepath='#{module_ref}']")
272
- end
273
- end
274
-
275
- describe "with web and webservice facet added to root project" do
276
- before do
277
- @foo = define "foo" do
278
- iml.add_facet("Web", "web") do |facet|
279
- facet.configuration do |conf|
280
- conf.descriptors do |desc|
281
- desc.deploymentDescriptor :name => 'web.xml',
282
- :url => "file://$MODULE_DIR$/src/main/webapp/WEB-INF/web.xml",
283
- :optional => "false", :version => "2.4"
284
- end
285
- conf.webroots do |webroots|
286
- webroots.root :url => "file://$MODULE_DIR$/src/main/webapp", :relative => "/"
287
- end
288
- end
289
- end
290
- iml.add_facet("WebServices Client", "WebServicesClient") do |facet|
291
- facet.configuration "ws.engine" => "Glassfish / JAX-WS 2.X RI / Metro 1.X / JWSDP 2.0"
292
- end
293
- define 'bar'
294
- end
295
- invoke_generate_task
296
- end
297
-
298
- it "generates an IML for root project with a web and webservice facet" do
299
- doc = xml_document(@foo._("foo.iml"))
300
- ensure_facet_xpath(doc, 'web', 'Web')
301
- ensure_facet_xpath(doc, 'WebServicesClient', 'WebServices Client')
302
- end
303
- end
304
-
305
- describe "using add_gwt_facet" do
306
- before do
307
- @foo = define "foo" do
308
- iml.add_gwt_facet("com.biz.MyModule" => true, "com.biz.MyOtherModule" => false)
309
- end
310
- invoke_generate_task
311
- end
312
-
313
- it "generates a gwt facet with default settings" do
314
- doc = xml_document(@foo._("foo.iml"))
315
- facet_xpath = ensure_facet_xpath(doc, 'gwt', 'GWT')
316
- setting_xpath = "#{facet_xpath}/configuration/setting"
317
- doc.should have_xpath("#{setting_xpath}[@name='gwtSdkUrl', value='file://$GWT_TOOLS$']")
318
- doc.should have_xpath("#{setting_xpath}[@name='gwtScriptOutputStyle', value='PRETTY']")
319
- doc.should have_xpath("#{setting_xpath}[@name='compilerParameters', value='-draftCompile -localWorkers 2 -strict']")
320
- doc.should have_xpath("#{setting_xpath}[@name='compilerParameters', value='-draftCompile -localWorkers 2 -strict']")
321
- doc.should have_xpath("#{setting_xpath}[@name='compilerMaxHeapSize', value='512']")
322
- doc.should have_xpath("#{setting_xpath}[@name='webFacet', value='Web']")
323
- end
324
-
325
- it "generates a gwt facet with specified modules" do
326
- doc = xml_document(@foo._("foo.iml"))
327
- facet_xpath = ensure_facet_xpath(doc, 'gwt', 'GWT')
328
- prefix = "#{facet_xpath}/configuration/packaging/module"
329
- doc.should have_xpath("#{prefix}[@name='com.biz.MyModule', @enabled='true']")
330
- doc.should have_xpath("#{prefix}[@name='com.biz.MyOtherModule', @enabled='false']")
331
- end
332
- end
333
-
334
- describe "using add_gwt_facet that detects gwt sdk" do
335
- before do
336
- artifact('com.google.gwt:gwt-dev:jar:2.5.1-not-a-release') { |task| write task.name }
337
- @foo = define "foo" do
338
- compile.with 'com.google.gwt:gwt-dev:jar:2.5.1-not-a-release'
339
- iml.add_gwt_facet("com.biz.MyModule" => true)
340
- end
341
- invoke_generate_task
342
- end
343
-
344
- it "generates a gwt facet with detected gwt sdk settings" do
345
- doc = xml_document(@foo._("foo.iml"))
346
- facet_xpath = ensure_facet_xpath(doc, 'gwt', 'GWT')
347
- setting_xpath = "#{facet_xpath}/configuration/setting"
348
- doc.should have_xpath("#{setting_xpath}[@name='gwtSdkType', value='maven']")
349
- doc.should have_xpath("#{setting_xpath}[@name='gwtSdkUrl', value='$MAVEN_REPOSITORY$/com/google/gwt/gwt-dev/2.5.1-not-a-release']")
350
- end
351
- end
352
-
353
- describe "using add_gwt_facet that specifies gwt sdk" do
354
- before do
355
- artifact('com.example:library:jar:2.0') { |task| write task.name }
356
- @foo = define "foo" do
357
- iml.add_gwt_facet({"com.biz.MyModule" => true},:gwt_dev_artifact => 'com.example:library:jar:2.0')
358
- end
359
- invoke_generate_task
360
- end
361
-
362
- it "generates a gwt facet with detected gwt sdk settings" do
363
- doc = xml_document(@foo._("foo.iml"))
364
- facet_xpath = ensure_facet_xpath(doc, 'gwt', 'GWT')
365
- setting_xpath = "#{facet_xpath}/configuration/setting"
366
- doc.should have_xpath("#{setting_xpath}[@name='gwtSdkType', value='maven']")
367
- doc.should have_xpath("#{setting_xpath}[@name='gwtSdkUrl', value='$MAVEN_REPOSITORY$/com/google/gwt/gwt-dev/2.5.1']")
368
- end
369
- end
370
-
371
- describe "using add_gwt_facet that specifies settings" do
372
- before do
373
- @foo = define "foo" do
374
- iml.add_gwt_facet({"com.biz.MyModule" => true, "com.biz.MyOtherModule" => false},
375
- :settings => {:gwtScriptOutputStyle => 'OTHER', :compilerMaxHeapSize => 1024, :zang => 'zang'})
376
- end
377
- invoke_generate_task
378
- end
379
-
380
- it "generates a gwt facet with specified settings" do
381
- doc = xml_document(@foo._("foo.iml"))
382
- facet_xpath = ensure_facet_xpath(doc, 'gwt', 'GWT')
383
- setting_xpath = "#{facet_xpath}/configuration/setting"
384
- doc.should have_xpath("#{setting_xpath}[@name='zang', value='zang']")
385
- doc.should have_xpath("#{setting_xpath}[@name='gwtScriptOutputStyle', value='OTHER']")
386
- doc.should have_xpath("#{setting_xpath}[@name='compilerMaxHeapSize', value='1024']")
387
- end
388
- end
389
-
390
- describe "using add_web_facet with jsf and idea version 12" do
391
- before do
392
- write "src/main/webapp/WEB-INF/web.xml"
393
- write "src/main/webapp/WEB-INF/faces-config.xml"
394
-
395
- @foo = define "foo" do
396
- ipr.version = "12"
397
- iml.add_web_facet
398
- end
399
- invoke_generate_task
400
- end
401
-
402
- it "generates a web facet with jsf facet auto-detected" do
403
- doc = xml_document(@foo._("foo.iml"))
404
- web_facet_xpath = ensure_facet_xpath(doc, 'web', 'Web')
405
- doc.should have_xpath("#{web_facet_xpath}/facet[@type='jsf', @name='JSF']")
406
- end
407
- end
408
-
409
- describe "using add_web_facet should default to no jsf" do
410
- before do
411
- write "src/main/webapp/WEB-INF/web.xml"
412
-
413
- @foo = define "foo" do
414
- iml.add_web_facet
415
- end
416
- invoke_generate_task
417
- end
418
-
419
- it "does not generate a web facet with jsf facet" do
420
- doc = xml_document(@foo._("foo.iml"))
421
- web_facet_xpath = ensure_facet_xpath(doc, 'web', 'Web')
422
- doc.should_not have_xpath("#{web_facet_xpath}/facet[@type='jsf', @name='JSF']")
423
- end
424
- end
425
-
426
- describe "using add_web_facet with jsf and idea version 13" do
427
- before do
428
- write "src/main/webapp/WEB-INF/web.xml"
429
- write "src/main/webapp/WEB-INF/faces-config.xml"
430
-
431
- @foo = define "foo" do
432
- ipr.version = "13"
433
- iml.add_web_facet
434
- end
435
- invoke_generate_task
436
- end
437
-
438
- it "does not generate a web facet with jsf facet" do
439
- doc = xml_document(@foo._("foo.iml"))
440
- web_facet_xpath = ensure_facet_xpath(doc, 'web', 'Web')
441
- doc.should_not have_xpath("#{web_facet_xpath}/facet[@type='jsf', @name='JSF']")
442
- end
443
- end
444
-
445
- describe "using add_web_facet with jsf and idea version 13 and jsf 'enabled'" do
446
- before do
447
- write "src/main/webapp/WEB-INF/web.xml"
448
- write "src/main/webapp/WEB-INF/faces-config.xml"
449
-
450
- @foo = define "foo" do
451
- ipr.version = "13"
452
- iml.add_web_facet(:enable_jsf => true)
453
- end
454
- invoke_generate_task
455
- end
456
-
457
- it "does not generate a web facet with jsf facet" do
458
- doc = xml_document(@foo._("foo.iml"))
459
- web_facet_xpath = ensure_facet_xpath(doc, 'web', 'Web')
460
- doc.should_not have_xpath("#{web_facet_xpath}/facet[@type='jsf', @name='JSF']")
461
- end
462
- end
463
-
464
- describe "using add_web_facet" do
465
- before do
466
- write "src/main/webapp/WEB-INF/web.xml"
467
- write "src/main/webapp/WEB-INF/glassfish-web.xml"
468
- write "src/main/webapp/WEB-INF/context.xml"
469
-
470
- @foo = define "foo" do
471
- iml.add_web_facet
472
- end
473
- invoke_generate_task
474
- end
475
-
476
- it "generates a web facet with appropriate deployment descriptors" do
477
- doc = xml_document(@foo._("foo.iml"))
478
- web_facet_xpath = ensure_facet_xpath(doc, 'web', 'Web')
479
- deployment_descriptor_xpath = "#{web_facet_xpath}/configuration/descriptors/deploymentDescriptor"
480
- doc.should have_xpath("#{deployment_descriptor_xpath}[@name='web.xml', url='file://$MODULE_DIR$/src/main/webapp/WEB-INF/web.xml']")
481
- doc.should have_xpath("#{deployment_descriptor_xpath}[@name='glassfish-web.xml', url='file://$MODULE_DIR$/src/main/webapp/WEB-INF/glassfish-web.xml']")
482
- end
483
-
484
- it "generates a web facet with derived webroots" do
485
- doc = xml_document(@foo._("foo.iml"))
486
- web_facet_xpath = ensure_facet_xpath(doc, 'web', 'Web')
487
- doc.should have_xpath("#{web_facet_xpath}/configuration/webroots/root[@url='file://$MODULE_DIR$/src/main/webapp', @realtive='/']")
488
- end
489
- end
490
-
491
- describe "using add_web_facet with specified parameters" do
492
- before do
493
- @foo = define "foo" do
494
- iml.add_web_facet(:deployment_descriptors => ["src/main/webapp2/WEB-INF/web.xml"],
495
- :webroots => {"src/main/webapp2" => "/", "src/main/css" => "/css"})
496
- end
497
- invoke_generate_task
498
- end
499
-
500
- it "generates a web facet with appropriate deployment descriptors" do
501
- doc = xml_document(@foo._("foo.iml"))
502
- web_facet_xpath = ensure_facet_xpath(doc, 'web', 'Web')
503
- deployment_descriptor_xpath = "#{web_facet_xpath}/configuration/descriptors/deploymentDescriptor"
504
- doc.should have_xpath("#{deployment_descriptor_xpath}[@name='web.xml', url='file://$MODULE_DIR$/src/main/webapp2/WEB-INF/web.xml']")
505
- end
506
-
507
- it "generates a web facet with specified webroots" do
508
- doc = xml_document(@foo._("foo.iml"))
509
- web_facet_xpath = ensure_facet_xpath(doc, 'web', 'Web')
510
- doc.should have_xpath("#{web_facet_xpath}/configuration/webroots/root[@url='file://$MODULE_DIR$/src/main/webapp2', @realtive='/']")
511
- doc.should have_xpath("#{web_facet_xpath}/configuration/webroots/root[@url='file://$MODULE_DIR$/src/main/css', @realtive='/css']")
512
- end
513
- end
514
-
515
- describe "using add_jpa_facet" do
516
- before do
517
- write "src/main/resources/META-INF/persistence.xml", "org.hibernate.ejb.HibernatePersistence"
518
- write "src/main/resources/META-INF/orm.xml"
519
-
520
- @foo = define "foo" do
521
- iml.add_jpa_facet
522
- end
523
- invoke_generate_task
524
- end
525
-
526
- it "generates a jpa facet with appropriate deployment descriptors" do
527
- doc = xml_document(@foo._("foo.iml"))
528
- facet_xpath = ensure_facet_xpath(doc, 'jpa', 'JPA')
529
- deployment_descriptor_xpath = "#{facet_xpath}/configuration/deploymentDescriptor"
530
- doc.should have_xpath("#{deployment_descriptor_xpath}[@name='persistence.xml', url='file://$MODULE_DIR$/src/main/resources/META-INF/persistence.xml']")
531
- doc.should have_xpath("#{deployment_descriptor_xpath}[@name='orm.xml', url='file://$MODULE_DIR$/src/main/resources/META-INF/orm.xml']")
532
- end
533
-
534
- it "generates a jpa facet with default settings" do
535
- doc = xml_document(@foo._("foo.iml"))
536
- facet_xpath = ensure_facet_xpath(doc, 'jpa', 'JPA')
537
- doc.should have_xpath("#{facet_xpath}/configuration/setting[@name='validation-enabled', @value='true']")
538
- doc.should have_xpath("#{facet_xpath}/configuration/setting[@name='provider-name', @value='Hibernate']")
539
- end
540
- end
541
-
542
- describe "using add_jpa_facet specifying parameters" do
543
- before do
544
- write "src/main/resources2/META-INF/persistence.xml"
545
- write "src/main/resources2/META-INF/orm.xml"
546
-
547
- @foo = define "foo" do
548
- iml.add_jpa_facet(:provider_enabled => 'Hibernate',
549
- :deployment_descriptors => ["src/main/resources2/META-INF/persistence.xml",
550
- "src/main/resources2/META-INF/orm.xml"])
551
- end
552
- invoke_generate_task
553
- end
554
-
555
- it "generates a jpa facet with appropriate deployment descriptors" do
556
- doc = xml_document(@foo._("foo.iml"))
557
- facet_xpath = ensure_facet_xpath(doc, 'jpa', 'JPA')
558
- deployment_descriptor_xpath = "#{facet_xpath}/configuration/deploymentDescriptor"
559
- doc.should have_xpath("#{deployment_descriptor_xpath}[@name='persistence.xml', url='file://$MODULE_DIR$/src/main/resources2/META-INF/persistence.xml']")
560
- doc.should have_xpath("#{deployment_descriptor_xpath}[@name='orm.xml', url='file://$MODULE_DIR$/src/main/resources2/META-INF/orm.xml']")
561
- end
562
-
563
- it "generates a jpa facet with default settings" do
564
- doc = xml_document(@foo._("foo.iml"))
565
- facet_xpath = ensure_facet_xpath(doc, 'jpa', 'JPA')
566
- doc.should have_xpath("#{facet_xpath}/configuration/setting[@name='validation-enabled', @value='true']")
567
- doc.should have_xpath("#{facet_xpath}/configuration/setting[@name='provider-name', @value='Hibernate']")
568
- end
569
- end
570
-
571
- describe "using add_jpa_facet derived from main_source_directories" do
572
- before do
573
- write "src/main/resources2/META-INF/persistence.xml"
574
- write "src/main/resources2/META-INF/orm.xml"
575
-
576
- @foo = define "foo" do
577
- iml.main_source_directories << "src/main/resources2"
578
- iml.add_jpa_facet
579
-
580
- end
581
- invoke_generate_task
582
- end
583
-
584
- it "generates a jpa facet with appropriate deployment descriptors" do
585
- doc = xml_document(@foo._("foo.iml"))
586
- facet_xpath = ensure_facet_xpath(doc, 'jpa', 'JPA')
587
- deployment_descriptor_xpath = "#{facet_xpath}/configuration/deploymentDescriptor"
588
- doc.should have_xpath("#{deployment_descriptor_xpath}[@name='persistence.xml', url='file://$MODULE_DIR$/src/main/resources2/META-INF/persistence.xml']")
589
- doc.should have_xpath("#{deployment_descriptor_xpath}[@name='orm.xml', url='file://$MODULE_DIR$/src/main/resources2/META-INF/orm.xml']")
590
- end
591
- end
592
-
593
- describe "using add_jpa_facet with hibernate configured in persistence.xml" do
594
- before do
595
- write "src/main/resources/META-INF/persistence.xml", "org.hibernate.ejb.HibernatePersistence"
596
- write "src/main/resources/META-INF/orm.xml"
597
-
598
- @foo = define "foo" do
599
- iml.add_jpa_facet
600
- end
601
- invoke_generate_task
602
- end
603
-
604
- it "generates a jpa facet with default settings" do
605
- doc = xml_document(@foo._("foo.iml"))
606
- facet_xpath = ensure_facet_xpath(doc, 'jpa', 'JPA')
607
- doc.should have_xpath("#{facet_xpath}/configuration/setting[@name='validation-enabled', @value='true']")
608
- doc.should have_xpath("#{facet_xpath}/configuration/setting[@name='provider-name', @value='Hibernate']")
609
- end
610
- end
611
-
612
- describe "using add_jpa_facet with eclipselink configured in persistence.xml" do
613
- before do
614
- write "src/main/resources/META-INF/persistence.xml", "org.eclipse.persistence.jpa.PersistenceProvider"
615
- write "src/main/resources/META-INF/orm.xml"
616
-
617
- @foo = define "foo" do
618
- iml.add_jpa_facet
619
- end
620
- invoke_generate_task
621
- end
622
-
623
- it "generates a jpa facet with default settings" do
624
- doc = xml_document(@foo._("foo.iml"))
625
- facet_xpath = ensure_facet_xpath(doc, 'jpa', 'JPA')
626
- doc.should have_xpath("#{facet_xpath}/configuration/setting[@name='validation-enabled', @value='true']")
627
- doc.should have_xpath("#{facet_xpath}/configuration/setting[@name='provider-name', @value='EclipseLink']")
628
- end
629
- end
630
-
631
- describe "using add_ejb_facet" do
632
- before do
633
- write "src/main/java/com/bin/foo.java"
634
- write "src/main/resources/WEB-INF/ejb-jar.xml"
635
-
636
- @foo = define "foo" do
637
- iml.add_ejb_facet
638
- end
639
- invoke_generate_task
640
- end
641
-
642
- it "generates an ejb facet with appropriate deployment descriptors" do
643
- doc = xml_document(@foo._("foo.iml"))
644
- ejb_facet_xpath = ensure_facet_xpath(doc, 'ejb', 'EJB')
645
- deployment_descriptor_xpath = "#{ejb_facet_xpath}/configuration/descriptors/deploymentDescriptor"
646
- doc.should have_xpath("#{deployment_descriptor_xpath}[@name='ejb-jar.xml', url='file://$MODULE_DIR$/src/main/resources/WEB-INF/ejb-jar.xml']")
647
- end
648
-
649
- it "generates an ejb facet with derived ejbRoots" do
650
- doc = xml_document(@foo._("foo.iml"))
651
- ejb_facet_xpath = ensure_facet_xpath(doc, 'ejb', 'EJB')
652
- doc.should have_xpath("#{ejb_facet_xpath}/configuration/ejbRoots/root[@url='file://$MODULE_DIR$/src/main/java']")
653
- doc.should have_xpath("#{ejb_facet_xpath}/configuration/ejbRoots/root[@url='file://$MODULE_DIR$/src/main/resources']")
654
- end
655
- end
656
-
657
- describe "using add_ejb_facet specifying parameters" do
658
- before do
659
- @foo = define "foo" do
660
- iml.add_ejb_facet(:ejb_roots => ["generated/main/java","generated/main/resources"],
661
- :deployment_descriptors => ["generated/main/resources/WEB-INF/ejb-jar.xml"])
662
- end
663
- invoke_generate_task
664
- end
665
-
666
- it "generates an ejb facet with appropriate deployment descriptors" do
667
- doc = xml_document(@foo._("foo.iml"))
668
- ejb_facet_xpath = ensure_facet_xpath(doc, 'ejb', 'EJB')
669
- deployment_descriptor_xpath = "#{ejb_facet_xpath}/configuration/descriptors/deploymentDescriptor"
670
- doc.should have_xpath("#{deployment_descriptor_xpath}[@name='ejb-jar.xml', url='file://$MODULE_DIR$/generated/main/resources/WEB-INF/ejb-jar.xml']")
671
- end
672
-
673
- it "generates an ejb facet with derived ejbRoots" do
674
- doc = xml_document(@foo._("foo.iml"))
675
- ejb_facet_xpath = ensure_facet_xpath(doc, 'ejb', 'EJB')
676
- doc.should have_xpath("#{ejb_facet_xpath}/configuration/ejbRoots/root[@url='file://$MODULE_DIR$/generated/main/java']")
677
- doc.should have_xpath("#{ejb_facet_xpath}/configuration/ejbRoots/root[@url='file://$MODULE_DIR$/generated/main/resources']")
678
- end
679
- end
680
-
681
- describe "using add_ejb_facet derived from main_source_directories" do
682
- before do
683
- write "src/main/resources2/WEB-INF/ejb-jar.xml"
684
- @foo = define "foo" do
685
- iml.main_source_directories << "src/main/resources2"
686
- iml.add_ejb_facet
687
- end
688
- invoke_generate_task
689
- end
690
-
691
- it "generates an ejb facet with appropriate deployment descriptors" do
692
- doc = xml_document(@foo._("foo.iml"))
693
- ejb_facet_xpath = ensure_facet_xpath(doc, 'ejb', 'EJB')
694
- deployment_descriptor_xpath = "#{ejb_facet_xpath}/configuration/descriptors/deploymentDescriptor"
695
- doc.should have_xpath("#{deployment_descriptor_xpath}[@name='ejb-jar.xml', url='file://$MODULE_DIR$/src/main/resources2/WEB-INF/ejb-jar.xml']")
696
- end
697
- end
698
-
699
- describe "using add_jruby_facet" do
700
- before do
701
-
702
- @foo = define "foo" do
703
- iml.add_jruby_facet
704
- end
705
- invoke_generate_task
706
- end
707
-
708
- it "generates a jruby facet with appropriate sdk" do
709
- doc = xml_document(@foo._("foo.iml"))
710
- jruby_facet_xpath = ensure_facet_xpath(doc, 'JRUBY', 'JRuby')
711
- doc.should have_xpath("#{jruby_facet_xpath}/configuration/JRUBY_FACET_CONFIG_ID[@NAME='JRUBY_SDK_NAME', VALUE='jruby-1.6.7.2']")
712
- end
713
-
714
- it "generates a jruby facet with appropriate paths" do
715
- doc = xml_document(@foo._("foo.iml"))
716
- jruby_facet_xpath = ensure_facet_xpath(doc, 'JRUBY', 'JRuby')
717
- prefix = "#{jruby_facet_xpath}/configuration"
718
- doc.should have_xpath("#{prefix}/LOAD_PATH[@number='0']")
719
- doc.should have_xpath("#{prefix}/I18N_FOLDERS[@number='0']")
720
- end
721
- end
722
-
723
- describe "using add_jruby_facet with .ruby-version specified" do
724
- before do
725
-
726
- write ".ruby-version", "jruby-1.7.2"
727
-
728
- @foo = define "foo" do
729
- iml.add_jruby_facet
730
- end
731
- invoke_generate_task
732
- end
733
-
734
- it "generates a jruby facet with appropriate sdk" do
735
- doc = xml_document(@foo._("foo.iml"))
736
- jruby_facet_xpath = ensure_facet_xpath(doc, 'JRUBY', 'JRuby')
737
- doc.should have_xpath("#{jruby_facet_xpath}/configuration/JRUBY_FACET_CONFIG_ID[@NAME='JRUBY_SDK_NAME', VALUE='rbenv: jruby-1.7.2']")
738
- end
739
-
740
- it "generates a jruby facet with appropriate paths" do
741
- doc = xml_document(@foo._("foo.iml"))
742
- jruby_facet_xpath = ensure_facet_xpath(doc, 'JRUBY', 'JRuby')
743
- prefix = "#{jruby_facet_xpath}/configuration"
744
- doc.should have_xpath("#{prefix}/LOAD_PATH[@number='0']")
745
- doc.should have_xpath("#{prefix}/I18N_FOLDERS[@number='0']")
746
- end
747
- end
748
-
749
- describe "with add_data_source" do
750
- before do
751
- artifact("org.postgresql:postgresql:jar:9.not-a-version") { |task| write task.name }
752
- @foo = define "foo" do
753
- ipr.add_data_source("Postgres",
754
- :driver => 'org.postgresql.Driver',
755
- :url => "jdbc:postgresql://127.0.0.1:5432/MyDb",
756
- :username => "MyDBUser",
757
- :password => "secreto",
758
- :dialect => "PostgreSQL",
759
- :classpath => ["org.postgresql:postgresql:jar:9.not-a-version"])
760
- end
761
- invoke_generate_task
762
- end
763
-
764
- it "generates a data source manager with specified data source" do
765
- doc = xml_document(@foo._("foo.ipr"))
766
- prefix_xpath = "/project/component[@name='DataSourceManagerImpl', @format='xml', @hash='3208837817']/data-source"
767
- doc.should have_nodes(prefix_xpath, 1)
768
- ds_path = "#{prefix_xpath}[@source='LOCAL', @name='Postgres']"
769
- doc.should have_xpath(ds_path)
770
- doc.should have_xpath("#{ds_path}/synchronize/text() = 'true'")
771
- doc.should have_xpath("#{ds_path}/jdbc-driver/text() = 'org.postgresql.Driver'")
772
- doc.should have_xpath("#{ds_path}/jdbc-url/text() = 'jdbc:postgresql://127.0.0.1:5432/MyDb'")
773
- doc.should have_xpath("#{ds_path}/user-name/text() = 'MyDBUser'")
774
- doc.should have_xpath("#{ds_path}/user-password/text() = 'dfd9dfcfdfc9dfd8dfcfdfdedfc5'")
775
- doc.should have_xpath("#{ds_path}/default-dialect/text() = 'PostgreSQL'")
776
- doc.should have_xpath("#{ds_path}/libraries/library/url/text() = '$MAVEN_REPOSITORY$/org/postgresql/postgresql/9.not-a-version/postgresql-9.not-a-version.jar'")
777
- end
778
- end
779
-
780
- describe "with add_postgres_data_source" do
781
- before do
782
- ENV["USER"] = "Bob"
783
- artifact("org.postgresql:postgresql:jar:9.2-1003-jdbc4") { |task| write task.name }
784
- @foo = define "foo" do
785
- ipr.add_postgres_data_source("Postgres", :database => 'MyDb')
786
- end
787
- invoke_generate_task
788
- end
789
-
790
- it "generates a data source manager with specified data source" do
791
- doc = xml_document(@foo._("foo.ipr"))
792
- prefix_xpath = "/project/component[@name='DataSourceManagerImpl', @format='xml', @hash='3208837817']/data-source"
793
- doc.should have_nodes(prefix_xpath, 1)
794
- ds_path = "#{prefix_xpath}[@source='LOCAL', @name='Postgres']"
795
- doc.should have_xpath(ds_path)
796
- doc.should have_xpath("#{ds_path}/synchronize/text() = 'true'")
797
- doc.should have_xpath("#{ds_path}/jdbc-driver/text() = 'org.postgresql.Driver'")
798
- doc.should have_xpath("#{ds_path}/jdbc-url/text() = 'jdbc:postgresql://127.0.0.1:5432/MyDb'")
799
- doc.should have_xpath("#{ds_path}/user-name/text() = 'Bob'")
800
- doc.should have_xpath("#{ds_path}/default-dialect/text() = 'PostgreSQL'")
801
- doc.should have_xpath("#{ds_path}/libraries/library/url/text() = '$MAVEN_REPOSITORY$/org/postgresql/postgresql/9.2-1003-jdbc4/postgresql-9.2-1003-jdbc4.jar'")
802
- end
803
- end
804
-
805
- describe "with add_sql_server_data_source" do
806
- before do
807
- ENV["USER"] = "Bob"
808
- artifact('net.sourceforge.jtds:jtds:jar:1.2.7') { |task| write task.name }
809
- @foo = define "foo" do
810
- ipr.add_sql_server_data_source("SqlServer", :database => 'MyDb')
811
- end
812
- invoke_generate_task
813
- end
814
-
815
- it "generates a data source manager with specified data source" do
816
- doc = xml_document(@foo._("foo.ipr"))
817
- prefix_xpath = "/project/component[@name='DataSourceManagerImpl', @format='xml', @hash='3208837817']/data-source"
818
- doc.should have_nodes(prefix_xpath, 1)
819
- ds_path = "#{prefix_xpath}[@source='LOCAL', @name='SqlServer']"
820
- doc.should have_xpath(ds_path)
821
-
822
- doc.should have_xpath("#{ds_path}/synchronize/text() = 'true'")
823
- doc.should have_xpath("#{ds_path}/jdbc-driver/text() = 'net.sourceforge.jtds.jdbc.Driver'")
824
- doc.should have_xpath("#{ds_path}/jdbc-url/text() = 'jdbc:jtds:sqlserver://127.0.0.1:1433/MyDb'")
825
- doc.should have_xpath("#{ds_path}/user-name/text() = 'Bob'")
826
- doc.should have_xpath("#{ds_path}/default-dialect/text() = 'TSQL'")
827
- doc.should have_xpath("#{ds_path}/libraries/library/url/text() = '$MAVEN_REPOSITORY$/net/sourceforge/jtds/1.2.7/jtds-1.2.7.jar'")
828
- end
829
- end
830
-
831
- describe "with artifacts added to root project" do
832
- before do
833
- @foo = define "foo" do
834
- ipr.add_artifact("MyFancy.jar", "jar") do |xml|
835
- xml.tag!('output-path', project._(:artifacts, "MyFancy.jar"))
836
- xml.element :id => "module-output", :name => "foo"
837
- end
838
- ipr.add_artifact("MyOtherFancy.jar", "jar") do |xml|
839
- xml.tag!('output-path', project._(:artifacts, "MyOtherFancy.jar"))
840
- xml.element :id => "module-output", :name => "foo"
841
- end
842
- end
843
- invoke_generate_task
844
- end
845
-
846
- it "generates an IPR with multiple jar artifacts" do
847
- doc = xml_document(@foo._("foo.ipr"))
848
- facet_xpath = "/project/component[@name='ArtifactManager']/artifact"
849
- doc.should have_nodes(facet_xpath, 2)
850
- doc.should have_xpath("#{facet_xpath}[@type='jar', @name='MyFancy.jar']")
851
- doc.should have_xpath("#{facet_xpath}[@type='jar', @name='MyOtherFancy.jar']")
852
- end
853
- end
854
-
855
- describe "that uses add_jar_artifact with no overrides" do
856
- before do
857
- write 'foo/bar/src/main/java/foo/Foo.java' # needed so that buildr will treat as a java project
858
- artifact('net.sourceforge.jtds:jtds:jar:1.2.7.XX') { |task| write task.name }
859
-
860
- @foo = define "foo" do
861
- project.version = '1.0'
862
- define "bar" do
863
- compile.with 'net.sourceforge.jtds:jtds:jar:1.2.7.XX'
864
- package :war
865
- end
866
- ipr.add_jar_artifact(project("bar"))
867
- end
868
- invoke_generate_task
869
- end
870
-
871
- it "generates an IPR with a jar artifact" do
872
- doc = xml_document(@foo._("foo.ipr"))
873
- base_xpath = "/project/component[@name='ArtifactManager']/artifact"
874
- facet_xpath = "#{base_xpath}[@type='jar' and @name='bar.jar' and @build-on-make='false']"
875
- doc.should have_xpath(facet_xpath)
876
-
877
- doc.should have_xpath("#{facet_xpath}/output-path/text() = $PROJECT_DIR$/artifacts/bar")
878
- doc.should have_xpath("#{facet_xpath}/root[@id='archive' and @name='bar.jar']/element[@id='module-output' and @name='bar']")
879
- end
880
- end
881
-
882
- describe "that uses add_jar_artifact with overrides" do
883
- before do
884
- write 'foo/bar/src/main/java/foo/Foo.java' # needed so that buildr will treat as a java project
885
- artifact('net.sourceforge.jtds:jtds:jar:1.2.7.XX') { |task| write task.name }
886
-
887
- @foo = define "foo" do
888
- project.version = '1.0'
889
- define "bar" do
890
- compile.with 'net.sourceforge.jtds:jtds:jar:1.2.7.XX'
891
- package :war
892
- end
893
- ipr.add_jar_artifact(project,
894
- :name => 'bar',
895
- :output_dir => _('bink'),
896
- :build_on_make => true,
897
- :ejb_module_names => ['x'],
898
- :jpa_module_names => ['p'],
899
- :dependencies => [project('bar')])
900
- end
901
- invoke_generate_task
902
- end
903
-
904
- it "generates an IPR with a jar artifact" do
905
- doc = xml_document(@foo._("foo.ipr"))
906
- base_xpath = "/project/component[@name='ArtifactManager']/artifact"
907
- facet_xpath = "#{base_xpath}[@type='jar' and @name='bar.jar' and @build-on-make='true']"
908
- doc.should have_xpath(facet_xpath)
909
-
910
- doc.should have_xpath("#{facet_xpath}/output-path/text() = $PROJECT_DIR$/bink")
911
- doc.should have_xpath("#{facet_xpath}/root[@id='archive' and @name='bar.jar']/element[@id='module-output' and @name='bar']")
912
- doc.should have_xpath("#{facet_xpath}/root[@id='archive' and @name='bar.jar']/element[@id='jpa-descriptors' and @facet='p/jpa/JPA']")
913
- doc.should have_xpath("#{facet_xpath}/root[@id='archive' and @name='bar.jar']/element[@id='javaee-facet-resources' and @facet='x/ejb/EJB']")
914
- end
915
- end
916
-
917
- describe "that uses add_exploded_ejb_artifact with overrides" do
918
- before do
919
- write 'foo/bar/src/main/java/foo/Foo.java' # needed so that buildr will treat as a java project
920
- artifact('net.sourceforge.jtds:jtds:jar:1.2.7.XX') { |task| write task.name }
921
-
922
- @foo = define "foo" do
923
- project.version = '1.0'
924
- define "bar" do
925
- compile.with 'net.sourceforge.jtds:jtds:jar:1.2.7.XX'
926
- package :jar
927
- end
928
- ipr.add_exploded_ejb_artifact(project("bar"),
929
- :ejb_module_names => ['x'],
930
- :jpa_module_names => ['p'])
931
- end
932
- invoke_generate_task
933
- end
934
-
935
- it "generates an IPR with an ejb artifact" do
936
- doc = xml_document(@foo._("foo.ipr"))
937
- base_xpath = "/project/component[@name='ArtifactManager']/artifact"
938
- facet_xpath = "#{base_xpath}[@type='exploded-ejb' and @name='bar' and @build-on-make='false']"
939
- doc.should have_xpath(facet_xpath)
940
- doc.should have_xpath("#{facet_xpath}/output-path/text() = $PROJECT_DIR$/artifacts/bar")
941
- doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='module-output' and @name='bar']")
942
- doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='jpa-descriptors' and @facet='p/jpa/JPA']")
943
- doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='javaee-facet-resources' and @facet='x/ejb/EJB']")
944
- end
945
- end
946
-
947
- describe "that uses add_exploded_ejb_artifact with no overrides" do
948
- before do
949
- write 'foo/bar/src/main/java/foo/Foo.java' # needed so that buildr will treat as a java project
950
- artifact('net.sourceforge.jtds:jtds:jar:1.2.7.XX') { |task| write task.name }
951
-
952
- @foo = define "foo" do
953
- project.version = '1.0'
954
- define "bar" do
955
- compile.with 'net.sourceforge.jtds:jtds:jar:1.2.7.XX'
956
- package :war
957
- end
958
- ipr.add_exploded_ejb_artifact(project("bar"))
959
- end
960
- invoke_generate_task
961
- end
962
-
963
- it "generates an IPR with an ejb artifact" do
964
- doc = xml_document(@foo._("foo.ipr"))
965
- base_xpath = "/project/component[@name='ArtifactManager']/artifact"
966
- facet_xpath = "#{base_xpath}[@type='exploded-ejb' and @name='bar' and @build-on-make='false']"
967
- doc.should have_xpath(facet_xpath)
968
-
969
- doc.should have_xpath("#{facet_xpath}/output-path/text() = $PROJECT_DIR$/artifacts/bar")
970
- doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='module-output' and @name='bar']")
971
- end
972
- end
973
-
974
-
975
- describe "that uses add_exploded_war_artifact with no overrides" do
976
- before do
977
- write 'foo/bar/src/main/java/foo/Foo.java' # needed so that buildr will treat as a java project
978
- artifact('net.sourceforge.jtds:jtds:jar:1.2.7.XX') { |task| write task.name }
979
-
980
- @foo = define "foo" do
981
- project.version = '1.0'
982
- define "bar" do
983
- compile.with 'net.sourceforge.jtds:jtds:jar:1.2.7.XX'
984
- package :war
985
- end
986
- ipr.add_exploded_war_artifact(project("bar"))
987
- end
988
- invoke_generate_task
989
- end
990
-
991
- it "generates an IPR with a war artifact" do
992
- doc = xml_document(@foo._("foo.ipr"))
993
- base_xpath = "/project/component[@name='ArtifactManager']/artifact"
994
- facet_xpath = "#{base_xpath}[@type='exploded-war' and @name='bar' and @build-on-make='false']"
995
- doc.should have_xpath(facet_xpath)
996
-
997
- doc.should have_xpath("#{facet_xpath}/output-path/text() = $PROJECT_DIR$/artifacts/bar")
998
- doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='directory' and @name='WEB-INF']/element[@id='directory', @name='classes']/element[@id='module-output' and @name='bar']")
999
- doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='directory' and @name='WEB-INF']/element[@id='directory', @name='lib']/element[@id='file-copy' and @path='$MAVEN_REPOSITORY$/net/sourceforge/jtds/jtds/1.2.7.XX/jtds-1.2.7.XX.jar']")
1000
- doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='javaee-facet-resources' and @facet='bar/web/Web']")
1001
- end
1002
- end
1003
-
1004
- describe "that uses add_exploded_war_artifact with overrides" do
1005
- before do
1006
- write 'foo/bar/src/main/java/foo/Foo.java' # needed so that buildr will treat as a java project
1007
- artifact('net.sourceforge.jtds:jtds:jar:1.2.7.XX') { |task| write task.name }
1008
-
1009
- @foo = define "foo" do
1010
- project.version = '1.0'
1011
- define "bar" do
1012
- compile.with 'net.sourceforge.jtds:jtds:jar:1.2.7.XX'
1013
- package :war
1014
- end
1015
- ipr.add_exploded_war_artifact(project,
1016
- :name => 'gar',
1017
- :war_module_names => ['x','y'],
1018
- :gwt_module_names => ['p','q'],
1019
- :artifacts => ['baz','biz'],
1020
- :dependencies => ['net.sourceforge.jtds:jtds:jar:1.2.7.XX', project('bar')])
1021
- end
1022
- invoke_generate_task
1023
- end
1024
-
1025
- it "generates an IPR with a war artifact" do
1026
- doc = xml_document(@foo._("foo.ipr"))
1027
- base_xpath = "/project/component[@name='ArtifactManager']/artifact"
1028
- facet_xpath = "#{base_xpath}[@type='exploded-war' @name='MyFancy.jar', @build-on-make='false']"
1029
- doc.should have_xpath(facet_xpath)
1030
-
1031
- doc.should have_xpath("#{facet_xpath}/output-path/text() = $PROJECT_DIR$/artifacts/gar")
1032
- doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='directory' and @name='WEB-INF']/element[@id='directory', @name='classes']/element[@id='module-output' and @name='bar']")
1033
- doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='directory' and @name='WEB-INF']/element[@id='directory', @name='lib']/element[@id='file-copy' and @path='$MAVEN_REPOSITORY$/net/sourceforge/jtds/jtds/1.2.7.XX/jtds-1.2.7.XX.jar']")
1034
- doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='javaee-facet-resources' and @facet='x/web/Web']")
1035
- doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='javaee-facet-resources' and @facet='y/web/Web']")
1036
- doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='gwt-compiler-output' and @facet='p/gwt/GWT']")
1037
- doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='gwt-compiler-output' and @facet='q/gwt/GWT']")
1038
- doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='directory' and @name='WEB-INF']/element[@id='directory', @name='lib']/element[@id='artifact' and @artifact-name='baz.jar']")
1039
- doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='directory' and @name='WEB-INF']/element[@id='directory', @name='lib']/element[@id='artifact' and @artifact-name='biz.jar']")
1040
- end
1041
- end
1042
-
1043
- describe "with configurations added to root project" do
1044
- before do
1045
- @foo = define "foo" do
1046
- ipr.add_configuration("Run Contacts.html", "GWT.ConfigurationType", "GWT Configuration") do |xml|
1047
- xml.module(:name => project.iml.id)
1048
- xml.option(:name => "RUN_PAGE", :value => "Contacts.html")
1049
- xml.option(:name => "compilerParameters", :value => "-draftCompile -localWorkers 2")
1050
- xml.option(:name => "compilerMaxHeapSize", :value => "512")
1051
-
1052
- xml.RunnerSettings(:RunnerId => "Run")
1053
- xml.ConfigurationWrapper(:RunnerId => "Run")
1054
- xml.tag! :method
1055
- end
1056
- ipr.add_configuration("Run Planner.html", "GWT.ConfigurationType", "GWT Configuration") do |xml|
1057
- xml.module(:name => project.iml.id)
1058
- xml.option(:name => "RUN_PAGE", :value => "Planner.html")
1059
- xml.option(:name => "compilerParameters", :value => "-draftCompile -localWorkers 2")
1060
- xml.option(:name => "compilerMaxHeapSize", :value => "512")
1061
-
1062
- xml.RunnerSettings(:RunnerId => "Run")
1063
- xml.ConfigurationWrapper(:RunnerId => "Run")
1064
- xml.tag! :method
1065
- end
1066
- end
1067
- invoke_generate_task
1068
- end
1069
-
1070
- it "generates an IPR with multiple configurations" do
1071
- doc = xml_document(@foo._("foo.ipr"))
1072
- facet_xpath = "/project/component[@name='ProjectRunConfigurationManager']/configuration"
1073
- doc.should have_nodes(facet_xpath, 2)
1074
- doc.should have_xpath("#{facet_xpath}[@type='GWT.ConfigurationType', @name='Run Contacts.html']")
1075
- doc.should have_xpath("#{facet_xpath}[@type='GWT.ConfigurationType', @name='Run Planner.html']")
1076
- end
1077
- end
1078
-
1079
- describe "with default configuration added to root project" do
1080
- before do
1081
- @foo = define "foo" do
1082
- ipr.add_default_configuration("GWT.ConfigurationType", "GWT Configuration") do |xml|
1083
- xml.module(:name => project.iml.id)
1084
- xml.option(:name => "RUN_PAGE", :value => "Planner.html")
1085
- xml.option(:name => "compilerParameters", :value => "-draftCompile -localWorkers 2")
1086
- xml.option(:name => "compilerMaxHeapSize", :value => "512")
1087
-
1088
- xml.RunnerSettings(:RunnerId => "Run")
1089
- xml.ConfigurationWrapper(:RunnerId => "Run")
1090
- xml.tag! :method
1091
- end
1092
- end
1093
- invoke_generate_task
1094
- end
1095
-
1096
- it "generates an IPR with default configuration" do
1097
- doc = xml_document(@foo._("foo.ipr"))
1098
- facet_xpath = "/project/component[@name='ProjectRunConfigurationManager']/configuration"
1099
- doc.should have_nodes(facet_xpath, 1)
1100
- doc.should have_xpath("#{facet_xpath}[@type='GWT.ConfigurationType' AND @factoryName='GWT Configuration' AND @default='true']")
1101
- end
1102
- end
1103
-
1104
- describe "with iml.group specified" do
1105
- before do
1106
- @foo = define "foo" do
1107
- iml.group = true
1108
- define 'bar' do
1109
- define 'baz' do
1110
-
1111
- end
1112
- end
1113
- define 'rab' do
1114
- iml.group = "MyGroup"
1115
- end
1116
- end
1117
- invoke_generate_task
1118
- end
1119
-
1120
- it "generate an IPR with correct group references" do
1121
- doc = xml_document(@foo._("foo.ipr"))
1122
- doc.should have_nodes("#{xpath_to_module}", 4)
1123
- module_ref = "$PROJECT_DIR$/foo.iml"
1124
- doc.should have_xpath("#{xpath_to_module}[@fileurl='file://#{module_ref}', @filepath='#{module_ref}']")
1125
- module_ref = "$PROJECT_DIR$/rab/rab.iml"
1126
- doc.should have_xpath("#{xpath_to_module}[@fileurl='file://#{module_ref}', @filepath='#{module_ref}' @group = 'MyGroup']")
1127
- module_ref = "$PROJECT_DIR$/bar/bar.iml"
1128
- doc.should have_xpath("#{xpath_to_module}[@fileurl='file://#{module_ref}', @filepath='#{module_ref}' @group = 'foo']")
1129
- module_ref = "$PROJECT_DIR$/bar/baz/baz.iml"
1130
- doc.should have_xpath("#{xpath_to_module}[@fileurl='file://#{module_ref}', @filepath='#{module_ref}' @group = 'foo/bar']")
1131
- end
1132
- end
1133
-
1134
- describe "with a single project definition" do
1135
- describe "and default naming" do
1136
- before do
1137
- @foo = define "foo"
1138
- invoke_generate_task
1139
- end
1140
-
1141
- it "generates a single IPR" do
1142
- Dir[@foo._("**/*.ipr")].should have(1).entry
1143
- end
1144
-
1145
- it "generate an IPR in the root directory" do
1146
- File.should be_exist(@foo._("foo.ipr"))
1147
- end
1148
-
1149
- it "generates a single IML" do
1150
- Dir[@foo._("**/*.iml")].should have(1).entry
1151
- end
1152
-
1153
- it "generates an IML in the root directory" do
1154
- File.should be_exist(@foo._("foo.iml"))
1155
- end
1156
-
1157
- it "generate an IPR with the reference to correct module file" do
1158
- File.should be_exist(@foo._("foo.ipr"))
1159
- doc = xml_document(@foo._("foo.ipr"))
1160
- module_ref = "$PROJECT_DIR$/foo.iml"
1161
- doc.should have_nodes("#{xpath_to_module}[@fileurl='file://#{module_ref}', @filepath='#{module_ref}']", 1)
1162
- end
1163
- end
1164
-
1165
- describe "with no_iml generation disabled" do
1166
- before do
1167
- @foo = define "foo" do
1168
- project.no_iml
1169
- end
1170
- invoke_generate_task
1171
- end
1172
-
1173
- it "generates no IML" do
1174
- Dir[@foo._("**/*.iml")].should have(0).entry
1175
- end
1176
-
1177
- it "generate an IPR with no references" do
1178
- File.should be_exist(@foo._("foo.ipr"))
1179
- doc = xml_document(@foo._("foo.ipr"))
1180
- doc.should have_nodes("#{xpath_to_module}", 0)
1181
- end
1182
- end
1183
-
1184
- describe "with ipr generation disabled" do
1185
- before do
1186
- @foo = define "foo" do
1187
- project.no_ipr
1188
- end
1189
- invoke_generate_task
1190
- end
1191
-
1192
- it "generates a single IML" do
1193
- Dir[@foo._("**/*.iml")].should have(1).entry
1194
- end
1195
-
1196
- it "generate no IPR" do
1197
- File.should_not be_exist(@foo._("foo.ipr"))
1198
- end
1199
- end
1200
-
1201
- describe "and id overrides" do
1202
- before do
1203
- @foo = define "foo" do
1204
- ipr.id = 'fooble'
1205
- iml.id = 'feap'
1206
- define "bar" do
1207
- iml.id = "baz"
1208
- end
1209
- end
1210
- invoke_generate_task
1211
- end
1212
-
1213
- it "generate an IPR in the root directory" do
1214
- File.should be_exist(@foo._("fooble.ipr"))
1215
- end
1216
-
1217
- it "generates an IML in the root directory" do
1218
- File.should be_exist(@foo._("feap.iml"))
1219
- end
1220
-
1221
- it "generates an IML in the subproject directory" do
1222
- File.should be_exist(@foo._("bar/baz.iml"))
1223
- end
1224
-
1225
- it "generate an IPR with the reference to correct module file" do
1226
- File.should be_exist(@foo._("fooble.ipr"))
1227
- doc = xml_document(@foo._("fooble.ipr"))
1228
- module_ref = "$PROJECT_DIR$/feap.iml"
1229
- doc.should have_nodes("#{xpath_to_module}[@fileurl='file://#{module_ref}', @filepath='#{module_ref}']", 1)
1230
- end
1231
- end
1232
-
1233
- describe "and a suffix defined" do
1234
- before do
1235
- @foo = define "foo" do
1236
- ipr.suffix = '-ipr-suffix'
1237
- iml.suffix = '-iml-suffix'
1238
- end
1239
- invoke_generate_task
1240
- end
1241
-
1242
- it "generate an IPR in the root directory" do
1243
- File.should be_exist(@foo._("foo-ipr-suffix.ipr"))
1244
- end
1245
-
1246
- it "generates an IML in the root directory" do
1247
- File.should be_exist(@foo._("foo-iml-suffix.iml"))
1248
- end
1249
-
1250
- it "generate an IPR with the reference to correct module file" do
1251
- File.should be_exist(@foo._("foo-ipr-suffix.ipr"))
1252
- doc = xml_document(@foo._("foo-ipr-suffix.ipr"))
1253
- doc.should have_nodes("#{xpath_to_module}", 1)
1254
- module_ref = "$PROJECT_DIR$/foo-iml-suffix.iml"
1255
- doc.should have_nodes("#{xpath_to_module}[@fileurl='file://#{module_ref}', @filepath='#{module_ref}']", 1)
1256
- end
1257
- end
1258
- end
1259
-
1260
- describe "with a subproject" do
1261
- before do
1262
- @foo = define "foo" do
1263
- define 'bar'
1264
- end
1265
- invoke_generate_task
1266
- end
1267
-
1268
- it "creates the subproject directory" do
1269
- File.should be_exist(@foo._("bar"))
1270
- end
1271
-
1272
- it "generates an IML in the subproject directory" do
1273
- File.should be_exist(@foo._("bar/bar.iml"))
1274
- end
1275
-
1276
- it "generate an IPR with the reference to correct module file" do
1277
- File.should be_exist(@foo._("foo.ipr"))
1278
- doc = xml_document(@foo._("foo.ipr"))
1279
- doc.should have_nodes("#{xpath_to_module}", 2)
1280
- module_ref = "$PROJECT_DIR$/foo.iml"
1281
- doc.should have_nodes("#{xpath_to_module}[@fileurl='file://#{module_ref}', @filepath='#{module_ref}']", 1)
1282
- module_ref = "$PROJECT_DIR$/bar/bar.iml"
1283
- doc.should have_nodes("#{xpath_to_module}[@fileurl='file://#{module_ref}', @filepath='#{module_ref}']", 1)
1284
- end
1285
- end
1286
-
1287
- describe "with base_dir specified" do
1288
- before do
1289
- @foo = define "foo" do
1290
- define('bar', :base_dir => 'fe') do
1291
- define('baz', :base_dir => 'fi') do
1292
- define('foe')
1293
- end
1294
- define('fum')
1295
- end
1296
- end
1297
- invoke_generate_task
1298
- end
1299
-
1300
- it "generates a subproject IML in the specified directory" do
1301
- File.should be_exist(@foo._("fe/bar.iml"))
1302
- end
1303
-
1304
- it "generates a sub-subproject IML in the specified directory" do
1305
- File.should be_exist(@foo._("fi/baz.iml"))
1306
- end
1307
-
1308
- it "generates a sub-sub-subproject IML that inherits the specified directory" do
1309
- File.should be_exist(@foo._("fi/foe/foe.iml"))
1310
- end
1311
-
1312
- it "generates a sub-subproject IML that inherits the specified directory" do
1313
- File.should be_exist(@foo._("fe/fum/fum.iml"))
1314
- end
1315
-
1316
- it "generate an IPR with the references to correct module files" do
1317
- doc = xml_document(@foo._("foo.ipr"))
1318
- doc.should have_nodes("#{xpath_to_module}", 5)
1319
- ["foo.iml", "fe/bar.iml", "fi/baz.iml", "fi/foe/foe.iml", "fe/fum/fum.iml"].each do |module_ref|
1320
- doc.should have_nodes("#{xpath_to_module}[@fileurl='file://$PROJECT_DIR$/#{module_ref}', @filepath='$PROJECT_DIR$/#{module_ref}']", 1)
1321
- end
1322
- end
1323
- end
1324
-
1325
- describe "with extensive intermodule dependencies" do
1326
- before do
1327
- mkdir_p 'foo/src/main/resources'
1328
- mkdir_p 'foo/src/main/java/foo'
1329
- touch 'foo/src/main/java/foo/Foo.java' # needed so that buildr will treat as a java project
1330
- artifact('group:id:jar:1.0') { |t| write t.to_s }
1331
- define "root" do
1332
- repositories.remote << 'http://mirrors.ibiblio.org/pub/mirrors/maven2/'
1333
- project.version = "2.5.2"
1334
- define 'foo' do
1335
- resources.from _(:source, :main, :resources)
1336
- compile.with 'group:id:jar:1.0'
1337
- test.using(:junit)
1338
- package(:jar)
1339
- end
1340
-
1341
- define 'bar' do
1342
- # internally transitive dependencies on foo, both runtime and test
1343
- compile.with project('root:foo'), project('root:foo').compile.dependencies
1344
- test.using(:junit).with [project('root:foo').test.compile.target,
1345
- project('root:foo').test.resources.target,
1346
- project('root:foo').test.compile.dependencies].compact
1347
- package(:jar)
1348
- end
1349
- end
1350
-
1351
- invoke_generate_task
1352
- @bar_iml = xml_document(project('root:bar')._('bar.iml'))
1353
- @bar_lib_urls = @bar_iml.get_elements("//orderEntry[@type='module-library']/library/CLASSES/root").collect do |root|
1354
- root.attribute('url').to_s
1355
- end
1356
- end
1357
-
1358
- it "depends on the associated module exactly once" do
1359
- @bar_iml.should have_nodes("//orderEntry[@type='module', @module-name='foo', @exported=""]", 1)
1360
- end
1361
-
1362
- it "does not depend on the other project's packaged JAR" do
1363
- @bar_lib_urls.grep(%r{#{project('root:foo').packages.first}}).should == []
1364
- end
1365
-
1366
- it "does not depend on the the other project's target/classes directory" do
1367
- @bar_lib_urls.grep(%r{foo/target/classes}).should == []
1368
- end
1369
-
1370
- it "does not depend on the the other project's target/resources directory" do
1371
- @bar_lib_urls.grep(%r{file://\$MODULE_DIR\$/../foo/target/resources}).size.should == 0
1372
- end
1373
- end
1374
-
1375
- describe "with a single project definition" do
1376
- before do
1377
- @foo = define "foo"
1378
- end
1379
-
1380
- it "informs the user about generating IPR" do
1381
- lambda { invoke_generate_task }.should show_info(/Writing (.+)\/foo\.ipr/)
1382
- end
1383
-
1384
- it "informs the user about generating IML" do
1385
- lambda { invoke_generate_task }.should show_info(/Writing (.+)\/foo\.iml/)
1386
- end
1387
- end
1388
- describe "with a subproject" do
1389
- before do
1390
- @foo = define "foo" do
1391
- define 'bar'
1392
- end
1393
- end
1394
-
1395
- it "informs the user about generating subporoject IML" do
1396
- lambda { invoke_generate_task }.should show_info(/Writing (.+)\/bar\/bar\.iml/)
1397
- end
1398
- end
1399
-
1400
- describe "with compile.options.source = '1.6'" do
1401
-
1402
- before do
1403
- @foo = define "foo" do
1404
- compile.options.source = '1.5'
1405
- end
1406
- invoke_generate_task
1407
- end
1408
-
1409
- it "generate an ProjectRootManager with 1.5 jdk specified" do
1410
- #raise File.read(@foo._("foo.ipr"))
1411
- xml_document(@foo._("foo.ipr")).
1412
- should have_xpath("/project/component[@name='ProjectRootManager' and @project-jdk-name = '1.5' and @languageLevel = 'JDK_1_5']")
1413
- end
1414
-
1415
- it "generates a ProjectDetails component with the projectName option set" do
1416
- xml_document(@foo._("foo.ipr")).
1417
- should have_xpath("/project/component[@name='ProjectDetails']/option[@name = 'projectName' and @value = 'foo']")
1418
- end
1419
- end
1420
-
1421
- describe "with compile.options.source = '1.6'" do
1422
- before do
1423
- @foo = define "foo" do
1424
- compile.options.source = '1.6'
1425
- end
1426
- invoke_generate_task
1427
- end
1428
-
1429
- it "generate an ProjectRootManager with 1.6 jdk specified" do
1430
- xml_document(@foo._("foo.ipr")).
1431
- should have_xpath("/project/component[@name='ProjectRootManager' and @project-jdk-name = '1.6' and @languageLevel = 'JDK_1_6']")
1432
- end
1433
- end
1434
-
1435
- describe "with iml.skip_content! specified" do
1436
- before do
1437
- @foo = define "foo" do
1438
- iml.skip_content!
1439
- end
1440
- invoke_generate_task
1441
- end
1442
-
1443
- it "generate an IML with no content section" do
1444
- doc = xml_document(@foo._(root_module_filename(@foo)))
1445
- doc.should_not have_xpath("/module/component[@name='NewModuleRootManager']/content")
1446
- end
1447
- end
1448
-
1449
- describe "with iml.skip_content! not specified and standard layout" do
1450
- before do
1451
- @foo = define "foo" do
1452
- end
1453
- invoke_generate_task
1454
- end
1455
-
1456
- it "generate an IML with content section" do
1457
- root_module_xml(@foo).should have_xpath("/module/component[@name='NewModuleRootManager']/content")
1458
- end
1459
-
1460
- it "generate an exclude in content section for reports" do
1461
- root_module_xml(@foo).should have_xpath("/module/component[@name='NewModuleRootManager']/content/excludeFolder[@url='file://$MODULE_DIR$/reports']")
1462
- end
1463
-
1464
- it "generate an exclude in content section for target" do
1465
- root_module_xml(@foo).should have_xpath("/module/component[@name='NewModuleRootManager']/content/excludeFolder[@url='file://$MODULE_DIR$/target']")
1466
- end
1467
- end
1468
-
1469
- describe "with subprojects" do
1470
- before do
1471
- @foo = define "foo" do
1472
- define "bar" do
1473
- compile.from _(:source, :main, :bar)
1474
- end
1475
- end
1476
- invoke_generate_task
1477
- @bar_doc = xml_document(project('foo:bar')._('bar.iml'))
1478
- end
1479
-
1480
- it "generates the correct source directories" do
1481
- @bar_doc.should have_xpath("//content/sourceFolder[@url='file://$MODULE_DIR$/src/main/bar']")
1482
- end
1483
-
1484
- it "generates the correct exclude directories" do
1485
- @bar_doc.should have_xpath("//content/excludeFolder[@url='file://$MODULE_DIR$/target']")
1486
- end
1487
- end
1488
-
1489
- describe "with overrides" do
1490
- before do
1491
- @foo = define "foo" do
1492
- compile.from _(:source, :main, :bar)
1493
- iml.main_source_directories << _(:source, :main, :baz)
1494
- iml.test_source_directories << _(:source, :test, :foo)
1495
- end
1496
- invoke_generate_task
1497
- end
1498
-
1499
- it "generates the correct main source directories" do
1500
- root_module_xml(@foo).should have_xpath("//content/sourceFolder[@url='file://$MODULE_DIR$/src/main/baz' and @isTestSource='false']")
1501
- end
1502
-
1503
- it "generates the correct test source directories" do
1504
- root_module_xml(@foo).should have_xpath("//content/sourceFolder[@url='file://$MODULE_DIR$/src/test/foo' and @isTestSource='true']")
1505
- end
1506
- end
1507
-
1508
- describe "with report dir outside content" do
1509
- before do
1510
- layout = Layout::Default.new
1511
- layout[:reports] = "../reports"
1512
-
1513
- @foo = define "foo", :layout => layout do
1514
- end
1515
- invoke_generate_task
1516
- end
1517
-
1518
- it "generate an exclude in content section for target" do
1519
- root_module_xml(@foo).should have_xpath("/module/component[@name='NewModuleRootManager']/content/excludeFolder[@url='file://$MODULE_DIR$/target']")
1520
- end
1521
-
1522
- it "generates an content section without an exclude for report dir" do
1523
- root_module_xml(@foo).should have_nodes("/module/component[@name='NewModuleRootManager']/content/excludeFolder", 1)
1524
- end
1525
- end
1526
-
1527
- describe "with target dir outside content" do
1528
- before do
1529
- layout = Layout::Default.new
1530
- layout[:target] = "../target"
1531
- layout[:target, :main] = "../target"
1532
-
1533
- @foo = define "foo", :layout => layout do
1534
- end
1535
- invoke_generate_task
1536
- end
1537
-
1538
- it "generate an exclude in content section for reports" do
1539
- root_module_xml(@foo).should have_xpath("/module/component[@name='NewModuleRootManager']/content/excludeFolder[@url='file://$MODULE_DIR$/reports']")
1540
- end
1541
-
1542
- it "generates an content section without an exclude for target dir" do
1543
- root_module_xml(@foo).should have_nodes("/module/component[@name='NewModuleRootManager']/content/excludeFolder", 1)
1544
- end
1545
- end
1546
-
1547
- describe "templates" do
1548
-
1549
- def ipr_template
1550
- return <<PROJECT_XML
1551
- <?xml version="1.0" encoding="UTF-8"?>
1552
- <project version="4">
1553
- <component name="SvnBranchConfigurationManager">
1554
- <option name="mySupportsUserInfoFilter" value="false" />
1555
- </component>
1556
- </project>
1557
- PROJECT_XML
1558
- end
1559
-
1560
- def ipr_existing
1561
- return <<PROJECT_XML
1562
- <?xml version="1.0" encoding="UTF-8"?>
1563
- <project version="4">
1564
- <component name="AntConfiguration">
1565
- <defaultAnt bundledAnt="true" />
1566
- </component>
1567
- <component name="SvnBranchConfigurationManager">
1568
- <option name="mySupportsUserInfoFilter" value="true" />
1569
- </component>
1570
- <component name="ProjectModuleManager">
1571
- <modules>
1572
- <module fileurl="file://$PROJECT_DIR$/existing.iml" filepath="$PROJECT_DIR$/existing.iml" />
1573
- </modules>
1574
- </component>
1575
- </project>
1576
- PROJECT_XML
1577
- end
1578
-
1579
- def ipr_from_template_xpath
1580
- "/project/component[@name='SvnBranchConfigurationManager']/option[@name = 'mySupportsUserInfoFilter' and @value = 'false']"
1581
- end
1582
-
1583
- def ipr_from_existing_xpath
1584
- "/project/component[@name='AntConfiguration']"
1585
- end
1586
-
1587
- def ipr_from_existing_shadowing_template_xpath
1588
- "/project/component[@name='SvnBranchConfigurationManager']/option[@name = 'mySupportsUserInfoFilter' and @value = 'true']"
1589
- end
1590
-
1591
- def ipr_from_existing_shadowing_generated_xpath
1592
- "/project/component[@name='ProjectModuleManager']/modules/module[@fileurl = 'file://$PROJECT_DIR$/existing.iml']"
1593
- end
1594
-
1595
- def ipr_from_generated_xpath
1596
- "/project/component[@name='ProjectModuleManager']/modules/module[@fileurl = 'file://$PROJECT_DIR$/foo.iml']"
1597
- end
1598
-
1599
- def iml_template
1600
- return <<PROJECT_XML
1601
- <?xml version="1.0" encoding="UTF-8"?>
1602
- <module type="JAVA_MODULE" version="4">
1603
- <component name="FacetManager">
1604
- <facet type="JRUBY" name="JRuby">
1605
- <configuration number="0">
1606
- <JRUBY_FACET_CONFIG_ID NAME="JRUBY_SDK_NAME" VALUE="JRuby SDK 1.4.0RC1" />
1607
- </configuration>
1608
- </facet>
1609
- </component>
1610
- </module>
1611
- PROJECT_XML
1612
- end
1613
-
1614
- def iml_existing
1615
- return <<PROJECT_XML
1616
- <?xml version="1.0" encoding="UTF-8"?>
1617
- <module type="JAVA_MODULE" version="4">
1618
- <component name="FunkyPlugin"/>
1619
- <component name="FacetManager">
1620
- <facet type="SCALA" name="Scala"/>
1621
- </component>
1622
- <component name="NewModuleRootManager" inherit-compiler-output="true">
1623
- <exclude-output />
1624
- <content url="file://$MODULE_DIR$"/>
1625
- <orderEntry type="inheritedJdk" />
1626
- <orderEntry type="sourceFolder" forTests="false" />
1627
- <orderEntry type="module" module-name="buildr-bnd" exported="" />
1628
- </component>
1629
- </module>
1630
- PROJECT_XML
1631
- end
1632
-
1633
- def iml_from_template_xpath
1634
- "/module/component[@name='FacetManager']/facet[@type = 'JRUBY']"
1635
- end
1636
-
1637
- def iml_from_existing_xpath
1638
- "/module/component[@name='FunkyPlugin']"
1639
- end
1640
-
1641
- def iml_from_existing_shadowing_template_xpath
1642
- "/module/component[@name='FacetManager']/facet[@type = 'SCALA']"
1643
- end
1644
-
1645
- def iml_from_existing_shadowing_generated_xpath
1646
- "/module/component[@name='NewModuleRootManager']/orderEntry[@module-name = 'buildr-bnd']"
1647
- end
1648
-
1649
- def iml_from_generated_xpath
1650
- "/module/component[@name='NewModuleRootManager']/orderEntry[@type = 'module-library']"
1651
- end
1652
-
1653
- describe "with existing project files" do
1654
- before do
1655
- write "foo.ipr", ipr_existing
1656
- write "foo.iml", iml_existing
1657
- artifact('group:id:jar:1.0') { |t| write t.to_s }
1658
- @foo = define "foo" do
1659
- ipr.template = nil
1660
- iml.template = nil
1661
- compile.with 'group:id:jar:1.0'
1662
- end
1663
- invoke_generate_task
1664
- end
1665
-
1666
- it "replaces ProjectModuleManager component in existing ipr file" do
1667
- xml_document(@foo._("foo.ipr")).should have_xpath(ipr_from_generated_xpath)
1668
- xml_document(@foo._("foo.ipr")).should_not have_xpath(ipr_from_existing_shadowing_generated_xpath)
1669
- end
1670
-
1671
- it "merges component in existing ipr file" do
1672
- xml_document(@foo._("foo.ipr")).should have_xpath(ipr_from_existing_xpath)
1673
- end
1674
-
1675
- def iml_from_generated_xpath
1676
- "/module/component[@name='NewModuleRootManager']/orderEntry[@type = 'module-library']"
1677
- end
1678
-
1679
- it "replaces NewModuleRootManager component in existing iml file" do
1680
- xml_document(@foo._("foo.iml")).should have_xpath(iml_from_generated_xpath)
1681
- xml_document(@foo._("foo.iml")).should_not have_xpath(iml_from_existing_shadowing_generated_xpath)
1682
- end
1683
-
1684
- it "merges component in existing iml file" do
1685
- xml_document(@foo._("foo.iml")).should have_xpath(iml_from_existing_xpath)
1686
- end
1687
- end
1688
-
1689
- describe "with an iml template" do
1690
- before do
1691
- write "module.template.iml", iml_template
1692
- artifact('group:id:jar:1.0') { |t| write t.to_s }
1693
- @foo = define "foo" do
1694
- ipr.template = nil
1695
- iml.template = "module.template.iml"
1696
- compile.with 'group:id:jar:1.0'
1697
- end
1698
- invoke_generate_task
1699
- end
1700
-
1701
- it "replaces generated components" do
1702
- xml_document(@foo._("foo.iml")).should have_xpath(iml_from_generated_xpath)
1703
- end
1704
-
1705
- it "merges component in iml template" do
1706
- xml_document(@foo._("foo.iml")).should have_xpath(iml_from_template_xpath)
1707
- end
1708
- end
1709
-
1710
- describe "with an iml template and existing iml" do
1711
- before do
1712
- write "module.template.iml", iml_template
1713
- write "foo.iml", iml_existing
1714
- artifact('group:id:jar:1.0') { |t| write t.to_s }
1715
- @foo = define "foo" do
1716
- ipr.template = nil
1717
- iml.template = "module.template.iml"
1718
- compile.with 'group:id:jar:1.0'
1719
- end
1720
- invoke_generate_task
1721
- end
1722
-
1723
- it "replaces generated components" do
1724
- xml_document(@foo._("foo.iml")).should have_xpath(iml_from_generated_xpath)
1725
- end
1726
-
1727
- it "merges component in iml template" do
1728
- xml_document(@foo._("foo.iml")).should have_xpath(iml_from_template_xpath)
1729
- end
1730
-
1731
- it "merges components not in iml template and not generated by task" do
1732
- xml_document(@foo._("foo.iml")).should have_xpath(iml_from_existing_xpath)
1733
- xml_document(@foo._("foo.iml")).should_not have_xpath(iml_from_existing_shadowing_template_xpath)
1734
- xml_document(@foo._("foo.iml")).should_not have_xpath(iml_from_existing_shadowing_generated_xpath)
1735
- end
1736
- end
1737
-
1738
- describe "with an ipr template" do
1739
- before do
1740
- write "project.template.iml", ipr_template
1741
- artifact('group:id:jar:1.0') { |t| write t.to_s }
1742
- @foo = define "foo" do
1743
- ipr.template = "project.template.iml"
1744
- iml.template = nil
1745
- compile.with 'group:id:jar:1.0'
1746
- end
1747
- invoke_generate_task
1748
- end
1749
-
1750
- it "replaces generated component in ipr template" do
1751
- xml_document(@foo._("foo.ipr")).should have_xpath(ipr_from_generated_xpath)
1752
- end
1753
-
1754
- it "merges component in ipr template" do
1755
- xml_document(@foo._("foo.ipr")).should have_xpath(ipr_from_template_xpath)
1756
- end
1757
- end
1758
-
1759
- describe "with an ipr template and existing ipr" do
1760
- before do
1761
- write "project.template.iml", ipr_template
1762
- write "foo.ipr", ipr_existing
1763
- artifact('group:id:jar:1.0') { |t| write t.to_s }
1764
- @foo = define "foo" do
1765
- ipr.template = "project.template.iml"
1766
- iml.template = nil
1767
- compile.with 'group:id:jar:1.0'
1768
- end
1769
- invoke_generate_task
1770
- end
1771
-
1772
- it "replaces generated component in ipr template" do
1773
- xml_document(@foo._("foo.ipr")).should have_xpath(ipr_from_generated_xpath)
1774
- end
1775
-
1776
- it "merges component in ipr template" do
1777
- xml_document(@foo._("foo.ipr")).should have_xpath(ipr_from_template_xpath)
1778
- end
1779
-
1780
- it "merges components not in ipr template and not generated by task" do
1781
- xml_document(@foo._("foo.ipr")).should have_xpath(ipr_from_existing_xpath)
1782
- xml_document(@foo._("foo.ipr")).should_not have_xpath(ipr_from_existing_shadowing_generated_xpath)
1783
- xml_document(@foo._("foo.ipr")).should_not have_xpath(ipr_from_existing_shadowing_template_xpath)
1784
- end
1785
- end
1786
- end
1787
- end
1788
-
1789
- describe "Buildr::IntellijIdea::IdeaModule" do
1790
-
1791
- describe "with no settings" do
1792
- before do
1793
- @foo = define "foo"
1794
- end
1795
-
1796
- it "has correct default iml.type setting" do
1797
- @foo.iml.type.should == "JAVA_MODULE"
1798
- end
1799
-
1800
- it "has correct default iml.local_repository_env_override setting" do
1801
- @foo.iml.local_repository_env_override.should == "MAVEN_REPOSITORY"
1802
- end
1803
- end
1804
-
1805
- describe "settings inherited in subprojects" do
1806
- before do
1807
- mkdir_p 'bar'
1808
- @foo = define "foo" do
1809
- iml.type = "FOO_MODULE_TYPE"
1810
- define 'bar'
1811
- end
1812
- invoke_generate_task
1813
- end
1814
-
1815
- it "generates root IML with specified type" do
1816
- module_file = root_module_filename(@foo)
1817
- File.should be_exist(module_file)
1818
- File.read(module_file).should =~ /FOO_MODULE_TYPE/
1819
- end
1820
-
1821
- it "generates subproject IML with inherited type" do
1822
- module_file = subproject_module_filename(@foo, "bar")
1823
- File.should be_exist(module_file)
1824
- File.read(module_file).should =~ /FOO_MODULE_TYPE/
1825
- end
1826
-
1827
- end
1828
-
1829
- describe "with local_repository_env_override = nil" do
1830
- if Buildr::Util.win_os?
1831
- describe "base_directory on different drive on windows" do
1832
- before do
1833
- @foo = define "foo", :base_dir => "C:/bar" do
1834
- iml.local_repository_env_override = nil
1835
- end
1836
- end
1837
-
1838
- it "generates relative paths correctly" do
1839
- @foo.iml.send(:resolve_path, "E:/foo").should eql('E:/foo')
1840
- end
1841
- end
1842
-
1843
- describe "base_directory on same drive on windows" do
1844
- before do
1845
- @foo = define "foo", :base_dir => "C:/bar" do
1846
- iml.local_repository_env_override = nil
1847
- end
1848
- end
1849
-
1850
- it "generates relative paths correctly" do
1851
- @foo.iml.send(:resolve_path, "C:/foo").should eql('$MODULE_DIR$/../foo')
1852
- end
1853
- end
1854
- end
1855
- end
1856
- end
1857
-
1858
- describe "project extension" do
1859
- it "provides an 'idea' task" do
1860
- Rake::Task.tasks.detect { |task| task.to_s == "idea" }.should_not be_nil
1861
- end
1862
-
1863
- it "documents the 'idea' task" do
1864
- Rake::Task.tasks.detect { |task| task.to_s == "idea" }.comment.should_not be_nil
1865
- end
1866
-
1867
- it "provides an 'idea:clean' task" do
1868
- Rake::Task.tasks.detect { |task| task.to_s == "idea:clean" }.should_not be_nil
1869
- end
1870
-
1871
- it "documents the 'idea:clean' task" do
1872
- Rake::Task.tasks.detect { |task| task.to_s == "idea:clean" }.comment.should_not be_nil
1873
- end
1874
-
1875
- describe "#no_iml" do
1876
- it "makes #iml? false" do
1877
- @foo = define "foo" do
1878
- project.no_iml
1879
- end
1880
- @foo.iml?.should be_false
1881
- end
1882
- end
1883
-
1884
- describe "#iml" do
1885
- before do
1886
- define "foo" do
1887
- iml.suffix = "-top"
1888
-
1889
- define "bar" do
1890
- iml.suffix = "-mid"
1891
-
1892
- define "baz" do
1893
- end
1894
- end
1895
- end
1896
- end
1897
-
1898
- it "inherits the direct parent's IML settings" do
1899
- project('foo:bar:baz').iml.suffix.should == "-mid"
1900
- end
1901
-
1902
- it "does not modify the parent's IML settings" do
1903
- project('foo').iml.suffix.should == "-top"
1904
- end
1905
-
1906
- it "works even when the parent has no IML" do
1907
- lambda {
1908
- define "a" do
1909
- project.no_iml
1910
- define "b" do
1911
- iml.suffix = "-alone"
1912
- end
1913
- end
1914
- }.should_not raise_error
1915
- end
1916
-
1917
- it "inherits from the first ancestor which has an IML" do
1918
- define "a" do
1919
- iml.suffix = "-a"
1920
- define "b" do
1921
- iml.suffix = "-b"
1922
- define "c" do
1923
- project.no_iml
1924
- define "d" do
1925
- project.no_iml
1926
- define "e" do
1927
- project.no_iml
1928
- define "f" do
1929
- end
1930
- end
1931
- end
1932
- end
1933
- end
1934
- end
1935
-
1936
- project("a:b:c:d:e:f").iml.suffix.should == "-b"
1937
- end
1938
- end
1939
- end
1940
-
1941
- end
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.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helpers'))
18
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'xpath_matchers'))
19
+
20
+ def ensure_facet_xpath(doc, type, name)
21
+ facet_xpath = "/module/component[@name='FacetManager']/facet"
22
+ doc.should have_xpath(facet_xpath)
23
+ web_facet_xpath = "#{facet_xpath}[@type='#{type}' and @name='#{name}']"
24
+ doc.should have_xpath(web_facet_xpath)
25
+ web_facet_xpath
26
+ end
27
+
28
+ describe Buildr::IntellijIdea do
29
+
30
+ def invoke_generate_task
31
+ task('idea').invoke
32
+ end
33
+
34
+ def invoke_clean_task
35
+ task('idea:clean').invoke
36
+ end
37
+
38
+ def root_project_filename(project)
39
+ project._("#{project.name}#{Buildr::IntellijIdea::IdeaFile::DEFAULT_SUFFIX}.ipr")
40
+ end
41
+
42
+ def root_project_xml(project)
43
+ xml_document(root_project_filename(project))
44
+ end
45
+
46
+ def root_module_filename(project)
47
+ project._("#{project.name}#{Buildr::IntellijIdea::IdeaFile::DEFAULT_SUFFIX}.iml")
48
+ end
49
+
50
+ def root_module_xml(project)
51
+ xml_document(root_module_filename(project))
52
+ end
53
+
54
+ def subproject_module_filename(project, sub_project_name)
55
+ project._("#{sub_project_name}/#{sub_project_name}#{Buildr::IntellijIdea::IdeaFile::DEFAULT_SUFFIX}.iml")
56
+ end
57
+
58
+ def subproject_module_xml(project, sub_project_name)
59
+ xml_document(subproject_module_filename(project, sub_project_name))
60
+ end
61
+
62
+ def xml_document(filename)
63
+ File.should be_exist(filename)
64
+ REXML::Document.new(File.read(filename))
65
+ end
66
+
67
+ def xpath_to_module
68
+ "/project/component[@name='ProjectModuleManager']/modules/module"
69
+ end
70
+
71
+ describe "idea:clean" do
72
+ before do
73
+ write "foo.ipr"
74
+ write "foo.iml"
75
+ write "other.ipr"
76
+ write "other.iml"
77
+ mkdir_p 'bar'
78
+ write "bar/bar.iml"
79
+ write "bar/other.ipr"
80
+ write "bar/other.iml"
81
+
82
+ @foo = define "foo" do
83
+ define "bar"
84
+ end
85
+ invoke_clean_task
86
+ end
87
+
88
+ it "should remove the ipr file" do
89
+ File.exists?("foo.ipr").should be_false
90
+ end
91
+
92
+ it "should remove the project iml file" do
93
+ File.exists?("foo.iml").should be_false
94
+ end
95
+
96
+ it "should remove the subproject iml file" do
97
+ File.exists?("foo.iml").should be_false
98
+ end
99
+
100
+ it "should not remove other iml and ipr files" do
101
+ File.exists?("other.ipr").should be_true
102
+ File.exists?("other.iml").should be_true
103
+ File.exists?("bar/other.ipr").should be_true
104
+ File.exists?("bar/other.iml").should be_true
105
+ end
106
+ end
107
+
108
+ describe "idea task" do
109
+
110
+ def order_entry_xpath
111
+ "/module/component[@name='NewModuleRootManager']/orderEntry"
112
+ end
113
+
114
+ describe "with a single dependency" do
115
+ describe "of type compile" do
116
+ before do
117
+ artifact('group:id:jar:1.0') { |t| write t.to_s }
118
+ @foo = define "foo" do
119
+ compile.with 'group:id:jar:1.0'
120
+ end
121
+ invoke_generate_task
122
+ end
123
+
124
+ it "generates one exported 'module-library' orderEntry in IML" do
125
+ root_module_xml(@foo).should have_nodes("#{order_entry_xpath}[@type='module-library' and @exported='']/library/CLASSES/root", 1)
126
+ end
127
+ end
128
+
129
+ describe "with iml.main_dependencies override" do
130
+ before do
131
+ artifact('group:id:jar:1.0') { |t| write t.to_s }
132
+ @foo = define "foo" do
133
+ iml.main_dependencies << 'group:id:jar:1.0'
134
+ end
135
+ invoke_generate_task
136
+ end
137
+
138
+ it "generates one exported 'module-library' orderEntry in IML" do
139
+ root_module_xml(@foo).should have_nodes("#{order_entry_xpath}[@type='module-library' and @scope='TEST']/library/CLASSES/root", 1)
140
+ end
141
+ end
142
+
143
+ describe "of type test" do
144
+ before do
145
+ artifact('group:id:jar:1.0') { |t| write t.to_s }
146
+ @foo = define "foo" do
147
+ test.with 'group:id:jar:1.0'
148
+ end
149
+ invoke_generate_task
150
+ end
151
+
152
+ it "generates one non-exported test scope 'module-library' orderEntry in IML" do
153
+ root_module_xml(@foo).should have_nodes("#{order_entry_xpath}[@type='module-library' and @exported]/library/CLASSES/root", 0)
154
+ root_module_xml(@foo).should have_nodes("#{order_entry_xpath}[@type='module-library' and @scope='TEST']/library/CLASSES/root", 1)
155
+ end
156
+ end
157
+
158
+ describe "with iml.test_dependencies override" do
159
+ before do
160
+ artifact('group:id:jar:1.0') { |t| write t.to_s }
161
+ @foo = define "foo" do
162
+ iml.test_dependencies << 'group:id:jar:1.0'
163
+ end
164
+ invoke_generate_task
165
+ end
166
+
167
+ it "generates one non-exported 'module-library' orderEntry in IML" do
168
+ root_module_xml(@foo).should have_nodes("#{order_entry_xpath}[@type='module-library' and @exported]/library/CLASSES/root", 0)
169
+ root_module_xml(@foo).should have_nodes("#{order_entry_xpath}[@type='module-library']/library/CLASSES/root", 1)
170
+ end
171
+ end
172
+
173
+ describe "with sources artifact present" do
174
+ before do
175
+ artifact('group:id:jar:1.0') { |t| write t.to_s }
176
+ artifact('group:id:jar:sources:1.0') { |t| write t.to_s }
177
+ @foo = define "foo" do
178
+ compile.with 'group:id:jar:1.0'
179
+ end
180
+ invoke_generate_task
181
+ end
182
+
183
+ it "generates 'module-library' orderEntry in IML with SOURCES specified" do
184
+ root_module_xml(@foo).should have_nodes("#{order_entry_xpath}[@type='module-library' and @exported='']/library/SOURCES/root", 1)
185
+ end
186
+ end
187
+
188
+ describe "with local_repository_env_override set to nil" do
189
+ before do
190
+ Buildr.repositories.instance_eval do
191
+ @local = @remote = @release_to = nil
192
+ end
193
+ artifact('group:id:jar:1.0') { |t| write t.to_s }
194
+ @foo = define "foo" do
195
+ iml.local_repository_env_override = nil
196
+ compile.with 'group:id:jar:1.0'
197
+ end
198
+ invoke_generate_task
199
+ end
200
+
201
+ it "generates orderEntry with absolute path for classes jar" do
202
+ root_module_xml(@foo).should match_xpath("#{order_entry_xpath}/library/CLASSES/root/@url",
203
+ "jar://$MODULE_DIR$/home/.m2/repository/group/id/1.0/id-1.0.jar!/")
204
+ end
205
+ end
206
+ describe "with local_repository_env_override set to MAVEN_REPOSITORY" do
207
+ before do
208
+ artifact('group:id:jar:1.0') { |t| write t.to_s }
209
+ @foo = define "foo" do
210
+ iml.local_repository_env_override = 'MAVEN_REPOSITORY'
211
+ compile.with 'group:id:jar:1.0'
212
+ end
213
+ invoke_generate_task
214
+ end
215
+
216
+ it "generates orderEntry with absolute path for classes jar" do
217
+ root_module_xml(@foo).should match_xpath("#{order_entry_xpath}/library/CLASSES/root/@url",
218
+ "jar://$MAVEN_REPOSITORY$/group/id/1.0/id-1.0.jar!/")
219
+ end
220
+ end
221
+ end
222
+
223
+ describe "with multiple dependencies" do
224
+ before do
225
+ artifact('group:id:jar:1.0') { |t| write t.to_s }
226
+ artifact('group:id2:jar:1.0') { |t| write t.to_s }
227
+ @foo = define "foo" do
228
+ compile.with 'group:id:jar:1.0', 'group:id2:jar:1.0'
229
+ end
230
+ invoke_generate_task
231
+ end
232
+
233
+ it "generates multiple 'module-library' orderEntry in IML" do
234
+ root_module_xml(@foo).should have_nodes("#{order_entry_xpath}[@type='module-library']", 2)
235
+ end
236
+ end
237
+
238
+ describe "with a single non artifact dependency" do
239
+ before do
240
+ @foo = define "foo" do
241
+ filename = _("foo-dep.jar")
242
+ File.open(filename, "wb") { |t| write "Hello" }
243
+ compile.with filename
244
+ end
245
+ invoke_generate_task
246
+ end
247
+
248
+ it "generates one exported 'module-library' orderEntry in IML" do
249
+ root_module_xml(@foo).should match_xpath("#{order_entry_xpath}/library/CLASSES/root/@url",
250
+ "jar://$MODULE_DIR$/foo-dep.jar!/")
251
+ end
252
+ end
253
+
254
+ describe "with extra_modules specified" do
255
+ before do
256
+ @foo = define "foo" do
257
+ ipr.extra_modules << 'other.iml'
258
+ ipr.extra_modules << 'other_other.iml'
259
+ end
260
+ invoke_generate_task
261
+ end
262
+
263
+ it "generate an IPR with extra modules specified" do
264
+ doc = xml_document(@foo._("foo.ipr"))
265
+ doc.should have_nodes("#{xpath_to_module}", 3)
266
+ module_ref = "$PROJECT_DIR$/foo.iml"
267
+ doc.should have_xpath("#{xpath_to_module}[@fileurl='file://#{module_ref}' and @filepath='#{module_ref}']")
268
+ module_ref = "$PROJECT_DIR$/other.iml"
269
+ doc.should have_xpath("#{xpath_to_module}[@fileurl='file://#{module_ref}' and @filepath='#{module_ref}']")
270
+ module_ref = "$PROJECT_DIR$/other_other.iml"
271
+ doc.should have_xpath("#{xpath_to_module}[@fileurl='file://#{module_ref}' and @filepath='#{module_ref}']")
272
+ end
273
+ end
274
+
275
+ describe "with web and webservice facet added to root project" do
276
+ before do
277
+ @foo = define "foo" do
278
+ iml.add_facet("Web", "web") do |facet|
279
+ facet.configuration do |conf|
280
+ conf.descriptors do |desc|
281
+ desc.deploymentDescriptor :name => 'web.xml',
282
+ :url => "file://$MODULE_DIR$/src/main/webapp/WEB-INF/web.xml",
283
+ :optional => "false", :version => "2.4"
284
+ end
285
+ conf.webroots do |webroots|
286
+ webroots.root :url => "file://$MODULE_DIR$/src/main/webapp", :relative => "/"
287
+ end
288
+ end
289
+ end
290
+ iml.add_facet("WebServices Client", "WebServicesClient") do |facet|
291
+ facet.configuration "ws.engine" => "Glassfish / JAX-WS 2.X RI / Metro 1.X / JWSDP 2.0"
292
+ end
293
+ define 'bar'
294
+ end
295
+ invoke_generate_task
296
+ end
297
+
298
+ it "generates an IML for root project with a web and webservice facet" do
299
+ doc = xml_document(@foo._("foo.iml"))
300
+ ensure_facet_xpath(doc, 'web', 'Web')
301
+ ensure_facet_xpath(doc, 'WebServicesClient', 'WebServices Client')
302
+ end
303
+ end
304
+
305
+ describe "using add_gwt_facet" do
306
+ before do
307
+ @foo = define "foo" do
308
+ iml.add_gwt_facet("com.biz.MyModule" => true, "com.biz.MyOtherModule" => false)
309
+ end
310
+ invoke_generate_task
311
+ end
312
+
313
+ it "generates a gwt facet with default settings" do
314
+ doc = xml_document(@foo._("foo.iml"))
315
+ facet_xpath = ensure_facet_xpath(doc, 'gwt', 'GWT')
316
+ setting_xpath = "#{facet_xpath}/configuration/setting"
317
+ doc.should have_xpath("#{setting_xpath}[@name='gwtSdkUrl', value='file://$GWT_TOOLS$']")
318
+ doc.should have_xpath("#{setting_xpath}[@name='gwtScriptOutputStyle', value='PRETTY']")
319
+ doc.should have_xpath("#{setting_xpath}[@name='compilerParameters', value='-draftCompile -localWorkers 2 -strict']")
320
+ doc.should have_xpath("#{setting_xpath}[@name='compilerParameters', value='-draftCompile -localWorkers 2 -strict']")
321
+ doc.should have_xpath("#{setting_xpath}[@name='compilerMaxHeapSize', value='512']")
322
+ doc.should have_xpath("#{setting_xpath}[@name='webFacet', value='Web']")
323
+ end
324
+
325
+ it "generates a gwt facet with specified modules" do
326
+ doc = xml_document(@foo._("foo.iml"))
327
+ facet_xpath = ensure_facet_xpath(doc, 'gwt', 'GWT')
328
+ prefix = "#{facet_xpath}/configuration/packaging/module"
329
+ doc.should have_xpath("#{prefix}[@name='com.biz.MyModule' and @enabled='true']")
330
+ doc.should have_xpath("#{prefix}[@name='com.biz.MyOtherModule' and @enabled='false']")
331
+ end
332
+ end
333
+
334
+ describe "using add_gwt_facet that detects gwt sdk" do
335
+ before do
336
+ artifact('com.google.gwt:gwt-dev:jar:2.5.1-not-a-release') { |task| write task.name }
337
+ @foo = define "foo" do
338
+ compile.with 'com.google.gwt:gwt-dev:jar:2.5.1-not-a-release'
339
+ iml.add_gwt_facet("com.biz.MyModule" => true)
340
+ end
341
+ invoke_generate_task
342
+ end
343
+
344
+ it "generates a gwt facet with detected gwt sdk settings" do
345
+ doc = xml_document(@foo._("foo.iml"))
346
+ facet_xpath = ensure_facet_xpath(doc, 'gwt', 'GWT')
347
+ setting_xpath = "#{facet_xpath}/configuration/setting"
348
+ doc.should have_xpath("#{setting_xpath}[@name='gwtSdkType', value='maven']")
349
+ doc.should have_xpath("#{setting_xpath}[@name='gwtSdkUrl', value='$MAVEN_REPOSITORY$/com/google/gwt/gwt-dev/2.5.1-not-a-release']")
350
+ end
351
+ end
352
+
353
+ describe "using add_gwt_facet that specifies gwt sdk" do
354
+ before do
355
+ artifact('com.example:library:jar:2.0') { |task| write task.name }
356
+ @foo = define "foo" do
357
+ iml.add_gwt_facet({"com.biz.MyModule" => true},:gwt_dev_artifact => 'com.example:library:jar:2.0')
358
+ end
359
+ invoke_generate_task
360
+ end
361
+
362
+ it "generates a gwt facet with detected gwt sdk settings" do
363
+ doc = xml_document(@foo._("foo.iml"))
364
+ facet_xpath = ensure_facet_xpath(doc, 'gwt', 'GWT')
365
+ setting_xpath = "#{facet_xpath}/configuration/setting"
366
+ doc.should have_xpath("#{setting_xpath}[@name='gwtSdkType', value='maven']")
367
+ doc.should have_xpath("#{setting_xpath}[@name='gwtSdkUrl', value='$MAVEN_REPOSITORY$/com/google/gwt/gwt-dev/2.5.1']")
368
+ end
369
+ end
370
+
371
+ describe "using add_gwt_facet that specifies settings" do
372
+ before do
373
+ @foo = define "foo" do
374
+ iml.add_gwt_facet({"com.biz.MyModule" => true, "com.biz.MyOtherModule" => false},
375
+ :settings => {:gwtScriptOutputStyle => 'OTHER', :compilerMaxHeapSize => 1024, :zang => 'zang'})
376
+ end
377
+ invoke_generate_task
378
+ end
379
+
380
+ it "generates a gwt facet with specified settings" do
381
+ doc = xml_document(@foo._("foo.iml"))
382
+ facet_xpath = ensure_facet_xpath(doc, 'gwt', 'GWT')
383
+ setting_xpath = "#{facet_xpath}/configuration/setting"
384
+ doc.should have_xpath("#{setting_xpath}[@name='zang', value='zang']")
385
+ doc.should have_xpath("#{setting_xpath}[@name='gwtScriptOutputStyle', value='OTHER']")
386
+ doc.should have_xpath("#{setting_xpath}[@name='compilerMaxHeapSize', value='1024']")
387
+ end
388
+ end
389
+
390
+ describe "using add_web_facet with jsf and idea version 12" do
391
+ before do
392
+ write "src/main/webapp/WEB-INF/web.xml"
393
+ write "src/main/webapp/WEB-INF/faces-config.xml"
394
+
395
+ @foo = define "foo" do
396
+ ipr.version = "12"
397
+ iml.add_web_facet
398
+ end
399
+ invoke_generate_task
400
+ end
401
+
402
+ it "generates a web facet with jsf facet auto-detected" do
403
+ doc = xml_document(@foo._("foo.iml"))
404
+ web_facet_xpath = ensure_facet_xpath(doc, 'web', 'Web')
405
+ doc.should have_xpath("#{web_facet_xpath}/facet[@type='jsf' and @name='JSF']")
406
+ end
407
+ end
408
+
409
+ describe "using add_web_facet should default to no jsf" do
410
+ before do
411
+ write "src/main/webapp/WEB-INF/web.xml"
412
+
413
+ @foo = define "foo" do
414
+ iml.add_web_facet
415
+ end
416
+ invoke_generate_task
417
+ end
418
+
419
+ it "does not generate a web facet with jsf facet" do
420
+ doc = xml_document(@foo._("foo.iml"))
421
+ web_facet_xpath = ensure_facet_xpath(doc, 'web', 'Web')
422
+ doc.should_not have_xpath("#{web_facet_xpath}/facet[@type='jsf' and @name='JSF']")
423
+ end
424
+ end
425
+
426
+ describe "using add_web_facet with jsf and idea version 13" do
427
+ before do
428
+ write "src/main/webapp/WEB-INF/web.xml"
429
+ write "src/main/webapp/WEB-INF/faces-config.xml"
430
+
431
+ @foo = define "foo" do
432
+ ipr.version = "13"
433
+ iml.add_web_facet
434
+ end
435
+ invoke_generate_task
436
+ end
437
+
438
+ it "does not generate a web facet with jsf facet" do
439
+ doc = xml_document(@foo._("foo.iml"))
440
+ web_facet_xpath = ensure_facet_xpath(doc, 'web', 'Web')
441
+ doc.should_not have_xpath("#{web_facet_xpath}/facet[@type='jsf' and @name='JSF']")
442
+ end
443
+ end
444
+
445
+ describe "using add_web_facet with jsf and idea version 13 and jsf 'enabled'" do
446
+ before do
447
+ write "src/main/webapp/WEB-INF/web.xml"
448
+ write "src/main/webapp/WEB-INF/faces-config.xml"
449
+
450
+ @foo = define "foo" do
451
+ ipr.version = "13"
452
+ iml.add_web_facet(:enable_jsf => true)
453
+ end
454
+ invoke_generate_task
455
+ end
456
+
457
+ it "does not generate a web facet with jsf facet" do
458
+ doc = xml_document(@foo._("foo.iml"))
459
+ web_facet_xpath = ensure_facet_xpath(doc, 'web', 'Web')
460
+ doc.should_not have_xpath("#{web_facet_xpath}/facet[@type='jsf' and @name='JSF']")
461
+ end
462
+ end
463
+
464
+ describe "using add_web_facet" do
465
+ before do
466
+ write "src/main/webapp/WEB-INF/web.xml"
467
+ write "src/main/webapp/WEB-INF/glassfish-web.xml"
468
+ write "src/main/webapp/WEB-INF/context.xml"
469
+
470
+ @foo = define "foo" do
471
+ iml.add_web_facet
472
+ end
473
+ invoke_generate_task
474
+ end
475
+
476
+ it "generates a web facet with appropriate deployment descriptors" do
477
+ doc = xml_document(@foo._("foo.iml"))
478
+ web_facet_xpath = ensure_facet_xpath(doc, 'web', 'Web')
479
+ deployment_descriptor_xpath = "#{web_facet_xpath}/configuration/descriptors/deploymentDescriptor"
480
+ doc.should have_xpath("#{deployment_descriptor_xpath}[@name='web.xml', url='file://$MODULE_DIR$/src/main/webapp/WEB-INF/web.xml']")
481
+ doc.should have_xpath("#{deployment_descriptor_xpath}[@name='glassfish-web.xml', url='file://$MODULE_DIR$/src/main/webapp/WEB-INF/glassfish-web.xml']")
482
+ end
483
+
484
+ it "generates a web facet with derived webroots" do
485
+ doc = xml_document(@foo._("foo.iml"))
486
+ web_facet_xpath = ensure_facet_xpath(doc, 'web', 'Web')
487
+ doc.should have_xpath("#{web_facet_xpath}/configuration/webroots/root[@url='file://$MODULE_DIR$/src/main/webapp' and @relative='/']")
488
+ end
489
+ end
490
+
491
+ describe "using add_web_facet with specified parameters" do
492
+ before do
493
+ @foo = define "foo" do
494
+ iml.add_web_facet(:deployment_descriptors => ["src/main/webapp2/WEB-INF/web.xml"],
495
+ :webroots => {"src/main/webapp2" => "/", "src/main/css" => "/css"})
496
+ end
497
+ invoke_generate_task
498
+ end
499
+
500
+ it "generates a web facet with appropriate deployment descriptors" do
501
+ doc = xml_document(@foo._("foo.iml"))
502
+ web_facet_xpath = ensure_facet_xpath(doc, 'web', 'Web')
503
+ deployment_descriptor_xpath = "#{web_facet_xpath}/configuration/descriptors/deploymentDescriptor"
504
+ doc.should have_xpath("#{deployment_descriptor_xpath}[@name='web.xml', url='file://$MODULE_DIR$/src/main/webapp2/WEB-INF/web.xml']")
505
+ end
506
+
507
+ it "generates a web facet with specified webroots" do
508
+ doc = xml_document(@foo._("foo.iml"))
509
+ web_facet_xpath = ensure_facet_xpath(doc, 'web', 'Web')
510
+ doc.should have_xpath("#{web_facet_xpath}/configuration/webroots/root[@url='file://$MODULE_DIR$/src/main/webapp2' and @relative='/']")
511
+ doc.should have_xpath("#{web_facet_xpath}/configuration/webroots/root[@url='file://$MODULE_DIR$/src/main/css' and @relative='/css']")
512
+ end
513
+ end
514
+
515
+ describe "using add_jpa_facet" do
516
+ before do
517
+ write "src/main/resources/META-INF/persistence.xml", "org.hibernate.ejb.HibernatePersistence"
518
+ write "src/main/resources/META-INF/orm.xml"
519
+
520
+ @foo = define "foo" do
521
+ iml.add_jpa_facet
522
+ end
523
+ invoke_generate_task
524
+ end
525
+
526
+ it "generates a jpa facet with appropriate deployment descriptors" do
527
+ doc = xml_document(@foo._("foo.iml"))
528
+ facet_xpath = ensure_facet_xpath(doc, 'jpa', 'JPA')
529
+ deployment_descriptor_xpath = "#{facet_xpath}/configuration/deploymentDescriptor"
530
+ doc.should have_xpath("#{deployment_descriptor_xpath}[@name='persistence.xml', url='file://$MODULE_DIR$/src/main/resources/META-INF/persistence.xml']")
531
+ doc.should have_xpath("#{deployment_descriptor_xpath}[@name='orm.xml', url='file://$MODULE_DIR$/src/main/resources/META-INF/orm.xml']")
532
+ end
533
+
534
+ it "generates a jpa facet with default settings" do
535
+ doc = xml_document(@foo._("foo.iml"))
536
+ facet_xpath = ensure_facet_xpath(doc, 'jpa', 'JPA')
537
+ doc.should have_xpath("#{facet_xpath}/configuration/setting[@name='validation-enabled' and @value='true']")
538
+ doc.should have_xpath("#{facet_xpath}/configuration/setting[@name='provider-name' and @value='Hibernate']")
539
+ end
540
+ end
541
+
542
+ describe "using add_jpa_facet specifying parameters" do
543
+ before do
544
+ write "src/main/resources2/META-INF/persistence.xml"
545
+ write "src/main/resources2/META-INF/orm.xml"
546
+
547
+ @foo = define "foo" do
548
+ iml.add_jpa_facet(:provider_enabled => 'Hibernate',
549
+ :deployment_descriptors => ["src/main/resources2/META-INF/persistence.xml",
550
+ "src/main/resources2/META-INF/orm.xml"])
551
+ end
552
+ invoke_generate_task
553
+ end
554
+
555
+ it "generates a jpa facet with appropriate deployment descriptors" do
556
+ doc = xml_document(@foo._("foo.iml"))
557
+ facet_xpath = ensure_facet_xpath(doc, 'jpa', 'JPA')
558
+ deployment_descriptor_xpath = "#{facet_xpath}/configuration/deploymentDescriptor"
559
+ doc.should have_xpath("#{deployment_descriptor_xpath}[@name='persistence.xml', url='file://$MODULE_DIR$/src/main/resources2/META-INF/persistence.xml']")
560
+ doc.should have_xpath("#{deployment_descriptor_xpath}[@name='orm.xml', url='file://$MODULE_DIR$/src/main/resources2/META-INF/orm.xml']")
561
+ end
562
+
563
+ it "generates a jpa facet with default settings" do
564
+ doc = xml_document(@foo._("foo.iml"))
565
+ facet_xpath = ensure_facet_xpath(doc, 'jpa', 'JPA')
566
+ doc.should have_xpath("#{facet_xpath}/configuration/setting[@name='validation-enabled' and @value='true']")
567
+ doc.should have_xpath("#{facet_xpath}/configuration/setting[@name='provider-name' and @value='Hibernate']")
568
+ end
569
+ end
570
+
571
+ describe "using add_jpa_facet derived from main_source_directories" do
572
+ before do
573
+ write "src/main/resources2/META-INF/persistence.xml"
574
+ write "src/main/resources2/META-INF/orm.xml"
575
+
576
+ @foo = define "foo" do
577
+ iml.main_source_directories << "src/main/resources2"
578
+ iml.add_jpa_facet
579
+
580
+ end
581
+ invoke_generate_task
582
+ end
583
+
584
+ it "generates a jpa facet with appropriate deployment descriptors" do
585
+ doc = xml_document(@foo._("foo.iml"))
586
+ facet_xpath = ensure_facet_xpath(doc, 'jpa', 'JPA')
587
+ deployment_descriptor_xpath = "#{facet_xpath}/configuration/deploymentDescriptor"
588
+ doc.should have_xpath("#{deployment_descriptor_xpath}[@name='persistence.xml', url='file://$MODULE_DIR$/src/main/resources2/META-INF/persistence.xml']")
589
+ doc.should have_xpath("#{deployment_descriptor_xpath}[@name='orm.xml', url='file://$MODULE_DIR$/src/main/resources2/META-INF/orm.xml']")
590
+ end
591
+ end
592
+
593
+ describe "using add_jpa_facet with hibernate configured in persistence.xml" do
594
+ before do
595
+ write "src/main/resources/META-INF/persistence.xml", "org.hibernate.ejb.HibernatePersistence"
596
+ write "src/main/resources/META-INF/orm.xml"
597
+
598
+ @foo = define "foo" do
599
+ iml.add_jpa_facet
600
+ end
601
+ invoke_generate_task
602
+ end
603
+
604
+ it "generates a jpa facet with default settings" do
605
+ doc = xml_document(@foo._("foo.iml"))
606
+ facet_xpath = ensure_facet_xpath(doc, 'jpa', 'JPA')
607
+ doc.should have_xpath("#{facet_xpath}/configuration/setting[@name='validation-enabled' and @value='true']")
608
+ doc.should have_xpath("#{facet_xpath}/configuration/setting[@name='provider-name' and @value='Hibernate']")
609
+ end
610
+ end
611
+
612
+ describe "using add_jpa_facet with eclipselink configured in persistence.xml" do
613
+ before do
614
+ write "src/main/resources/META-INF/persistence.xml", "org.eclipse.persistence.jpa.PersistenceProvider"
615
+ write "src/main/resources/META-INF/orm.xml"
616
+
617
+ @foo = define "foo" do
618
+ iml.add_jpa_facet
619
+ end
620
+ invoke_generate_task
621
+ end
622
+
623
+ it "generates a jpa facet with default settings" do
624
+ doc = xml_document(@foo._("foo.iml"))
625
+ facet_xpath = ensure_facet_xpath(doc, 'jpa', 'JPA')
626
+ doc.should have_xpath("#{facet_xpath}/configuration/setting[@name='validation-enabled' and @value='true']")
627
+ doc.should have_xpath("#{facet_xpath}/configuration/setting[@name='provider-name' and @value='EclipseLink']")
628
+ end
629
+ end
630
+
631
+ describe "using add_ejb_facet" do
632
+ before do
633
+ write "src/main/java/com/bin/foo.java"
634
+ write "src/main/resources/WEB-INF/ejb-jar.xml"
635
+
636
+ @foo = define "foo" do
637
+ iml.add_ejb_facet
638
+ end
639
+ invoke_generate_task
640
+ end
641
+
642
+ it "generates an ejb facet with appropriate deployment descriptors" do
643
+ doc = xml_document(@foo._("foo.iml"))
644
+ ejb_facet_xpath = ensure_facet_xpath(doc, 'ejb', 'EJB')
645
+ deployment_descriptor_xpath = "#{ejb_facet_xpath}/configuration/descriptors/deploymentDescriptor"
646
+ doc.should have_xpath("#{deployment_descriptor_xpath}[@name='ejb-jar.xml', url='file://$MODULE_DIR$/src/main/resources/WEB-INF/ejb-jar.xml']")
647
+ end
648
+
649
+ it "generates an ejb facet with derived ejbRoots" do
650
+ doc = xml_document(@foo._("foo.iml"))
651
+ ejb_facet_xpath = ensure_facet_xpath(doc, 'ejb', 'EJB')
652
+ doc.should have_xpath("#{ejb_facet_xpath}/configuration/ejbRoots/root[@url='file://$MODULE_DIR$/src/main/java']")
653
+ doc.should have_xpath("#{ejb_facet_xpath}/configuration/ejbRoots/root[@url='file://$MODULE_DIR$/src/main/resources']")
654
+ end
655
+ end
656
+
657
+ describe "using add_ejb_facet specifying parameters" do
658
+ before do
659
+ @foo = define "foo" do
660
+ iml.add_ejb_facet(:ejb_roots => ["generated/main/java","generated/main/resources"],
661
+ :deployment_descriptors => ["generated/main/resources/WEB-INF/ejb-jar.xml"])
662
+ end
663
+ invoke_generate_task
664
+ end
665
+
666
+ it "generates an ejb facet with appropriate deployment descriptors" do
667
+ doc = xml_document(@foo._("foo.iml"))
668
+ ejb_facet_xpath = ensure_facet_xpath(doc, 'ejb', 'EJB')
669
+ deployment_descriptor_xpath = "#{ejb_facet_xpath}/configuration/descriptors/deploymentDescriptor"
670
+ doc.should have_xpath("#{deployment_descriptor_xpath}[@name='ejb-jar.xml', url='file://$MODULE_DIR$/generated/main/resources/WEB-INF/ejb-jar.xml']")
671
+ end
672
+
673
+ it "generates an ejb facet with derived ejbRoots" do
674
+ doc = xml_document(@foo._("foo.iml"))
675
+ ejb_facet_xpath = ensure_facet_xpath(doc, 'ejb', 'EJB')
676
+ doc.should have_xpath("#{ejb_facet_xpath}/configuration/ejbRoots/root[@url='file://$MODULE_DIR$/generated/main/java']")
677
+ doc.should have_xpath("#{ejb_facet_xpath}/configuration/ejbRoots/root[@url='file://$MODULE_DIR$/generated/main/resources']")
678
+ end
679
+ end
680
+
681
+ describe "using add_ejb_facet derived from main_source_directories" do
682
+ before do
683
+ write "src/main/resources2/WEB-INF/ejb-jar.xml"
684
+ @foo = define "foo" do
685
+ iml.main_source_directories << "src/main/resources2"
686
+ iml.add_ejb_facet
687
+ end
688
+ invoke_generate_task
689
+ end
690
+
691
+ it "generates an ejb facet with appropriate deployment descriptors" do
692
+ doc = xml_document(@foo._("foo.iml"))
693
+ ejb_facet_xpath = ensure_facet_xpath(doc, 'ejb', 'EJB')
694
+ deployment_descriptor_xpath = "#{ejb_facet_xpath}/configuration/descriptors/deploymentDescriptor"
695
+ doc.should have_xpath("#{deployment_descriptor_xpath}[@name='ejb-jar.xml', url='file://$MODULE_DIR$/src/main/resources2/WEB-INF/ejb-jar.xml']")
696
+ end
697
+ end
698
+
699
+ describe "using add_jruby_facet" do
700
+ before do
701
+
702
+ @foo = define "foo" do
703
+ iml.add_jruby_facet
704
+ end
705
+ invoke_generate_task
706
+ end
707
+
708
+ it "generates a jruby facet with appropriate sdk" do
709
+ doc = xml_document(@foo._("foo.iml"))
710
+ jruby_facet_xpath = ensure_facet_xpath(doc, 'JRUBY', 'JRuby')
711
+ doc.should have_xpath("#{jruby_facet_xpath}/configuration/JRUBY_FACET_CONFIG_ID[@NAME='JRUBY_SDK_NAME', VALUE='jruby-1.6.7.2']")
712
+ end
713
+
714
+ it "generates a jruby facet with appropriate paths" do
715
+ doc = xml_document(@foo._("foo.iml"))
716
+ jruby_facet_xpath = ensure_facet_xpath(doc, 'JRUBY', 'JRuby')
717
+ prefix = "#{jruby_facet_xpath}/configuration"
718
+ doc.should have_xpath("#{prefix}/LOAD_PATH[@number='0']")
719
+ doc.should have_xpath("#{prefix}/I18N_FOLDERS[@number='0']")
720
+ end
721
+ end
722
+
723
+ describe "using add_jruby_facet with .ruby-version specified" do
724
+ before do
725
+
726
+ write ".ruby-version", "jruby-1.7.2"
727
+
728
+ @foo = define "foo" do
729
+ iml.add_jruby_facet
730
+ end
731
+ invoke_generate_task
732
+ end
733
+
734
+ it "generates a jruby facet with appropriate sdk" do
735
+ doc = xml_document(@foo._("foo.iml"))
736
+ jruby_facet_xpath = ensure_facet_xpath(doc, 'JRUBY', 'JRuby')
737
+ doc.should have_xpath("#{jruby_facet_xpath}/configuration/JRUBY_FACET_CONFIG_ID[@NAME='JRUBY_SDK_NAME', VALUE='rbenv: jruby-1.7.2']")
738
+ end
739
+
740
+ it "generates a jruby facet with appropriate paths" do
741
+ doc = xml_document(@foo._("foo.iml"))
742
+ jruby_facet_xpath = ensure_facet_xpath(doc, 'JRUBY', 'JRuby')
743
+ prefix = "#{jruby_facet_xpath}/configuration"
744
+ doc.should have_xpath("#{prefix}/LOAD_PATH[@number='0']")
745
+ doc.should have_xpath("#{prefix}/I18N_FOLDERS[@number='0']")
746
+ end
747
+ end
748
+
749
+ describe "with add_data_source" do
750
+ before do
751
+ artifact("org.postgresql:postgresql:jar:9.not-a-version") { |task| write task.name }
752
+ @foo = define "foo" do
753
+ ipr.add_data_source("Postgres",
754
+ :driver => 'org.postgresql.Driver',
755
+ :url => "jdbc:postgresql://127.0.0.1:5432/MyDb",
756
+ :username => "MyDBUser",
757
+ :password => "secreto",
758
+ :dialect => "PostgreSQL",
759
+ :classpath => ["org.postgresql:postgresql:jar:9.not-a-version"])
760
+ end
761
+ invoke_generate_task
762
+ end
763
+
764
+ it "generates a data source manager with specified data source" do
765
+ doc = xml_document(@foo._("foo.ipr"))
766
+ prefix_xpath = "/project/component[@name='DataSourceManagerImpl' and @format='xml' and @hash='3208837817']/data-source"
767
+ doc.should have_nodes(prefix_xpath, 1)
768
+ ds_path = "#{prefix_xpath}[@source='LOCAL' and @name='Postgres']"
769
+ doc.should have_xpath(ds_path)
770
+ doc.should have_xpath("#{ds_path}/synchronize/text() = 'true'")
771
+ doc.should have_xpath("#{ds_path}/jdbc-driver/text() = 'org.postgresql.Driver'")
772
+ doc.should have_xpath("#{ds_path}/jdbc-url/text() = 'jdbc:postgresql://127.0.0.1:5432/MyDb'")
773
+ doc.should have_xpath("#{ds_path}/user-name/text() = 'MyDBUser'")
774
+ doc.should have_xpath("#{ds_path}/user-password/text() = 'dfd9dfcfdfc9dfd8dfcfdfdedfc5'")
775
+ doc.should have_xpath("#{ds_path}/default-dialect/text() = 'PostgreSQL'")
776
+ doc.should have_xpath("#{ds_path}/libraries/library/url/text() = '$MAVEN_REPOSITORY$/org/postgresql/postgresql/9.not-a-version/postgresql-9.not-a-version.jar'")
777
+ end
778
+ end
779
+
780
+ describe "with add_postgres_data_source" do
781
+ before do
782
+ ENV["USER"] = "Bob"
783
+ artifact("org.postgresql:postgresql:jar:9.2-1003-jdbc4") { |task| write task.name }
784
+ @foo = define "foo" do
785
+ ipr.add_postgres_data_source("Postgres", :database => 'MyDb')
786
+ end
787
+ invoke_generate_task
788
+ end
789
+
790
+ it "generates a data source manager with specified data source" do
791
+ doc = xml_document(@foo._("foo.ipr"))
792
+ prefix_xpath = "/project/component[@name='DataSourceManagerImpl' and @format='xml' and @hash='3208837817']/data-source"
793
+ doc.should have_nodes(prefix_xpath, 1)
794
+ ds_path = "#{prefix_xpath}[@source='LOCAL' and @name='Postgres']"
795
+ doc.should have_xpath(ds_path)
796
+ doc.should have_xpath("#{ds_path}/synchronize/text() = 'true'")
797
+ doc.should have_xpath("#{ds_path}/jdbc-driver/text() = 'org.postgresql.Driver'")
798
+ doc.should have_xpath("#{ds_path}/jdbc-url/text() = 'jdbc:postgresql://127.0.0.1:5432/MyDb'")
799
+ doc.should have_xpath("#{ds_path}/user-name/text() = 'Bob'")
800
+ doc.should have_xpath("#{ds_path}/default-dialect/text() = 'PostgreSQL'")
801
+ doc.should have_xpath("#{ds_path}/libraries/library/url/text() = '$MAVEN_REPOSITORY$/org/postgresql/postgresql/9.2-1003-jdbc4/postgresql-9.2-1003-jdbc4.jar'")
802
+ end
803
+ end
804
+
805
+ describe "with add_sql_server_data_source" do
806
+ before do
807
+ ENV["USER"] = "Bob"
808
+ artifact('net.sourceforge.jtds:jtds:jar:1.2.7') { |task| write task.name }
809
+ @foo = define "foo" do
810
+ ipr.add_sql_server_data_source("SqlServer", :database => 'MyDb')
811
+ end
812
+ invoke_generate_task
813
+ end
814
+
815
+ it "generates a data source manager with specified data source" do
816
+ doc = xml_document(@foo._("foo.ipr"))
817
+ prefix_xpath = "/project/component[@name='DataSourceManagerImpl' and @format='xml' and @hash='3208837817']/data-source"
818
+ doc.should have_nodes(prefix_xpath, 1)
819
+ ds_path = "#{prefix_xpath}[@source='LOCAL' and @name='SqlServer']"
820
+ doc.should have_xpath(ds_path)
821
+
822
+ doc.should have_xpath("#{ds_path}/synchronize/text() = 'true'")
823
+ doc.should have_xpath("#{ds_path}/jdbc-driver/text() = 'net.sourceforge.jtds.jdbc.Driver'")
824
+ doc.should have_xpath("#{ds_path}/jdbc-url/text() = 'jdbc:jtds:sqlserver://127.0.0.1:1433/MyDb'")
825
+ doc.should have_xpath("#{ds_path}/user-name/text() = 'Bob'")
826
+ doc.should have_xpath("#{ds_path}/default-dialect/text() = 'TSQL'")
827
+ doc.should have_xpath("#{ds_path}/libraries/library/url/text() = '$MAVEN_REPOSITORY$/net/sourceforge/jtds/1.2.7/jtds-1.2.7.jar'")
828
+ end
829
+ end
830
+
831
+ describe "with artifacts added to root project" do
832
+ before do
833
+ @foo = define "foo" do
834
+ ipr.add_artifact("MyFancy.jar", "jar") do |xml|
835
+ xml.tag!('output-path', project._(:artifacts, "MyFancy.jar"))
836
+ xml.element :id => "module-output", :name => "foo"
837
+ end
838
+ ipr.add_artifact("MyOtherFancy.jar", "jar") do |xml|
839
+ xml.tag!('output-path', project._(:artifacts, "MyOtherFancy.jar"))
840
+ xml.element :id => "module-output", :name => "foo"
841
+ end
842
+ end
843
+ invoke_generate_task
844
+ end
845
+
846
+ it "generates an IPR with multiple jar artifacts" do
847
+ doc = xml_document(@foo._("foo.ipr"))
848
+ facet_xpath = "/project/component[@name='ArtifactManager']/artifact"
849
+ doc.should have_nodes(facet_xpath, 2)
850
+ doc.should have_xpath("#{facet_xpath}[@type='jar' and @name='MyFancy.jar']")
851
+ doc.should have_xpath("#{facet_xpath}[@type='jar' and @name='MyOtherFancy.jar']")
852
+ end
853
+ end
854
+
855
+ describe "that uses add_jar_artifact with no overrides" do
856
+ before do
857
+ write 'foo/bar/src/main/java/foo/Foo.java' # needed so that buildr will treat as a java project
858
+ artifact('net.sourceforge.jtds:jtds:jar:1.2.7.XX') { |task| write task.name }
859
+
860
+ @foo = define "foo" do
861
+ project.version = '1.0'
862
+ define "bar" do
863
+ compile.with 'net.sourceforge.jtds:jtds:jar:1.2.7.XX'
864
+ package :war
865
+ end
866
+ ipr.add_jar_artifact(project("bar"))
867
+ end
868
+ invoke_generate_task
869
+ end
870
+
871
+ it "generates an IPR with a jar artifact" do
872
+ doc = xml_document(@foo._("foo.ipr"))
873
+ base_xpath = "/project/component[@name='ArtifactManager']/artifact"
874
+ facet_xpath = "#{base_xpath}[@type='jar' and @name='bar.jar' and @build-on-make='false']"
875
+ doc.should have_xpath(facet_xpath)
876
+
877
+ doc.should have_xpath("#{facet_xpath}/output-path/text() = $PROJECT_DIR$/artifacts/bar")
878
+ doc.should have_xpath("#{facet_xpath}/root[@id='archive' and @name='bar.jar']/element[@id='module-output' and @name='bar']")
879
+ end
880
+ end
881
+
882
+ describe "that uses add_jar_artifact with overrides" do
883
+ before do
884
+ write 'foo/bar/src/main/java/foo/Foo.java' # needed so that buildr will treat as a java project
885
+ artifact('net.sourceforge.jtds:jtds:jar:1.2.7.XX') { |task| write task.name }
886
+
887
+ @foo = define "foo" do
888
+ project.version = '1.0'
889
+ define "bar" do
890
+ compile.with 'net.sourceforge.jtds:jtds:jar:1.2.7.XX'
891
+ package :war
892
+ end
893
+ ipr.add_jar_artifact(project,
894
+ :name => 'bar',
895
+ :output_dir => _('bink'),
896
+ :build_on_make => true,
897
+ :ejb_module_names => ['x'],
898
+ :jpa_module_names => ['p'],
899
+ :dependencies => [project('bar')])
900
+ end
901
+ invoke_generate_task
902
+ end
903
+
904
+ it "generates an IPR with a jar artifact" do
905
+ doc = xml_document(@foo._("foo.ipr"))
906
+ base_xpath = "/project/component[@name='ArtifactManager']/artifact"
907
+ facet_xpath = "#{base_xpath}[@type='jar' and @name='bar.jar' and @build-on-make='true']"
908
+ doc.should have_xpath(facet_xpath)
909
+
910
+ doc.should have_xpath("#{facet_xpath}/output-path/text() = $PROJECT_DIR$/bink")
911
+ doc.should have_xpath("#{facet_xpath}/root[@id='archive' and @name='bar.jar']/element[@id='module-output' and @name='bar']")
912
+ doc.should have_xpath("#{facet_xpath}/root[@id='archive' and @name='bar.jar']/element[@id='jpa-descriptors' and @facet='p/jpa/JPA']")
913
+ doc.should have_xpath("#{facet_xpath}/root[@id='archive' and @name='bar.jar']/element[@id='javaee-facet-resources' and @facet='x/ejb/EJB']")
914
+ end
915
+ end
916
+
917
+ describe "that uses add_exploded_ejb_artifact with overrides" do
918
+ before do
919
+ write 'foo/bar/src/main/java/foo/Foo.java' # needed so that buildr will treat as a java project
920
+ artifact('net.sourceforge.jtds:jtds:jar:1.2.7.XX') { |task| write task.name }
921
+
922
+ @foo = define "foo" do
923
+ project.version = '1.0'
924
+ define "bar" do
925
+ compile.with 'net.sourceforge.jtds:jtds:jar:1.2.7.XX'
926
+ package :jar
927
+ end
928
+ ipr.add_exploded_ejb_artifact(project("bar"),
929
+ :ejb_module_names => ['x'],
930
+ :jpa_module_names => ['p'])
931
+ end
932
+ invoke_generate_task
933
+ end
934
+
935
+ it "generates an IPR with an ejb artifact" do
936
+ doc = xml_document(@foo._("foo.ipr"))
937
+ base_xpath = "/project/component[@name='ArtifactManager']/artifact"
938
+ facet_xpath = "#{base_xpath}[@type='exploded-ejb' and @name='bar' and @build-on-make='false']"
939
+ doc.should have_xpath(facet_xpath)
940
+ doc.should have_xpath("#{facet_xpath}/output-path/text() = $PROJECT_DIR$/artifacts/bar")
941
+ doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='module-output' and @name='bar']")
942
+ doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='jpa-descriptors' and @facet='p/jpa/JPA']")
943
+ doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='javaee-facet-resources' and @facet='x/ejb/EJB']")
944
+ end
945
+ end
946
+
947
+ describe "that uses add_exploded_ejb_artifact with no overrides" do
948
+ before do
949
+ write 'foo/bar/src/main/java/foo/Foo.java' # needed so that buildr will treat as a java project
950
+ artifact('net.sourceforge.jtds:jtds:jar:1.2.7.XX') { |task| write task.name }
951
+
952
+ @foo = define "foo" do
953
+ project.version = '1.0'
954
+ define "bar" do
955
+ compile.with 'net.sourceforge.jtds:jtds:jar:1.2.7.XX'
956
+ package :war
957
+ end
958
+ ipr.add_exploded_ejb_artifact(project("bar"))
959
+ end
960
+ invoke_generate_task
961
+ end
962
+
963
+ it "generates an IPR with an ejb artifact" do
964
+ doc = xml_document(@foo._("foo.ipr"))
965
+ base_xpath = "/project/component[@name='ArtifactManager']/artifact"
966
+ facet_xpath = "#{base_xpath}[@type='exploded-ejb' and @name='bar' and @build-on-make='false']"
967
+ doc.should have_xpath(facet_xpath)
968
+
969
+ doc.should have_xpath("#{facet_xpath}/output-path/text() = $PROJECT_DIR$/artifacts/bar")
970
+ doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='module-output' and @name='bar']")
971
+ end
972
+ end
973
+
974
+
975
+ describe "that uses add_exploded_war_artifact with no overrides" do
976
+ before do
977
+ write 'foo/bar/src/main/java/foo/Foo.java' # needed so that buildr will treat as a java project
978
+ artifact('net.sourceforge.jtds:jtds:jar:1.2.7.XX') { |task| write task.name }
979
+
980
+ @foo = define "foo" do
981
+ project.version = '1.0'
982
+ define "bar" do
983
+ compile.with 'net.sourceforge.jtds:jtds:jar:1.2.7.XX'
984
+ package :war
985
+ end
986
+ ipr.add_exploded_war_artifact(project("bar"))
987
+ end
988
+ invoke_generate_task
989
+ end
990
+
991
+ it "generates an IPR with a war artifact" do
992
+ doc = xml_document(@foo._("foo.ipr"))
993
+ base_xpath = "/project/component[@name='ArtifactManager']/artifact"
994
+ facet_xpath = "#{base_xpath}[@type='exploded-war' and @name='bar' and @build-on-make='false']"
995
+ doc.should have_xpath(facet_xpath)
996
+
997
+ doc.should have_xpath("#{facet_xpath}/output-path/text() = $PROJECT_DIR$/artifacts/bar")
998
+ doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='directory' and @name='WEB-INF']/element[@id='directory' and @name='classes']/element[@id='module-output' and @name='bar']")
999
+ doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='directory' and @name='WEB-INF']/element[@id='directory' and @name='lib']/element[@id='file-copy' and @path='$MAVEN_REPOSITORY$/net/sourceforge/jtds/jtds/1.2.7.XX/jtds-1.2.7.XX.jar']")
1000
+ doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='javaee-facet-resources' and @facet='bar/web/Web']")
1001
+ end
1002
+ end
1003
+
1004
+ describe "that uses add_exploded_war_artifact with overrides" do
1005
+ before do
1006
+ write 'foo/bar/src/main/java/foo/Foo.java' # needed so that buildr will treat as a java project
1007
+ artifact('net.sourceforge.jtds:jtds:jar:1.2.7.XX') { |task| write task.name }
1008
+
1009
+ @foo = define "foo" do
1010
+ project.version = '1.0'
1011
+ define "bar" do
1012
+ compile.with 'net.sourceforge.jtds:jtds:jar:1.2.7.XX'
1013
+ package :war
1014
+ end
1015
+ ipr.add_exploded_war_artifact(project,
1016
+ :name => 'gar',
1017
+ :war_module_names => ['x','y'],
1018
+ :gwt_module_names => ['p','q'],
1019
+ :artifacts => ['baz','biz'],
1020
+ :dependencies => ['net.sourceforge.jtds:jtds:jar:1.2.7.XX', project('bar')])
1021
+ end
1022
+ invoke_generate_task
1023
+ end
1024
+
1025
+ it "generates an IPR with a war artifact" do
1026
+ doc = xml_document(@foo._("foo.ipr"))
1027
+ base_xpath = "/project/component[@name='ArtifactManager']/artifact"
1028
+ facet_xpath = "#{base_xpath}[@type='exploded-war' @name='MyFancy.jar' and @build-on-make='false']"
1029
+ doc.should have_xpath(facet_xpath)
1030
+
1031
+ doc.should have_xpath("#{facet_xpath}/output-path/text() = $PROJECT_DIR$/artifacts/gar")
1032
+ doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='directory' and @name='WEB-INF']/element[@id='directory' and @name='classes']/element[@id='module-output' and @name='bar']")
1033
+ doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='directory' and @name='WEB-INF']/element[@id='directory' and @name='lib']/element[@id='file-copy' and @path='$MAVEN_REPOSITORY$/net/sourceforge/jtds/jtds/1.2.7.XX/jtds-1.2.7.XX.jar']")
1034
+ doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='javaee-facet-resources' and @facet='x/web/Web']")
1035
+ doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='javaee-facet-resources' and @facet='y/web/Web']")
1036
+ doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='gwt-compiler-output' and @facet='p/gwt/GWT']")
1037
+ doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='gwt-compiler-output' and @facet='q/gwt/GWT']")
1038
+ doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='directory' and @name='WEB-INF']/element[@id='directory' and @name='lib']/element[@id='artifact' and @artifact-name='baz.jar']")
1039
+ doc.should have_xpath("#{facet_xpath}/root[@id='root']/element[@id='directory' and @name='WEB-INF']/element[@id='directory' and @name='lib']/element[@id='artifact' and @artifact-name='biz.jar']")
1040
+ end
1041
+ end
1042
+
1043
+ describe "with configurations added to root project" do
1044
+ before do
1045
+ @foo = define "foo" do
1046
+ ipr.add_configuration("Run Contacts.html", "GWT.ConfigurationType", "GWT Configuration") do |xml|
1047
+ xml.module(:name => project.iml.id)
1048
+ xml.option(:name => "RUN_PAGE", :value => "Contacts.html")
1049
+ xml.option(:name => "compilerParameters", :value => "-draftCompile -localWorkers 2")
1050
+ xml.option(:name => "compilerMaxHeapSize", :value => "512")
1051
+
1052
+ xml.RunnerSettings(:RunnerId => "Run")
1053
+ xml.ConfigurationWrapper(:RunnerId => "Run")
1054
+ xml.tag! :method
1055
+ end
1056
+ ipr.add_configuration("Run Planner.html", "GWT.ConfigurationType", "GWT Configuration") do |xml|
1057
+ xml.module(:name => project.iml.id)
1058
+ xml.option(:name => "RUN_PAGE", :value => "Planner.html")
1059
+ xml.option(:name => "compilerParameters", :value => "-draftCompile -localWorkers 2")
1060
+ xml.option(:name => "compilerMaxHeapSize", :value => "512")
1061
+
1062
+ xml.RunnerSettings(:RunnerId => "Run")
1063
+ xml.ConfigurationWrapper(:RunnerId => "Run")
1064
+ xml.tag! :method
1065
+ end
1066
+ end
1067
+ invoke_generate_task
1068
+ end
1069
+
1070
+ it "generates an IPR with multiple configurations" do
1071
+ doc = xml_document(@foo._("foo.ipr"))
1072
+ facet_xpath = "/project/component[@name='ProjectRunConfigurationManager']/configuration"
1073
+ doc.should have_nodes(facet_xpath, 2)
1074
+ doc.should have_xpath("#{facet_xpath}[@type='GWT.ConfigurationType' and @name='Run Contacts.html']")
1075
+ doc.should have_xpath("#{facet_xpath}[@type='GWT.ConfigurationType' and @name='Run Planner.html']")
1076
+ end
1077
+ end
1078
+
1079
+ describe "with default configuration added to root project" do
1080
+ before do
1081
+ @foo = define "foo" do
1082
+ ipr.add_default_configuration("GWT.ConfigurationType", "GWT Configuration") do |xml|
1083
+ xml.module(:name => project.iml.id)
1084
+ xml.option(:name => "RUN_PAGE", :value => "Planner.html")
1085
+ xml.option(:name => "compilerParameters", :value => "-draftCompile -localWorkers 2")
1086
+ xml.option(:name => "compilerMaxHeapSize", :value => "512")
1087
+
1088
+ xml.RunnerSettings(:RunnerId => "Run")
1089
+ xml.ConfigurationWrapper(:RunnerId => "Run")
1090
+ xml.tag! :method
1091
+ end
1092
+ end
1093
+ invoke_generate_task
1094
+ end
1095
+
1096
+ it "generates an IPR with default configuration" do
1097
+ doc = xml_document(@foo._("foo.ipr"))
1098
+ facet_xpath = "/project/component[@name='ProjectRunConfigurationManager']/configuration"
1099
+ doc.should have_nodes(facet_xpath, 1)
1100
+ doc.should have_xpath("#{facet_xpath}[@type='GWT.ConfigurationType' and @factoryName='GWT Configuration' and @default='true']")
1101
+ end
1102
+ end
1103
+
1104
+ describe "with add_default_testng_configuration using defaults" do
1105
+ before do
1106
+ @foo = define "foo" do
1107
+ ipr.add_default_testng_configuration
1108
+ end
1109
+ invoke_generate_task
1110
+ end
1111
+
1112
+ it "generates an IPR with default configuration" do
1113
+ doc = xml_document(@foo._("foo.ipr"))
1114
+ configurations_xpath = "/project/component[@name='ProjectRunConfigurationManager']/configuration"
1115
+ doc.should have_nodes(configurations_xpath, 1)
1116
+ configuration_xpath = "#{configurations_xpath}[@type='TestNG' and @factoryName='TestNG' and @default='true']"
1117
+ doc.should have_xpath(configuration_xpath)
1118
+ doc.should have_xpath("#{configuration_xpath}/option[@name='VM_PARAMETERS' and @value='-ea']")
1119
+ doc.should have_xpath("#{configuration_xpath}/option[@name='WORKING_DIRECTORY' and @value='$PROJECT_DIR$']")
1120
+ end
1121
+ end
1122
+
1123
+ describe "with add_default_testng_configuration specifying values" do
1124
+ before do
1125
+ @foo = define "foo" do
1126
+ ipr.add_default_testng_configuration(:dir => 'C:/blah', :jvm_args => '-ea -Dtest.db.url=xxxx')
1127
+ end
1128
+ invoke_generate_task
1129
+ end
1130
+
1131
+ it "generates an IPR with default configuration" do
1132
+ doc = xml_document(@foo._("foo.ipr"))
1133
+ configurations_xpath = "/project/component[@name='ProjectRunConfigurationManager']/configuration"
1134
+ doc.should have_nodes(configurations_xpath, 1)
1135
+ configuration_xpath = "#{configurations_xpath}[@type='TestNG' and @factoryName='TestNG' and @default='true']"
1136
+ doc.should have_xpath(configuration_xpath)
1137
+ doc.should have_xpath("#{configuration_xpath}/option[@name='VM_PARAMETERS' and @value='-ea -Dtest.db.url=xxxx']")
1138
+ doc.should have_xpath("#{configuration_xpath}/option[@name='WORKING_DIRECTORY' and @value='C:/blah']")
1139
+ end
1140
+ end
1141
+
1142
+ describe "with iml.group specified" do
1143
+ before do
1144
+ @foo = define "foo" do
1145
+ iml.group = true
1146
+ define 'bar' do
1147
+ define 'baz' do
1148
+
1149
+ end
1150
+ end
1151
+ define 'rab' do
1152
+ iml.group = "MyGroup"
1153
+ end
1154
+ end
1155
+ invoke_generate_task
1156
+ end
1157
+
1158
+ it "generate an IPR with correct group references" do
1159
+ doc = xml_document(@foo._("foo.ipr"))
1160
+ doc.should have_nodes("#{xpath_to_module}", 4)
1161
+ module_ref = "$PROJECT_DIR$/foo.iml"
1162
+ doc.should have_xpath("#{xpath_to_module}[@fileurl='file://#{module_ref}' and @filepath='#{module_ref}']")
1163
+ module_ref = "$PROJECT_DIR$/rab/rab.iml"
1164
+ doc.should have_xpath("#{xpath_to_module}[@fileurl='file://#{module_ref}' and @filepath='#{module_ref}' @group = 'MyGroup']")
1165
+ module_ref = "$PROJECT_DIR$/bar/bar.iml"
1166
+ doc.should have_xpath("#{xpath_to_module}[@fileurl='file://#{module_ref}' and @filepath='#{module_ref}' @group = 'foo']")
1167
+ module_ref = "$PROJECT_DIR$/bar/baz/baz.iml"
1168
+ doc.should have_xpath("#{xpath_to_module}[@fileurl='file://#{module_ref}' and @filepath='#{module_ref}' @group = 'foo/bar']")
1169
+ end
1170
+ end
1171
+
1172
+ describe "with a single project definition" do
1173
+ describe "and default naming" do
1174
+ before do
1175
+ @foo = define "foo"
1176
+ invoke_generate_task
1177
+ end
1178
+
1179
+ it "generates a single IPR" do
1180
+ Dir[@foo._("**/*.ipr")].should have(1).entry
1181
+ end
1182
+
1183
+ it "generate an IPR in the root directory" do
1184
+ File.should be_exist(@foo._("foo.ipr"))
1185
+ end
1186
+
1187
+ it "generates a single IML" do
1188
+ Dir[@foo._("**/*.iml")].should have(1).entry
1189
+ end
1190
+
1191
+ it "generates an IML in the root directory" do
1192
+ File.should be_exist(@foo._("foo.iml"))
1193
+ end
1194
+
1195
+ it "generate an IPR with the reference to correct module file" do
1196
+ File.should be_exist(@foo._("foo.ipr"))
1197
+ doc = xml_document(@foo._("foo.ipr"))
1198
+ module_ref = "$PROJECT_DIR$/foo.iml"
1199
+ doc.should have_nodes("#{xpath_to_module}[@fileurl='file://#{module_ref}' and @filepath='#{module_ref}']", 1)
1200
+ end
1201
+ end
1202
+
1203
+ describe "with no_iml generation disabled" do
1204
+ before do
1205
+ @foo = define "foo" do
1206
+ project.no_iml
1207
+ end
1208
+ invoke_generate_task
1209
+ end
1210
+
1211
+ it "generates no IML" do
1212
+ Dir[@foo._("**/*.iml")].should have(0).entry
1213
+ end
1214
+
1215
+ it "generate an IPR with no references" do
1216
+ File.should be_exist(@foo._("foo.ipr"))
1217
+ doc = xml_document(@foo._("foo.ipr"))
1218
+ doc.should have_nodes("#{xpath_to_module}", 0)
1219
+ end
1220
+ end
1221
+
1222
+ describe "with ipr generation disabled" do
1223
+ before do
1224
+ @foo = define "foo" do
1225
+ project.no_ipr
1226
+ end
1227
+ invoke_generate_task
1228
+ end
1229
+
1230
+ it "generates a single IML" do
1231
+ Dir[@foo._("**/*.iml")].should have(1).entry
1232
+ end
1233
+
1234
+ it "generate no IPR" do
1235
+ File.should_not be_exist(@foo._("foo.ipr"))
1236
+ end
1237
+ end
1238
+
1239
+ describe "and id overrides" do
1240
+ before do
1241
+ @foo = define "foo" do
1242
+ ipr.id = 'fooble'
1243
+ iml.id = 'feap'
1244
+ define "bar" do
1245
+ iml.id = "baz"
1246
+ end
1247
+ end
1248
+ invoke_generate_task
1249
+ end
1250
+
1251
+ it "generate an IPR in the root directory" do
1252
+ File.should be_exist(@foo._("fooble.ipr"))
1253
+ end
1254
+
1255
+ it "generates an IML in the root directory" do
1256
+ File.should be_exist(@foo._("feap.iml"))
1257
+ end
1258
+
1259
+ it "generates an IML in the subproject directory" do
1260
+ File.should be_exist(@foo._("bar/baz.iml"))
1261
+ end
1262
+
1263
+ it "generate an IPR with the reference to correct module file" do
1264
+ File.should be_exist(@foo._("fooble.ipr"))
1265
+ doc = xml_document(@foo._("fooble.ipr"))
1266
+ module_ref = "$PROJECT_DIR$/feap.iml"
1267
+ doc.should have_nodes("#{xpath_to_module}[@fileurl='file://#{module_ref}' and @filepath='#{module_ref}']", 1)
1268
+ end
1269
+ end
1270
+
1271
+ describe "and a suffix defined" do
1272
+ before do
1273
+ @foo = define "foo" do
1274
+ ipr.suffix = '-ipr-suffix'
1275
+ iml.suffix = '-iml-suffix'
1276
+ end
1277
+ invoke_generate_task
1278
+ end
1279
+
1280
+ it "generate an IPR in the root directory" do
1281
+ File.should be_exist(@foo._("foo-ipr-suffix.ipr"))
1282
+ end
1283
+
1284
+ it "generates an IML in the root directory" do
1285
+ File.should be_exist(@foo._("foo-iml-suffix.iml"))
1286
+ end
1287
+
1288
+ it "generate an IPR with the reference to correct module file" do
1289
+ File.should be_exist(@foo._("foo-ipr-suffix.ipr"))
1290
+ doc = xml_document(@foo._("foo-ipr-suffix.ipr"))
1291
+ doc.should have_nodes("#{xpath_to_module}", 1)
1292
+ module_ref = "$PROJECT_DIR$/foo-iml-suffix.iml"
1293
+ doc.should have_nodes("#{xpath_to_module}[@fileurl='file://#{module_ref}' and @filepath='#{module_ref}']", 1)
1294
+ end
1295
+ end
1296
+ end
1297
+
1298
+ describe "with a subproject" do
1299
+ before do
1300
+ @foo = define "foo" do
1301
+ define 'bar'
1302
+ end
1303
+ invoke_generate_task
1304
+ end
1305
+
1306
+ it "creates the subproject directory" do
1307
+ File.should be_exist(@foo._("bar"))
1308
+ end
1309
+
1310
+ it "generates an IML in the subproject directory" do
1311
+ File.should be_exist(@foo._("bar/bar.iml"))
1312
+ end
1313
+
1314
+ it "generate an IPR with the reference to correct module file" do
1315
+ File.should be_exist(@foo._("foo.ipr"))
1316
+ doc = xml_document(@foo._("foo.ipr"))
1317
+ doc.should have_nodes("#{xpath_to_module}", 2)
1318
+ module_ref = "$PROJECT_DIR$/foo.iml"
1319
+ doc.should have_nodes("#{xpath_to_module}[@fileurl='file://#{module_ref}' and @filepath='#{module_ref}']", 1)
1320
+ module_ref = "$PROJECT_DIR$/bar/bar.iml"
1321
+ doc.should have_nodes("#{xpath_to_module}[@fileurl='file://#{module_ref}' and @filepath='#{module_ref}']", 1)
1322
+ end
1323
+ end
1324
+
1325
+ describe "with base_dir specified" do
1326
+ before do
1327
+ @foo = define "foo" do
1328
+ define('bar', :base_dir => 'fe') do
1329
+ define('baz', :base_dir => 'fi') do
1330
+ define('foe')
1331
+ end
1332
+ define('fum')
1333
+ end
1334
+ end
1335
+ invoke_generate_task
1336
+ end
1337
+
1338
+ it "generates a subproject IML in the specified directory" do
1339
+ File.should be_exist(@foo._("fe/bar.iml"))
1340
+ end
1341
+
1342
+ it "generates a sub-subproject IML in the specified directory" do
1343
+ File.should be_exist(@foo._("fi/baz.iml"))
1344
+ end
1345
+
1346
+ it "generates a sub-sub-subproject IML that inherits the specified directory" do
1347
+ File.should be_exist(@foo._("fi/foe/foe.iml"))
1348
+ end
1349
+
1350
+ it "generates a sub-subproject IML that inherits the specified directory" do
1351
+ File.should be_exist(@foo._("fe/fum/fum.iml"))
1352
+ end
1353
+
1354
+ it "generate an IPR with the references to correct module files" do
1355
+ doc = xml_document(@foo._("foo.ipr"))
1356
+ doc.should have_nodes("#{xpath_to_module}", 5)
1357
+ ["foo.iml", "fe/bar.iml", "fi/baz.iml", "fi/foe/foe.iml", "fe/fum/fum.iml"].each do |module_ref|
1358
+ doc.should have_nodes("#{xpath_to_module}[@fileurl='file://$PROJECT_DIR$/#{module_ref}' and @filepath='$PROJECT_DIR$/#{module_ref}']", 1)
1359
+ end
1360
+ end
1361
+ end
1362
+
1363
+ describe "with extensive intermodule dependencies" do
1364
+ before do
1365
+ mkdir_p 'foo/src/main/resources'
1366
+ mkdir_p 'foo/src/main/java/foo'
1367
+ touch 'foo/src/main/java/foo/Foo.java' # needed so that buildr will treat as a java project
1368
+ artifact('group:id:jar:1.0') { |t| write t.to_s }
1369
+ define "root" do
1370
+ repositories.remote << 'http://mirrors.ibiblio.org/pub/mirrors/maven2/'
1371
+ project.version = "2.5.2"
1372
+ define 'foo' do
1373
+ resources.from _(:source, :main, :resources)
1374
+ compile.with 'group:id:jar:1.0'
1375
+ test.using(:junit)
1376
+ package(:jar)
1377
+ end
1378
+
1379
+ define 'bar' do
1380
+ # internally transitive dependencies on foo, both runtime and test
1381
+ compile.with project('root:foo'), project('root:foo').compile.dependencies
1382
+ test.using(:junit).with [project('root:foo').test.compile.target,
1383
+ project('root:foo').test.resources.target,
1384
+ project('root:foo').test.compile.dependencies].compact
1385
+ package(:jar)
1386
+ end
1387
+ end
1388
+
1389
+ invoke_generate_task
1390
+ @bar_iml = xml_document(project('root:bar')._('bar.iml'))
1391
+ @bar_lib_urls = @bar_iml.get_elements("//orderEntry[@type='module-library']/library/CLASSES/root").collect do |root|
1392
+ root.attribute('url').to_s
1393
+ end
1394
+ end
1395
+
1396
+ it "depends on the associated module exactly once" do
1397
+ @bar_iml.should have_nodes("//orderEntry[@type='module' and @module-name='foo' and @exported=""]", 1)
1398
+ end
1399
+
1400
+ it "does not depend on the other project's packaged JAR" do
1401
+ @bar_lib_urls.grep(%r{#{project('root:foo').packages.first}}).should == []
1402
+ end
1403
+
1404
+ it "does not depend on the the other project's target/classes directory" do
1405
+ @bar_lib_urls.grep(%r{foo/target/classes}).should == []
1406
+ end
1407
+
1408
+ it "does not depend on the the other project's target/resources directory" do
1409
+ @bar_lib_urls.grep(%r{file://\$MODULE_DIR\$/../foo/target/resources}).size.should == 0
1410
+ end
1411
+ end
1412
+
1413
+ describe "with a single project definition" do
1414
+ before do
1415
+ @foo = define "foo"
1416
+ end
1417
+
1418
+ it "informs the user about generating IPR" do
1419
+ lambda { invoke_generate_task }.should show_info(/Writing (.+)\/foo\.ipr/)
1420
+ end
1421
+
1422
+ it "informs the user about generating IML" do
1423
+ lambda { invoke_generate_task }.should show_info(/Writing (.+)\/foo\.iml/)
1424
+ end
1425
+ end
1426
+ describe "with a subproject" do
1427
+ before do
1428
+ @foo = define "foo" do
1429
+ define 'bar'
1430
+ end
1431
+ end
1432
+
1433
+ it "informs the user about generating subporoject IML" do
1434
+ lambda { invoke_generate_task }.should show_info(/Writing (.+)\/bar\/bar\.iml/)
1435
+ end
1436
+ end
1437
+
1438
+ describe "with compile.options.source = '1.6'" do
1439
+
1440
+ before do
1441
+ @foo = define "foo" do
1442
+ compile.options.source = '1.5'
1443
+ end
1444
+ invoke_generate_task
1445
+ end
1446
+
1447
+ it "generate an ProjectRootManager with 1.5 jdk specified" do
1448
+ #raise File.read(@foo._("foo.ipr"))
1449
+ xml_document(@foo._("foo.ipr")).
1450
+ should have_xpath("/project/component[@name='ProjectRootManager' and @project-jdk-name = '1.5' and @languageLevel = 'JDK_1_5']")
1451
+ end
1452
+
1453
+ it "generates a ProjectDetails component with the projectName option set" do
1454
+ xml_document(@foo._("foo.ipr")).
1455
+ should have_xpath("/project/component[@name='ProjectDetails']/option[@name = 'projectName' and @value = 'foo']")
1456
+ end
1457
+ end
1458
+
1459
+ describe "with compile.options.source = '1.6'" do
1460
+ before do
1461
+ @foo = define "foo" do
1462
+ compile.options.source = '1.6'
1463
+ end
1464
+ invoke_generate_task
1465
+ end
1466
+
1467
+ it "generate an ProjectRootManager with 1.6 jdk specified" do
1468
+ xml_document(@foo._("foo.ipr")).
1469
+ should have_xpath("/project/component[@name='ProjectRootManager' and @project-jdk-name = '1.6' and @languageLevel = 'JDK_1_6']")
1470
+ end
1471
+ end
1472
+
1473
+ describe "with iml.skip_content! specified" do
1474
+ before do
1475
+ @foo = define "foo" do
1476
+ iml.skip_content!
1477
+ end
1478
+ invoke_generate_task
1479
+ end
1480
+
1481
+ it "generate an IML with no content section" do
1482
+ doc = xml_document(@foo._(root_module_filename(@foo)))
1483
+ doc.should_not have_xpath("/module/component[@name='NewModuleRootManager']/content")
1484
+ end
1485
+ end
1486
+
1487
+ describe "with iml.skip_content! not specified and standard layout" do
1488
+ before do
1489
+ @foo = define "foo" do
1490
+ end
1491
+ invoke_generate_task
1492
+ end
1493
+
1494
+ it "generate an IML with content section" do
1495
+ root_module_xml(@foo).should have_xpath("/module/component[@name='NewModuleRootManager']/content")
1496
+ end
1497
+
1498
+ it "generate an exclude in content section for reports" do
1499
+ root_module_xml(@foo).should have_xpath("/module/component[@name='NewModuleRootManager']/content/excludeFolder[@url='file://$MODULE_DIR$/reports']")
1500
+ end
1501
+
1502
+ it "generate an exclude in content section for target" do
1503
+ root_module_xml(@foo).should have_xpath("/module/component[@name='NewModuleRootManager']/content/excludeFolder[@url='file://$MODULE_DIR$/target']")
1504
+ end
1505
+ end
1506
+
1507
+ describe "with subprojects" do
1508
+ before do
1509
+ @foo = define "foo" do
1510
+ define "bar" do
1511
+ compile.from _(:source, :main, :bar)
1512
+ end
1513
+ end
1514
+ invoke_generate_task
1515
+ @bar_doc = xml_document(project('foo:bar')._('bar.iml'))
1516
+ end
1517
+
1518
+ it "generates the correct source directories" do
1519
+ @bar_doc.should have_xpath("//content/sourceFolder[@url='file://$MODULE_DIR$/src/main/bar']")
1520
+ end
1521
+
1522
+ it "generates the correct exclude directories" do
1523
+ @bar_doc.should have_xpath("//content/excludeFolder[@url='file://$MODULE_DIR$/target']")
1524
+ end
1525
+ end
1526
+
1527
+ describe "with overrides" do
1528
+ before do
1529
+ @foo = define "foo" do
1530
+ compile.from _(:source, :main, :bar)
1531
+ iml.main_source_directories << _(:source, :main, :baz)
1532
+ iml.test_source_directories << _(:source, :test, :foo)
1533
+ end
1534
+ invoke_generate_task
1535
+ end
1536
+
1537
+ it "generates the correct main source directories" do
1538
+ root_module_xml(@foo).should have_xpath("//content/sourceFolder[@url='file://$MODULE_DIR$/src/main/baz' and @isTestSource='false']")
1539
+ end
1540
+
1541
+ it "generates the correct test source directories" do
1542
+ root_module_xml(@foo).should have_xpath("//content/sourceFolder[@url='file://$MODULE_DIR$/src/test/foo' and @isTestSource='true']")
1543
+ end
1544
+ end
1545
+
1546
+ describe "with report dir outside content" do
1547
+ before do
1548
+ layout = Layout::Default.new
1549
+ layout[:reports] = "../reports"
1550
+
1551
+ @foo = define "foo", :layout => layout do
1552
+ end
1553
+ invoke_generate_task
1554
+ end
1555
+
1556
+ it "generate an exclude in content section for target" do
1557
+ root_module_xml(@foo).should have_xpath("/module/component[@name='NewModuleRootManager']/content/excludeFolder[@url='file://$MODULE_DIR$/target']")
1558
+ end
1559
+
1560
+ it "generates an content section without an exclude for report dir" do
1561
+ root_module_xml(@foo).should have_nodes("/module/component[@name='NewModuleRootManager']/content/excludeFolder", 1)
1562
+ end
1563
+ end
1564
+
1565
+ describe "with target dir outside content" do
1566
+ before do
1567
+ layout = Layout::Default.new
1568
+ layout[:target] = "../target"
1569
+ layout[:target, :main] = "../target"
1570
+
1571
+ @foo = define "foo", :layout => layout do
1572
+ end
1573
+ invoke_generate_task
1574
+ end
1575
+
1576
+ it "generate an exclude in content section for reports" do
1577
+ root_module_xml(@foo).should have_xpath("/module/component[@name='NewModuleRootManager']/content/excludeFolder[@url='file://$MODULE_DIR$/reports']")
1578
+ end
1579
+
1580
+ it "generates an content section without an exclude for target dir" do
1581
+ root_module_xml(@foo).should have_nodes("/module/component[@name='NewModuleRootManager']/content/excludeFolder", 1)
1582
+ end
1583
+ end
1584
+
1585
+ describe "templates" do
1586
+
1587
+ def ipr_template
1588
+ return <<PROJECT_XML
1589
+ <?xml version="1.0" encoding="UTF-8"?>
1590
+ <project version="4">
1591
+ <component name="SvnBranchConfigurationManager">
1592
+ <option name="mySupportsUserInfoFilter" value="false" />
1593
+ </component>
1594
+ </project>
1595
+ PROJECT_XML
1596
+ end
1597
+
1598
+ def ipr_existing
1599
+ return <<PROJECT_XML
1600
+ <?xml version="1.0" encoding="UTF-8"?>
1601
+ <project version="4">
1602
+ <component name="AntConfiguration">
1603
+ <defaultAnt bundledAnt="true" />
1604
+ </component>
1605
+ <component name="SvnBranchConfigurationManager">
1606
+ <option name="mySupportsUserInfoFilter" value="true" />
1607
+ </component>
1608
+ <component name="ProjectModuleManager">
1609
+ <modules>
1610
+ <module fileurl="file://$PROJECT_DIR$/existing.iml" filepath="$PROJECT_DIR$/existing.iml" />
1611
+ </modules>
1612
+ </component>
1613
+ </project>
1614
+ PROJECT_XML
1615
+ end
1616
+
1617
+ def ipr_from_template_xpath
1618
+ "/project/component[@name='SvnBranchConfigurationManager']/option[@name = 'mySupportsUserInfoFilter' and @value = 'false']"
1619
+ end
1620
+
1621
+ def ipr_from_existing_xpath
1622
+ "/project/component[@name='AntConfiguration']"
1623
+ end
1624
+
1625
+ def ipr_from_existing_shadowing_template_xpath
1626
+ "/project/component[@name='SvnBranchConfigurationManager']/option[@name = 'mySupportsUserInfoFilter' and @value = 'true']"
1627
+ end
1628
+
1629
+ def ipr_from_existing_shadowing_generated_xpath
1630
+ "/project/component[@name='ProjectModuleManager']/modules/module[@fileurl = 'file://$PROJECT_DIR$/existing.iml']"
1631
+ end
1632
+
1633
+ def ipr_from_generated_xpath
1634
+ "/project/component[@name='ProjectModuleManager']/modules/module[@fileurl = 'file://$PROJECT_DIR$/foo.iml']"
1635
+ end
1636
+
1637
+ def iml_template
1638
+ return <<PROJECT_XML
1639
+ <?xml version="1.0" encoding="UTF-8"?>
1640
+ <module type="JAVA_MODULE" version="4">
1641
+ <component name="FacetManager">
1642
+ <facet type="JRUBY" name="JRuby">
1643
+ <configuration number="0">
1644
+ <JRUBY_FACET_CONFIG_ID NAME="JRUBY_SDK_NAME" VALUE="JRuby SDK 1.4.0RC1" />
1645
+ </configuration>
1646
+ </facet>
1647
+ </component>
1648
+ </module>
1649
+ PROJECT_XML
1650
+ end
1651
+
1652
+ def iml_existing
1653
+ return <<PROJECT_XML
1654
+ <?xml version="1.0" encoding="UTF-8"?>
1655
+ <module type="JAVA_MODULE" version="4">
1656
+ <component name="FunkyPlugin"/>
1657
+ <component name="FacetManager">
1658
+ <facet type="SCALA" name="Scala"/>
1659
+ </component>
1660
+ <component name="NewModuleRootManager" inherit-compiler-output="true">
1661
+ <exclude-output />
1662
+ <content url="file://$MODULE_DIR$"/>
1663
+ <orderEntry type="inheritedJdk" />
1664
+ <orderEntry type="sourceFolder" forTests="false" />
1665
+ <orderEntry type="module" module-name="buildr-bnd" exported="" />
1666
+ </component>
1667
+ </module>
1668
+ PROJECT_XML
1669
+ end
1670
+
1671
+ def iml_from_template_xpath
1672
+ "/module/component[@name='FacetManager']/facet[@type = 'JRUBY']"
1673
+ end
1674
+
1675
+ def iml_from_existing_xpath
1676
+ "/module/component[@name='FunkyPlugin']"
1677
+ end
1678
+
1679
+ def iml_from_existing_shadowing_template_xpath
1680
+ "/module/component[@name='FacetManager']/facet[@type = 'SCALA']"
1681
+ end
1682
+
1683
+ def iml_from_existing_shadowing_generated_xpath
1684
+ "/module/component[@name='NewModuleRootManager']/orderEntry[@module-name = 'buildr-bnd']"
1685
+ end
1686
+
1687
+ def iml_from_generated_xpath
1688
+ "/module/component[@name='NewModuleRootManager']/orderEntry[@type = 'module-library']"
1689
+ end
1690
+
1691
+ describe "with existing project files" do
1692
+ before do
1693
+ write "foo.ipr", ipr_existing
1694
+ write "foo.iml", iml_existing
1695
+ artifact('group:id:jar:1.0') { |t| write t.to_s }
1696
+ @foo = define "foo" do
1697
+ ipr.template = nil
1698
+ iml.template = nil
1699
+ compile.with 'group:id:jar:1.0'
1700
+ end
1701
+ invoke_generate_task
1702
+ end
1703
+
1704
+ it "replaces ProjectModuleManager component in existing ipr file" do
1705
+ xml_document(@foo._("foo.ipr")).should have_xpath(ipr_from_generated_xpath)
1706
+ xml_document(@foo._("foo.ipr")).should_not have_xpath(ipr_from_existing_shadowing_generated_xpath)
1707
+ end
1708
+
1709
+ it "merges component in existing ipr file" do
1710
+ xml_document(@foo._("foo.ipr")).should have_xpath(ipr_from_existing_xpath)
1711
+ end
1712
+
1713
+ def iml_from_generated_xpath
1714
+ "/module/component[@name='NewModuleRootManager']/orderEntry[@type = 'module-library']"
1715
+ end
1716
+
1717
+ it "replaces NewModuleRootManager component in existing iml file" do
1718
+ xml_document(@foo._("foo.iml")).should have_xpath(iml_from_generated_xpath)
1719
+ xml_document(@foo._("foo.iml")).should_not have_xpath(iml_from_existing_shadowing_generated_xpath)
1720
+ end
1721
+
1722
+ it "merges component in existing iml file" do
1723
+ xml_document(@foo._("foo.iml")).should have_xpath(iml_from_existing_xpath)
1724
+ end
1725
+ end
1726
+
1727
+ describe "with an iml template" do
1728
+ before do
1729
+ write "module.template.iml", iml_template
1730
+ artifact('group:id:jar:1.0') { |t| write t.to_s }
1731
+ @foo = define "foo" do
1732
+ ipr.template = nil
1733
+ iml.template = "module.template.iml"
1734
+ compile.with 'group:id:jar:1.0'
1735
+ end
1736
+ invoke_generate_task
1737
+ end
1738
+
1739
+ it "replaces generated components" do
1740
+ xml_document(@foo._("foo.iml")).should have_xpath(iml_from_generated_xpath)
1741
+ end
1742
+
1743
+ it "merges component in iml template" do
1744
+ xml_document(@foo._("foo.iml")).should have_xpath(iml_from_template_xpath)
1745
+ end
1746
+ end
1747
+
1748
+ describe "with an iml template and existing iml" do
1749
+ before do
1750
+ write "module.template.iml", iml_template
1751
+ write "foo.iml", iml_existing
1752
+ artifact('group:id:jar:1.0') { |t| write t.to_s }
1753
+ @foo = define "foo" do
1754
+ ipr.template = nil
1755
+ iml.template = "module.template.iml"
1756
+ compile.with 'group:id:jar:1.0'
1757
+ end
1758
+ invoke_generate_task
1759
+ end
1760
+
1761
+ it "replaces generated components" do
1762
+ xml_document(@foo._("foo.iml")).should have_xpath(iml_from_generated_xpath)
1763
+ end
1764
+
1765
+ it "merges component in iml template" do
1766
+ xml_document(@foo._("foo.iml")).should have_xpath(iml_from_template_xpath)
1767
+ end
1768
+
1769
+ it "merges components not in iml template and not generated by task" do
1770
+ xml_document(@foo._("foo.iml")).should have_xpath(iml_from_existing_xpath)
1771
+ xml_document(@foo._("foo.iml")).should_not have_xpath(iml_from_existing_shadowing_template_xpath)
1772
+ xml_document(@foo._("foo.iml")).should_not have_xpath(iml_from_existing_shadowing_generated_xpath)
1773
+ end
1774
+ end
1775
+
1776
+ describe "with an ipr template" do
1777
+ before do
1778
+ write "project.template.iml", ipr_template
1779
+ artifact('group:id:jar:1.0') { |t| write t.to_s }
1780
+ @foo = define "foo" do
1781
+ ipr.template = "project.template.iml"
1782
+ iml.template = nil
1783
+ compile.with 'group:id:jar:1.0'
1784
+ end
1785
+ invoke_generate_task
1786
+ end
1787
+
1788
+ it "replaces generated component in ipr template" do
1789
+ xml_document(@foo._("foo.ipr")).should have_xpath(ipr_from_generated_xpath)
1790
+ end
1791
+
1792
+ it "merges component in ipr template" do
1793
+ xml_document(@foo._("foo.ipr")).should have_xpath(ipr_from_template_xpath)
1794
+ end
1795
+ end
1796
+
1797
+ describe "with an ipr template and existing ipr" do
1798
+ before do
1799
+ write "project.template.iml", ipr_template
1800
+ write "foo.ipr", ipr_existing
1801
+ artifact('group:id:jar:1.0') { |t| write t.to_s }
1802
+ @foo = define "foo" do
1803
+ ipr.template = "project.template.iml"
1804
+ iml.template = nil
1805
+ compile.with 'group:id:jar:1.0'
1806
+ end
1807
+ invoke_generate_task
1808
+ end
1809
+
1810
+ it "replaces generated component in ipr template" do
1811
+ xml_document(@foo._("foo.ipr")).should have_xpath(ipr_from_generated_xpath)
1812
+ end
1813
+
1814
+ it "merges component in ipr template" do
1815
+ xml_document(@foo._("foo.ipr")).should have_xpath(ipr_from_template_xpath)
1816
+ end
1817
+
1818
+ it "merges components not in ipr template and not generated by task" do
1819
+ xml_document(@foo._("foo.ipr")).should have_xpath(ipr_from_existing_xpath)
1820
+ xml_document(@foo._("foo.ipr")).should_not have_xpath(ipr_from_existing_shadowing_generated_xpath)
1821
+ xml_document(@foo._("foo.ipr")).should_not have_xpath(ipr_from_existing_shadowing_template_xpath)
1822
+ end
1823
+ end
1824
+ end
1825
+ end
1826
+
1827
+ describe "Buildr::IntellijIdea::IdeaModule" do
1828
+
1829
+ describe "with no settings" do
1830
+ before do
1831
+ @foo = define "foo"
1832
+ end
1833
+
1834
+ it "has correct default iml.type setting" do
1835
+ @foo.iml.type.should == "JAVA_MODULE"
1836
+ end
1837
+
1838
+ it "has correct default iml.local_repository_env_override setting" do
1839
+ @foo.iml.local_repository_env_override.should == "MAVEN_REPOSITORY"
1840
+ end
1841
+ end
1842
+
1843
+ describe "settings inherited in subprojects" do
1844
+ before do
1845
+ mkdir_p 'bar'
1846
+ @foo = define "foo" do
1847
+ iml.type = "FOO_MODULE_TYPE"
1848
+ define 'bar'
1849
+ end
1850
+ invoke_generate_task
1851
+ end
1852
+
1853
+ it "generates root IML with specified type" do
1854
+ module_file = root_module_filename(@foo)
1855
+ File.should be_exist(module_file)
1856
+ File.read(module_file).should =~ /FOO_MODULE_TYPE/
1857
+ end
1858
+
1859
+ it "generates subproject IML with inherited type" do
1860
+ module_file = subproject_module_filename(@foo, "bar")
1861
+ File.should be_exist(module_file)
1862
+ File.read(module_file).should =~ /FOO_MODULE_TYPE/
1863
+ end
1864
+
1865
+ end
1866
+
1867
+ describe "with local_repository_env_override = nil" do
1868
+ if Buildr::Util.win_os?
1869
+ describe "base_directory on different drive on windows" do
1870
+ before do
1871
+ @foo = define "foo", :base_dir => "C:/bar" do
1872
+ iml.local_repository_env_override = nil
1873
+ end
1874
+ end
1875
+
1876
+ it "generates relative paths correctly" do
1877
+ @foo.iml.send(:resolve_path, "E:/foo").should eql('E:/foo')
1878
+ end
1879
+ end
1880
+
1881
+ describe "base_directory on same drive on windows" do
1882
+ before do
1883
+ @foo = define "foo", :base_dir => "C:/bar" do
1884
+ iml.local_repository_env_override = nil
1885
+ end
1886
+ end
1887
+
1888
+ it "generates relative paths correctly" do
1889
+ @foo.iml.send(:resolve_path, "C:/foo").should eql('$MODULE_DIR$/../foo')
1890
+ end
1891
+ end
1892
+ end
1893
+ end
1894
+ end
1895
+
1896
+ describe "project extension" do
1897
+ it "provides an 'idea' task" do
1898
+ Rake::Task.tasks.detect { |task| task.to_s == "idea" }.should_not be_nil
1899
+ end
1900
+
1901
+ it "documents the 'idea' task" do
1902
+ Rake::Task.tasks.detect { |task| task.to_s == "idea" }.comment.should_not be_nil
1903
+ end
1904
+
1905
+ it "provides an 'idea:clean' task" do
1906
+ Rake::Task.tasks.detect { |task| task.to_s == "idea:clean" }.should_not be_nil
1907
+ end
1908
+
1909
+ it "documents the 'idea:clean' task" do
1910
+ Rake::Task.tasks.detect { |task| task.to_s == "idea:clean" }.comment.should_not be_nil
1911
+ end
1912
+
1913
+ describe "#no_iml" do
1914
+ it "makes #iml? false" do
1915
+ @foo = define "foo" do
1916
+ project.no_iml
1917
+ end
1918
+ @foo.iml?.should be_false
1919
+ end
1920
+ end
1921
+
1922
+ describe "#iml" do
1923
+ before do
1924
+ define "foo" do
1925
+ iml.suffix = "-top"
1926
+
1927
+ define "bar" do
1928
+ iml.suffix = "-mid"
1929
+
1930
+ define "baz" do
1931
+ end
1932
+ end
1933
+ end
1934
+ end
1935
+
1936
+ it "inherits the direct parent's IML settings" do
1937
+ project('foo:bar:baz').iml.suffix.should == "-mid"
1938
+ end
1939
+
1940
+ it "does not modify the parent's IML settings" do
1941
+ project('foo').iml.suffix.should == "-top"
1942
+ end
1943
+
1944
+ it "works even when the parent has no IML" do
1945
+ lambda {
1946
+ define "a" do
1947
+ project.no_iml
1948
+ define "b" do
1949
+ iml.suffix = "-alone"
1950
+ end
1951
+ end
1952
+ }.should_not raise_error
1953
+ end
1954
+
1955
+ it "inherits from the first ancestor which has an IML" do
1956
+ define "a" do
1957
+ iml.suffix = "-a"
1958
+ define "b" do
1959
+ iml.suffix = "-b"
1960
+ define "c" do
1961
+ project.no_iml
1962
+ define "d" do
1963
+ project.no_iml
1964
+ define "e" do
1965
+ project.no_iml
1966
+ define "f" do
1967
+ end
1968
+ end
1969
+ end
1970
+ end
1971
+ end
1972
+ end
1973
+
1974
+ project("a:b:c:d:e:f").iml.suffix.should == "-b"
1975
+ end
1976
+ end
1977
+ end
1978
+
1979
+ end