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
@@ -9,6 +9,7 @@ class ContentEngineRepository
|
|
9
9
|
@map['.markdown'] = MarkdownEngine.new
|
10
10
|
@map['.html'] = HtmlEngine.new
|
11
11
|
@map['.txt'] = TextileEngine.new
|
12
|
+
@map['.deplate'] = DeplateEngine.new
|
12
13
|
end
|
13
14
|
|
14
15
|
def supports?(extname)
|
@@ -80,4 +81,12 @@ class HtmlEngine
|
|
80
81
|
return full_content
|
81
82
|
end
|
82
83
|
end
|
84
|
+
|
85
|
+
class DeplateEngine
|
86
|
+
include ContentEngine
|
87
|
+
def convert_to_html(full_content)
|
88
|
+
require 'deplate/deplate-string'
|
89
|
+
process_content_with_title(full_content) {|content| DeplateString.new(content).to_html}
|
90
|
+
end
|
91
|
+
end
|
83
92
|
end
|
@@ -44,7 +44,11 @@ class FileProcessor
|
|
44
44
|
html_content = @content_engine.convert_to_html(content_file.load)
|
45
45
|
process_html(html_content)
|
46
46
|
end
|
47
|
-
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def out_of_date?
|
50
|
+
(not @target_file.exists?) || @target_file.older_than?(@content_file)
|
51
|
+
end
|
48
52
|
|
49
53
|
private
|
50
54
|
def process_html(html_content)
|
@@ -91,15 +91,22 @@ require 'buildmaster/site_tester'
|
|
91
91
|
build_directory(out_dir.dir(item.name), item, template)
|
92
92
|
elsif (item.respond_to? 'read')
|
93
93
|
@current_file_name = item
|
94
|
-
process_file(item, out_dir, content_dir, item)
|
95
|
-
|
94
|
+
if(process_file(item, out_dir, content_dir, item))
|
95
|
+
@count = @count + 1
|
96
|
+
end
|
96
97
|
end
|
97
98
|
end
|
98
99
|
end
|
99
100
|
|
100
101
|
def process_file(content_file, out_dir, content_dir, item)
|
101
|
-
|
102
|
-
|
102
|
+
processor = FileProcessor.new(@template, content_file, @spec)
|
103
|
+
processed = nil
|
104
|
+
if (processor.out_of_date?)
|
105
|
+
print ">> #{content_file.path.to_s}\n"
|
106
|
+
processor.write_to_target
|
107
|
+
processed = true
|
108
|
+
end
|
109
|
+
processed
|
103
110
|
end
|
104
111
|
|
105
112
|
end
|
data/lib/buildmaster/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.1.9
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'spec'
|
2
|
+
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib', 'buildmaster')
|
4
|
+
|
5
|
+
require 'algorithms/opn_compare'
|
6
|
+
|
7
|
+
module BuildMaster
|
8
|
+
module Algorithms
|
9
|
+
describe NegativeIndexArray do
|
10
|
+
it 'index with negative number' do
|
11
|
+
array = NegativeIndexArray.new(5, 5) {|index| 'default'}
|
12
|
+
array[-5].should == 'default'
|
13
|
+
array[5].should == 'default'
|
14
|
+
array[5] = '+5'
|
15
|
+
array[-5] = '-5'
|
16
|
+
array[5].should == '+5'
|
17
|
+
array[-5].should == '-5'
|
18
|
+
(-4..4).each {|index| array[index].should == 'default'}
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'default value' do
|
22
|
+
array = NegativeIndexArray.new(5, 5) {|index| index}
|
23
|
+
array[-1].should == -1
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe OpnCompare, 'O(pn) Compare Algorithm' do
|
28
|
+
it 'no diff' do
|
29
|
+
m = 'abcdefg'
|
30
|
+
n = 'abcdefg'
|
31
|
+
diff = OpnCompare.new(m, n).compare
|
32
|
+
# diff.should be_nil
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'one character change' do
|
36
|
+
m = 'abfcde'
|
37
|
+
n = 'abcdef'
|
38
|
+
diff = OpnCompare.new(m, n).compare
|
39
|
+
# diff.should have(1).edits
|
40
|
+
# diff.edits[0].should == EditStep.new(EditAction.Add, 5)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -6,19 +6,19 @@ require 'common/properties'
|
|
6
6
|
|
7
7
|
module BuildMaster::Common
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
describe Properties do
|
10
|
+
it 'parse io into hash' do
|
11
|
+
content = <<CONTENT
|
12
12
|
one : 1
|
13
13
|
two : 2
|
14
14
|
three : 3
|
15
15
|
|
16
16
|
CONTENT
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
hash = Properties.parse_io(StringIO.new(content))
|
18
|
+
hash.should have_key('one')
|
19
|
+
hash['one'].should == '1'
|
20
|
+
end
|
21
|
+
|
20
22
|
end
|
21
|
-
|
22
|
-
end
|
23
23
|
|
24
24
|
end
|
@@ -27,8 +27,8 @@ class SampleTwo
|
|
27
27
|
attr_writer :field, :index
|
28
28
|
end
|
29
29
|
|
30
|
-
|
31
|
-
|
30
|
+
describe TreeToObject do
|
31
|
+
it 'should_populate_string_fields' do
|
32
32
|
content = <<CONTENT
|
33
33
|
field_one: value_one
|
34
34
|
field_two: value_two
|
@@ -40,7 +40,7 @@ CONTENT
|
|
40
40
|
object.field_two.should == 'value_two'
|
41
41
|
end
|
42
42
|
|
43
|
-
|
43
|
+
it 'should_populate_array_fields' do
|
44
44
|
content = <<CONTENT
|
45
45
|
array_field:
|
46
46
|
- field: valueone
|
@@ -57,7 +57,7 @@ CONTENT
|
|
57
57
|
array[1].index.to_s.should == '2'
|
58
58
|
end
|
59
59
|
|
60
|
-
|
60
|
+
it 'should_populate_instance_fields' do
|
61
61
|
content = <<CONTENT
|
62
62
|
object_two:
|
63
63
|
field: my_field
|
@@ -69,7 +69,7 @@ CONTENT
|
|
69
69
|
actual.index.to_s.should == '5'
|
70
70
|
end
|
71
71
|
|
72
|
-
|
72
|
+
it 'should_raise_error_if_property_not_found' do
|
73
73
|
content = <<CONTENT
|
74
74
|
not_field: value
|
75
75
|
CONTENT
|
@@ -82,7 +82,7 @@ CONTENT
|
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
|
-
|
85
|
+
it 'should_raise_error_if_sub_property_not_found' do
|
86
86
|
content = <<CONTENT
|
87
87
|
not_sub_property:
|
88
88
|
field: value
|
@@ -96,7 +96,7 @@ CONTENT
|
|
96
96
|
end
|
97
97
|
end
|
98
98
|
|
99
|
-
|
99
|
+
it 'should_raise_error_if_array_property_not_found' do
|
100
100
|
content = <<CONTENT
|
101
101
|
not_array_property:
|
102
102
|
- name: title
|
@@ -111,7 +111,7 @@ CONTENT
|
|
111
111
|
end
|
112
112
|
end
|
113
113
|
|
114
|
-
|
114
|
+
it 'empty_content' do
|
115
115
|
object = TreeToObject.from_yaml('', SampleObject.new)
|
116
116
|
object.field_one.should == nil
|
117
117
|
end
|
@@ -0,0 +1,167 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib', 'buildmaster')
|
2
|
+
|
3
|
+
require 'cotta'
|
4
|
+
require 'cotta/cotta_file'
|
5
|
+
require 'cotta/cotta_dir'
|
6
|
+
require 'spec'
|
7
|
+
require 'pathname'
|
8
|
+
|
9
|
+
module BuildMaster
|
10
|
+
describe 'CottaDirBehaviors', :shared=>true do
|
11
|
+
before do
|
12
|
+
create_system
|
13
|
+
@dir = BuildMaster::CottaDir.new(@system, Pathname.new('dir'))
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'load dir with basic information' do
|
17
|
+
@dir.name.should == 'dir'
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'dir objects are value objects, equal on system and path' do
|
21
|
+
(BuildMaster::CottaDir.new(@system, Pathname.new('dir')) == @dir).should == true
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'dir should not be equal if path different' do
|
25
|
+
(BuildMaster::CottaDir.new(@system, Pathname.new('/dir')) == @dir).should == false
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should support relative path' do
|
29
|
+
sub_dir = @dir.dir('one/two/three')
|
30
|
+
sub_dir.relative_path_from(@dir).to_s.should == 'one/two/three'
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'dir should know its parent' do
|
34
|
+
@dir.parent.name.should == '.'
|
35
|
+
@dir.parent.parent.should be_nil
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should raise error if not exits stat' do
|
39
|
+
Proc.new {
|
40
|
+
@dir.stat
|
41
|
+
}.should raise_error(Errno::ENOENT)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'support stat' do
|
45
|
+
@dir.mkdirs
|
46
|
+
@dir.stat.should_not be_nil
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'dir should handle root dir' do
|
50
|
+
dir = BuildMaster::CottaDir.new(@system, Pathname.new('/root'))
|
51
|
+
dir.parent.path.should == Pathname.new('/')
|
52
|
+
dir.parent.name.should == '/'
|
53
|
+
dir.parent.exists?.should == true
|
54
|
+
dir.parent.root?.should == true
|
55
|
+
dir.parent.parent.should be_nil
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'dir should handle root dir for drive letters' do
|
59
|
+
dir = BuildMaster::CottaDir.new(@system, Pathname.new('C:/Windows'))
|
60
|
+
dir.name.should == 'Windows'
|
61
|
+
dir.parent.path.should == Pathname.new('C:/')
|
62
|
+
dir.parent.name.should == 'C:/'
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'dir should return sub directory' do
|
66
|
+
@dir.dir('sub').path.should == Pathname.new('dir/sub')
|
67
|
+
@dir.dir('sub').parent.should == @dir
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'dir should return a directory from a relative pathname' do
|
71
|
+
@dir.dir(Pathname.new('one/two/three')).should == @dir.dir('one').dir('two').dir('three')
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'should get file in current directory' do
|
75
|
+
file = @dir.file('file.txt')
|
76
|
+
file.name.should == 'file.txt'
|
77
|
+
file.path.should == Pathname.new('dir/file.txt')
|
78
|
+
file.parent.should == @dir
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'should create dir and its parent' do
|
82
|
+
dir = @dir.dir('one').dir('two')
|
83
|
+
dir.exists?.should == false
|
84
|
+
dir.parent.exists?.should == false
|
85
|
+
dir.mkdirs
|
86
|
+
dir.exists?.should == true
|
87
|
+
dir.parent.exists?.should == true
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'should delete dir and its children' do
|
91
|
+
dir = @dir.dir('one').dir('two').dir('three')
|
92
|
+
dir.mkdirs
|
93
|
+
@dir.exists?.should == true
|
94
|
+
@dir.delete
|
95
|
+
dir.exists?.should == false
|
96
|
+
@dir.exists?.should == false
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'should do nothing if dir already exists' do
|
100
|
+
dir = @dir.dir('one').dir('two')
|
101
|
+
dir.mkdirs
|
102
|
+
dir.mkdirs
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'should list dirs' do
|
106
|
+
@dir.dir('one').mkdirs
|
107
|
+
@dir.file('one.txt').save
|
108
|
+
actual_dir_list = @dir.list
|
109
|
+
actual_dir_list.size.should == 2
|
110
|
+
actual_dir_list[0].name.should == 'one'
|
111
|
+
actual_dir_list[0].list.size.should == 0
|
112
|
+
actual_dir_list[1].name.should == 'one.txt'
|
113
|
+
actual_dir_list[1].save
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'should move directory with its children' do
|
117
|
+
dir = BuildMaster::CottaDir.new(@system, Pathname.new('targetdir/child_dir'))
|
118
|
+
@dir.file('file.txt').save('file.txt')
|
119
|
+
@dir.dir('subdir').mkdirs
|
120
|
+
@dir.list.size.should == 2
|
121
|
+
@dir.move_to(dir)
|
122
|
+
@dir.exists?.should == false
|
123
|
+
dir.list.size.should == 2
|
124
|
+
dir.file('file.txt').load.should == 'file.txt'
|
125
|
+
dir.dir('subdir').exists?.should == true
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'should copy directory with its children' do
|
129
|
+
dir = BuildMaster::CottaDir.new(@system, Pathname.new('targetdir/child_dir'))
|
130
|
+
@dir.file('file.txt').save('file.txt')
|
131
|
+
@dir.dir('subdir').mkdirs
|
132
|
+
@dir.list.size.should == 2
|
133
|
+
@dir.copy_to(dir)
|
134
|
+
@dir.exists?.should == true
|
135
|
+
dir.list.size.should == 2
|
136
|
+
dir.file('file.txt').load.should == 'file.txt'
|
137
|
+
dir.dir('subdir').exists?.should == true
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'dir takes relative path' do
|
141
|
+
dir = BuildMaster::CottaDir.new(@system, Pathname.new('targetdir/dir'))
|
142
|
+
@dir.dir('one/two/three').mkdirs
|
143
|
+
@dir.dir('one').exists?.should == true
|
144
|
+
@dir.dir('one').dir('two').exists?.should == true
|
145
|
+
@dir.dir('one').dir('two').dir('three').exists?.should == true
|
146
|
+
end
|
147
|
+
|
148
|
+
it 'list on not existing directory' do
|
149
|
+
dir = BuildMaster::CottaDir.new(@system, Pathname.new('no/such/directory'))
|
150
|
+
Proc.new {
|
151
|
+
dir.list
|
152
|
+
}.should raise_error(Errno::ENOENT)
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'allow filter for archive' do
|
156
|
+
@dir.file('in/in.txt').save('test')
|
157
|
+
@dir.file('out/out.txt').save('test')
|
158
|
+
result = @dir.archive {|entry|
|
159
|
+
entry.name != 'out'
|
160
|
+
}
|
161
|
+
target = result.extract(@dir.dir('extract'))
|
162
|
+
target.dir('out').should_not be_exist
|
163
|
+
target.dir('in').should be_exist
|
164
|
+
end
|
165
|
+
|
166
|
+
end
|
167
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib', 'buildmaster')
|
2
|
+
|
3
|
+
require 'cotta'
|
4
|
+
require 'cotta/cotta_file'
|
5
|
+
require 'cotta/cotta_dir'
|
6
|
+
require 'cotta/in_memory_system'
|
7
|
+
require 'spec'
|
8
|
+
require 'pathname'
|
9
|
+
|
10
|
+
module BuildMaster
|
11
|
+
describe 'CottaFileBehaviors', :shared => true do
|
12
|
+
before do
|
13
|
+
create_system
|
14
|
+
@file = BuildMaster::CottaFile.new(@system, Pathname.new('dir/file.txt'))
|
15
|
+
end
|
16
|
+
it 'file can be created with system and pathname' do
|
17
|
+
@file.name.should == 'file.txt'
|
18
|
+
@file.path.should == Pathname.new('dir/file.txt')
|
19
|
+
@file.exists?.should == false
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'file should know properties like parent, name, etc.' do
|
23
|
+
@file.parent.should == BuildMaster::CottaDir.new(@system, Pathname.new('dir'))
|
24
|
+
@file.name.should == 'file.txt'
|
25
|
+
@file.path.should == Pathname.new('dir/file.txt')
|
26
|
+
@file.extname.should == '.txt'
|
27
|
+
@file.basename.should == 'file'
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should support relative path' do
|
31
|
+
parent = @file.parent
|
32
|
+
file = parent.file('one/two/three.txt')
|
33
|
+
file.relative_path_from(parent).to_s.should == 'one/two/three.txt'
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'file should support stat' do
|
37
|
+
@file.save('test')
|
38
|
+
@file.stat.should_not be_nil
|
39
|
+
@file.stat.size.should == 4
|
40
|
+
@file.stat.writable?.should == true
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should raise error if does not exist' do
|
44
|
+
Proc.new {
|
45
|
+
@file.stat
|
46
|
+
}.should raise_error(Errno::ENOENT)
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'should load and save file content' do
|
50
|
+
@file.exists?.should == false
|
51
|
+
@file.parent.exists?.should == false
|
52
|
+
@file.save("content to save\nsecond line")
|
53
|
+
@file.exists?.should == true
|
54
|
+
@file.load.should ==("content to save\nsecond line")
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'should open file to read' do
|
58
|
+
@file.save("one\ntwo")
|
59
|
+
@file.read do |file|
|
60
|
+
file.gets.should ==("one\n")
|
61
|
+
file.gets.should ==('two')
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should equal if same system and pathname' do
|
66
|
+
file2 = BuildMaster::CottaFile.new(@system, Pathname.new('dir/file.txt'))
|
67
|
+
file2.should == @file
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'should copy to another file' do
|
71
|
+
file2 = BuildMaster::CottaFile.new(@system, Pathname.new('dir2/file.txt'))
|
72
|
+
file2.exists?.should == false
|
73
|
+
@file.save('my content')
|
74
|
+
@file.copy_to(file2)
|
75
|
+
file2.exists?.should == true
|
76
|
+
file2.load.should == 'my content'
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'should move file' do
|
80
|
+
file2 = BuildMaster::CottaFile.new(@system, Pathname.new('dir2/file.txt'))
|
81
|
+
file2.exists?.should == false
|
82
|
+
@file.save('content')
|
83
|
+
@file.move_to(file2)
|
84
|
+
file2.exists?.should == true
|
85
|
+
file2.load.should == 'content'
|
86
|
+
@file.exists?.should == false
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'should support foreach' do
|
90
|
+
@file.write do |file|
|
91
|
+
file.puts 'line one'
|
92
|
+
file.puts 'line two'
|
93
|
+
end
|
94
|
+
collected = Array.new
|
95
|
+
@file.foreach do |line|
|
96
|
+
collected.push line
|
97
|
+
end
|
98
|
+
collected.size.should == 2
|
99
|
+
collected[0].should == "line one\n"
|
100
|
+
collected[1].should == "line two\n"
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'should delete file' do
|
104
|
+
@file.save
|
105
|
+
@file.exists?.should == true
|
106
|
+
@file.delete
|
107
|
+
@file.exists?.should == false
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'should raise error if file to delete does not exist' do
|
111
|
+
lambda {
|
112
|
+
@file.delete
|
113
|
+
}.should raise_error(Errno::ENOENT)
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'should check timestamp to see which one is older' do
|
117
|
+
@file.save
|
118
|
+
file2 = @file.parent.file('another.txt')
|
119
|
+
sleep 1
|
120
|
+
file2.save
|
121
|
+
file2.older_than?(@file).should == false
|
122
|
+
@file.older_than?(file2).should == true
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|