delta_test 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.
- checksums.yaml +7 -0
- data/.gitignore +15 -0
- data/.rspec +4 -0
- data/.ruby-version +1 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +165 -0
- data/Rakefile +17 -0
- data/bin/delta_test +12 -0
- data/circle.yml +12 -0
- data/delta_test.gemspec +30 -0
- data/lib/delta_test/analyzer.rb +47 -0
- data/lib/delta_test/cli.rb +224 -0
- data/lib/delta_test/configuration.rb +173 -0
- data/lib/delta_test/dependencies_table.rb +83 -0
- data/lib/delta_test/errors.rb +55 -0
- data/lib/delta_test/generator.rb +101 -0
- data/lib/delta_test/git.rb +88 -0
- data/lib/delta_test/related_spec_list.rb +64 -0
- data/lib/delta_test/spec_helpers.rb +42 -0
- data/lib/delta_test/utils.rb +93 -0
- data/lib/delta_test/version.rb +9 -0
- data/lib/delta_test.rb +47 -0
- data/spec/fixtures/sample/alpha.rb +19 -0
- data/spec/fixtures/sample/beta.rb +15 -0
- data/spec/fixtures/sample/gamma.rb +9 -0
- data/spec/lib/delta_test/analyzer_spec.rb +126 -0
- data/spec/lib/delta_test/cli_spec.rb +422 -0
- data/spec/lib/delta_test/configuration_spec.rb +353 -0
- data/spec/lib/delta_test/dependencies_table_spec.rb +129 -0
- data/spec/lib/delta_test/generator_spec.rb +201 -0
- data/spec/lib/delta_test/git_spec.rb +178 -0
- data/spec/lib/delta_test/related_spec_list_spec.rb +182 -0
- data/spec/lib/delta_test/spec_helpers_spec.rb +72 -0
- data/spec/lib/delta_test/utils_spec.rb +244 -0
- data/spec/lib/delta_test_spec.rb +119 -0
- data/spec/rails/.gitignore +19 -0
- data/spec/rails/.rspec +3 -0
- data/spec/rails/Gemfile +15 -0
- data/spec/rails/Gemfile.lock +163 -0
- data/spec/rails/README.rdoc +28 -0
- data/spec/rails/Rakefile +6 -0
- data/spec/rails/app/controllers/application_controller.rb +5 -0
- data/spec/rails/app/controllers/concerns/.keep +0 -0
- data/spec/rails/app/helpers/application_helper.rb +2 -0
- data/spec/rails/app/mailers/.keep +0 -0
- data/spec/rails/app/models/.keep +0 -0
- data/spec/rails/app/models/concerns/.keep +0 -0
- data/spec/rails/app/views/layouts/application.html.haml +7 -0
- data/spec/rails/bin/bundle +3 -0
- data/spec/rails/bin/rails +4 -0
- data/spec/rails/bin/rake +4 -0
- data/spec/rails/bin/setup +29 -0
- data/spec/rails/config/application.rb +35 -0
- data/spec/rails/config/boot.rb +3 -0
- data/spec/rails/config/database.yml +25 -0
- data/spec/rails/config/environment.rb +5 -0
- data/spec/rails/config/environments/development.rb +41 -0
- data/spec/rails/config/environments/production.rb +79 -0
- data/spec/rails/config/environments/test.rb +42 -0
- data/spec/rails/config/initializers/assets.rb +11 -0
- data/spec/rails/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/rails/config/initializers/cookies_serializer.rb +3 -0
- data/spec/rails/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/rails/config/initializers/inflections.rb +16 -0
- data/spec/rails/config/initializers/mime_types.rb +4 -0
- data/spec/rails/config/initializers/session_store.rb +3 -0
- data/spec/rails/config/initializers/wrap_parameters.rb +14 -0
- data/spec/rails/config/locales/en.yml +23 -0
- data/spec/rails/config/routes.rb +56 -0
- data/spec/rails/config/secrets.yml +22 -0
- data/spec/rails/config.ru +4 -0
- data/spec/rails/db/seeds.rb +7 -0
- data/spec/rails/delta_test.yml +5 -0
- data/spec/rails/lib/assets/.keep +0 -0
- data/spec/rails/lib/tasks/.keep +0 -0
- data/spec/rails/log/.keep +0 -0
- data/spec/rails/public/404.html +67 -0
- data/spec/rails/public/422.html +67 -0
- data/spec/rails/public/500.html +66 -0
- data/spec/rails/public/favicon.ico +0 -0
- data/spec/rails/public/robots.txt +5 -0
- data/spec/rails/spec/features/sample_spec.rb +7 -0
- data/spec/rails/spec/spec_helper.rb +16 -0
- data/spec/rails/vendor/assets/javascripts/.keep +0 -0
- data/spec/rails/vendor/assets/stylesheets/.keep +0 -0
- data/spec/spec_helper.rb +39 -0
- data/spec/supports/create_table_file.rb +21 -0
- metadata +283 -0
@@ -0,0 +1,178 @@
|
|
1
|
+
require 'delta_test/git'
|
2
|
+
|
3
|
+
describe DeltaTest::Git do
|
4
|
+
|
5
|
+
let(:out) { '' }
|
6
|
+
let(:success_status) { [out, '', double(success?: true)] }
|
7
|
+
let(:error_status) { ['', '', double(success?: false)] }
|
8
|
+
|
9
|
+
describe '::git_repo?' do
|
10
|
+
|
11
|
+
let(:command) { %q{git rev-parse --is-inside-work-tree} }
|
12
|
+
|
13
|
+
it 'should return false if `git` command is not exist' do
|
14
|
+
allow(Open3).to receive(:capture3).with(command, any_args).and_raise
|
15
|
+
|
16
|
+
result = nil
|
17
|
+
|
18
|
+
expect {
|
19
|
+
result = DeltaTest::Git.git_repo?
|
20
|
+
}.not_to raise_error
|
21
|
+
|
22
|
+
expect(result).to be(false)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should return true exit code is 0' do
|
26
|
+
allow(Open3).to receive(:capture3).with(command, any_args).and_return(success_status)
|
27
|
+
|
28
|
+
expect(DeltaTest::Git.git_repo?).to be(true)
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should return false exit code not is 0' do
|
32
|
+
allow(Open3).to receive(:capture3).with(command, any_args).and_return(error_status)
|
33
|
+
|
34
|
+
expect(DeltaTest::Git.git_repo?).to be(false)
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
describe '::root_dir' do
|
40
|
+
|
41
|
+
let(:command) { %q{git rev-parse --show-toplevel} }
|
42
|
+
let(:out) { '/root/dir' }
|
43
|
+
|
44
|
+
it 'should raise an error if the command is not exist' do
|
45
|
+
allow(Open3).to receive(:capture3).with(command, any_args).and_raise
|
46
|
+
|
47
|
+
expect {
|
48
|
+
DeltaTest::Git.root_dir
|
49
|
+
}.to raise_error
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should return a root directory path if success' do
|
53
|
+
allow(Open3).to receive(:capture3).with(command, any_args).and_return(success_status)
|
54
|
+
|
55
|
+
expect(DeltaTest::Git.root_dir).to eq(out)
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'should return nil if error' do
|
59
|
+
allow(Open3).to receive(:capture3).with(command, any_args).and_return(error_status)
|
60
|
+
|
61
|
+
expect(DeltaTest::Git.root_dir).to be_nil
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
describe '::rev_parse' do
|
67
|
+
|
68
|
+
let(:rev) { 'HEAD' }
|
69
|
+
let(:command) { %Q{git rev-parse #{rev}} }
|
70
|
+
let(:out) { '818b60efa12b4bd99815e9b550185d1fb6244663' }
|
71
|
+
|
72
|
+
it 'should raise an error if the command is not exist' do
|
73
|
+
allow(Open3).to receive(:capture3).with(command, any_args).and_raise
|
74
|
+
|
75
|
+
expect {
|
76
|
+
DeltaTest::Git.rev_parse(rev)
|
77
|
+
}.to raise_error
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'should return a commit id if success' do
|
81
|
+
allow(Open3).to receive(:capture3).with(command, any_args).and_return(success_status)
|
82
|
+
|
83
|
+
expect(DeltaTest::Git.rev_parse(rev)).to eq(out)
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'should return nil if error' do
|
87
|
+
allow(Open3).to receive(:capture3).with(command, any_args).and_return(error_status)
|
88
|
+
|
89
|
+
expect(DeltaTest::Git.rev_parse(rev)).to be_nil
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
describe '::same_commit?' do
|
95
|
+
|
96
|
+
let(:map) do
|
97
|
+
{
|
98
|
+
'master' => '0000000000000000000000000000000000000000',
|
99
|
+
'HEAD' => '1111111111111111111111111111111111111111',
|
100
|
+
'feature/foo' => '1111111111111111111111111111111111111111',
|
101
|
+
}
|
102
|
+
end
|
103
|
+
|
104
|
+
before do
|
105
|
+
map.each do |name, commit_id|
|
106
|
+
allow(DeltaTest::Git).to receive(:rev_parse).with(name).and_return(commit_id)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'should compare two names by thier commit ids' do
|
111
|
+
names = map.values
|
112
|
+
names.product(names).each do |r1, r2|
|
113
|
+
expect(DeltaTest::Git).to receive(:rev_parse).with(r1).ordered
|
114
|
+
expect(DeltaTest::Git).to receive(:rev_parse).with(r2).ordered
|
115
|
+
|
116
|
+
is_same = (map[r1] == map[r2])
|
117
|
+
|
118
|
+
expect(DeltaTest::Git.same_commit?(r1, r2)).to be(is_same)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
|
124
|
+
describe '::ls_files' do
|
125
|
+
|
126
|
+
let(:command) { %q{git ls-files -z} }
|
127
|
+
let(:out) { "/a/file/1\x0/a/file/2\x0/a/file/3" }
|
128
|
+
|
129
|
+
it 'should raise an error if the command is not exist' do
|
130
|
+
allow(Open3).to receive(:capture3).with(command, any_args).and_raise
|
131
|
+
|
132
|
+
expect {
|
133
|
+
DeltaTest::Git.ls_files
|
134
|
+
}.to raise_error
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'should return an array if success' do
|
138
|
+
allow(Open3).to receive(:capture3).with(command, any_args).and_return(success_status)
|
139
|
+
|
140
|
+
expect(DeltaTest::Git.ls_files).to eq(out.split("\x0"))
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'should return an empty array if error' do
|
144
|
+
allow(Open3).to receive(:capture3).with(command, any_args).and_return(error_status)
|
145
|
+
|
146
|
+
expect(DeltaTest::Git.ls_files).to eq([])
|
147
|
+
end
|
148
|
+
|
149
|
+
end
|
150
|
+
|
151
|
+
describe '::changed_files' do
|
152
|
+
|
153
|
+
let(:command) { %q{git --no-pager diff --name-only -z master HEAD} }
|
154
|
+
let(:out) { "/a/file/1\x0/a/file/2\x0/a/file/3" }
|
155
|
+
|
156
|
+
it 'should raise an error if the command is not exist' do
|
157
|
+
allow(Open3).to receive(:capture3).with(command, any_args).and_raise
|
158
|
+
|
159
|
+
expect {
|
160
|
+
DeltaTest::Git.changed_files
|
161
|
+
}.to raise_error
|
162
|
+
end
|
163
|
+
|
164
|
+
it 'should return an array if success' do
|
165
|
+
allow(Open3).to receive(:capture3).with(command, any_args).and_return(success_status)
|
166
|
+
|
167
|
+
expect(DeltaTest::Git.changed_files).to eq(out.split("\x0"))
|
168
|
+
end
|
169
|
+
|
170
|
+
it 'should return an empty array if error' do
|
171
|
+
allow(Open3).to receive(:capture3).with(command, any_args).and_return(error_status)
|
172
|
+
|
173
|
+
expect(DeltaTest::Git.changed_files).to eq([])
|
174
|
+
end
|
175
|
+
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
@@ -0,0 +1,182 @@
|
|
1
|
+
require 'delta_test/related_spec_list'
|
2
|
+
|
3
|
+
describe DeltaTest::RelatedSpecList do
|
4
|
+
|
5
|
+
include_examples :defer_create_table_file
|
6
|
+
|
7
|
+
let(:base) { 'master' }
|
8
|
+
let(:head) { 'feature/foo' }
|
9
|
+
let(:list) { DeltaTest::RelatedSpecList.new }
|
10
|
+
|
11
|
+
let(:base_path) { '/base_path' }
|
12
|
+
|
13
|
+
before do
|
14
|
+
DeltaTest.configure do |config|
|
15
|
+
config.base_path = base_path
|
16
|
+
config.table_file = table_file_path
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
shared_examples :_mock_table_and_changed_files do
|
21
|
+
|
22
|
+
let(:table) do
|
23
|
+
table = DeltaTest::DependenciesTable.new
|
24
|
+
|
25
|
+
table['spec/foo_spec.rb'] << 'lib/foo.rb'
|
26
|
+
table['spec/bar_spec.rb'] << 'lib/bar.rb'
|
27
|
+
table['spec/baz_spec.rb'] << 'lib/baz.rb'
|
28
|
+
table['spec/other_spec.rb']
|
29
|
+
table['spec/mixed_spec.rb'] << 'lib/foo.rb'
|
30
|
+
table['spec/mixed_spec.rb'] << 'lib/bar.rb'
|
31
|
+
|
32
|
+
table
|
33
|
+
end
|
34
|
+
|
35
|
+
let(:changed_files) do
|
36
|
+
[
|
37
|
+
'lib/foo.rb',
|
38
|
+
]
|
39
|
+
end
|
40
|
+
|
41
|
+
before do
|
42
|
+
allow(DeltaTest::DependenciesTable).to receive(:load).with(Pathname.new(table_file_path)).and_return(table)
|
43
|
+
|
44
|
+
allow(DeltaTest::Git).to receive(:git_repo?).and_return(true)
|
45
|
+
allow(DeltaTest::Git).to receive(:changed_files).with(base, head).and_return(changed_files)
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
describe '#load_table!' do
|
51
|
+
|
52
|
+
it 'should raise an error if a table file is not exist' do
|
53
|
+
expect {
|
54
|
+
list.load_table!
|
55
|
+
}.to raise_error(DeltaTest::TableNotFoundError)
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'should load the table if exist' do
|
59
|
+
table_file
|
60
|
+
|
61
|
+
expect(list.table).to be_nil
|
62
|
+
|
63
|
+
expect {
|
64
|
+
list.load_table!
|
65
|
+
}.not_to raise_error
|
66
|
+
|
67
|
+
expect(list.table).to be_a(DeltaTest::DependenciesTable)
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
describe '#retrive_changed_files!' do
|
73
|
+
|
74
|
+
include_examples :_mock_table_and_changed_files
|
75
|
+
|
76
|
+
it 'shoud raise an error if the directory is not managed by git' do
|
77
|
+
allow(DeltaTest::Git).to receive(:git_repo?).and_return(false)
|
78
|
+
|
79
|
+
expect {
|
80
|
+
list.retrive_changed_files!(base, head)
|
81
|
+
}.to raise_error(DeltaTest::NotInGitRepositoryError)
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'shoud retrive a list of changed files' do
|
85
|
+
expect(list.changed_files).to be_nil
|
86
|
+
|
87
|
+
list.retrive_changed_files!(base, head)
|
88
|
+
|
89
|
+
expect(list.changed_files).to be_a(Array)
|
90
|
+
expect(list.changed_files).not_to be_empty
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
describe '#related_spec_files' do
|
96
|
+
|
97
|
+
include_examples :_mock_table_and_changed_files
|
98
|
+
|
99
|
+
before do
|
100
|
+
table_file
|
101
|
+
list.load_table!
|
102
|
+
list.retrive_changed_files!(base, head)
|
103
|
+
end
|
104
|
+
|
105
|
+
describe 'Dependents' do
|
106
|
+
|
107
|
+
let(:related_spec_files) do
|
108
|
+
Set[
|
109
|
+
'spec/foo_spec.rb',
|
110
|
+
'spec/mixed_spec.rb',
|
111
|
+
]
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'should be included' do
|
115
|
+
expect(list.related_spec_files).to eq(related_spec_files)
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
describe 'Modified spec files' do
|
121
|
+
|
122
|
+
let(:changed_files) do
|
123
|
+
[
|
124
|
+
'lib/foo.rb',
|
125
|
+
'spec/baz_spec.rb',
|
126
|
+
]
|
127
|
+
end
|
128
|
+
|
129
|
+
let(:related_spec_files) do
|
130
|
+
Set[
|
131
|
+
'spec/foo_spec.rb',
|
132
|
+
'spec/mixed_spec.rb',
|
133
|
+
'spec/baz_spec.rb',
|
134
|
+
]
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'should be included' do
|
138
|
+
expect(list.related_spec_files).to eq(related_spec_files)
|
139
|
+
end
|
140
|
+
|
141
|
+
end
|
142
|
+
|
143
|
+
describe 'Custom dependents' do
|
144
|
+
|
145
|
+
let(:custom_mappings) do
|
146
|
+
{
|
147
|
+
'spec/other_spec.rb' => [
|
148
|
+
'config/locales/**/*.yml',
|
149
|
+
]
|
150
|
+
}
|
151
|
+
end
|
152
|
+
|
153
|
+
let(:changed_files) do
|
154
|
+
[
|
155
|
+
'lib/foo.rb',
|
156
|
+
'config/locales/something/en.yml',
|
157
|
+
]
|
158
|
+
end
|
159
|
+
|
160
|
+
let(:related_spec_files) do
|
161
|
+
Set[
|
162
|
+
'spec/foo_spec.rb',
|
163
|
+
'spec/mixed_spec.rb',
|
164
|
+
'spec/other_spec.rb',
|
165
|
+
]
|
166
|
+
end
|
167
|
+
|
168
|
+
before do
|
169
|
+
DeltaTest.configure do |config|
|
170
|
+
config.custom_mappings = custom_mappings
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
it 'should be included' do
|
175
|
+
expect(list.related_spec_files).to eq(related_spec_files)
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
179
|
+
|
180
|
+
end
|
181
|
+
|
182
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'delta_test/spec_helpers'
|
2
|
+
|
3
|
+
describe DeltaTest::SpecHelpers do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@rspec_example_group = Class.new do
|
7
|
+
class << self
|
8
|
+
def before(_)
|
9
|
+
yield if block_given?
|
10
|
+
end
|
11
|
+
|
12
|
+
def after(_)
|
13
|
+
yield if block_given?
|
14
|
+
end
|
15
|
+
|
16
|
+
def metadata
|
17
|
+
{ file_path: 'spec/foo/bar.rb' }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
allow(DeltaTest).to receive(:active?).and_return(false)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should define a global generator' do
|
26
|
+
expect(defined?($delta_test_generator)).not_to be(false)
|
27
|
+
end
|
28
|
+
|
29
|
+
describe 'when extending' do
|
30
|
+
|
31
|
+
context 'before :all' do
|
32
|
+
|
33
|
+
it 'should call it' do
|
34
|
+
expect(@rspec_example_group).to receive(:before).with(:context)
|
35
|
+
@rspec_example_group.extend DeltaTest::SpecHelpers
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should start the generator' do
|
39
|
+
expect($delta_test_generator).to receive(:start!).with("spec/foo/bar.rb")
|
40
|
+
@rspec_example_group.extend DeltaTest::SpecHelpers
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'after :all' do
|
46
|
+
|
47
|
+
it 'should call it' do
|
48
|
+
expect(@rspec_example_group).to receive(:after).with(:context)
|
49
|
+
@rspec_example_group.extend DeltaTest::SpecHelpers
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should stop the generator' do
|
53
|
+
expect($delta_test_generator).to receive(:stop!)
|
54
|
+
@rspec_example_group.extend DeltaTest::SpecHelpers
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
describe 'when including' do
|
62
|
+
|
63
|
+
it 'should call it' do
|
64
|
+
expect(@rspec_example_group).to receive(:before)
|
65
|
+
@rspec_example_group.class_eval do
|
66
|
+
include DeltaTest::SpecHelpers
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
@@ -0,0 +1,244 @@
|
|
1
|
+
require 'delta_test/utils'
|
2
|
+
|
3
|
+
describe DeltaTest::Utils do
|
4
|
+
|
5
|
+
describe '::regulate_filepath' do
|
6
|
+
|
7
|
+
let(:base_path) { Pathname.new('/base_path') }
|
8
|
+
|
9
|
+
it 'shoud return a relative path from `base_path`' do
|
10
|
+
absolute_path = Pathname.new('/base_path/foo/file_1.txt')
|
11
|
+
relative_path = Pathname.new('foo/file_1.txt')
|
12
|
+
|
13
|
+
expect(DeltaTest::Utils.regulate_filepath(absolute_path, base_path)).to eq(relative_path)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'shoud return a clean path' do
|
17
|
+
absolute_path = Pathname.new('./foo/file_1.txt')
|
18
|
+
relative_path = Pathname.new('foo/file_1.txt')
|
19
|
+
|
20
|
+
expect(DeltaTest::Utils.regulate_filepath(absolute_path, base_path)).to eq(relative_path)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'shoud not raise an error and return the path when a path is not started with `base_path`' do
|
24
|
+
path = Pathname.new('other/foo/file_1.txt')
|
25
|
+
|
26
|
+
expect(DeltaTest::Utils.regulate_filepath(path, base_path)).to eq(path)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '::find_file_upward' do
|
32
|
+
|
33
|
+
let(:file) { FakeFS::FakeFile.new }
|
34
|
+
let(:file_name) { 'file' }
|
35
|
+
|
36
|
+
it 'should return a file path if a file is exist in the current directory' do
|
37
|
+
pwd = '/a/b/c/d'
|
38
|
+
file_path = "/a/b/c/d/#{file_name}"
|
39
|
+
|
40
|
+
FakeFS::FileSystem.add(pwd)
|
41
|
+
FakeFS::FileSystem.add(file_path, file)
|
42
|
+
|
43
|
+
Dir.chdir(pwd) do
|
44
|
+
expect(DeltaTest::Utils.find_file_upward(file_name)).to eq(file_path)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should return a file path if a file is exist at the parent directory' do
|
49
|
+
pwd = '/a/b/c/d'
|
50
|
+
file_path = "/a/b/c/#{file_name}"
|
51
|
+
|
52
|
+
FakeFS::FileSystem.add(pwd)
|
53
|
+
FakeFS::FileSystem.add(file_path, file)
|
54
|
+
|
55
|
+
Dir.chdir(pwd) do
|
56
|
+
expect(DeltaTest::Utils.find_file_upward(file_name)).to eq(file_path)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'should return a file path if a file is exist at somewhere of parent directories' do
|
61
|
+
pwd = '/a/b/c/d'
|
62
|
+
file_path = "/a/#{file_name}"
|
63
|
+
|
64
|
+
FakeFS::FileSystem.add(pwd)
|
65
|
+
FakeFS::FileSystem.add(file_path, file)
|
66
|
+
|
67
|
+
Dir.chdir(pwd) do
|
68
|
+
expect(DeltaTest::Utils.find_file_upward(file_name)).to eq(file_path)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'should return nil if a file is not exist in any parent directories' do
|
73
|
+
pwd = '/a/b/c/d'
|
74
|
+
file_path = "/abc/#{file_name}"
|
75
|
+
|
76
|
+
FakeFS::FileSystem.add(pwd)
|
77
|
+
FakeFS::FileSystem.add(file_path, file)
|
78
|
+
|
79
|
+
Dir.chdir(pwd) do
|
80
|
+
expect(DeltaTest::Utils.find_file_upward(file_name)).to be_nil
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context 'Multiple file names' do
|
85
|
+
|
86
|
+
let(:file_2) { FakeFS::FakeFile.new }
|
87
|
+
let(:file_name_2) { 'file' }
|
88
|
+
|
89
|
+
it 'should return a file path if one of files is exist at somewhere of parent directories' do
|
90
|
+
pwd = '/a/b/c/d'
|
91
|
+
file_path = "/a/#{file_name}"
|
92
|
+
|
93
|
+
FakeFS::FileSystem.add(pwd)
|
94
|
+
FakeFS::FileSystem.add(file_path, file)
|
95
|
+
|
96
|
+
Dir.chdir(pwd) do
|
97
|
+
expect(DeltaTest::Utils.find_file_upward(file_name, file_name_2)).to eq(file_path)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'should return the first match if one of files is exist at somewhere of parent directories' do
|
102
|
+
pwd = '/a/b/c/d'
|
103
|
+
file_path = "/a/#{file_name}"
|
104
|
+
file_path_2 = "/a/#{file_name_2}"
|
105
|
+
|
106
|
+
FakeFS::FileSystem.add(pwd)
|
107
|
+
FakeFS::FileSystem.add(file_path, file)
|
108
|
+
FakeFS::FileSystem.add(file_path_2, file)
|
109
|
+
|
110
|
+
Dir.chdir(pwd) do
|
111
|
+
expect(DeltaTest::Utils.find_file_upward(file_name, file_name_2)).to eq(file_path)
|
112
|
+
expect(DeltaTest::Utils.find_file_upward(file_name_2, file_name)).to eq(file_path_2)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'should return nil if non of files is not exist in any parent directories' do
|
117
|
+
pwd = '/a/b/c/d'
|
118
|
+
file_path = "/abc/#{file_name}"
|
119
|
+
file_path_2 = "/cba/#{file_name_2}"
|
120
|
+
|
121
|
+
FakeFS::FileSystem.add(pwd)
|
122
|
+
FakeFS::FileSystem.add(file_path, file)
|
123
|
+
FakeFS::FileSystem.add(file_path_2, file)
|
124
|
+
|
125
|
+
Dir.chdir(pwd) do
|
126
|
+
expect(DeltaTest::Utils.find_file_upward(file_name, file_name_2)).to be_nil
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
|
134
|
+
describe '::grep_pattern_to_regexp' do
|
135
|
+
|
136
|
+
# private method
|
137
|
+
let(:grep_pattern_to_regexp) { DeltaTest::Utils.method(:grep_pattern_to_regexp) }
|
138
|
+
|
139
|
+
it 'should return a Regexp' do
|
140
|
+
expect(grep_pattern_to_regexp.call('')).to be_a(Regexp)
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'should wrap a pattern with ^ and $' do
|
144
|
+
regexp = grep_pattern_to_regexp.call('aaa')
|
145
|
+
|
146
|
+
expect(regexp).to be_a(Regexp)
|
147
|
+
expect(regexp.source).to eq('^aaa$')
|
148
|
+
end
|
149
|
+
|
150
|
+
it 'should escape any special characters in a pattern' do
|
151
|
+
regexp = grep_pattern_to_regexp.call('\?{}.')
|
152
|
+
|
153
|
+
expect(regexp).to be_a(Regexp)
|
154
|
+
expect(regexp.source).to eq('^\\\\\?\{\}\.$')
|
155
|
+
end
|
156
|
+
|
157
|
+
it 'should replace ** with super-directory wildcards' do
|
158
|
+
regexp = grep_pattern_to_regexp.call('a/**')
|
159
|
+
|
160
|
+
expect(regexp).to be_a(Regexp)
|
161
|
+
expect(regexp.source).to eq('^a/.*$')
|
162
|
+
end
|
163
|
+
|
164
|
+
it 'should care about trailling slash when **/' do
|
165
|
+
regexp = grep_pattern_to_regexp.call('a/**/path')
|
166
|
+
|
167
|
+
expect(regexp).to be_a(Regexp)
|
168
|
+
expect(regexp.source).to eq('^a/.*/?path$')
|
169
|
+
end
|
170
|
+
|
171
|
+
it 'should replace * with file/directory name wildcards' do
|
172
|
+
regexp = grep_pattern_to_regexp.call('a/*_file')
|
173
|
+
|
174
|
+
expect(regexp).to be_a(Regexp)
|
175
|
+
expect(regexp.source).to eq('^a/[^/]*_file$')
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
179
|
+
|
180
|
+
describe '::files_grep' do
|
181
|
+
|
182
|
+
let(:files) do
|
183
|
+
[
|
184
|
+
'/0',
|
185
|
+
'/a/b/c',
|
186
|
+
'/a/b/c/d',
|
187
|
+
'/a/b/c/d/e',
|
188
|
+
'/x/y/z',
|
189
|
+
]
|
190
|
+
end
|
191
|
+
|
192
|
+
let(:patterns) do
|
193
|
+
[
|
194
|
+
'/a/**/*',
|
195
|
+
]
|
196
|
+
end
|
197
|
+
|
198
|
+
let(:exclude_patterns) do
|
199
|
+
[
|
200
|
+
'/a/**/e',
|
201
|
+
'/x/y/*',
|
202
|
+
]
|
203
|
+
end
|
204
|
+
|
205
|
+
it 'should return the whole files when the patterns is an empty array' do
|
206
|
+
expect(DeltaTest::Utils.files_grep(files, [])).to eq(files)
|
207
|
+
end
|
208
|
+
|
209
|
+
it 'should return the whole files when the exclude patterns is an empty array' do
|
210
|
+
expect(DeltaTest::Utils.files_grep(files, [], [])).to eq(files)
|
211
|
+
end
|
212
|
+
|
213
|
+
it 'should return files only matched with the patterns' do
|
214
|
+
matched_files = [
|
215
|
+
'/a/b/c',
|
216
|
+
'/a/b/c/d',
|
217
|
+
'/a/b/c/d/e',
|
218
|
+
]
|
219
|
+
|
220
|
+
expect(DeltaTest::Utils.files_grep(files, patterns)).to eq(matched_files)
|
221
|
+
end
|
222
|
+
|
223
|
+
it 'should return files not matched with the exclude patterns' do
|
224
|
+
matched_files = [
|
225
|
+
'/0',
|
226
|
+
'/a/b/c',
|
227
|
+
'/a/b/c/d',
|
228
|
+
]
|
229
|
+
|
230
|
+
expect(DeltaTest::Utils.files_grep(files, [], exclude_patterns)).to eq(matched_files)
|
231
|
+
end
|
232
|
+
|
233
|
+
it 'should return files not matched with an union of patterns' do
|
234
|
+
matched_files = [
|
235
|
+
'/a/b/c',
|
236
|
+
'/a/b/c/d',
|
237
|
+
]
|
238
|
+
|
239
|
+
expect(DeltaTest::Utils.files_grep(files, patterns, exclude_patterns)).to eq(matched_files)
|
240
|
+
end
|
241
|
+
|
242
|
+
end
|
243
|
+
|
244
|
+
end
|