rake-funnel 0.3.2.pre → 0.4.0.pre
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 +4 -4
- data/.rspec +2 -2
- data/Gemfile +4 -0
- data/README.md +2 -2
- data/lib/rake/funnel/ambiguous_file_error.rb +31 -29
- data/lib/rake/funnel/execution_error.rb +28 -26
- data/lib/rake/funnel/extensions/case/camel_case.rb +24 -19
- data/lib/rake/funnel/extensions/case/pascal_case.rb +24 -19
- data/lib/rake/funnel/extensions/case.rb +3 -3
- data/lib/rake/funnel/extensions/common_path.rb +60 -52
- data/lib/rake/funnel/extensions/disable_colors.rb +33 -27
- data/lib/rake/funnel/extensions/rexml.rb +27 -23
- data/lib/rake/funnel/extensions/shell.rb +92 -56
- data/lib/rake/funnel/extensions/windows_path.rb +15 -11
- data/lib/rake/funnel/framework.rb +11 -16
- data/lib/rake/funnel/integration/progress_report.rb +72 -70
- data/lib/rake/funnel/integration/sync_output.rb +12 -8
- data/lib/rake/funnel/integration/teamcity/nunit_plugin.rb +61 -55
- data/lib/rake/funnel/integration/teamcity/progress_report.rb +39 -33
- data/lib/rake/funnel/integration/teamcity/service_messages.rb +46 -40
- data/lib/rake/funnel/integration/teamcity/teamcity.rb +19 -15
- data/lib/rake/funnel/integration/teamcity.rb +3 -5
- data/lib/rake/funnel/support/argument_mapper/key_value_pair.rb +16 -10
- data/lib/rake/funnel/support/argument_mapper/styles/default.rb +39 -31
- data/lib/rake/funnel/support/argument_mapper/styles/msbuild.rb +41 -33
- data/lib/rake/funnel/support/argument_mapper/styles/msdeploy.rb +55 -47
- data/lib/rake/funnel/support/argument_mapper/styles/nunit.rb +41 -33
- data/lib/rake/funnel/support/argument_mapper/styles.rb +3 -5
- data/lib/rake/funnel/support/argument_mapper/switch.rb +16 -10
- data/lib/rake/funnel/support/argument_mapper/value.rb +16 -10
- data/lib/rake/funnel/support/assembly_version/from_version_files.rb +39 -35
- data/lib/rake/funnel/support/assembly_version/languages/cs +5 -5
- data/lib/rake/funnel/support/assembly_version/languages/fs +12 -12
- data/lib/rake/funnel/support/assembly_version/languages/vb +5 -5
- data/lib/rake/funnel/support/assembly_version_writer.rb +56 -52
- data/lib/rake/funnel/support/binary_version_reader.rb +37 -32
- data/lib/rake/funnel/support/copier.rb +31 -27
- data/lib/rake/funnel/support/environments/loader.rb +46 -40
- data/lib/rake/funnel/support/environments.rb +3 -3
- data/lib/rake/funnel/support/internal/finder.rb +55 -51
- data/lib/rake/funnel/support/internal/instantiate_symbol.rb +38 -34
- data/lib/rake/funnel/support/mapper.rb +57 -53
- data/lib/rake/funnel/support/mono.rb +21 -17
- data/lib/rake/funnel/support/msbuild/build_tool.rb +30 -24
- data/lib/rake/funnel/support/msbuild.rb +3 -3
- data/lib/rake/funnel/support/msdeploy/registry_patch.rb +90 -84
- data/lib/rake/funnel/support/msdeploy.rb +3 -3
- data/lib/rake/funnel/support/patch.rb +41 -37
- data/lib/rake/funnel/support/specs_remover.rb +66 -62
- data/lib/rake/funnel/support/template_engine.rb +30 -26
- data/lib/rake/funnel/support/timing/report.rb +95 -89
- data/lib/rake/funnel/support/timing/statistics.rb +32 -26
- data/lib/rake/funnel/support/timing.rb +3 -3
- data/lib/rake/funnel/support/version_info.rb +103 -72
- data/lib/rake/funnel/support/which.rb +19 -15
- data/lib/rake/funnel/support/zipper.rb +53 -49
- data/lib/rake/funnel/tasks/assembly_version.rb +44 -40
- data/lib/rake/funnel/tasks/bin_path.rb +45 -41
- data/lib/rake/funnel/tasks/copy.rb +43 -39
- data/lib/rake/funnel/tasks/environments.rb +89 -89
- data/lib/rake/funnel/tasks/msbuild.rb +55 -51
- data/lib/rake/funnel/tasks/msdeploy.rb +54 -50
- data/lib/rake/funnel/tasks/nunit.rb +52 -48
- data/lib/rake/funnel/tasks/paket.rb +51 -47
- data/lib/rake/funnel/tasks/quick_template.rb +53 -49
- data/lib/rake/funnel/tasks/side_by_side_specs.rb +41 -37
- data/lib/rake/funnel/tasks/timing.rb +108 -104
- data/lib/rake/funnel/tasks/zip.rb +46 -42
- data/lib/rake/funnel/version.rb +1 -1
- data/lib/rake/funnel.rb +7 -7
- data/rake-funnel.gemspec +12 -3
- data/spec/rake/funnel/execution_error_spec.rb +67 -67
- data/spec/rake/funnel/extensions/case/camel_case_spec.rb +17 -17
- data/spec/rake/funnel/extensions/case/pascal_case_spec.rb +17 -17
- data/spec/rake/funnel/extensions/common_path_spec.rb +56 -56
- data/spec/rake/funnel/extensions/disable_colors_spec.rb +33 -33
- data/spec/rake/funnel/extensions/rexml_spec.rb +20 -20
- data/spec/rake/funnel/extensions/shell_spec.rb +237 -237
- data/spec/rake/funnel/extensions/windows_path_spec.rb +5 -5
- data/spec/rake/funnel/integration/progress_report_spec.rb +149 -149
- data/spec/rake/funnel/integration/sync_output_spec.rb +16 -16
- data/spec/rake/funnel/integration/teamcity/nunit_plugin_spec.rb +110 -110
- data/spec/rake/funnel/integration/teamcity/progress_report_spec.rb +174 -174
- data/spec/rake/funnel/integration/teamcity/service_messages_spec.rb +136 -136
- data/spec/rake/funnel/integration/teamcity/teamcity_spec.rb +34 -34
- data/spec/rake/funnel/support/argument_mapper/styles/msdeploy_spec.rb +222 -222
- data/spec/rake/funnel/support/argument_mapper/styles/nunit_spec.rb +25 -25
- data/spec/rake/funnel/support/argument_mapper/styles/styles_spec.rb +214 -214
- data/spec/rake/funnel/support/assembly_version/from_version_files_spec.rb +66 -61
- data/spec/rake/funnel/support/assembly_version_writer_spec.rb +140 -140
- data/spec/rake/funnel/support/binary_version_reader_spec.rb +29 -29
- data/spec/rake/funnel/support/copier_spec.rb +58 -58
- data/spec/rake/funnel/support/environments/loader_spec.rb +143 -143
- data/spec/rake/funnel/support/internal/finder_spec.rb +229 -229
- data/spec/rake/funnel/support/internal/instantiate_symbol_spec.rb +182 -183
- data/spec/rake/funnel/support/mapper_spec.rb +87 -87
- data/spec/rake/funnel/support/mono_spec.rb +57 -57
- data/spec/rake/funnel/support/msbuild/build_tool_spec.rb +21 -21
- data/spec/rake/funnel/support/msdeploy/registry_patch_spec.rb +139 -139
- data/spec/rake/funnel/support/patch_spec.rb +108 -108
- data/spec/rake/funnel/support/specs_remover/Sample.csproj +28 -28
- data/spec/rake/funnel/support/specs_remover_spec.rb +116 -116
- data/spec/rake/funnel/support/template_engine_spec.rb +65 -65
- data/spec/rake/funnel/support/timing/report_spec.rb +129 -129
- data/spec/rake/funnel/support/version_info_spec.rb +333 -228
- data/spec/rake/funnel/support/which_spec.rb +65 -65
- data/spec/rake/funnel/support/zipper_spec.rb +77 -77
- data/spec/rake/funnel/tasks/assembly_version_spec.rb +45 -45
- data/spec/rake/funnel/tasks/bin_path_spec.rb +52 -52
- data/spec/rake/funnel/tasks/copy_spec.rb +44 -44
- data/spec/rake/funnel/tasks/environments_spec.rb +249 -247
- data/spec/rake/funnel/tasks/msbuild_spec.rb +91 -91
- data/spec/rake/funnel/tasks/msdeploy_spec.rb +220 -220
- data/spec/rake/funnel/tasks/nunit_spec.rb +74 -74
- data/spec/rake/funnel/tasks/paket_spec.rb +140 -142
- data/spec/rake/funnel/tasks/quick_template_spec.rb +62 -62
- data/spec/rake/funnel/tasks/side_by_side_specs_spec.rb +58 -58
- data/spec/rake/funnel/tasks/timing_spec.rb +133 -133
- data/spec/rake/funnel/tasks/zip_spec.rb +50 -50
- data/spec/spec_helper.rb +43 -33
- metadata +2 -3
- data/lib/rake/funnel/support/side_by_side_specs.rb +0 -3
@@ -1,140 +1,140 @@
|
|
1
|
-
require 'erb'
|
2
|
-
|
3
|
-
include Rake::Funnel::Support
|
4
|
-
|
5
|
-
describe Rake::Funnel::Support::AssemblyVersionWriter do
|
6
|
-
describe 'version source' do
|
7
|
-
describe 'default' do
|
8
|
-
before {
|
9
|
-
allow_any_instance_of(described_class).to receive(:create)
|
10
|
-
}
|
11
|
-
|
12
|
-
it 'should create FromVersionFiles with empty args' do
|
13
|
-
expect(subject).to have_received(:create).with(:FromVersionFiles, {})
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
describe 'custom type' do
|
18
|
-
let(:source) { :Custom }
|
19
|
-
let(:source_args) { { foo: 42 } }
|
20
|
-
|
21
|
-
before {
|
22
|
-
allow_any_instance_of(described_class).to receive(:create)
|
23
|
-
}
|
24
|
-
|
25
|
-
subject {
|
26
|
-
described_class.new(source, source_args)
|
27
|
-
}
|
28
|
-
|
29
|
-
it 'should create type with args' do
|
30
|
-
expect(subject).to have_received(:create).with(source, source_args)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
describe 'custom instance' do
|
35
|
-
let(:source) {
|
36
|
-
[
|
37
|
-
{
|
38
|
-
source: 'from e.g. gitversion',
|
39
|
-
version_info: VersionInfo.new(
|
40
|
-
{
|
41
|
-
assembly_version: '1',
|
42
|
-
assembly_file_version: '1.2',
|
43
|
-
assembly_informational_version: '1.2-abc'
|
44
|
-
})
|
45
|
-
}
|
46
|
-
]
|
47
|
-
}
|
48
|
-
|
49
|
-
subject {
|
50
|
-
described_class.new(source)
|
51
|
-
}
|
52
|
-
|
53
|
-
it 'should succeed' do
|
54
|
-
expect(
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
describe 'generator' do
|
60
|
-
let(:source) {
|
61
|
-
[
|
62
|
-
{
|
63
|
-
source: 'one',
|
64
|
-
version_info: VersionInfo.new(
|
65
|
-
{
|
66
|
-
assembly_version: '1',
|
67
|
-
assembly_file_version: '1.2',
|
68
|
-
assembly_informational_version: '1.2-abc'
|
69
|
-
})
|
70
|
-
},
|
71
|
-
{
|
72
|
-
source: 'two',
|
73
|
-
version_info: VersionInfo.new(
|
74
|
-
{
|
75
|
-
assembly_version: '2',
|
76
|
-
assembly_file_version: '2.3',
|
77
|
-
assembly_informational_version: '2.3-def'
|
78
|
-
})
|
79
|
-
}
|
80
|
-
]
|
81
|
-
}
|
82
|
-
|
83
|
-
let(:target_path) { double(Proc).as_null_object }
|
84
|
-
let(:languages) { [:vb, :cs, :fs] }
|
85
|
-
let(:erb) { double(ERB).as_null_object }
|
86
|
-
|
87
|
-
subject {
|
88
|
-
described_class.new(source)
|
89
|
-
}
|
90
|
-
|
91
|
-
before {
|
92
|
-
allow(Rake).to receive(:rake_output_message)
|
93
|
-
}
|
94
|
-
|
95
|
-
before {
|
96
|
-
allow(ERB).to receive(:new).and_return(erb)
|
97
|
-
}
|
98
|
-
|
99
|
-
before {
|
100
|
-
allow(File).to receive(:read).and_return('template')
|
101
|
-
allow(File).to receive(:write)
|
102
|
-
}
|
103
|
-
|
104
|
-
context 'supported languages' do
|
105
|
-
before {
|
106
|
-
subject.write(target_path, languages)
|
107
|
-
}
|
108
|
-
|
109
|
-
it 'should determine target path for each language in source' do
|
110
|
-
source.each do |src|
|
111
|
-
languages.each do |language|
|
112
|
-
expect(target_path).to have_received(:call).with(language, src[:version_info], src[:source])
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
it 'should read version info template for languages' do
|
118
|
-
languages.each do |language|
|
119
|
-
expect(File).to have_received(:read).with(%r|assembly_version/languages/#{language}|).at_least(:once)
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
it 'should run templates through ERb' do
|
124
|
-
expect(erb).to have_received(:result).exactly(languages.length * source.length).times
|
125
|
-
end
|
126
|
-
|
127
|
-
it 'should write version info file for each language in source' do
|
128
|
-
expect(File).to have_received(:write).exactly(languages.length * source.length).times
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
context 'unsupported language' do
|
133
|
-
let(:languages) { :unsupported }
|
134
|
-
|
135
|
-
it 'should fail' do
|
136
|
-
expect { subject.write(target_path, languages) }.to raise_error /Language is not supported: unsupported/
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
1
|
+
require 'erb'
|
2
|
+
|
3
|
+
include Rake::Funnel::Support
|
4
|
+
|
5
|
+
describe Rake::Funnel::Support::AssemblyVersionWriter do
|
6
|
+
describe 'version source' do
|
7
|
+
describe 'default' do
|
8
|
+
before {
|
9
|
+
allow_any_instance_of(described_class).to receive(:create)
|
10
|
+
}
|
11
|
+
|
12
|
+
it 'should create FromVersionFiles with empty args' do
|
13
|
+
expect(subject).to have_received(:create).with(:FromVersionFiles, {})
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'custom type' do
|
18
|
+
let(:source) { :Custom }
|
19
|
+
let(:source_args) { { foo: 42 } }
|
20
|
+
|
21
|
+
before {
|
22
|
+
allow_any_instance_of(described_class).to receive(:create)
|
23
|
+
}
|
24
|
+
|
25
|
+
subject {
|
26
|
+
described_class.new(source, source_args)
|
27
|
+
}
|
28
|
+
|
29
|
+
it 'should create type with args' do
|
30
|
+
expect(subject).to have_received(:create).with(source, source_args)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe 'custom instance' do
|
35
|
+
let(:source) {
|
36
|
+
[
|
37
|
+
{
|
38
|
+
source: 'from e.g. gitversion',
|
39
|
+
version_info: VersionInfo.new(
|
40
|
+
{
|
41
|
+
assembly_version: '1',
|
42
|
+
assembly_file_version: '1.2',
|
43
|
+
assembly_informational_version: '1.2-abc'
|
44
|
+
})
|
45
|
+
}
|
46
|
+
]
|
47
|
+
}
|
48
|
+
|
49
|
+
subject {
|
50
|
+
described_class.new(source)
|
51
|
+
}
|
52
|
+
|
53
|
+
it 'should succeed' do
|
54
|
+
expect(subject).to be
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe 'generator' do
|
60
|
+
let(:source) {
|
61
|
+
[
|
62
|
+
{
|
63
|
+
source: 'one',
|
64
|
+
version_info: VersionInfo.new(
|
65
|
+
{
|
66
|
+
assembly_version: '1',
|
67
|
+
assembly_file_version: '1.2',
|
68
|
+
assembly_informational_version: '1.2-abc'
|
69
|
+
})
|
70
|
+
},
|
71
|
+
{
|
72
|
+
source: 'two',
|
73
|
+
version_info: VersionInfo.new(
|
74
|
+
{
|
75
|
+
assembly_version: '2',
|
76
|
+
assembly_file_version: '2.3',
|
77
|
+
assembly_informational_version: '2.3-def'
|
78
|
+
})
|
79
|
+
}
|
80
|
+
]
|
81
|
+
}
|
82
|
+
|
83
|
+
let(:target_path) { double(Proc).as_null_object }
|
84
|
+
let(:languages) { [:vb, :cs, :fs] }
|
85
|
+
let(:erb) { double(ERB).as_null_object }
|
86
|
+
|
87
|
+
subject {
|
88
|
+
described_class.new(source)
|
89
|
+
}
|
90
|
+
|
91
|
+
before {
|
92
|
+
allow(Rake).to receive(:rake_output_message)
|
93
|
+
}
|
94
|
+
|
95
|
+
before {
|
96
|
+
allow(ERB).to receive(:new).and_return(erb)
|
97
|
+
}
|
98
|
+
|
99
|
+
before {
|
100
|
+
allow(File).to receive(:read).and_return('template')
|
101
|
+
allow(File).to receive(:write)
|
102
|
+
}
|
103
|
+
|
104
|
+
context 'supported languages' do
|
105
|
+
before {
|
106
|
+
subject.write(target_path, languages)
|
107
|
+
}
|
108
|
+
|
109
|
+
it 'should determine target path for each language in source' do
|
110
|
+
source.each do |src|
|
111
|
+
languages.each do |language|
|
112
|
+
expect(target_path).to have_received(:call).with(language, src[:version_info], src[:source])
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'should read version info template for languages' do
|
118
|
+
languages.each do |language|
|
119
|
+
expect(File).to have_received(:read).with(%r|assembly_version/languages/#{language}|).at_least(:once)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'should run templates through ERb' do
|
124
|
+
expect(erb).to have_received(:result).exactly(languages.length * source.length).times
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'should write version info file for each language in source' do
|
128
|
+
expect(File).to have_received(:write).exactly(languages.length * source.length).times
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
context 'unsupported language' do
|
133
|
+
let(:languages) { :unsupported }
|
134
|
+
|
135
|
+
it 'should fail' do
|
136
|
+
expect { subject.write(target_path, languages) }.to raise_error /Language is not supported: unsupported/
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
@@ -1,29 +1,29 @@
|
|
1
|
-
describe Rake::Funnel::Support::BinaryVersionReader do
|
2
|
-
def binary_version(*version_parts)
|
3
|
-
version = version_parts.map { |p| p.to_s + "\0" }.join(".\0")
|
4
|
-
"F\0i\0l\0e\0V\0e\0r\0s\0i\0o\0n" + "\0" * 3 + version + "\0" * 3
|
5
|
-
end
|
6
|
-
|
7
|
-
let(:file) { 'some assembly' }
|
8
|
-
|
9
|
-
before {
|
10
|
-
allow(File).to receive(:binread).with(file).and_return(contents)
|
11
|
-
}
|
12
|
-
|
13
|
-
describe 'version can be read' do
|
14
|
-
let(:version) { %w(1 2 3 4) }
|
15
|
-
let(:contents) { "binary #{binary_version(*version)} binary" }
|
16
|
-
|
17
|
-
it 'should yield all parts' do
|
18
|
-
expect(described_class.read_from(file).file_version).to eq(version.join('.'))
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe 'version cannot be read' do
|
23
|
-
let(:contents) { 'this does not contain a version number' }
|
24
|
-
|
25
|
-
it 'should yield empty VersionInfo' do
|
26
|
-
expect(described_class.read_from(file).to_h).to be_empty
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
1
|
+
describe Rake::Funnel::Support::BinaryVersionReader do
|
2
|
+
def binary_version(*version_parts)
|
3
|
+
version = version_parts.map { |p| p.to_s + "\0" }.join(".\0")
|
4
|
+
"F\0i\0l\0e\0V\0e\0r\0s\0i\0o\0n" + "\0" * 3 + version + "\0" * 3
|
5
|
+
end
|
6
|
+
|
7
|
+
let(:file) { 'some assembly' }
|
8
|
+
|
9
|
+
before {
|
10
|
+
allow(File).to receive(:binread).with(file).and_return(contents)
|
11
|
+
}
|
12
|
+
|
13
|
+
describe 'version can be read' do
|
14
|
+
let(:version) { %w(1 2 3 4) }
|
15
|
+
let(:contents) { "binary #{binary_version(*version)} binary" }
|
16
|
+
|
17
|
+
it 'should yield all parts' do
|
18
|
+
expect(described_class.read_from(file).file_version).to eq(version.join('.'))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe 'version cannot be read' do
|
23
|
+
let(:contents) { 'this does not contain a version number' }
|
24
|
+
|
25
|
+
it 'should yield empty VersionInfo' do
|
26
|
+
expect(described_class.read_from(file).to_h).to be_empty
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -1,58 +1,58 @@
|
|
1
|
-
describe Rake::Funnel::Support::Copier do
|
2
|
-
let(:source) { files + directories }
|
3
|
-
let(:files) { %w(bin/1 bin/2 bin/3/4 bin/directory/file) }
|
4
|
-
let(:directories) { %w(bin/directory bin/directory-no-content) }
|
5
|
-
let(:target) { 'target path' }
|
6
|
-
|
7
|
-
context 'failure' do
|
8
|
-
context 'target not defined' do
|
9
|
-
let(:target) { nil }
|
10
|
-
|
11
|
-
it 'should fail' do
|
12
|
-
expect { described_class.copy([], nil) }.to raise_error(/Target not defined/)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
describe 'recursive copy' do
|
18
|
-
before {
|
19
|
-
allow(File).to receive(:directory?).and_return(false)
|
20
|
-
directories.each do |dir|
|
21
|
-
allow(File).to receive(:directory?).with(dir).and_return(true)
|
22
|
-
end
|
23
|
-
|
24
|
-
allow(RakeFileUtils).to receive(:mkdir_p)
|
25
|
-
allow(RakeFileUtils).to receive(:cp)
|
26
|
-
}
|
27
|
-
|
28
|
-
before {
|
29
|
-
described_class.copy(source, target)
|
30
|
-
}
|
31
|
-
|
32
|
-
def no_prefix(file)
|
33
|
-
file.sub(%r|bin/|, '')
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'should create target directories' do
|
37
|
-
expect(RakeFileUtils).to have_received(:mkdir_p).with(File.join(target, '3'))
|
38
|
-
expect(RakeFileUtils).to have_received(:mkdir_p).with(File.join(target, 'directory'))
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'should skip source directories' do
|
42
|
-
directories.each do |dir|
|
43
|
-
expect(RakeFileUtils).not_to have_received(:cp).with(dir, anything)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
it 'should copy files with common path removed' do
|
48
|
-
files.each do |file|
|
49
|
-
target_path = File.join(target, no_prefix(file))
|
50
|
-
expect(RakeFileUtils).to have_received(:cp).with(file, target_path, anything)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'should preserve metdata' do
|
55
|
-
expect(RakeFileUtils).to have_received(:cp).with(anything, anything,
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
1
|
+
describe Rake::Funnel::Support::Copier do
|
2
|
+
let(:source) { files + directories }
|
3
|
+
let(:files) { %w(bin/1 bin/2 bin/3/4 bin/directory/file) }
|
4
|
+
let(:directories) { %w(bin/directory bin/directory-no-content) }
|
5
|
+
let(:target) { 'target path' }
|
6
|
+
|
7
|
+
context 'failure' do
|
8
|
+
context 'target not defined' do
|
9
|
+
let(:target) { nil }
|
10
|
+
|
11
|
+
it 'should fail' do
|
12
|
+
expect { described_class.copy([], nil) }.to raise_error(/Target not defined/)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'recursive copy' do
|
18
|
+
before {
|
19
|
+
allow(File).to receive(:directory?).and_return(false)
|
20
|
+
directories.each do |dir|
|
21
|
+
allow(File).to receive(:directory?).with(dir).and_return(true)
|
22
|
+
end
|
23
|
+
|
24
|
+
allow(RakeFileUtils).to receive(:mkdir_p)
|
25
|
+
allow(RakeFileUtils).to receive(:cp)
|
26
|
+
}
|
27
|
+
|
28
|
+
before {
|
29
|
+
described_class.copy(source, target)
|
30
|
+
}
|
31
|
+
|
32
|
+
def no_prefix(file)
|
33
|
+
file.sub(%r|bin/|, '')
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should create target directories' do
|
37
|
+
expect(RakeFileUtils).to have_received(:mkdir_p).with(File.join(target, '3'))
|
38
|
+
expect(RakeFileUtils).to have_received(:mkdir_p).with(File.join(target, 'directory'))
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should skip source directories' do
|
42
|
+
directories.each do |dir|
|
43
|
+
expect(RakeFileUtils).not_to have_received(:cp).with(dir, anything)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should copy files with common path removed' do
|
48
|
+
files.each do |file|
|
49
|
+
target_path = File.join(target, no_prefix(file))
|
50
|
+
expect(RakeFileUtils).to have_received(:cp).with(file, target_path, anything)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'should preserve metdata' do
|
55
|
+
expect(RakeFileUtils).to have_received(:cp).with(anything, anything, preserve: true).exactly(files.length).times
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|