BuildMaster 0.8.1 → 0.9.0

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 (72) hide show
  1. data/README +6 -29
  2. data/lib/buildmaster.rb +0 -2
  3. data/lib/buildmaster/ant_driver.rb +13 -12
  4. data/lib/buildmaster/build_number_file.rb +2 -12
  5. data/lib/buildmaster/buildnumber +1 -1
  6. data/lib/buildmaster/cotta.rb +4 -0
  7. data/lib/buildmaster/cotta/command_error.rb +5 -0
  8. data/lib/buildmaster/cotta/cotta.rb +35 -0
  9. data/lib/buildmaster/cotta/cotta_dir.rb +73 -0
  10. data/lib/buildmaster/cotta/cotta_file.rb +99 -0
  11. data/lib/buildmaster/cotta/file_not_found_error.rb +13 -0
  12. data/lib/buildmaster/cotta/in_memory_system.rb +160 -0
  13. data/lib/buildmaster/cotta/physical_system.rb +64 -0
  14. data/lib/buildmaster/cvs_driver.rb +5 -13
  15. data/lib/buildmaster/file_processor.rb +34 -33
  16. data/lib/buildmaster/java_manifest.rb +3 -3
  17. data/lib/buildmaster/site/site.rb +11 -22
  18. data/lib/buildmaster/site_spec.rb +15 -13
  19. data/lib/buildmaster/source_file_handler.rb +1 -1
  20. data/lib/buildmaster/svn_driver.rb +14 -20
  21. data/lib/buildmaster/{template_exception.rb → template_error.rb} +1 -1
  22. data/lib/buildmaster/template_runner.rb +2 -2
  23. data/lib/buildmaster/templatelets/attribute.rb +1 -1
  24. data/lib/buildmaster/templatelets/href.rb +1 -1
  25. data/lib/buildmaster/templatelets/text.rb +1 -1
  26. data/lib/buildmaster/templatelets/when.rb +1 -1
  27. data/lib/buildmaster/windows.rb +3 -0
  28. data/lib/buildmaster/windows/iis_driver.rb +33 -0
  29. data/lib/buildmaster/windows/sql_server_driver.rb +27 -0
  30. data/test/buildmaster/cotta/content.txt +3 -0
  31. data/test/buildmaster/cotta/cotta_specifications.rb +172 -0
  32. data/test/buildmaster/cotta/physical_system_stub.rb +85 -0
  33. data/test/buildmaster/cotta/system_file_specifications.rb +131 -0
  34. data/test/buildmaster/cotta/tc_cotta.rb +33 -0
  35. data/test/buildmaster/cotta/tc_cotta_dir_in_memory.rb +23 -0
  36. data/test/buildmaster/cotta/tc_cotta_dir_physical.rb +17 -0
  37. data/test/buildmaster/cotta/tc_cotta_file_in_memory.rb +20 -0
  38. data/test/buildmaster/cotta/tc_cotta_file_physical.rb +17 -0
  39. data/test/buildmaster/cotta/tc_in_memory_system.rb +25 -0
  40. data/test/buildmaster/cotta/tc_physical_system.rb +26 -0
  41. data/test/buildmaster/manifest.mf +1 -1
  42. data/test/buildmaster/site/tc_site.rb +58 -34
  43. data/test/buildmaster/site/tc_template_builder.rb +32 -31
  44. data/test/buildmaster/tc_ant_driver.rb +11 -13
  45. data/test/buildmaster/tc_build_number_file.rb +21 -16
  46. data/test/buildmaster/tc_cvs_driver.rb +35 -37
  47. data/test/buildmaster/tc_file_processor.rb +58 -34
  48. data/test/buildmaster/tc_java_manifest.rb +37 -9
  49. data/test/buildmaster/tc_site_spec.rb +20 -15
  50. data/test/buildmaster/tc_source_file_handler.rb +4 -4
  51. data/test/buildmaster/tc_svn_driver.rb +51 -38
  52. data/test/buildmaster/tc_template_runner.rb +19 -18
  53. data/test/buildmaster/tc_tree_to_object.rb +47 -46
  54. data/test/buildmaster/tc_xtemplate.rb +52 -38
  55. data/test/buildmaster/templatelets/common_templatelet_test.rb +9 -8
  56. data/test/buildmaster/templatelets/tc_attribute.rb +26 -23
  57. data/test/buildmaster/templatelets/tc_each.rb +27 -26
  58. data/test/buildmaster/templatelets/tc_href.rb +14 -13
  59. data/test/buildmaster/templatelets/tc_include.rb +11 -4
  60. data/test/buildmaster/templatelets/tc_link.rb +18 -12
  61. data/test/buildmaster/templatelets/tc_text.rb +12 -7
  62. data/test/buildmaster/templatelets/tc_when.rb +11 -5
  63. data/test/buildmaster/windows/tc_iis_driver.rb +29 -0
  64. data/test/buildmaster/windows/tc_sql_server_driver.rb +24 -0
  65. data/test/spec_runner.rb +27 -0
  66. data/test/ts_buildmaster.rb +2 -19
  67. metadata +34 -10
  68. data/lib/buildmaster/release_control.rb +0 -22
  69. data/lib/buildmaster/shell_command.rb +0 -39
  70. data/test/buildmaster/tc_release_control.rb +0 -27
  71. data/test/buildmaster/ts_site.rb +0 -4
  72. data/test/buildmaster/ts_templatelets.rb +0 -10
