releasy 0.2.0rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +17 -0
- data/.yardopts +4 -0
- data/CHANGELOG.md +24 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +20 -0
- data/README.md +165 -0
- data/Rakefile +31 -0
- data/bin/7z.sfx +0 -0
- data/bin/releasy +7 -0
- data/lib/releasy.rb +18 -0
- data/lib/releasy/archivers.rb +12 -0
- data/lib/releasy/archivers/archiver.rb +74 -0
- data/lib/releasy/archivers/dmg.rb +18 -0
- data/lib/releasy/archivers/exe.rb +23 -0
- data/lib/releasy/archivers/seven_zip.rb +12 -0
- data/lib/releasy/archivers/tar_archiver.rb +14 -0
- data/lib/releasy/archivers/tar_bzip2.rb +13 -0
- data/lib/releasy/archivers/tar_gzip.rb +13 -0
- data/lib/releasy/archivers/zip.rb +12 -0
- data/lib/releasy/builders.rb +12 -0
- data/lib/releasy/builders/builder.rb +52 -0
- data/lib/releasy/builders/ocra_builder.rb +43 -0
- data/lib/releasy/builders/osx_app.rb +158 -0
- data/lib/releasy/builders/source.rb +27 -0
- data/lib/releasy/builders/windows_builder.rb +65 -0
- data/lib/releasy/builders/windows_folder.rb +47 -0
- data/lib/releasy/builders/windows_folder_from_ruby_dist.rb +150 -0
- data/lib/releasy/builders/windows_installer.rb +117 -0
- data/lib/releasy/builders/windows_standalone.rb +37 -0
- data/lib/releasy/cli.rb +12 -0
- data/lib/releasy/cli/install_sfx.rb +66 -0
- data/lib/releasy/dsl_wrapper.rb +71 -0
- data/lib/releasy/mixins/exec.rb +14 -0
- data/lib/releasy/mixins/has_archivers.rb +37 -0
- data/lib/releasy/mixins/has_gemspecs.rb +42 -0
- data/lib/releasy/mixins/register.rb +47 -0
- data/lib/releasy/project.rb +300 -0
- data/lib/releasy/version.rb +3 -0
- data/lib/releasy/windows_wrapper_maker.rb +90 -0
- data/lib/releasy/windows_wrapper_maker/Gemfile +8 -0
- data/media/releasy.png +0 -0
- data/releasy.gemspec +37 -0
- data/test/releasy/archivers_test.rb +65 -0
- data/test/releasy/builders/data/Info.plist +51 -0
- data/test/releasy/builders/data/Main.rb +12 -0
- data/test/releasy/builders/data/relapse_runner.rb +1 -0
- data/test/releasy/builders/data/set_app_executable.sh +3 -0
- data/test/releasy/builders/helpers/helper.rb +47 -0
- data/test/releasy/builders/ocra_builder_test.rb +37 -0
- data/test/releasy/builders/osx_app_test.rb +107 -0
- data/test/releasy/builders/source_test.rb +43 -0
- data/test/releasy/builders/windows_builder_test.rb +26 -0
- data/test/releasy/builders/windows_folder_from_ruby_dist_test.rb +105 -0
- data/test/releasy/builders/windows_folder_test.rb +56 -0
- data/test/releasy/builders/windows_installer_test.rb +62 -0
- data/test/releasy/builders/windows_standalone_test.rb +58 -0
- data/test/releasy/cli/install_sfx_test.rb +90 -0
- data/test/releasy/dsl_wrapper_test.rb +79 -0
- data/test/releasy/integration/source_test.rb +122 -0
- data/test/releasy/mixins/register_test.rb +52 -0
- data/test/releasy/project_test.rb +198 -0
- data/test/releasy/windows_wrapper_maker_test.rb +61 -0
- data/test/teststrap.rb +52 -0
- data/test/yard_test.rb +61 -0
- data/test_project/Gemfile +9 -0
- data/test_project/LICENSE.txt +1 -0
- data/test_project/README.txt +2 -0
- data/test_project/bin/test_app +3 -0
- data/test_project/lib/test_app.rb +6 -0
- data/test_project/lib/test_app/stuff.rb +1 -0
- data/test_project/test_app.icns +0 -0
- data/test_project/test_app.ico +0 -0
- data/wrappers/put_wrappers_here_for_testing.txt +17 -0
- metadata +236 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.expand_path("helpers/helper", File.dirname(__FILE__))
|
2
|
+
|
3
|
+
folder = File.join(output_path, "test_app_0_1_SOURCE")
|
4
|
+
context Releasy::Builders::Source do
|
5
|
+
setup { Releasy::Builders::Source.new new_project }
|
6
|
+
|
7
|
+
teardown do
|
8
|
+
Rake::Task.clear
|
9
|
+
Dir.chdir $original_path
|
10
|
+
end
|
11
|
+
|
12
|
+
hookup do
|
13
|
+
Dir.chdir project_path
|
14
|
+
end
|
15
|
+
|
16
|
+
context "valid" do
|
17
|
+
hookup do
|
18
|
+
|
19
|
+
topic.send :generate_tasks
|
20
|
+
end
|
21
|
+
|
22
|
+
asserts(:folder).equals folder
|
23
|
+
asserts(:folder_suffix).equals "SOURCE"
|
24
|
+
|
25
|
+
context "tasks" do
|
26
|
+
tasks = [
|
27
|
+
[ :Task, "build:source", [folder] ],
|
28
|
+
[ :FileCreationTask, '..', [] ], # byproduct of using #directory
|
29
|
+
[ :FileCreationTask, output_path, [] ], # byproduct of using #directory
|
30
|
+
[ :FileCreationTask, folder, source_files ],
|
31
|
+
]
|
32
|
+
|
33
|
+
test_tasks tasks
|
34
|
+
end
|
35
|
+
|
36
|
+
context "generate folder" do
|
37
|
+
hookup { Rake::Task["build:source"].invoke }
|
38
|
+
|
39
|
+
asserts("files copied to folder") { source_files.all? {|f| same_contents? "#{folder}/#{f}", f } }
|
40
|
+
asserts("program output") { %x[ruby "#{folder}/bin/test_app"] }.equals "test run!\n"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require File.expand_path("helpers/helper", File.dirname(__FILE__))
|
2
|
+
|
3
|
+
context Releasy::Builders::WindowsBuilder do
|
4
|
+
setup do
|
5
|
+
Class.new(Releasy::Builders::WindowsBuilder) do
|
6
|
+
const_set :DEFAULT_FOLDER_SUFFIX, ''
|
7
|
+
end.new new_project
|
8
|
+
end
|
9
|
+
|
10
|
+
context "#executable_type undefined and Project#executable doesn't have meaningful extension" do
|
11
|
+
hookup { topic.project.executable = "fred" }
|
12
|
+
asserts(:effective_executable_type).raises Releasy::ConfigError, /Unless the executable file extension is .rbw or .rb, then #executable_type must be explicitly :windows or :console/
|
13
|
+
end
|
14
|
+
|
15
|
+
context "valid" do
|
16
|
+
hookup { topic.executable_type = :console }
|
17
|
+
|
18
|
+
asserts(:effective_executable_type).equals :console
|
19
|
+
asserts(:encoding_excluded?).equals false
|
20
|
+
|
21
|
+
context "exclude_encoding" do
|
22
|
+
hookup { topic.exclude_encoding }
|
23
|
+
asserts(:encoding_excluded?).equals true
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require File.expand_path("helpers/helper", File.dirname(__FILE__))
|
2
|
+
|
3
|
+
Dir[File.expand_path("wrappers/ruby-*.7z", $original_path)].each do |path_to_ruby_dist|
|
4
|
+
ruby_version = path_to_ruby_dist[/\d\.\d\.\d-p\d+/]
|
5
|
+
suffix = "WIN32_FROM_RUBY_DIST_#{ruby_version.tr(".", "_")}"
|
6
|
+
folder = File.join(output_path, "test_app_0_1_#{suffix}")
|
7
|
+
|
8
|
+
context "#{Releasy::Builders::WindowsFolderFromRubyDist} for #{ruby_version}" do
|
9
|
+
setup { Releasy::Builders::WindowsFolderFromRubyDist.new new_project }
|
10
|
+
|
11
|
+
teardown do
|
12
|
+
Dir.chdir $original_path
|
13
|
+
Rake::Task.clear
|
14
|
+
end
|
15
|
+
|
16
|
+
hookup do
|
17
|
+
Dir.chdir project_path
|
18
|
+
end
|
19
|
+
|
20
|
+
asserts(:ruby_dist).nil
|
21
|
+
asserts(:folder_suffix).equals "WIN32"
|
22
|
+
asserts(:generate_tasks).raises Releasy::ConfigError, /ruby_dist not set/
|
23
|
+
denies(:gemspecs).empty
|
24
|
+
|
25
|
+
if Gem.win_platform?
|
26
|
+
denies(:valid_for_platform?)
|
27
|
+
else
|
28
|
+
asserts(:valid_for_platform?)
|
29
|
+
end
|
30
|
+
|
31
|
+
context "invalid ruby_dist" do
|
32
|
+
hookup do
|
33
|
+
topic.ruby_dist = "ruby_dist"
|
34
|
+
end
|
35
|
+
|
36
|
+
asserts(:generate_tasks).raises Releasy::ConfigError, /ruby_dist not valid/
|
37
|
+
end
|
38
|
+
|
39
|
+
context "valid" do
|
40
|
+
hookup do
|
41
|
+
stub(topic).valid_for_platform?.returns(true) # Need to do this so we can test on all platforms.
|
42
|
+
topic.ruby_dist = path_to_ruby_dist
|
43
|
+
topic.folder_suffix = suffix
|
44
|
+
topic.executable_type = :console
|
45
|
+
topic.gemspecs = gemspecs_to_use
|
46
|
+
topic.exclude_tcl_tk
|
47
|
+
topic.exclude_encoding
|
48
|
+
topic.send :generate_tasks
|
49
|
+
end
|
50
|
+
|
51
|
+
asserts(:output_path).equals output_path
|
52
|
+
asserts(:folder_suffix).equals suffix
|
53
|
+
asserts(:ruby_dist).equals path_to_ruby_dist
|
54
|
+
asserts("gemspecs correct") { topic.gemspecs == gemspecs_to_use }
|
55
|
+
|
56
|
+
context "tasks" do
|
57
|
+
tasks = [
|
58
|
+
[ :Task, "build:windows:folder_from_ruby_dist", [folder] ],
|
59
|
+
[ :FileTask, '..', [] ], # byproduct of using #directory
|
60
|
+
[ :FileTask, output_path, [] ], # byproduct of using #directory
|
61
|
+
[ :FileTask, folder, source_files + [path_to_ruby_dist]],
|
62
|
+
]
|
63
|
+
|
64
|
+
test_tasks tasks
|
65
|
+
end
|
66
|
+
|
67
|
+
context "generate" do
|
68
|
+
hookup { Rake::Task["build:windows:folder_from_ruby_dist"].invoke }
|
69
|
+
|
70
|
+
asserts("files copied to folder") { source_files.all? {|f| same_contents? "#{folder}/src/#{f}", f } }
|
71
|
+
asserts("readme copied to folder") { same_contents? "#{folder}/README.txt", "README.txt" }
|
72
|
+
asserts("license copied to folder") { same_contents? "#{folder}/LICENSE.txt", "LICENSE.txt" }
|
73
|
+
|
74
|
+
asserts("test_app.exe has been created") { File.exists?("#{folder}/test_app.exe") }
|
75
|
+
denies("console.exe left in folder") { File.exists?("#{folder}/console.exe") }
|
76
|
+
denies("windows.exe left in folder") { File.exists?("#{folder}/windows.exe") }
|
77
|
+
|
78
|
+
asserts("ruby.exe left in bin/") { File.exists?("#{folder}/bin/ruby.exe") }
|
79
|
+
denies("rubyw.exe left in bin/") { File.exists?("#{folder}/bin/rubyw.exe") }
|
80
|
+
|
81
|
+
asserts("plenty of dlls copied") { Dir["#{folder}/bin/*.dll"].size >= 6 }
|
82
|
+
|
83
|
+
denies("tcl/tk left") { (Dir["#{folder}/**/tk*", "#{folder}/**/tcl*"].reject {|f| f =~ %r[test/unit] }).any? }
|
84
|
+
denies("share folder left") { File.exist?("#{folder}/share") }
|
85
|
+
|
86
|
+
if ruby_version =~ /^1\.9\.\d/
|
87
|
+
helper(:enc_folder) { "#{folder}/lib/ruby/1.9.1/i386-mingw32/enc" }
|
88
|
+
denies("include folder left") { File.exist?("#{folder}/include") }
|
89
|
+
|
90
|
+
asserts("remaining encoding files") { Dir["#{enc_folder}/**/*.so"].map {|f| f[(enc_folder.size + 1)..-1] } }.same_elements %w[encdb.so iso_8859_1.so utf_16le.so trans/single_byte.so trans/transdb.so trans/utf_16_32.so]
|
91
|
+
end
|
92
|
+
|
93
|
+
gemspecs_to_use.each do |gemspec|
|
94
|
+
name = "#{gemspec.name}-#{gemspec.version}"
|
95
|
+
asserts("#{name} gem specification copied") { File.exists? "#{folder}/vendor/specifications/#{name}.gemspec" }
|
96
|
+
asserts("#{name} gem folder copied") { File.directory? "#{folder}/vendor/gems/#{name}" }
|
97
|
+
end
|
98
|
+
|
99
|
+
if Gem.win_platform?
|
100
|
+
asserts("program output") { %x[#{folder}/test_app.exe] }.equals "test run!\n"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require File.expand_path("helpers/helper", File.dirname(__FILE__))
|
2
|
+
|
3
|
+
folder = File.join(output_path, "test_app_0_1_WIN32")
|
4
|
+
|
5
|
+
context Releasy::Builders::WindowsFolder do
|
6
|
+
setup { Releasy::Builders::WindowsFolder.new new_project }
|
7
|
+
|
8
|
+
teardown do
|
9
|
+
Rake::Task.clear
|
10
|
+
Dir.chdir $original_path
|
11
|
+
end
|
12
|
+
|
13
|
+
hookup { Dir.chdir project_path }
|
14
|
+
|
15
|
+
context "valid" do
|
16
|
+
if Gem.win_platform?
|
17
|
+
context "on Windows" do
|
18
|
+
hookup do
|
19
|
+
topic.exclude_encoding
|
20
|
+
topic.executable_type = :console
|
21
|
+
topic.send :generate_tasks
|
22
|
+
end
|
23
|
+
|
24
|
+
asserts(:valid_for_platform?)
|
25
|
+
asserts(:folder_suffix).equals "WIN32"
|
26
|
+
asserts(:executable_name).equals "test_app.exe"
|
27
|
+
asserts(:folder).equals folder
|
28
|
+
asserts(:icon=, "test_app.icns").raises ArgumentError, /icon must be a .ico file/
|
29
|
+
|
30
|
+
context "tasks" do
|
31
|
+
tasks = [
|
32
|
+
[ :Task, "build:windows:folder", [folder] ],
|
33
|
+
[ :FileTask, '..', [] ], # byproduct of using #directory
|
34
|
+
[ :FileTask, output_path, [] ],
|
35
|
+
[ :FileTask, folder, source_files ],
|
36
|
+
]
|
37
|
+
|
38
|
+
test_tasks tasks
|
39
|
+
end
|
40
|
+
|
41
|
+
context "generate folder" do
|
42
|
+
hookup { clear_bundler_env { Rake::Task["build:windows:folder"].invoke } }
|
43
|
+
|
44
|
+
asserts("files copied to folder") { source_files.all? {|f| same_contents? "#{folder}/src/#{f}", f } }
|
45
|
+
asserts("folder includes link") { File.read("#{folder}/Releasy website.url") == link_file }
|
46
|
+
asserts("executable created in folder and is of reasonable size") { File.size("#{folder}/test_app.exe") > 0 }
|
47
|
+
asserts("program output") { %x[#{folder}/test_app.exe] }.equals "test run!\n"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
else
|
51
|
+
context "NOT on Windows" do
|
52
|
+
denies(:valid_for_platform?)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require File.expand_path("helpers/helper", File.dirname(__FILE__))
|
2
|
+
|
3
|
+
folder = File.join(output_path, "test_app_0_1_WIN32_INSTALLER")
|
4
|
+
|
5
|
+
context Releasy::Builders::WindowsInstaller do
|
6
|
+
setup { Releasy::Builders::WindowsInstaller.new new_project }
|
7
|
+
|
8
|
+
teardown do
|
9
|
+
Rake::Task.clear
|
10
|
+
Dir.chdir $original_path
|
11
|
+
end
|
12
|
+
|
13
|
+
hookup { Dir.chdir project_path }
|
14
|
+
|
15
|
+
context "valid" do
|
16
|
+
if Gem.win_platform?
|
17
|
+
context "on Windows" do
|
18
|
+
hookup do
|
19
|
+
topic.start_menu_group = "Releasy Test Apps"
|
20
|
+
topic.exclude_encoding
|
21
|
+
topic.icon = "test_app.ico"
|
22
|
+
topic.license = "LICENSE.txt"
|
23
|
+
topic.readme = "README.txt"
|
24
|
+
topic.executable_type = :console
|
25
|
+
topic.send :generate_tasks
|
26
|
+
end
|
27
|
+
|
28
|
+
asserts(:valid_for_platform?)
|
29
|
+
asserts(:start_menu_group).equals "Releasy Test Apps"
|
30
|
+
asserts(:folder_suffix).equals "WIN32_INSTALLER"
|
31
|
+
asserts(:temp_installer_script).equals "#{output_path}/windows_installer.iss"
|
32
|
+
asserts(:folder).equals folder
|
33
|
+
asserts(:installer_name).equals "#{folder}/test_app_setup.exe"
|
34
|
+
asserts(:icon=, "test_app.icns").raises ArgumentError, /icon must be a .ico file/
|
35
|
+
|
36
|
+
context "tasks" do
|
37
|
+
tasks = [
|
38
|
+
[ :Task, "build:windows:installer", [folder] ],
|
39
|
+
[ :FileCreationTask, '..', [] ], # byproduct of using #directory
|
40
|
+
[ :FileCreationTask, output_path, [] ], # byproduct of using #directory
|
41
|
+
[ :FileCreationTask, folder, source_files ],
|
42
|
+
]
|
43
|
+
|
44
|
+
test_tasks tasks
|
45
|
+
end
|
46
|
+
|
47
|
+
context "generate folder" do
|
48
|
+
hookup { clear_bundler_env { Rake::Task["build:windows:installer"].invoke } }
|
49
|
+
|
50
|
+
asserts("readme copied to folder") { same_contents? "#{folder}/README.txt", "README.txt" }
|
51
|
+
asserts("license copied to folder") { same_contents? "#{folder}/LICENSE.txt", "LICENSE.txt" }
|
52
|
+
asserts("folder includes link") { File.read("#{folder}/Releasy website.url") == link_file }
|
53
|
+
asserts("executable created in folder and is of reasonable size") { File.size("#{folder}/test_app_setup.exe") > 2**20 }
|
54
|
+
end
|
55
|
+
end
|
56
|
+
else
|
57
|
+
context "NOT on Windows" do
|
58
|
+
denies(:valid_for_platform?)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require File.expand_path("helpers/helper", File.dirname(__FILE__))
|
2
|
+
|
3
|
+
folder = File.join(output_path, "test_app_0_1_WIN32_EXE")
|
4
|
+
|
5
|
+
context Releasy::Builders::WindowsStandalone do
|
6
|
+
setup { Releasy::Builders::WindowsStandalone.new new_project }
|
7
|
+
|
8
|
+
teardown do
|
9
|
+
Rake::Task.clear
|
10
|
+
Dir.chdir $original_path
|
11
|
+
end
|
12
|
+
|
13
|
+
hookup { Dir.chdir project_path }
|
14
|
+
|
15
|
+
context "valid" do
|
16
|
+
if Gem.win_platform?
|
17
|
+
context "on Windows" do
|
18
|
+
hookup do
|
19
|
+
topic.exclude_encoding
|
20
|
+
topic.executable_type = :console
|
21
|
+
topic.icon = "test_app.ico"
|
22
|
+
topic.send :generate_tasks
|
23
|
+
end
|
24
|
+
|
25
|
+
asserts(:valid_for_platform?)
|
26
|
+
asserts(:folder_suffix).equals "WIN32_EXE"
|
27
|
+
asserts(:executable_name).equals "test_app.exe"
|
28
|
+
asserts(:folder).equals folder
|
29
|
+
asserts(:icon=, "test_app.icns").raises ArgumentError, /icon must be a .ico file/
|
30
|
+
|
31
|
+
context "tasks" do
|
32
|
+
tasks = [
|
33
|
+
[ :Task, "build:windows:standalone", [folder] ],
|
34
|
+
[ :FileCreationTask, '..', [] ], # byproduct of using #directory
|
35
|
+
[ :FileCreationTask, output_path, [] ], # byproduct of using #directory
|
36
|
+
[ :FileCreationTask, folder, source_files ],
|
37
|
+
]
|
38
|
+
|
39
|
+
test_tasks tasks
|
40
|
+
end
|
41
|
+
|
42
|
+
context "generate folder" do
|
43
|
+
hookup { clear_bundler_env { Rake::Task["build:windows:standalone"].invoke } }
|
44
|
+
|
45
|
+
asserts("readme copied to folder") { same_contents? "#{folder}/README.txt", "README.txt" }
|
46
|
+
asserts("license copied to folder") { same_contents? "#{folder}/LICENSE.txt", "LICENSE.txt" }
|
47
|
+
asserts("folder includes link") { File.read("#{folder}/Releasy website.url") == link_file }
|
48
|
+
asserts("executable created in folder and is of reasonable size") { File.size("#{folder}/test_app.exe") > 2**20 }
|
49
|
+
asserts("program output") { clear_bundler_env { %x[#{folder}/test_app.exe] } }.equals "test run!\n"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
else
|
53
|
+
context "NOT on Windows" do
|
54
|
+
denies(:valid_for_platform?)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require File.expand_path("../../teststrap", File.dirname(__FILE__))
|
2
|
+
|
3
|
+
require "releasy/cli"
|
4
|
+
|
5
|
+
module Riot
|
6
|
+
class CommandPutsMacro < AssertionMacro
|
7
|
+
register :command_puts
|
8
|
+
|
9
|
+
def evaluate(argv, expected)
|
10
|
+
$puts_string = nil
|
11
|
+
Releasy::Cli.run argv
|
12
|
+
if $puts_string =~ expected
|
13
|
+
pass ": command #{argv} expected to print #{expected.inspect} and got #{$puts_string.inspect}"
|
14
|
+
else
|
15
|
+
fail ": command #{argv} expected to print #{expected.inspect}, but got #{$puts_string.inspect}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def devaluate(argv, expected); raise NotImplementedError; end
|
20
|
+
end
|
21
|
+
|
22
|
+
class CommandExitsAndPutsMacro < CommandPutsMacro
|
23
|
+
register :command_exits_and_puts
|
24
|
+
|
25
|
+
def evaluate(argv, expected)
|
26
|
+
$puts_string = nil
|
27
|
+
begin
|
28
|
+
Releasy::Cli.run argv
|
29
|
+
fail ": command #{argv} didn't exit"
|
30
|
+
rescue SystemExit
|
31
|
+
if $puts_string =~ expected
|
32
|
+
pass ": command #{argv} expected to print #{expected.inspect} and got #{$puts_string.inspect}"
|
33
|
+
else
|
34
|
+
fail ": command #{argv} expected to print #{expected.inspect}, but got #{$puts_string.inspect}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "releasy install-sfx" do
|
42
|
+
context "on Windows" do
|
43
|
+
should "refuse on windows" do
|
44
|
+
mock(Gem).win_platform?.returns true
|
45
|
+
any_instance_of(Cri::CommandDSL) {|o| stub(o).puts {|s| $puts_string = s } }
|
46
|
+
dont_allow(FileUtils).cp
|
47
|
+
|
48
|
+
["install-sfx"]
|
49
|
+
end.command_exits_and_puts /only required when not on a Windows platform/
|
50
|
+
end
|
51
|
+
|
52
|
+
context "on non-Windows" do
|
53
|
+
|
54
|
+
helper :stubs do |which_7z|
|
55
|
+
mock(Gem).win_platform?.returns false
|
56
|
+
any_instance_of(Cri::CommandDSL) do |o|
|
57
|
+
stub(o).puts {|s| $puts_string = s }
|
58
|
+
stub(o, :`).with("which 7z").returns which_7z
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
should "refuse unless 7z installed" do
|
63
|
+
stubs ""
|
64
|
+
dont_allow(FileUtils).cp
|
65
|
+
|
66
|
+
["install-sfx"]
|
67
|
+
end.command_exits_and_puts /7z \(p7zip\) not installed; install it before trying to use this command/
|
68
|
+
|
69
|
+
should "refuse when file exists" do
|
70
|
+
stubs "/usr/bin/7z"
|
71
|
+
stub(File).exists?("/usr/lib/p7zip/7z.sfx").returns true
|
72
|
+
dont_allow(FileUtils).cp
|
73
|
+
|
74
|
+
["install-sfx"]
|
75
|
+
end.command_exits_and_puts /already exists; no need to install it again/
|
76
|
+
|
77
|
+
should "copy sfx file" do
|
78
|
+
stubs "/usr/bin/7z"
|
79
|
+
stub(File).exists?("/usr/lib/p7zip/7z.sfx").returns false
|
80
|
+
stub(FileUtils).cp(File.expand_path("bin/7z.sfx"), "/usr/lib/p7zip", :verbose => true) { raise Errno::ENOENT }
|
81
|
+
any_instance_of(Cri::CommandDSL) do |o|
|
82
|
+
mock(o).exec(%[sudo cp "#{File.expand_path('bin/7z.sfx')}" "/usr/lib/p7zip"]) do
|
83
|
+
stub(File).exists?("/usr/lib/p7zip/7z.sfx").returns true
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
["install-sfx"]
|
88
|
+
end.command_puts %r[7z.sfx copied to /usr/lib/p7zip]
|
89
|
+
end
|
90
|
+
end
|