jm81-svn-fixture 0.1.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.
- data/.document +5 -0
- data/.gitignore +7 -0
- data/LICENSE +20 -0
- data/README.md +77 -0
- data/Rakefile +48 -0
- data/VERSION +1 -0
- data/lib/svn-fixture.rb +71 -0
- data/lib/svn-fixture/directory.rb +99 -0
- data/lib/svn-fixture/file.rb +58 -0
- data/lib/svn-fixture/repository.rb +168 -0
- data/lib/svn-fixture/revision.rb +65 -0
- data/spec/spec_helper.rb +9 -0
- data/spec/svn-fixture/config_spec.rb +29 -0
- data/spec/svn-fixture/directory_spec.rb +194 -0
- data/spec/svn-fixture/file_spec.rb +65 -0
- data/spec/svn-fixture/fixtures/hello_world.rb +43 -0
- data/spec/svn-fixture/integration_spec.rb +102 -0
- data/spec/svn-fixture/repository_spec.rb +350 -0
- data/spec/svn-fixture/revision_spec.rb +70 -0
- data/spec/svn-fixture_spec.rb +89 -0
- metadata +81 -0
@@ -0,0 +1,65 @@
|
|
1
|
+
module SvnFixture
|
2
|
+
# A Revision of the Repository. It can be added via Repository#revision to
|
3
|
+
# a specific Repository
|
4
|
+
#
|
5
|
+
# repo = SvnFixture::Repository.get('test') do
|
6
|
+
# revision(1, 'log msg')
|
7
|
+
# end
|
8
|
+
# repo.commit
|
9
|
+
#
|
10
|
+
# or specified in Repository#commit:
|
11
|
+
#
|
12
|
+
# rev = SvnFixture::Revision.new(1, 'log msg')
|
13
|
+
# SvnFixture::Repository.get('test').commit(rev)
|
14
|
+
class Revision
|
15
|
+
attr_reader :name
|
16
|
+
|
17
|
+
# Initialize a Revision (normally called by Repository#revision).
|
18
|
+
#
|
19
|
+
# - +name+: A name of the Revision, can be given in Array to
|
20
|
+
# Repository#commit instead of the Revision itself. Can be a revision
|
21
|
+
# number, but this does not affect the actual revision number in the
|
22
|
+
# Subversion repository.
|
23
|
+
# - +message+: Log message. Defaults to empty String.
|
24
|
+
# - +options+:
|
25
|
+
# - +:author+: The Revision's author
|
26
|
+
# - +:date+: The date and time of the commit
|
27
|
+
# - Optionally accepts a block. The block, if given, is run at the time
|
28
|
+
# #commit is called, within the context of the root directory of the
|
29
|
+
# Repository, which is an instance of SvnFixture::Directory. For example:
|
30
|
+
#
|
31
|
+
# SvnFixture::Revision.new(1, 'log msg') do
|
32
|
+
# dir('test') # Or any other SvnFixture::Directory instance method.
|
33
|
+
# end
|
34
|
+
def initialize(name, message = "", options = {}, &block)
|
35
|
+
@name, @message, @block = name, message, block
|
36
|
+
@author = options.delete(:author)
|
37
|
+
@date = SvnFixture.svn_time(options.delete(:date))
|
38
|
+
end
|
39
|
+
|
40
|
+
# Processes the changes made in this revision. Normally these would be made
|
41
|
+
# in a block given to Revision.new. #commit runs that block against the root
|
42
|
+
# directory of the working copy. This method is usually called by
|
43
|
+
# Repository#commit instead of directly. Also sets Revision properties for
|
44
|
+
# log message and, optionally, author and date, based on arguments
|
45
|
+
# to +.new+. If there are no changes, the commit fails and a warning to that
|
46
|
+
# effect.
|
47
|
+
#
|
48
|
+
# Only argument is an instance of SvnFixture::Repository that is the
|
49
|
+
# Repository to which this revision is committed.
|
50
|
+
def commit(repo)
|
51
|
+
root = Directory.new(repo.ctx, repo.wc_path)
|
52
|
+
root.instance_eval(&@block) if @block
|
53
|
+
ci = repo.ctx.ci(repo.wc_path)
|
54
|
+
unless ci.revision == Svn::Core::INVALID_REVNUM
|
55
|
+
rev = ci.revision
|
56
|
+
repo.repos.fs.set_prop('svn:log', @message, rev) if @message
|
57
|
+
repo.repos.fs.set_prop('svn:author', @author, rev) if @author
|
58
|
+
repo.repos.fs.set_prop('svn:date', @date, rev) if @date
|
59
|
+
else
|
60
|
+
puts "Warning: No change in revision #{name} (SvnFixture::Revision#commit)"
|
61
|
+
end
|
62
|
+
return true
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe "SvnFixture.config" do
|
4
|
+
before(:each) do
|
5
|
+
# Force to default state
|
6
|
+
SvnFixture.instance_variable_set(:@config, nil)
|
7
|
+
end
|
8
|
+
|
9
|
+
after(:all) do
|
10
|
+
# Force to default state for other specs
|
11
|
+
SvnFixture.instance_variable_set(:@config, nil)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should initialize with CONFIG_DEFAULTS' do
|
15
|
+
SvnFixture.config.should == SvnFixture::CONFIG_DEFAULTS
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should be writable' do
|
19
|
+
SvnFixture.config[:base_path] = '/tmp/elsewhere'
|
20
|
+
SvnFixture.instance_variable_get(:@config)[:base_path].
|
21
|
+
should == '/tmp/elsewhere'
|
22
|
+
end
|
23
|
+
|
24
|
+
describe ':base_path' do
|
25
|
+
it 'should default to "#{Dir.tmpdir)/#{svn-fixture}"' do
|
26
|
+
SvnFixture.config[:base_path].should == File.join(Dir.tmpdir, 'svn-fixture')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,194 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe SvnFixture::Directory do
|
4
|
+
before(:each) do
|
5
|
+
@klass = SvnFixture::Directory
|
6
|
+
SvnFixture::Repository.destroy_all
|
7
|
+
|
8
|
+
# Set up repo
|
9
|
+
@repos = SvnFixture::repo('dir_test') do
|
10
|
+
revision(1, 'create directory and file') do
|
11
|
+
dir('test-dir') do
|
12
|
+
dir('subdir')
|
13
|
+
file('file.txt')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
@repos.commit
|
18
|
+
@repos_path = @repos.instance_variable_get(:@repos_path)
|
19
|
+
@wc_path = @repos.instance_variable_get(:@wc_path)
|
20
|
+
@ctx = @repos.ctx
|
21
|
+
end
|
22
|
+
|
23
|
+
before(:each) do
|
24
|
+
@path = File.join(@wc_path, 'test-dir')
|
25
|
+
@full_repos_path = "file://#{File.join(@repos_path, 'test-dir')}"
|
26
|
+
@dir = @klass.new(@ctx, @path)
|
27
|
+
end
|
28
|
+
|
29
|
+
after(:all) do
|
30
|
+
SvnFixture::Repository.destroy_all
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#initialize' do
|
34
|
+
it 'should set ctx and path' do
|
35
|
+
dir = @klass.new(@ctx, '/tmp/path/')
|
36
|
+
dir.instance_variable_get(:@ctx).should == @ctx
|
37
|
+
dir.instance_variable_get(:@path).should == '/tmp/path/'
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should add a trailing slash to path if needed' do
|
41
|
+
dir = @klass.new(@ctx, '/tmp/path')
|
42
|
+
dir.instance_variable_get(:@path).should == '/tmp/path/'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe '#dir' do
|
47
|
+
before(:each) do
|
48
|
+
@subdir_path = File.join(@path, 'subdir')
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'should create a new directory if needed (and add to Subversion)' do
|
52
|
+
new_path = File.join(@path, 'subdir2')
|
53
|
+
File.exist?(new_path).should be_false
|
54
|
+
new_dir = @dir.dir('subdir2')
|
55
|
+
@ctx.commit(@wc_path)
|
56
|
+
File.exist?(new_path).should be_true
|
57
|
+
@repos.repos.fs.root.dir?('test-dir/subdir2').should be_true
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'should use an existing directory' do
|
61
|
+
FileUtils.should_not_receive(:mkdir_p)
|
62
|
+
@ctx.should_not_receive(:add)
|
63
|
+
@dir.dir('subdir')
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'should setup a new SvnFixture::Directory' do
|
67
|
+
SvnFixture::Directory.should_receive(:new).with(@ctx, @subdir_path)
|
68
|
+
@dir.dir('subdir')
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'should return the Directory' do
|
72
|
+
sub = @dir.dir('subdir')
|
73
|
+
sub.should be_kind_of(SvnFixture::Directory)
|
74
|
+
sub.instance_variable_get(:@path).should == @subdir_path + '/'
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'should run block if given' do
|
78
|
+
SvnFixture::File.should_receive(:new).with(@ctx, File.join(@subdir_path, 'test.txt'))
|
79
|
+
@dir.dir('subdir') do
|
80
|
+
file('test.txt')
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe '#file' do
|
86
|
+
before(:each) do
|
87
|
+
@file_path = File.join(@path, 'file.txt')
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'should create a new file if needed (and add to Subversion)' do
|
91
|
+
new_path = File.join(@path, 'file2.txt')
|
92
|
+
File.exist?(new_path).should be_false
|
93
|
+
f = @dir.file('file2.txt')
|
94
|
+
@ctx.commit(@wc_path)
|
95
|
+
File.exist?(new_path).should be_true
|
96
|
+
@repos.repos.fs.root.file?('test-dir/file2.txt').should be_true
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'should use an existing file' do
|
100
|
+
FileUtils.should_not_receive(:touch)
|
101
|
+
@ctx.should_not_receive(:add)
|
102
|
+
@dir.file('file.txt')
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'should setup a new SvnFixture::File' do
|
106
|
+
SvnFixture::File.should_receive(:new).with(@ctx, @file_path)
|
107
|
+
@dir.file('file.txt')
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'should return the File' do
|
111
|
+
f = @dir.file('file.txt')
|
112
|
+
f.should be_kind_of(SvnFixture::File)
|
113
|
+
f.instance_variable_get(:@path).should == @file_path
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'should run block if given' do
|
117
|
+
@dir.file('file.txt') do
|
118
|
+
body('Test')
|
119
|
+
end
|
120
|
+
File.read(@file_path).should == 'Test'
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
describe '#move' do
|
125
|
+
before(:each) do
|
126
|
+
@file_path = File.join(@path, 'file.txt')
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'should move node in FS and Subversion' do
|
130
|
+
new_path = File.join(@path, 'subdir', 'file2.txt')
|
131
|
+
File.exist?(new_path).should be_false
|
132
|
+
File.exist?(@file_path).should be_true
|
133
|
+
@dir.move('file.txt', 'subdir/file2.txt')
|
134
|
+
File.exist?(new_path).should be_true
|
135
|
+
File.exist?(@file_path).should be_false
|
136
|
+
@ctx.commit(@wc_path)
|
137
|
+
@repos.repos.fs.root.file?('test-dir/file.txt').should be_false
|
138
|
+
@repos.repos.fs.root.file?('test-dir/subdir/file2.txt').should be_true
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
describe '#copy' do
|
143
|
+
before(:each) do
|
144
|
+
@file_path = File.join(@path, 'file.txt')
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'should copy node in FS and Subversion' do
|
148
|
+
new_path = File.join(@path, 'subdir', 'file2.txt')
|
149
|
+
File.exist?(new_path).should be_false
|
150
|
+
File.exist?(@file_path).should be_true
|
151
|
+
@dir.copy('file.txt', 'subdir/file2.txt')
|
152
|
+
File.exist?(new_path).should be_true
|
153
|
+
File.exist?(@file_path).should be_true
|
154
|
+
@ctx.commit(@wc_path)
|
155
|
+
@repos.repos.fs.root.file?('test-dir/file.txt').should be_true
|
156
|
+
@repos.repos.fs.root.file?('test-dir/subdir/file2.txt').should be_true
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
describe '#delete' do
|
161
|
+
before(:each) do
|
162
|
+
@file_path = File.join(@path, 'file.txt')
|
163
|
+
end
|
164
|
+
|
165
|
+
it 'should copy node in FS and Subversion' do
|
166
|
+
File.exist?(@file_path).should be_true
|
167
|
+
@dir.delete('file.txt')
|
168
|
+
File.exist?(@file_path).should be_false
|
169
|
+
@ctx.commit(@wc_path)
|
170
|
+
@repos.repos.fs.root.file?('test-dir/file.txt').should be_false
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
describe '#prop' do
|
175
|
+
it 'should set a property' do
|
176
|
+
@dir.prop('prop:name', 'Prop Value')
|
177
|
+
rev = @ctx.ci(@wc_path).revision
|
178
|
+
@ctx.propget('prop:name', @path, rev)[@full_repos_path].should ==
|
179
|
+
'Prop Value'
|
180
|
+
|
181
|
+
@dir.prop('prop:name', 'New Value')
|
182
|
+
rev = @ctx.ci(@wc_path).revision
|
183
|
+
@ctx.propget('prop:name', @path, rev)[@full_repos_path].should ==
|
184
|
+
'New Value'
|
185
|
+
end
|
186
|
+
|
187
|
+
it 'should format a Time correctly' do
|
188
|
+
@dir.prop('prop:timeval', Time.parse('2009-06-18 14:00'))
|
189
|
+
rev = @ctx.ci(@wc_path).revision
|
190
|
+
@ctx.propget('prop:timeval', @path, rev)[@full_repos_path].should ==
|
191
|
+
'2009-06-18T14:00:00.000000Z'
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe SvnFixture::File do
|
4
|
+
before(:all) do
|
5
|
+
@klass = SvnFixture::File
|
6
|
+
SvnFixture::Repository.destroy_all
|
7
|
+
|
8
|
+
# Set up repo
|
9
|
+
@repos = SvnFixture::repo('file_test') do
|
10
|
+
revision(1, 'create file') do
|
11
|
+
file('test.txt')
|
12
|
+
end
|
13
|
+
end
|
14
|
+
@repos.commit
|
15
|
+
@repos_path = @repos.instance_variable_get(:@repos_path)
|
16
|
+
@wc_path = @repos.instance_variable_get(:@wc_path)
|
17
|
+
@ctx = @repos.ctx
|
18
|
+
end
|
19
|
+
|
20
|
+
before(:each) do
|
21
|
+
@path = File.join(@wc_path, 'test.txt')
|
22
|
+
@full_repos_path = "file://#{File.join(@repos_path, 'test.txt')}"
|
23
|
+
@file = @klass.new(@ctx, @path)
|
24
|
+
end
|
25
|
+
|
26
|
+
after(:all) do
|
27
|
+
SvnFixture::Repository.destroy_all
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#initialize' do
|
31
|
+
it 'should set ctx and path' do
|
32
|
+
file = @klass.new(@ctx, '/tmp/path')
|
33
|
+
file.instance_variable_get(:@ctx).should == @ctx
|
34
|
+
file.instance_variable_get(:@path).should == '/tmp/path'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe '#prop' do
|
39
|
+
it 'should set a property' do
|
40
|
+
@file.prop('prop:name', 'Prop Value')
|
41
|
+
rev = @ctx.ci(@wc_path).revision
|
42
|
+
@ctx.propget('prop:name', @path, rev)[@full_repos_path].should ==
|
43
|
+
'Prop Value'
|
44
|
+
|
45
|
+
@file.prop('prop:name', 'New Value')
|
46
|
+
rev = @ctx.ci(@wc_path).revision
|
47
|
+
@ctx.propget('prop:name', @path, rev)[@full_repos_path].should ==
|
48
|
+
'New Value'
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'should format a Time correctly' do
|
52
|
+
@file.prop('prop:timeval', Time.parse('2009-06-18 14:00'))
|
53
|
+
rev = @ctx.ci(@wc_path).revision
|
54
|
+
@ctx.propget('prop:timeval', @path, rev)[@full_repos_path].should ==
|
55
|
+
'2009-06-18T14:00:00.000000Z'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe '#body' do
|
60
|
+
it "should update the File's contents" do
|
61
|
+
@file.body('Test Content')
|
62
|
+
File.read(@path).should == 'Test Content'
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# For use by integration_spec
|
2
|
+
|
3
|
+
SvnFixture::repo('hello_world') do
|
4
|
+
revision(1, 'Create directories',
|
5
|
+
:date => Time.parse('2009-01-01 12:00:00Z')) do
|
6
|
+
dir 'app'
|
7
|
+
dir 'docs'
|
8
|
+
dir 'lib'
|
9
|
+
end
|
10
|
+
|
11
|
+
revision 2, 'Add some files' do
|
12
|
+
dir 'app' do
|
13
|
+
prop 'full_name', 'Application'
|
14
|
+
|
15
|
+
file 'hello.rb' do
|
16
|
+
prop 'is_ruby', 'Yes'
|
17
|
+
body 'puts "Hello World"'
|
18
|
+
end
|
19
|
+
|
20
|
+
file 'goodbye.rb' do
|
21
|
+
body 'puts "Goodbye World"'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
SvnFixture::repo('hello_world') do
|
28
|
+
revision 3, 'Edit hello.rb', :author => "the.author" do
|
29
|
+
dir 'app' do
|
30
|
+
file 'hello.rb' do
|
31
|
+
prop 'is_ruby', 'Probably'
|
32
|
+
body 'puts "Howdy World"'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
revision 4, 'Copy and move' do
|
38
|
+
dir 'app' do
|
39
|
+
move 'goodbye.rb', 'bye.rb'
|
40
|
+
copy 'hello.rb', 'hello2.rb'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
# Test again fixtures/hello_world.rb to follow a complete fixture generation.
|
4
|
+
describe 'SvnFixture integration' do
|
5
|
+
before(:all) do
|
6
|
+
SvnFixture::Repository.instance_variable_set(:@repositories, {})
|
7
|
+
load File.dirname(__FILE__) + '/fixtures/hello_world.rb'
|
8
|
+
SvnFixture::repo('hello_world').commit
|
9
|
+
repos_path = File.join(Dir.tmpdir, 'svn-fixture', 'repo_hello_world')
|
10
|
+
@repos = ::Svn::Repos.open(repos_path)
|
11
|
+
@fs = @repos.fs
|
12
|
+
end
|
13
|
+
|
14
|
+
after(:all) do
|
15
|
+
SvnFixture::Repository.destroy_all
|
16
|
+
end
|
17
|
+
|
18
|
+
describe 'revision 1' do
|
19
|
+
before(:each) do
|
20
|
+
@root = @fs.root(1)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should have 3 directories' do
|
24
|
+
@root.dir?('app').should be_true
|
25
|
+
@root.dir?('docs').should be_true
|
26
|
+
@root.dir?('lib').should be_true
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should not have files' do
|
30
|
+
@root.file?('app/hello.rb').should be_false
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should have specified date at rev 1' do
|
34
|
+
@fs.prop(Svn::Core::PROP_REVISION_DATE, 1).should ==
|
35
|
+
Time.parse('2009-01-01 12:00:00Z')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'revision 2' do
|
40
|
+
before(:each) do
|
41
|
+
@root = @fs.root(2)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should have files' do
|
45
|
+
@root.file?('app/hello.rb').should be_true
|
46
|
+
@root.file_contents('app/hello.rb') do |f|
|
47
|
+
f.read.should == 'puts "Hello World"'
|
48
|
+
end
|
49
|
+
@root.file?('app/goodbye.rb').should be_true
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should have property for hello.rb' do
|
53
|
+
@root.node_proplist('app/hello.rb')['is_ruby'].should == 'Yes'
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe 'revision 3' do
|
58
|
+
before(:each) do
|
59
|
+
@root = @fs.root(3)
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'should change text for hello.rb' do
|
63
|
+
@root.file_contents('app/hello.rb') do |f|
|
64
|
+
f.read.should == 'puts "Howdy World"'
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'should change property for hello.rb' do
|
69
|
+
@root.node_proplist('app/hello.rb')['is_ruby'].should == 'Probably'
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'should set author' do
|
73
|
+
@fs.prop(Svn::Core::PROP_REVISION_AUTHOR, 3).should ==
|
74
|
+
'the.author'
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe 'revision 4' do
|
79
|
+
before(:each) do
|
80
|
+
@root = @fs.root(4)
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'should copy/move files' do
|
84
|
+
@root.file?('app/hello.rb').should be_true
|
85
|
+
@root.file?('app/hello2.rb').should be_true
|
86
|
+
@root.file_contents('app/hello2.rb') do |f|
|
87
|
+
f.read.should == 'puts "Howdy World"'
|
88
|
+
end
|
89
|
+
@root.file?('app/goodbye.rb').should be_false
|
90
|
+
@root.file?('app/bye.rb').should be_true
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'should have expected dirs, files' do
|
94
|
+
@root.dir?('app').should be_true
|
95
|
+
@root.file?('app/hello.rb').should be_true
|
96
|
+
@root.file?('app/hello2.rb').should be_true
|
97
|
+
@root.file?('app/bye.rb').should be_true
|
98
|
+
@root.dir?('docs').should be_true
|
99
|
+
@root.dir?('lib').should be_true
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|