@@ -0,0 +1,33 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib')
2
+
3
+ require 'spec'
4
+ require 'buildmaster/cotta'
5
+ require 'buildmaster/cotta/in_memory_system'
6
+
7
+ module BuildMaster
8
+
9
+ context 'Cotta' do
10
+ setup do
11
+ @system = InMemorySystem.new
12
+ @cotta = Cotta.new(@system)
13
+ end
14
+
15
+ specify 'shell out command to system' do
16
+ @cotta.shell('shell command')
17
+ @system.executed_commands.length.should_equal 1
18
+ @system.executed_commands[0].should_equal 'shell command'
19
+ end
20
+
21
+ specify 'instantiate dir from cotta' do
22
+ dir = @cotta.dir('dirname')
23
+ dir.name.should_equal 'dirname'
24
+ end
25
+
26
+ specify 'instantiate file from cotta' do
27
+ file = @cotta.file('one/two/three.txt')
28
+ file.name.should_equal 'three.txt'
29
+ file.parent.name.should_equal 'two'
30
+ end
31
+ end
32
+
33
+ end
@@ -0,0 +1,23 @@
1
+ $:.unshift File.join(File.dirname(__FILE__))
2
+
3
+ require 'cotta_specifications'
4
+
5
+ $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib')
6
+
7
+ require 'spec'
8
+ require 'buildmaster/cotta/in_memory_system'
9
+
10
+ module BuildMaster
11
+ context 'Directory object with cotta for in memory system' do
12
+ extend CottaSpecifications
13
+ setup do
14
+ @system = InMemorySystem.new
15
+ end
16
+
17
+ specify 'dir should not be equal if system different' do
18
+ (BuildMaster::CottaDir.new(InMemorySystem.new, Pathname.new('dir')) == @dir).should_equal false
19
+ end
20
+
21
+ register_cotta_dir_specifications
22
+ end
23
+ end
@@ -0,0 +1,17 @@
1
+ $:.unshift File.join(File.dirname(__FILE__))
2
+
3
+ require 'cotta_specifications'
4
+ require 'physical_system_stub'
5
+
6
+ require 'spec'
7
+
8
+ module BuildMaster
9
+ context 'Directory object with cotta for physical system' do
10
+ extend CottaSpecifications
11
+ setup do
12
+ @system = PhysicalSystemStub.new
13
+ end
14
+
15
+ register_cotta_dir_specifications
16
+ end
17
+ end
@@ -0,0 +1,20 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+
3
+ require 'cotta_specifications'
4
+
5
+ $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib')
6
+
7
+ require 'spec'
8
+ require 'buildmaster/cotta/in_memory_system'
9
+
10
+ module BuildMaster
11
+ context 'Cotta file' do
12
+ extend CottaSpecifications
13
+ setup do
14
+ @system = InMemorySystem.new
15
+ end
16
+
17
+ register_cotta_file_specifications
18
+
19
+ end
20
+ end
@@ -0,0 +1,17 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+
3
+ require 'spec'
4
+ require 'cotta_specifications'
5
+ require 'physical_system_stub'
6
+
7
+ module BuildMaster
8
+ context 'Cotta file' do
9
+ extend CottaSpecifications
10
+ setup do
11
+ @system = PhysicalSystemStub.new
12
+ end
13
+
14
+ register_cotta_file_specifications
15
+
16
+ end
17
+ end
@@ -0,0 +1,25 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+
3
+ require 'system_file_specifications'
4
+
5
+ $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib')
6
+
7
+ require 'buildmaster/cotta/in_memory_system'
8
+ require 'spec'
9
+
10
+ module BuildMaster
11
+
12
+ context 'In memory system' do
13
+ setup do
14
+ @system = InMemorySystem.new
15
+ @ios = Array.new
16
+ end
17
+
18
+ teardown do
19
+ @ios.each {|io| io.close unless io.closed?}
20
+ end
21
+
22
+ register_system_file_specifications
23
+
24
+ end
25
+ end
@@ -0,0 +1,26 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+
3
+ require 'system_file_specifications'
4
+ require 'physical_system_stub'
5
+
6
+ $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib')
7
+
8
+ require 'buildmaster/cotta/physical_system'
9
+ require 'spec'
10
+
11
+ module BuildMaster
12
+
13
+ context 'Physical System' do
14
+ setup do
15
+ @system = PhysicalSystemStub.new
16
+ @ios = Array.new
17
+ end
18
+
19
+ teardown do
20
+ @ios.each {|io| io.close unless io.closed?}
21
+ end
22
+
23
+ register_system_file_specifications
24
+
25
+ end
26
+ end
@@ -1,5 +1,5 @@
1
1
  Implementation-Version: 2.3.3
