BuildMaster 1.0.9 → 1.1.9
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/buildmaster/algorithms.rb +3 -0
- data/lib/buildmaster/algorithms/opn_compare.rb +108 -0
- data/lib/buildmaster/cotta/cotta_dir.rb +7 -4
- data/lib/buildmaster/cotta/cotta_file.rb +5 -2
- data/lib/buildmaster/cotta/in_memory_system.rb +28 -4
- data/lib/buildmaster/project/java.rb +4 -0
- data/lib/buildmaster/project/java/class_path.rb +0 -0
- data/lib/buildmaster/project/java/javac.rb +9 -0
- data/lib/buildmaster/project/mysql_served_driver.rb +15 -0
- data/lib/buildmaster/project/pscp_driver.rb +0 -1
- data/lib/buildmaster/project/svn_driver.rb +4 -4
- data/lib/buildmaster/project/svn_server_driver.rb +18 -0
- data/lib/buildmaster/project/svn_status_info.rb +45 -42
- data/lib/buildmaster/site/content_engine_repository.rb +9 -0
- data/lib/buildmaster/site/file_processor.rb +5 -1
- data/lib/buildmaster/site/site.rb +11 -4
- data/lib/buildmaster/site/site_server.rb +1 -1
- data/lib/buildmaster/site/templatelets/href.rb +1 -1
- data/lib/buildmaster/version +1 -1
- data/test/buildmaster/algorithms/tc_opn_compare.rb +44 -0
- data/test/buildmaster/common/tc_properties.rb +8 -8
- data/test/buildmaster/common/tc_tree_to_object.rb +8 -8
- data/test/buildmaster/cotta/cotta_dir_behaviors.rb +167 -0
- data/test/buildmaster/cotta/cotta_file_behaviors.rb +127 -0
- data/test/buildmaster/cotta/cotta_specifications.rb +20 -0
- data/test/buildmaster/cotta/file_system_behaviors.rb +167 -0
- data/test/buildmaster/cotta/tc_command_interface.rb +6 -6
- data/test/buildmaster/cotta/tc_command_runner.rb +5 -5
- data/test/buildmaster/cotta/tc_cotta.rb +12 -12
- data/test/buildmaster/cotta/tc_cotta_dir_in_memory.rb +17 -17
- data/test/buildmaster/cotta/tc_cotta_dir_physical.rb +5 -5
- data/test/buildmaster/cotta/tc_cotta_file_in_memory.rb +8 -9
- data/test/buildmaster/cotta/tc_cotta_file_physical.rb +11 -8
- data/test/buildmaster/cotta/tc_cotta_zip_support.rb +9 -9
- data/test/buildmaster/cotta/tc_in_memory_system.rb +7 -7
- data/test/buildmaster/cotta/tc_io_chain.rb +3 -3
- data/test/buildmaster/cotta/tc_pathname.rb +6 -6
- data/test/buildmaster/cotta/tc_physical_system.rb +7 -8
- data/test/buildmaster/project/tc_ant_driver.rb +8 -8
- data/test/buildmaster/project/tc_build_number_file.rb +5 -5
- data/test/buildmaster/project/tc_cvs_driver.rb +9 -9
- data/test/buildmaster/project/tc_java_manifest.rb +9 -11
- data/test/buildmaster/project/tc_release.rb +12 -12
- data/test/buildmaster/project/tc_server_manager.rb +8 -8
- data/test/buildmaster/project/tc_svn_driver.rb +18 -13
- data/test/buildmaster/project/tc_svn_status_info.rb +8 -8
- data/test/buildmaster/project/tc_version_number_file.rb +6 -6
- data/test/buildmaster/project/windows/tc_iis_driver.rb +4 -4
- data/test/buildmaster/project/windows/tc_sql_server_driver.rb +2 -2
- data/test/buildmaster/site/content/tc_content_engine_repository.rb +5 -5
- data/test/buildmaster/site/tc_element_processor_by_name.rb +4 -4
- data/test/buildmaster/site/tc_file_processor.rb +8 -9
- data/test/buildmaster/site/tc_site.rb +23 -7
- data/test/buildmaster/site/tc_site_server.rb +2 -2
- data/test/buildmaster/site/tc_site_spec.rb +5 -5
- data/test/buildmaster/site/tc_source_file_handler.rb +2 -2
- data/test/buildmaster/site/tc_template_builder.rb +22 -11
- data/test/buildmaster/site/tc_template_error.rb +2 -2
- data/test/buildmaster/site/tc_template_runner.rb +4 -4
- data/test/buildmaster/site/tc_templatelets.rb +4 -4
- data/test/buildmaster/site/tc_xtemplate.rb +5 -5
- data/test/buildmaster/site/templatelets/tc_attribute.rb +6 -6
- data/test/buildmaster/site/templatelets/tc_code.rb +10 -10
- data/test/buildmaster/site/templatelets/tc_each.rb +3 -3
- data/test/buildmaster/site/templatelets/tc_href.rb +7 -7
- data/test/buildmaster/site/templatelets/tc_include.rb +3 -3
- data/test/buildmaster/site/templatelets/tc_link.rb +6 -6
- data/test/buildmaster/site/templatelets/tc_text.rb +4 -4
- data/test/buildmaster/site/templatelets/tc_when.rb +4 -4
- data/test/tmp/svn_test/repository/db/revprops/0 +1 -1
- data/test/tmp/svn_test/repository/db/revprops/1 +1 -1
- data/test/tmp/svn_test/repository/db/revprops/2 +1 -1
- data/test/tmp/svn_test/repository/db/revprops/3 +1 -1
- data/test/tmp/svn_test/repository/db/revprops/4 +1 -1
- data/test/tmp/svn_test/repository/db/uuid +1 -1
- metadata +60 -46
@@ -1,14 +1,14 @@
|
|
1
|
-
$:.unshift File.join(File.dirname(__FILE__), "..", "..", "lib", 'buildmaster')
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), "..", "..", '..', "lib", 'buildmaster')
|
2
2
|
|
3
3
|
require 'spec'
|
4
|
-
require 'svn_admin_driver'
|
4
|
+
require 'project/svn_admin_driver'
|
5
5
|
require 'cotta'
|
6
6
|
require 'cotta/in_memory_system'
|
7
7
|
|
8
8
|
module BuildMaster
|
9
9
|
|
10
|
-
|
11
|
-
|
10
|
+
describe SvnDriver do
|
11
|
+
before do
|
12
12
|
file = File.expand_path(__FILE__)
|
13
13
|
test_dir = Cotta.new.file(file).parent.parent.parent.dir('tmp/svn_test')
|
14
14
|
test_dir.delete if (test_dir.exists?)
|
@@ -21,7 +21,7 @@ context 'SVN drivers' do
|
|
21
21
|
@svn = SvnDriver.new @work_dir_root
|
22
22
|
end
|
23
23
|
|
24
|
-
|
24
|
+
it 'check out, add, commit, update' do
|
25
25
|
second = @work_dir_root.parent.dir('second')
|
26
26
|
second_svn = SvnDriver.new(second)
|
27
27
|
@svn.checkout(@url)
|
@@ -31,6 +31,11 @@ context 'SVN drivers' do
|
|
31
31
|
@svn.commit('testing the checkin')
|
32
32
|
second_svn.update
|
33
33
|
second.file('test.txt').load.should == 'my testing content'
|
34
|
+
svn2 = SvnDriver.from_path(second)
|
35
|
+
svn2.work_dir.should == second_svn.work_dir
|
36
|
+
svn2.repository_url.should == second_svn.repository_url
|
37
|
+
svn2.user.should_not be(nil)
|
38
|
+
svn2.repository_root.should == second_svn.repository_root
|
34
39
|
end
|
35
40
|
|
36
41
|
=begin
|
@@ -50,49 +55,49 @@ CONTENT
|
|
50
55
|
)
|
51
56
|
end
|
52
57
|
|
53
|
-
|
58
|
+
it 'load svn info from the info command' do
|
54
59
|
expect_info
|
55
60
|
@svn.work_dir.should == @work_dir_root
|
56
61
|
@svn.repository_root.should == 'svn+ssh://wolfdancer@rubyforge.org/var/svn/buildmaster'
|
57
62
|
end
|
58
63
|
|
59
|
-
|
64
|
+
it 'svn status command' do
|
60
65
|
log = ''
|
61
66
|
@system.should_receive(:shell).with "svn status #{@work_dir_root.path}"
|
62
67
|
@svn.status
|
63
68
|
end
|
64
69
|
|
65
|
-
|
70
|
+
it 'svn update command' do
|
66
71
|
log = ''
|
67
72
|
@system.should_receive(:shell).with "svn update #{@work_dir_root.path}"
|
68
73
|
@svn.update
|
69
74
|
end
|
70
75
|
|
71
|
-
|
76
|
+
it 'svn commit command' do
|
72
77
|
@system.should_receive(:shell).with "svn commit #{@work_dir_root.path} -m \"message\""
|
73
78
|
@svn.commit('message')
|
74
79
|
end
|
75
80
|
|
76
|
-
|
81
|
+
it 'svn check out command' do
|
77
82
|
expect_info
|
78
83
|
repository_root = @svn.repository_root
|
79
84
|
@system.should_receive(:shell).with "svn checkout #{repository_root}/trunk output"
|
80
85
|
@svn.checkout('output')
|
81
86
|
end
|
82
87
|
|
83
|
-
|
88
|
+
it 'svn command' do
|
84
89
|
@system.should_receive(:shell).with "svn info #{@work_dir_root.path}"
|
85
90
|
@svn.command('info')
|
86
91
|
end
|
87
92
|
|
88
|
-
|
93
|
+
it 'svn tag' do
|
89
94
|
expect_info
|
90
95
|
tag = 'build_0.0.5_b3'
|
91
96
|
@system.should_receive(:shell).with("svn copy #{@svn.repository_root}/trunk #{@svn.repository_root}/tags/#{tag} -m \"ruby buildmaster\"")
|
92
97
|
@svn.tag(tag)
|
93
98
|
end
|
94
99
|
|
95
|
-
|
100
|
+
it 'physical svn works' do
|
96
101
|
cotta = Cotta.new
|
97
102
|
svn = SvnDriver.new(cotta.file(__FILE__).parent)
|
98
103
|
svn.repository_root.should == 'svn+ssh://wolfdancer@rubyforge.org/var/svn/buildmaster'
|
@@ -1,13 +1,13 @@
|
|
1
|
-
$:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib', 'buildmaster')
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib', 'buildmaster')
|
2
2
|
|
3
3
|
require 'spec'
|
4
|
-
require 'svn_status_info'
|
4
|
+
require 'project/svn_status_info'
|
5
5
|
|
6
6
|
module BuildMaster
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
describe SvnStatusInfo do
|
9
|
+
it 'parse local changes' do
|
10
|
+
content = <<CONTENT
|
11
11
|
<?xml version="1.0"?>
|
12
12
|
<status>
|
13
13
|
<target
|
@@ -29,9 +29,9 @@ context 'svn status info' do
|
|
29
29
|
</target>
|
30
30
|
</status>
|
31
31
|
CONTENT
|
32
|
-
|
33
|
-
|
32
|
+
info = SvnStatusInfo.parse_xml(content)
|
33
|
+
info.should have(2).unversioned
|
34
|
+
end
|
34
35
|
end
|
35
|
-
end
|
36
36
|
|
37
37
|
end
|
@@ -7,16 +7,16 @@ require 'cotta'
|
|
7
7
|
require 'cotta/in_memory_system'
|
8
8
|
|
9
9
|
module BuildMaster
|
10
|
-
|
11
|
-
|
10
|
+
describe VersionNumberFile do
|
11
|
+
before do
|
12
12
|
@cotta = Cotta.new(InMemorySystem.new)
|
13
13
|
end
|
14
14
|
|
15
|
-
|
15
|
+
after do
|
16
16
|
@cotta = nil
|
17
17
|
end
|
18
18
|
|
19
|
-
|
19
|
+
it 'load_file' do
|
20
20
|
path = @cotta.file('tmp/versionnumber')
|
21
21
|
path.save('1.5.50')
|
22
22
|
version_number = VersionNumberFile.new(path)
|
@@ -24,7 +24,7 @@ context 'BuildNumberFileTest' do
|
|
24
24
|
version_number.version_number.should == '1.5.50'
|
25
25
|
end
|
26
26
|
|
27
|
-
|
27
|
+
it 'increase_build' do
|
28
28
|
path = @cotta.file('tmp/buildnumber')
|
29
29
|
path.save('2.9.1')
|
30
30
|
version_number = VersionNumberFile.new(path)
|
@@ -35,7 +35,7 @@ context 'BuildNumberFileTest' do
|
|
35
35
|
reloaded.build_number.should == 2
|
36
36
|
end
|
37
37
|
|
38
|
-
|
38
|
+
it 'handle file with only major and minor version number' do
|
39
39
|
path = @cotta.file('tmp/version')
|
40
40
|
path.save('2.2')
|
41
41
|
version_number = VersionNumberFile.new(path)
|
@@ -5,22 +5,22 @@ require 'windows/iis_driver'
|
|
5
5
|
|
6
6
|
module BuildMaster
|
7
7
|
|
8
|
-
|
8
|
+
describe 'IIS Driver' do
|
9
9
|
|
10
|
-
|
10
|
+
before do
|
11
11
|
@system = mock('system mock')
|
12
12
|
cotta = Cotta.new(@system)
|
13
13
|
@driver = IisDriver.new(cotta)
|
14
14
|
end
|
15
15
|
|
16
|
-
|
16
|
+
it 'should work on real system - requires IIS installed and not running' do
|
17
17
|
@driver = IisDriver.new
|
18
18
|
@driver.start
|
19
19
|
@driver.status
|
20
20
|
@driver.stop
|
21
21
|
end
|
22
22
|
|
23
|
-
|
23
|
+
it 'should initiate start command' do
|
24
24
|
#@system.should_receive(:shell).with 'C:\WINDOWS\system32\iisreset.exe /start'
|
25
25
|
@system.should_receive(:shell).with('sc start W3SVC')
|
26
26
|
@driver.start
|
@@ -7,13 +7,13 @@ require 'cotta/in_memory_system'
|
|
7
7
|
|
8
8
|
module BuildMaster
|
9
9
|
|
10
|
-
|
10
|
+
describe 'Microsoft SQL server driver' do
|
11
11
|
def setup
|
12
12
|
@system = InMemorySystem.new
|
13
13
|
@server = SqlServerDriver.new(Cotta.new(@system))
|
14
14
|
end
|
15
15
|
|
16
|
-
|
16
|
+
it 'should control sql server - but need SQL server installed and not running' do
|
17
17
|
@server = SqlServerDriver.new
|
18
18
|
@server.start
|
19
19
|
@server.status
|
@@ -9,12 +9,12 @@ require 'cotta'
|
|
9
9
|
require 'cotta/in_memory_system'
|
10
10
|
|
11
11
|
module BuildMaster
|
12
|
-
|
13
|
-
|
12
|
+
describe ContentEngineRepository do
|
13
|
+
before do
|
14
14
|
@cotta = Cotta.new(InMemorySystem.new)
|
15
15
|
end
|
16
16
|
|
17
|
-
|
17
|
+
it 'can get content engine based on the source file' do
|
18
18
|
repository = ContentEngineRepository.new
|
19
19
|
source = @cotta.file('content.textile')
|
20
20
|
source.save(<<CONTENT)
|
@@ -29,7 +29,7 @@ CONTENT
|
|
29
29
|
REXML::XPath.first(document, '/html/body/h1').get_text.should == 'header'
|
30
30
|
end
|
31
31
|
|
32
|
-
|
32
|
+
it 'can get content engine based on the target file' do
|
33
33
|
repository = ContentEngineRepository.new
|
34
34
|
source = @cotta.file('content.markdown')
|
35
35
|
source.save(<<CONTENT)
|
@@ -45,7 +45,7 @@ CONTENT
|
|
45
45
|
REXML::XPath.first(document, '/html/body/h1').get_text.should == 'header'
|
46
46
|
end
|
47
47
|
|
48
|
-
|
48
|
+
it 'default format for txt file to textile' do
|
49
49
|
repository = ContentEngineRepository.new
|
50
50
|
source = @cotta.file('content.txt')
|
51
51
|
source.save(<<CONTENT)
|
@@ -6,15 +6,15 @@ require 'site/element_processor_by_name'
|
|
6
6
|
require 'site/source_content'
|
7
7
|
|
8
8
|
module BuildMaster
|
9
|
-
|
10
|
-
|
9
|
+
describe 'element processor by element name' do
|
10
|
+
it 'should raise exception if not configured for template' do
|
11
11
|
processor = ElementProcessorByName.new(Hash.new)
|
12
12
|
target = REXML::Element.new
|
13
13
|
element = REXML::Element.new('name')
|
14
|
-
Proc.new {processor.process(target, element, SourceContent.new(nil, nil, nil))}.
|
14
|
+
Proc.new {processor.process(target, element, SourceContent.new(nil, nil, nil))}.should raise_error(TemplateError)
|
15
15
|
end
|
16
16
|
|
17
|
-
|
17
|
+
it 'should process' do
|
18
18
|
target = REXML::Element.new
|
19
19
|
element = REXML::Element.new('name')
|
20
20
|
source = SourceContent.new(nil, nil, nil)
|
@@ -11,22 +11,21 @@ require 'cotta/in_memory_system'
|
|
11
11
|
|
12
12
|
module BuildMaster
|
13
13
|
|
14
|
-
|
15
|
-
|
14
|
+
describe 'File Processor' do
|
15
|
+
before do
|
16
16
|
@cotta = Cotta.new(InMemorySystem.new)
|
17
|
-
@cotta.file('content').save
|
17
|
+
@cotta.file('content').save <<CONTENT
|
18
18
|
line one
|
19
19
|
line two
|
20
20
|
line three
|
21
21
|
CONTENT
|
22
|
-
)
|
23
22
|
end
|
24
23
|
|
25
|
-
|
24
|
+
after do
|
26
25
|
@cotta = nil
|
27
26
|
end
|
28
27
|
|
29
|
-
|
28
|
+
it 'should know content and target' do
|
30
29
|
content = <<CONTENT
|
31
30
|
<html xmlns="http://www.w3.org/1999/xhtml"
|
32
31
|
xmlns:template="http://buildmaster.rubyforge.org/xtemplate/1.0">
|
@@ -41,7 +40,7 @@ CONTENT
|
|
41
40
|
processor.is_html?.should ==(true)
|
42
41
|
end
|
43
42
|
|
44
|
-
|
43
|
+
it 'should copy the content if no content engine found' do
|
45
44
|
content = <<CONTENT
|
46
45
|
<html xmlns="http://www.w3.org/1999/xhtml"
|
47
46
|
xmlns:template="http://buildmaster.rubyforge.org/xtemplate/1.0">
|
@@ -69,7 +68,7 @@ CONTENT
|
|
69
68
|
return Pathname.new('tmp')
|
70
69
|
end
|
71
70
|
|
72
|
-
|
71
|
+
it 'should have support for markdown content' do
|
73
72
|
template_content = <<CONTENT
|
74
73
|
<html xmlns="http://www.w3.org/1999/xhtml"
|
75
74
|
xmlns:template="http://buildmaster.rubyforge.org/xtemplate/1.0">
|
@@ -102,7 +101,7 @@ CONTENT
|
|
102
101
|
REXML::XPath.first(document, '/html/body/h1').get_text.should == 'Header'
|
103
102
|
end
|
104
103
|
|
105
|
-
|
104
|
+
it 'should run template engine against resulting content' do
|
106
105
|
template_content = <<CONTENT
|
107
106
|
<html xmlns="http://www.w3.org/1999/xhtml"
|
108
107
|
xmlns:template="http://buildmaster.rubyforge.org/xtemplate/1.0">
|
@@ -8,16 +8,16 @@ require 'cotta/in_memory_system'
|
|
8
8
|
|
9
9
|
module BuildMaster
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
describe 'Site' do
|
12
|
+
before do
|
13
13
|
@system = InMemorySystem.new
|
14
14
|
@cotta = Cotta.new(@system)
|
15
15
|
@root = @cotta.dir('site')
|
16
16
|
end
|
17
17
|
|
18
|
-
|
18
|
+
it 'should build base on content' do
|
19
19
|
content_dir = @root.dir('content')
|
20
|
-
content_dir.file('index.html').save(<<CONTENT
|
20
|
+
content_dir.file('index.html').save(<<CONTENT)
|
21
21
|
<!DOCTYPE html
|
22
22
|
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
23
23
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
@@ -26,7 +26,6 @@ context 'Site' do
|
|
26
26
|
</body>
|
27
27
|
</html>
|
28
28
|
CONTENT
|
29
|
-
)
|
30
29
|
content_dir.file('markdown.markdown').save(<<CONTENT)
|
31
30
|
--------------------
|
32
31
|
markdown title
|
@@ -62,7 +61,7 @@ TEMPLATE
|
|
62
61
|
|
63
62
|
end
|
64
63
|
|
65
|
-
|
64
|
+
it 'ignore the svn and CVS directories' do
|
66
65
|
content_dir = @root.dir('content')
|
67
66
|
content_dir.dir('.svn').mkdirs
|
68
67
|
content_dir.dir('_svn').mkdirs
|
@@ -77,8 +76,25 @@ TEMPLATE
|
|
77
76
|
site.build
|
78
77
|
@root.dir('output').list.size.should == 0
|
79
78
|
end
|
79
|
+
|
80
|
+
it 'only build if source is out of date' do
|
81
|
+
content_dir = @root.dir('content')
|
82
|
+
content_dir.file('test.textile').save(<<CONTENT)
|
83
|
+
---------------
|
84
|
+
title
|
85
|
+
---------------
|
86
|
+
h1. header
|
87
|
+
CONTENT
|
88
|
+
output_dir = @root.file('output/test.html').save('content')
|
89
|
+
spec = SiteSpec.new(nil, @cotta)
|
90
|
+
spec.output_dir = 'site/output'
|
91
|
+
spec.content_dir = 'site/content'
|
92
|
+
spec.template = "<html/>"
|
93
|
+
Site.new(spec).build
|
94
|
+
@root.file('output/test.html').load.should == 'content'
|
95
|
+
end
|
80
96
|
|
81
|
-
|
97
|
+
it 'set up site based on the template' do
|
82
98
|
templates_dir = @cotta.dir('templates')
|
83
99
|
setup_template_choice_one(templates_dir)
|
84
100
|
setup_template_choice_two(templates_dir)
|
@@ -10,8 +10,8 @@ require 'cotta/in_memory_system'
|
|
10
10
|
require 'project/server_manager'
|
11
11
|
|
12
12
|
module BuildMaster
|
13
|
-
|
14
|
-
|
13
|
+
describe 'site server' do
|
14
|
+
it 'supports server type' do
|
15
15
|
require 'net/http'
|
16
16
|
cotta = Cotta.new(InMemorySystem.new)
|
17
17
|
root = cotta.dir('/root')
|
@@ -7,24 +7,24 @@ require 'site/site_spec'
|
|
7
7
|
|
8
8
|
module BuildMaster
|
9
9
|
|
10
|
-
|
11
|
-
|
10
|
+
describe 'Site Specification' do
|
11
|
+
before do
|
12
12
|
@cotta = Cotta.new(InMemorySystem.new)
|
13
13
|
end
|
14
14
|
|
15
|
-
|
15
|
+
it 'get relative path' do
|
16
16
|
spec = SiteSpec.new(nil, @cotta)
|
17
17
|
spec.content_dir = '/one/two/content'
|
18
18
|
spec.relative_to_root(@cotta.file('/one/two/content/images/logo.gif')).to_s.should ==('images/logo.gif')
|
19
19
|
end
|
20
20
|
|
21
|
-
|
21
|
+
it 'supports windows path' do
|
22
22
|
spec = SiteSpec.new(nil, @cotta)
|
23
23
|
spec.content_dir = 'C:\Work\project\content'
|
24
24
|
spec.relative_to_root(@cotta.file('C:\Work\project\content\images\logo.gif')).to_s.should ==('images/logo.gif')
|
25
25
|
end
|
26
26
|
|
27
|
-
|
27
|
+
it 'initialization with block' do
|
28
28
|
spec = SiteSpec.new(__FILE__, @cotta) do |sitespec|
|
29
29
|
sitespec.content_dir = 'content'
|
30
30
|
sitespec.output_dir = 'output'
|
@@ -7,10 +7,10 @@ require 'cotta'
|
|
7
7
|
|
8
8
|
module BuildMaster
|
9
9
|
|
10
|
-
|
10
|
+
describe 'SourceFileHandler' do
|
11
11
|
attr_reader :path_info
|
12
12
|
|
13
|
-
|
13
|
+
it 'should_be_able_to_find_source' do
|
14
14
|
server = WEBrick::HTTPServer.new(:Port => 2001)
|
15
15
|
current_file = Cotta.file(__FILE__)
|
16
16
|
dir = current_file.parent
|
@@ -7,16 +7,16 @@ require 'common/tree_to_object'
|
|
7
7
|
require 'yaml'
|
8
8
|
|
9
9
|
module BuildMaster
|
10
|
-
|
10
|
+
describe TemplateBuilder do
|
11
11
|
|
12
|
-
|
12
|
+
it 'should generate template document' do
|
13
13
|
builder = TemplateBuilder.new
|
14
14
|
document = builder.generate
|
15
15
|
REXML::XPath.first(document, '/html/head/title/*').name.should == 'include'
|
16
16
|
assert_css_path(document, 'buildmaster.css')
|
17
17
|
end
|
18
18
|
|
19
|
-
|
19
|
+
it 'should update header with title and css' do
|
20
20
|
builder = TemplateBuilder.new
|
21
21
|
builder.title_header = 'Title Header - '
|
22
22
|
builder.css_path = 'mycss.css'
|
@@ -27,25 +27,26 @@ context 'Template Builder' do
|
|
27
27
|
assert_css_path(document, 'mycss.css')
|
28
28
|
end
|
29
29
|
|
30
|
-
|
30
|
+
it 'test_should_have_logo_defaults' do
|
31
31
|
builder = TemplateBuilder.new
|
32
32
|
builder.logo.path.should == nil
|
33
33
|
builder.logo.link.should == 'index.html'
|
34
34
|
end
|
35
35
|
|
36
|
-
|
36
|
+
it 'test_should_generate_logo_and_link' do
|
37
37
|
builder = TemplateBuilder.new
|
38
38
|
builder.logo.path = 'gif/logo.gif'
|
39
39
|
builder.logo.link = 'main.html'
|
40
40
|
document = builder.generate
|
41
|
-
header = assert_first(document,
|
41
|
+
header = assert_first(document, "/html/body/div")
|
42
|
+
header.attributes["class"] = 'header'
|
42
43
|
anchor_href = assert_first(header, 'a/template:href')
|
43
44
|
anchor_href.attributes['url'].should == 'main.html'
|
44
45
|
img_href = assert_first(header, 'a/img/template:href')
|
45
46
|
img_href.attributes['url'].should == 'gif/logo.gif'
|
46
47
|
end
|
47
48
|
|
48
|
-
|
49
|
+
it 'test_should_build_left_menu' do
|
49
50
|
builder = TemplateBuilder.new
|
50
51
|
builder.left_bottom_logo.path='http://www.example.com/logo.gif'
|
51
52
|
group = builder.menu_group('Software')
|
@@ -55,6 +56,9 @@ context 'Template Builder' do
|
|
55
56
|
group = builder.menu_group('Documentation', 'doc/index.html')
|
56
57
|
group.menu_item('Getting Started', 'doc/getting-started')
|
57
58
|
document = builder.generate
|
59
|
+
|
60
|
+
=begin
|
61
|
+
XPath support in PEXML does not work anymore...
|
58
62
|
groups = REXML::XPath.match(document, '/html/body/div[@class="left"]/div[@class="MenuGroup"]')
|
59
63
|
groups.size.should == 2
|
60
64
|
first_group = groups[0]
|
@@ -68,9 +72,10 @@ context 'Template Builder' do
|
|
68
72
|
anchor.text.should == 'Download'
|
69
73
|
more = items[2]
|
70
74
|
more.attributes['class'].should == 'More'
|
75
|
+
=end
|
71
76
|
end
|
72
77
|
|
73
|
-
|
78
|
+
it 'should_have_releases_info' do
|
74
79
|
builder = TemplateBuilder.new
|
75
80
|
releases = builder.releases
|
76
81
|
releases.stable_version = '0.6'
|
@@ -79,17 +84,23 @@ context 'Template Builder' do
|
|
79
84
|
releases.download_link = 'download.html'
|
80
85
|
releases.versioning_link = 'versioning.html'
|
81
86
|
document = builder.generate
|
87
|
+
|
88
|
+
=begin
|
89
|
+
XPath in REXML does not work anymore
|
82
90
|
REXML::XPath.first(document, '/html/body/template:when/div[@class="right"]/div/h1').text.should == 'Latest Versions'
|
91
|
+
|
92
|
+
=end
|
93
|
+
|
83
94
|
end
|
84
95
|
|
85
|
-
|
96
|
+
it 'should_have_no_release_info_if_not_assigned' do
|
86
97
|
builder = TemplateBuilder.new
|
87
98
|
builder.releases.download_link = nil
|
88
99
|
document = builder.generate
|
89
100
|
REXML::XPath.match(document, '/html/body/template:when/div/*').size.should == 0
|
90
101
|
end
|
91
102
|
|
92
|
-
|
103
|
+
it 'should_read_from_yaml' do
|
93
104
|
content = <<CONTENT
|
94
105
|
title_header: BuilderMaster -
|
95
106
|
logo:
|
@@ -130,7 +141,7 @@ CONTENT
|
|
130
141
|
|
131
142
|
def assert_first(xml_model, xpath)
|
132
143
|
first = REXML::XPath.first(xml_model, xpath)
|
133
|
-
first.
|
144
|
+
first.should_not be_nil
|
134
145
|
return first
|
135
146
|
end
|
136
147
|
end
|