2
- Implementation-Build: 1132
2
+ Implementation-Build: 1139
3
3
 
4
4
  Implementation-Vendor: Vendor
5
5
  Implementation-Number: Number
@@ -1,41 +1,49 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__), "..", "..", '..', "lib")
2
2
 
3
- require 'test/unit'
3
+ require 'spec'
4
4
  require 'buildmaster'
5
+ require 'buildmaster/cotta'
6
+ require 'buildmaster/cotta/in_memory_system'
5
7
 
6
8
  module BuildMaster
7
9
 
8
- class SiteTest < Test::Unit::TestCase
9
- protected
10
- def setup
11
- super
12
- @temp = File.join(File.dirname(__FILE__), '..', '..', 'tmp')
13
-
14
- if (File.exist? @temp)
15
- delete_all(@temp)
16
- end
10
+ context 'Site' do
11
+ setup do
12
+ @system = InMemorySystem.new
13
+ @cotta = Cotta.new(@system)
14
+ @root = @cotta.dir('site')
17
15
  end
18
16
 
19
- private
20
- def delete_all(directory)
21
- Dir.foreach(directory) do |name|
22
- if (name != '.' && name != '..')
23
- file = File.join(directory, name)
24
- if (File.directory? file)
25
- delete_all(file)
26
- else
27
- File.delete(file)
28
- end
29
- end
30
- end
31
- Dir.rmdir(directory)
32
- end
33
-
34
- public
35
- def test_should_build_based_on_content
36
- spec = SiteSpec.new
37
- spec.output_dir = File.join(@temp, 'output')
38
- spec.content_dir = File.join(File.dirname(__FILE__), 'content')
17
+ specify 'should build base on content' do
18
+ content_dir = @root.dir('content')
19
+ content_dir.file('index.html').save(<<CONTENT
20
+ <!DOCTYPE html
21
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
22
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
23
+ <html xmlns="http://www.w3.org/1999/xhtml">
24
+ <body><h1>Text</h1>
25
+ </body>
26
+ </html>
27
+ CONTENT
28
+ )
29
+ content_dir.file('markdown.markdown').save(<<CONTENT
30
+ --------------------
31
+ markdown title
32
+ --------------------
33
+ Header
34
+ ===============
35
+ CONTENT
36
+ )
37
+ content_dir.file('textile.textile').save(<<CONTENT
38
+ ---------------------
39
+ textile title
40
+ ---------------------
41
+ h1. Header
42
+ CONTENT
43
+ )
44
+ spec = SiteSpec.new(nil, @cotta)
45
+ spec.output_dir = 'site/output'
46
+ spec.content_dir = 'site/content'
39
47
  spec.template =<<TEMPLATE
40
48
  <html xmlns="http://www.w3.org/1999/xhtml"
41
49
  xmlns:template="http://buildmaster.rubyforge.org/xtemplate/1.0">
@@ -48,11 +56,27 @@ class SiteTest < Test::Unit::TestCase
48
56
  TEMPLATE
49
57
  site = Site.new(spec)
50
58
  site.build
51
- output_index = File.join(@temp, 'output', 'index.html')
52
- assert_equal(true, File.exist?(@temp), "#{@temp}")
53
- assert_equal(true, File.exist?(output_index), "#{output_index} exists")
59
+ expected_output_file = @root.dir('output').file('index.html')
60
+ @root.exists?.should_equal(true)
61
+ expected_output_file.exists?.should_equal(true)
62
+
63
+ end
64
+
65
+ specify 'ignore the svn and CVS directories' do
66
+ content_dir = @root.dir('content')
67
+ content_dir.dir('.svn').mkdirs
68
+ content_dir.dir('_svn').mkdirs
69
+ content_dir.dir('CVS').mkdirs
70
+ spec = SiteSpec.new(nil, @cotta)
71
+ spec.output_dir = 'site/output'
72
+ spec.content_dir = 'site/content'
73
+ spec.template = <<TEMPLATE
74
+ <html/>
75
+ TEMPLATE
76
+ site = Site.new(spec)
77
+ site.build
78
+ @root.dir('output').list.size.should_equal 0
54
79
  end
55
-
56
80
  end
57
81
 
58
82
  end
@@ -1,50 +1,51 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib')
2
2
 
3
- require 'test/unit'
3
+ require 'spec'
4
4
  require 'rexml/xpath'
5
5
  require 'buildmaster/site/template_builder'
6
6
  require 'buildmaster/tree_to_object'
7
7
  require 'yaml'
8
8
 
9
9
  module BuildMaster
10
- class TemplateBuilderTest < Test::Unit::TestCase
11
- def test_should_generate_template_document
10
+ context 'Template Builder' do
11
+
12
+ specify 'should generate template document' do
12
13
  builder = TemplateBuilder.new
13
14
  document = builder.generate
14
- assert_equal('include', REXML::XPath.first(document, '/html/head/title/*').name)
15
+ REXML::XPath.first(document, '/html/head/title/*').name.should_equal 'include'
15
16
  assert_css_path(document, 'buildmaster.css')
16
17
  end
17
18
 
18
- def test_should_update_header_with_title_and_css
19
+ specify 'should update header with title and css' do
19
20
  builder = TemplateBuilder.new
20
21
  builder.title_header = 'Title Header - '
21
22
  builder.css_path = 'mycss.css'
22
23
  document = builder.generate
23
24
  first_child = REXML::XPath.first(document, '/html/head/title').children[0]
24
- assert_equal(REXML::Text, first_child.class)
25
- assert_equal('Title Header - ', first_child.value)
25
+ first_child.class.should_equal REXML::Text
26
+ first_child.value.should_equal 'Title Header - '
26
27
  assert_css_path(document, 'mycss.css')
27
28
  end
28
29
 
29
- def test_should_have_logo_defaults
30
+ specify 'test_should_have_logo_defaults' do
30
31
  builder = TemplateBuilder.new
31
- assert_equal(nil, builder.logo.path)
32
- assert_equal('index.html', builder.logo.link)
32
+ builder.logo.path.should_equal nil
33
+ builder.logo.link.should_equal 'index.html'
33
34
  end
34
35
 
35
- def test_should_generate_logo_and_link
36
+ specify 'test_should_generate_logo_and_link' do
36
37
  builder = TemplateBuilder.new
37
38
  builder.logo.path = 'gif/logo.gif'
38
39
  builder.logo.link = 'main.html'
39
40
  document = builder.generate
40
41
  header = assert_first(document, '/html/body/div[@class="header"]')
41
42
  anchor_href = assert_first(header, 'a/template:href')
42
- assert_equal('main.html', anchor_href.attributes['url'])
43
+ anchor_href.attributes['url'].should_equal 'main.html'
43
44
  img_href = assert_first(header, 'a/img/template:href')
44
- assert_equal('gif/logo.gif', img_href.attributes['url'])
45
+ img_href.attributes['url'].should_equal 'gif/logo.gif'
45
46
  end
46
47
 
47
- def test_should_build_left_menu
48
+ specify 'test_should_build_left_menu' do
48
49
  builder = TemplateBuilder.new
49
50
  builder.left_bottom_logo.path='http://www.example.com/logo.gif'
50
51
  group = builder.menu_group('Software')
@@ -55,21 +56,21 @@ class TemplateBuilderTest < Test::Unit::TestCase
55
56
  group.menu_item('Getting Started', 'doc/getting-started')
56
57
  document = builder.generate
57
58
  groups = REXML::XPath.match(document, '/html/body/div[@class="left"]/div[@class="MenuGroup"]')
58
- assert_equal(2, groups.size)
59
+ groups.size.should_equal 2
59
60
  first_group = groups[0]
60
61
  header = assert_first(first_group, 'h1')
61
- assert_equal('Software', header.text)
62
+ header.text.should_equal 'Software'
62
63
  items = REXML::XPath.match(first_group, 'ul/li')
63
- assert_equal(3, items.size)
64
+ items.size.should_equal 3
64
65
  first_item = items[0]
65
66
  anchor = assert_first(first_item, 'template:link')
66
- assert_equal('download.html', anchor.attributes['href'])
67
- assert_equal('Download', anchor.text)
67
+ anchor.attributes['href'].should_equal 'download.html'
68
+ anchor.text.should_equal 'Download'
68
69
  more = items[2]
69
- assert_equal('More', more.attributes['class'])
70
+ more.attributes['class'].should_equal 'More'
70
71
  end
71
72
 
72
- def test_should_have_releases_info
73
+ specify 'should_have_releases_info' do
73
74
  builder = TemplateBuilder.new
74
75
  releases = builder.releases
75
76
  releases.stable_version = '0.6'
@@ -78,17 +79,17 @@ class TemplateBuilderTest < Test::Unit::TestCase
78
79
  releases.download_link = 'download.html'
79
80
  releases.versioning_link = 'versioning.html'
80
81
  document = builder.generate
81
- assert_equal('Latest Versions', REXML::XPath.first(document, '/html/body/template:when/div[@class="right"]/div/h1').text)
82
+ REXML::XPath.first(document, '/html/body/template:when/div[@class="right"]/div/h1').text.should_equal 'Latest Versions'
82
83
  end
83
84
 
84
- def test_should_have_no_release_info_if_not_assigned
85
+ specify 'should_have_no_release_info_if_not_assigned' do
85
86
  builder = TemplateBuilder.new
86
87
  builder.releases.download_link = nil
87
88
  document = builder.generate
88
- assert_equal(0, REXML::XPath.match(document, '/html/body/template:when/div/*').size)
89
+ REXML::XPath.match(document, '/html/body/template:when/div/*').size.should_equal 0
89
90
  end
90
91
 
91
- def test_should_read_from_yaml
92
+ specify 'should_read_from_yaml' do
92
93
  content = <<CONTENT
93
94
  title_header: BuilderMaster -
94
95
  logo:
@@ -115,21 +116,21 @@ menu_groups:
115
116
  more: doc/index.html
116
117
  CONTENT
117
118
  builder = TreeToObject.from_yaml(content, TemplateBuilder.new)
118
- assert_equal('BuilderMaster -', builder.title_header)
119
- assert_equal('logo.gif', builder.logo.path)
120
- assert_equal('index.html', builder.logo.link)
119
+ builder.title_header.should_equal 'BuilderMaster -'
120
+ builder.logo.path.should_equal 'logo.gif'
121
+ builder.logo.link.should_equal 'index.html'
121
122
  end
122
123
 
123
124
  private
124
125
  def assert_css_path(document, expected)
125
126
  href = REXML::XPath.first(document, '/html/head/link/*')
126
- assert_equal('href', href.name)
127
- assert_equal(expected, href.attributes['url'])
127
+ href.name.should_equal 'href'
128
+ href.attributes['url'].should_equal expected
128
129
  end
129
130
 
130
131
  def assert_first(xml_model, xpath)
131
132
  first = REXML::XPath.first(xml_model, xpath)
132
- assert_not_nil(first)
133
+ first.should_not_equal nil
133
134
  return first
134
135
  end
135
136
  end
@@ -1,34 +1,32 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__), "..", "..", "lib")
2
2
 
3
- require 'test/unit'
3
+ require 'spec'
4
4
  require 'buildmaster'
5
+ require 'buildmaster/cotta'
5
6
 
6
7
  module BuildMaster
7
8
 
8
- class AntTest < Test::Unit::TestCase
9
- protected
10
- def setup
11
- super
12
- build_file = File.join(File.dirname(__FILE__), "build.xml")
9
+ context 'AntTest' do
10
+ setup do
11
+ cotta = Cotta.new()
12
+ build_file = cotta.file(__FILE__).parent.file('build.xml')
13
13
  @ant = AntDriver.from_file(build_file)
14
14
  end
15
15
 
16
- public
17
-
18
- def test_run
16
+ specify 'run' do
19
17
  @ant.project_help
20
18
  end
21
19
 
22
- def test_pass
20
+ specify 'pass' do
23
21
  @ant.target('passing')
24
22
  end
25
23
 
26
- def test_dynamic_method
24
+ specify 'dynamic_method' do
27
25
  @ant.passing
28
26
  end
29
27
 
30
- def test_fail
31
- assert_raise(RuntimeError) {@ant.target('failing')}
28
+ specify 'fail' do
29
+ lambda {@ant.target('failing')}.should_raise CommandError
32
30
  end
33
31
  end
34
32