sprout 0.7.246 → 1.0.0.pre
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of sprout might be problematic. Click here for more details.
- data/CHANGELOG.md +10 -0
- data/Gemfile +28 -0
- data/MIT-LICENSE +3 -2
- data/POSTINSTALL.rdoc +28 -0
- data/README.textile +152 -0
- data/bin/sprout +1 -131
- data/bin/sprout-generator +10 -0
- data/bin/sprout-library +11 -0
- data/bin/sprout-tool +10 -0
- data/lib/sprout.rb +4 -500
- data/lib/sprout/archive_unpacker.rb +122 -206
- data/lib/sprout/base.rb +90 -0
- data/lib/sprout/concern.rb +30 -0
- data/lib/sprout/dir.rb +23 -0
- data/lib/sprout/errors.rb +94 -0
- data/lib/sprout/executable.rb +496 -0
- data/lib/sprout/executable/boolean.rb +35 -0
- data/lib/sprout/executable/collection_param.rb +53 -0
- data/lib/sprout/executable/file_param.rb +53 -0
- data/lib/sprout/executable/files.rb +26 -0
- data/lib/sprout/executable/number.rb +10 -0
- data/lib/sprout/executable/param.rb +222 -0
- data/lib/sprout/executable/parameter_factory.rb +28 -0
- data/lib/sprout/executable/path.rb +21 -0
- data/lib/sprout/executable/paths.rb +21 -0
- data/lib/sprout/executable/string_param.rb +15 -0
- data/lib/sprout/executable/strings.rb +11 -0
- data/lib/sprout/executable/url.rb +10 -0
- data/lib/sprout/executable/urls.rb +10 -0
- data/lib/sprout/file_target.rb +76 -0
- data/lib/sprout/generator/base.rb +233 -0
- data/lib/sprout/generator/command.rb +67 -0
- data/lib/sprout/generator/directory_manifest.rb +49 -0
- data/lib/sprout/generator/file_manifest.rb +55 -0
- data/lib/sprout/generator/manifest.rb +13 -0
- data/lib/sprout/generator/template_manifest.rb +13 -0
- data/lib/sprout/generators/generator/generator_generator.rb +48 -0
- data/lib/sprout/generators/generator/templates/generator_class.rb +17 -0
- data/lib/sprout/generators/generator/templates/generator_executable +9 -0
- data/lib/sprout/generators/generator/templates/generator_template +1 -0
- data/lib/sprout/generators/generator/templates/generator_test.rb +37 -0
- data/lib/sprout/generators/generator/templates/generator_test_helper.rb +16 -0
- data/lib/sprout/generators/library/library_generator.rb +20 -0
- data/lib/sprout/generators/library/templates/library.gemspec +19 -0
- data/lib/sprout/generators/library/templates/library.rb +15 -0
- data/lib/sprout/generators/ruby/ruby_generator.rb +59 -0
- data/lib/sprout/generators/ruby/templates/ruby_base.rb +10 -0
- data/lib/sprout/generators/ruby/templates/ruby_executable +6 -0
- data/lib/sprout/generators/ruby/templates/ruby_gemfile +4 -0
- data/lib/sprout/generators/ruby/templates/ruby_input.rb +7 -0
- data/lib/sprout/generators/tool/templates/Gemfile +4 -0
- data/lib/sprout/generators/tool/templates/tool.gemspec +22 -0
- data/lib/sprout/generators/tool/templates/tool.rb +38 -0
- data/lib/sprout/generators/tool/tool_generator.rb +36 -0
- data/lib/sprout/library.rb +111 -0
- data/lib/sprout/log.rb +1 -0
- data/lib/sprout/platform.rb +71 -0
- data/lib/sprout/process_runner.rb +80 -40
- data/lib/sprout/progress_bar.rb +341 -0
- data/lib/sprout/rdoc_parser.rb +91 -0
- data/lib/sprout/remote_file_loader.rb +72 -50
- data/lib/sprout/remote_file_target.rb +44 -152
- data/lib/sprout/ruby_feature.rb +167 -0
- data/lib/sprout/specification.rb +197 -0
- data/lib/sprout/string.rb +19 -0
- data/lib/sprout/system.rb +35 -0
- data/lib/sprout/system/base_system.rb +225 -0
- data/lib/sprout/system/java_system.rb +9 -0
- data/lib/sprout/system/osx_system.rb +26 -0
- data/lib/sprout/system/unix_system.rb +72 -0
- data/lib/sprout/system/vista_system.rb +16 -0
- data/lib/sprout/system/win_nix_system.rb +41 -0
- data/lib/sprout/system/win_system.rb +76 -0
- data/lib/sprout/test/sprout_test_case.rb +211 -0
- data/lib/sprout/version.rb +9 -4
- data/rakefile.rb +85 -144
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/sprout.gemspec +26 -0
- data/test/fixtures/archive_unpacker/copyable/some_file.exe +0 -0
- data/test/fixtures/archive_unpacker/copyable/some_file.rb +0 -0
- data/test/fixtures/archive_unpacker/copyable/some_file.swc +0 -0
- data/test/fixtures/archive_unpacker/tgz/some folder.tgz +0 -0
- data/test/fixtures/archive_unpacker/tgz/some_file.tgz +0 -0
- data/test/fixtures/archive_unpacker/zip/some folder.zip +0 -0
- data/test/fixtures/archive_unpacker/zip/some_file.zip +0 -0
- data/test/fixtures/examples/app_generator.rb +127 -0
- data/test/fixtures/examples/echo_inputs.rb +151 -0
- data/test/fixtures/executable/echochamber_gem/bin/echochamber +3 -0
- data/test/fixtures/executable/echochamber_gem/echo_chamber.rb +10 -0
- data/test/fixtures/executable/flex3sdk_gem/flex3sdk.rb +11 -0
- data/test/fixtures/executable/flex3sdk_gem/mxmlc +3 -0
- data/test/fixtures/executable/flex3sdk_gem/mxmlc.bat +3 -0
- data/test/fixtures/executable/mxmlc.rb +805 -0
- data/test/fixtures/executable/params/input.as +0 -0
- data/test/fixtures/executable/params/input2.as +0 -0
- data/test/fixtures/executable/params/input3.as +0 -0
- data/test/fixtures/executable/params/mxmlc +5 -0
- data/test/fixtures/executable/path with spaces/input.as b/data/test/fixtures/executable/path with → spaces/input.as +0 -0
- data/test/fixtures/executable/path with spaces/input2.as b/data/test/fixtures/executable/path with → spaces/input2.as +0 -0
- data/test/fixtures/executable/path with spaces/input3.as b/data/test/fixtures/executable/path with → spaces/input3.as +0 -0
- data/test/fixtures/executable/paths/folder1/file1 +0 -0
- data/test/fixtures/executable/paths/folder1/file2 +0 -0
- data/test/fixtures/executable/paths/folder1/file3 +0 -0
- data/test/fixtures/executable/paths/folder2/file4 +0 -0
- data/test/fixtures/executable/paths/folder2/file5 +0 -0
- data/test/fixtures/executable/paths/folder3/file6 +0 -0
- data/test/fixtures/executable/src/Main.as +0 -0
- data/test/fixtures/executable/windows_line_endings +47 -0
- data/test/fixtures/generators/song_generator.rb +11 -0
- data/test/fixtures/generators/song_subclass/least_favorite.rb +10 -0
- data/test/fixtures/generators/song_subclass/templates/Song.txt +3 -0
- data/test/fixtures/generators/temp_generator.rb +24 -0
- data/test/fixtures/generators/templates/Main.as +9 -0
- data/test/fixtures/generators/templates/OtherFileTemplate +1 -0
- data/test/fixtures/generators/templates/SomeFile +1 -0
- data/test/fixtures/generators/templates/SomeSubclassFile +2 -0
- data/test/fixtures/generators/templates/Song.txt +3 -0
- data/test/fixtures/generators/templates/destroy +0 -0
- data/test/fixtures/generators/templates/generate +0 -0
- data/test/fixtures/library/archive/Archive.swc +0 -0
- data/test/fixtures/library/sources/lib/a/A.as +0 -0
- data/test/fixtures/library/sources/lib/b/B.as +0 -0
- data/test/fixtures/library/sources/src/Source.as +0 -0
- data/test/fixtures/process_runner/chmod_script.sh +3 -0
- data/test/fixtures/process_runner/dir with spaces/chmod_script.sh +3 -0
- data/test/fixtures/process_runner/failure +5 -0
- data/test/fixtures/process_runner/success +4 -0
- data/test/fixtures/remote_file_loader/md5/echochamber-test.zip +0 -0
- data/test/fixtures/remote_file_loader/md5/file_with_known_md5 +0 -0
- data/test/fixtures/remote_file_target/bin/echochamber +3 -0
- data/test/fixtures/remote_file_target/bin/echochamber.bat +3 -0
- data/test/fixtures/remote_file_target/echochamber-test.zip +0 -0
- data/test/fixtures/specification/asunit4.rb +25 -0
- data/test/fixtures/specification/ext/AsUnit-4.1.pre.swc +0 -0
- data/test/fixtures/specification/flashplayer.rb +30 -0
- data/test/fixtures/specification/flex4sdk.rb +72 -0
- data/test/fixtures/specification/flexunit4.sproutspec +17 -0
- data/test/fixtures/specification/lib/as3reflection/Reflection.as +0 -0
- data/test/fixtures/specification/src/AsUnit.as +0 -0
- data/test/fixtures/user/mxmlc_crlf +3 -0
- data/test/unit/archive_unpacker_test.rb +108 -0
- data/test/unit/boolean_param_test.rb +38 -0
- data/test/unit/executable_option_parser_test.rb +142 -0
- data/test/unit/executable_param_test.rb +76 -0
- data/test/unit/executable_test.rb +237 -0
- data/test/unit/fake_executable_task.rb +22 -0
- data/test/unit/fake_other_executable.rb +20 -0
- data/test/unit/fake_process_runner.rb +29 -0
- data/test/unit/file_param_test.rb +61 -0
- data/test/unit/file_target_test.rb +42 -0
- data/test/unit/files_param_test.rb +72 -0
- data/test/unit/generator_generator_test.rb +85 -0
- data/test/unit/generator_test.rb +333 -0
- data/test/unit/library_generator_test.rb +41 -0
- data/test/unit/library_test.rb +88 -0
- data/test/unit/osx_system_test.rb +20 -0
- data/test/unit/path_param_test.rb +43 -0
- data/test/unit/paths_param_test.rb +53 -0
- data/test/unit/platform_test.rb +76 -0
- data/test/unit/process_runner_test.rb +104 -0
- data/test/unit/rdoc_parser_test.rb +15 -0
- data/test/unit/remote_file_loader_test.rb +34 -0
- data/test/unit/remote_file_target_test.rb +105 -0
- data/test/unit/ruby_feature_test.rb +108 -0
- data/test/unit/ruby_generator_test.rb +70 -0
- data/test/unit/specification_test.rb +73 -0
- data/test/unit/sprout_test.rb +170 -0
- data/test/unit/sprout_test_helper.rb +18 -0
- data/test/unit/string_param_test.rb +19 -0
- data/test/unit/string_test.rb +20 -0
- data/test/unit/strings_param_test.rb +27 -0
- data/test/unit/test_helper.rb +1 -0
- data/test/unit/tool_generator_test.rb +43 -0
- data/test/unit/unix_system_test.rb +52 -0
- data/test/unit/user_test.rb +147 -0
- data/test/unit/vista_system_test.rb +40 -0
- data/test/unit/win_nix_system_test.rb +26 -0
- data/test/unit/win_system_test.rb +61 -0
- metadata +318 -113
- data/doc/Bundle +0 -14
- data/doc/Generator +0 -35
- data/doc/Library +0 -63
- data/doc/Task +0 -21
- data/doc/Tool +0 -20
- data/lib/platform.rb +0 -113
- data/lib/progress_bar.rb +0 -354
- data/lib/sprout/builder.rb +0 -51
- data/lib/sprout/bundle_resolver.rb +0 -349
- data/lib/sprout/commands/generate.rb +0 -9
- data/lib/sprout/dynamic_accessors.rb +0 -40
- data/lib/sprout/general_tasks.rb +0 -6
- data/lib/sprout/generator.rb +0 -7
- data/lib/sprout/generator/base_mixins.rb +0 -186
- data/lib/sprout/generator/named_base.rb +0 -227
- data/lib/sprout/project_model.rb +0 -278
- data/lib/sprout/simple_resolver.rb +0 -88
- data/lib/sprout/tasks/erb_resolver.rb +0 -118
- data/lib/sprout/tasks/gem_wrap_task.rb +0 -214
- data/lib/sprout/tasks/git_task.rb +0 -134
- data/lib/sprout/tasks/library_task.rb +0 -118
- data/lib/sprout/tasks/sftp_task.rb +0 -248
- data/lib/sprout/tasks/ssh_task.rb +0 -153
- data/lib/sprout/tasks/tool_task.rb +0 -836
- data/lib/sprout/tasks/zip_task.rb +0 -158
- data/lib/sprout/tool_task_model.rb +0 -19
- data/lib/sprout/user.rb +0 -415
- data/lib/sprout/version_file.rb +0 -89
- data/lib/sprout/zip_util.rb +0 -61
- data/samples/gem_wrap/rakefile.rb +0 -17
@@ -0,0 +1,26 @@
|
|
1
|
+
|
2
|
+
module Sprout::System
|
3
|
+
|
4
|
+
class OSXSystem < UnixSystem
|
5
|
+
LIBRARY = 'Library'
|
6
|
+
|
7
|
+
def library
|
8
|
+
lib = File.join(home, LIBRARY)
|
9
|
+
if(File.exists?(lib))
|
10
|
+
return lib
|
11
|
+
else
|
12
|
+
return super
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def format_application_name(name)
|
17
|
+
return name.capitalize
|
18
|
+
end
|
19
|
+
|
20
|
+
def can_execute? platform
|
21
|
+
[:mac, :osx, :macosx, :darwin].include?(platform) || super
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
@@ -0,0 +1,72 @@
|
|
1
|
+
|
2
|
+
module Sprout::System
|
3
|
+
|
4
|
+
class UnixSystem < BaseSystem
|
5
|
+
|
6
|
+
def clean_path path
|
7
|
+
return if path.nil?
|
8
|
+
if(path.include? '../')
|
9
|
+
path = File.expand_path path
|
10
|
+
end
|
11
|
+
|
12
|
+
if(path.index(' '))
|
13
|
+
return path.split(' ').join('\ ')
|
14
|
+
end
|
15
|
+
return path
|
16
|
+
end
|
17
|
+
|
18
|
+
def execute(tool, options='')
|
19
|
+
attempt_to_repair_executable tool
|
20
|
+
super(tool, options)
|
21
|
+
end
|
22
|
+
|
23
|
+
##
|
24
|
+
# Ensure Application +name+ String begins with a dot (.), and does
|
25
|
+
# not include spaces.
|
26
|
+
#
|
27
|
+
def format_application_name(name)
|
28
|
+
if(name.index('.') != 0)
|
29
|
+
name = '.' + name
|
30
|
+
end
|
31
|
+
return name.split(" ").join("_").downcase
|
32
|
+
end
|
33
|
+
|
34
|
+
def can_execute? platform
|
35
|
+
[:unix, :linux].include?(platform) || super
|
36
|
+
end
|
37
|
+
|
38
|
+
##
|
39
|
+
# Repair Windows Line endings
|
40
|
+
# found in non-windows executables
|
41
|
+
# (Flex SDK is regularly published
|
42
|
+
# with broken CRLFs)
|
43
|
+
#
|
44
|
+
# +path+ String path to the executable file.
|
45
|
+
#
|
46
|
+
def attempt_to_repair_executable path
|
47
|
+
repair_executable(path) if should_repair_executable(path)
|
48
|
+
end
|
49
|
+
|
50
|
+
def repair_executable path
|
51
|
+
content = File.read(path)
|
52
|
+
if(content.match(/\r\n/))
|
53
|
+
Sprout::Log.puts "[WARNING] Sprouts is about to replace invalid Windows line endings on an executable at: (#{path})"
|
54
|
+
content.gsub!(/\r\n/, "\n")
|
55
|
+
File.open(path, 'w+') do |f|
|
56
|
+
f.write content
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
##
|
62
|
+
# Determine if we should call +repair_executable+
|
63
|
+
# for the file at the provided +path+ String.
|
64
|
+
#
|
65
|
+
# Will this corrupt binaries?
|
66
|
+
def should_repair_executable path
|
67
|
+
return (File.exists?(path) && !File.directory?(path) && File.read(path).match(/^\#\!/))
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
|
2
|
+
module Sprout::System
|
3
|
+
|
4
|
+
# The concrete system for Cygwin and Mingw
|
5
|
+
# We can't quite treat these users like
|
6
|
+
# a typical *nix system, but we can't quite
|
7
|
+
# treat them like Windows users either.
|
8
|
+
#
|
9
|
+
# One great thing about these users,
|
10
|
+
# is that we get to use real processes,
|
11
|
+
# rather than the broken processes that
|
12
|
+
# windows normally offers.
|
13
|
+
class WinNixSystem < WinSystem
|
14
|
+
|
15
|
+
def clean_path(path)
|
16
|
+
return nil if path.nil?
|
17
|
+
if(path.index(' '))
|
18
|
+
return %{'#{path}'}
|
19
|
+
end
|
20
|
+
return path
|
21
|
+
end
|
22
|
+
|
23
|
+
def win_home
|
24
|
+
@win_home ||= ENV['HOMEDRIVE'] + ENV['HOMEPATH']
|
25
|
+
end
|
26
|
+
|
27
|
+
def home
|
28
|
+
@home ||= win_nix_home
|
29
|
+
end
|
30
|
+
|
31
|
+
def win_nix_home
|
32
|
+
path = win_home.split('\\').join("/")
|
33
|
+
path = path.split(":").join("")
|
34
|
+
parts = path.split("/")
|
35
|
+
path = parts.shift().downcase + "/" + parts.join("/")
|
36
|
+
"/cygdrive/" + path
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
@@ -0,0 +1,76 @@
|
|
1
|
+
|
2
|
+
module Sprout::System
|
3
|
+
|
4
|
+
# The default Windows system.
|
5
|
+
# This is the system type for all
|
6
|
+
# major versions and flavors of Windows
|
7
|
+
# (except Cygwin and Mingw).
|
8
|
+
class WinSystem < BaseSystem
|
9
|
+
LOCAL_SETTINGS = "Local\ Settings"
|
10
|
+
APPLICATION_DATA = "Application\ Data"
|
11
|
+
|
12
|
+
def home
|
13
|
+
path = super
|
14
|
+
if(path.include? "My Documents")
|
15
|
+
path = File.dirname(path)
|
16
|
+
end
|
17
|
+
return path
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_paths
|
21
|
+
return env_path.split(';')
|
22
|
+
end
|
23
|
+
|
24
|
+
def library
|
25
|
+
# For some reason, my homepath returns inside 'My Documents'...
|
26
|
+
application_data = File.join(home, LOCAL_SETTINGS, APPLICATION_DATA)
|
27
|
+
if(File.exists?(application_data))
|
28
|
+
return application_data
|
29
|
+
else
|
30
|
+
return super
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def clean_path(path)
|
35
|
+
path = path.split('/').join("\\")
|
36
|
+
if(path.index(' '))
|
37
|
+
return %{"#{path}"}
|
38
|
+
end
|
39
|
+
return path
|
40
|
+
end
|
41
|
+
|
42
|
+
def format_application_name(name)
|
43
|
+
return name.capitalize
|
44
|
+
end
|
45
|
+
|
46
|
+
def can_execute? platform
|
47
|
+
[:windows, :win32].include?(platform) || super
|
48
|
+
end
|
49
|
+
|
50
|
+
protected
|
51
|
+
|
52
|
+
##
|
53
|
+
# Gets the process runner and calls
|
54
|
+
# platform-specific execute method
|
55
|
+
def get_and_execute_process_runner tool, options=nil
|
56
|
+
tool = find_tool tool
|
57
|
+
runner = get_process_runner
|
58
|
+
runner.execute_win32 "\"#{tool}\" #{options}"
|
59
|
+
runner
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def find_tool tool
|
65
|
+
return "#{tool}.bat" if File.exists?("#{tool}.bat")
|
66
|
+
return "#{tool}.exe" if File.exists?("#{tool}.exe")
|
67
|
+
tool
|
68
|
+
end
|
69
|
+
|
70
|
+
def env_path
|
71
|
+
ENV['PATH']
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
@@ -0,0 +1,211 @@
|
|
1
|
+
|
2
|
+
# Had to make this a module instead of a base class
|
3
|
+
# because the ruby test suite kept complaining that
|
4
|
+
# the abstract test case didn't have any test mehods
|
5
|
+
# or assertions
|
6
|
+
module SproutTestCase # :nodoc:[all]
|
7
|
+
FIXTURES_NAME = 'fixtures'
|
8
|
+
|
9
|
+
# Gives us the ability to hide RubyGem output from
|
10
|
+
# our test results...
|
11
|
+
include Gem::DefaultUserInteraction
|
12
|
+
|
13
|
+
def fixtures from=nil
|
14
|
+
@fixtures ||= find_fixtures(from || Sprout.file_from_caller(caller.first))
|
15
|
+
end
|
16
|
+
|
17
|
+
def setup
|
18
|
+
super
|
19
|
+
@start_path = Dir.pwd
|
20
|
+
end
|
21
|
+
|
22
|
+
def teardown
|
23
|
+
super
|
24
|
+
clear_tasks
|
25
|
+
Sprout::Executable.clear_entities!
|
26
|
+
Sprout::Library.clear_entities!
|
27
|
+
Sprout::Generator.clear_entities!
|
28
|
+
|
29
|
+
remove_file @temp_path
|
30
|
+
remove_file @temp_cache
|
31
|
+
|
32
|
+
@temp_path = nil
|
33
|
+
@temp_cache = nil
|
34
|
+
|
35
|
+
if(@start_path && Dir.pwd != @start_path)
|
36
|
+
puts "[WARNING] >> SproutTestCase changing dir from #{Dir.pwd} back to: #{@start_path} - Did you mean to leave your working directory in a new place?"
|
37
|
+
Dir.chdir @start_path
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
def temp_path
|
43
|
+
caller_file = Sprout.file_from_caller caller.first
|
44
|
+
@temp_path ||= make_temp_folder File.dirname(caller_file)
|
45
|
+
end
|
46
|
+
|
47
|
+
def make_temp_folder from
|
48
|
+
dir = File.join(fixtures(from), 'tmp')
|
49
|
+
FileUtils.mkdir_p dir
|
50
|
+
dir
|
51
|
+
end
|
52
|
+
|
53
|
+
def run_task(name)
|
54
|
+
t = Rake.application[name]
|
55
|
+
t.invoke
|
56
|
+
return t
|
57
|
+
end
|
58
|
+
|
59
|
+
def get_task(name)
|
60
|
+
return Rake.application[name]
|
61
|
+
end
|
62
|
+
|
63
|
+
def clear_tasks
|
64
|
+
Rake::Task.clear
|
65
|
+
Rake.application.clear
|
66
|
+
end
|
67
|
+
|
68
|
+
def create_file path
|
69
|
+
dir = File.dirname path
|
70
|
+
FileUtils.mkdir_p dir
|
71
|
+
FileUtils.touch path
|
72
|
+
end
|
73
|
+
|
74
|
+
def remove_file(path=nil)
|
75
|
+
if(path && File.exists?(path))
|
76
|
+
FileUtils.rm_rf(path)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def assert_file(path, message=nil)
|
81
|
+
message ||= "Expected file not found at #{path}"
|
82
|
+
assert(File.exists?(path), message)
|
83
|
+
yield File.read(path) if block_given?
|
84
|
+
end
|
85
|
+
|
86
|
+
def assert_directory(path, message=nil)
|
87
|
+
message ||= "Expected directory not found at #{path}"
|
88
|
+
assert(File.directory?(path), message)
|
89
|
+
end
|
90
|
+
|
91
|
+
def assert_not_empty(path, message=nil)
|
92
|
+
assert_file path, message
|
93
|
+
files = FileList["#{path}/*"]
|
94
|
+
message ||= " - Expected #{path} to not be empty, but it was"
|
95
|
+
assert files.size > 0, message
|
96
|
+
end
|
97
|
+
|
98
|
+
def assert_matches(expression, string, message='')
|
99
|
+
if(expression.is_a?(String))
|
100
|
+
expresion = /#{expression}/
|
101
|
+
end
|
102
|
+
if(!string.match(expression))
|
103
|
+
fail "#{message} - '#{string}' should include '#{expression}'"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
##
|
108
|
+
# Add the skip method that was introduced in Ruby 1.9.1 Test::Unit
|
109
|
+
# This doesn't really work all that well...
|
110
|
+
if(RUBY_VERSION == '1.8.7')
|
111
|
+
def skip message=""
|
112
|
+
puts
|
113
|
+
puts ">> SproutTestCase.skip called from: #{caller[0]} ( #{message} )"
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def temp_cache
|
118
|
+
dir = File.dirname(Sprout.file_from_caller(caller.first))
|
119
|
+
@temp_cache ||= File.join(fixtures(dir), 'sprout', 'cache')
|
120
|
+
end
|
121
|
+
|
122
|
+
def as_each_system
|
123
|
+
[
|
124
|
+
Sprout::System::VistaSystem.new,
|
125
|
+
Sprout::System::WinNixSystem.new,
|
126
|
+
Sprout::System::WinSystem.new,
|
127
|
+
Sprout::System::JavaSystem.new,
|
128
|
+
Sprout::System::OSXSystem.new,
|
129
|
+
Sprout::System::UnixSystem.new
|
130
|
+
].each do |sys|
|
131
|
+
expectation = Sprout::System.stubs(:create).returns sys
|
132
|
+
yield sys if block_given?
|
133
|
+
# Ugh - This is way too greedy... We're killing all mocks in here
|
134
|
+
# Doing it anyway b/c we need to get Windows support in place...
|
135
|
+
# TODO: Implement this feature without clobbering all stubs/mocks
|
136
|
+
Mocha::Mockery.instance.teardown
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
=begin
|
141
|
+
def as_a_unix_system
|
142
|
+
sys = Sprout::System::UnixSystem.new
|
143
|
+
expectation = Sprout::System.stubs(:create).returns sys
|
144
|
+
yield sys if block_given?
|
145
|
+
# Ugh - This is way too greedy... We're killing all mocks in here
|
146
|
+
# Doing it anyway b/c we need to get Windows support in place...
|
147
|
+
# TODO: Implement this feature without clobbering all stubs/mocks
|
148
|
+
Mocha::Mockery.instance.teardown
|
149
|
+
end
|
150
|
+
|
151
|
+
def as_a_mac_system
|
152
|
+
sys = Sprout::System::OSXSystem.new
|
153
|
+
Sprout::System.stubs(:create).returns sys
|
154
|
+
yield sys if block_given?
|
155
|
+
# Ugh - This is way too greedy... We're killing all mocks in here
|
156
|
+
# Doing it anyway b/c we need to get Windows support in place...
|
157
|
+
# TODO: Implement this feature without clobbering all stubs/mocks
|
158
|
+
Mocha::Mockery.instance.teardown
|
159
|
+
end
|
160
|
+
|
161
|
+
def as_a_windows_system
|
162
|
+
sys = Sprout::System::WinSystem.new
|
163
|
+
Sprout::System.stubs(:create).returns sys
|
164
|
+
yield sys if block_given?
|
165
|
+
# Ugh - This is way too greedy... We're killing all mocks in here
|
166
|
+
# Doing it anyway b/c we need to get Windows support in place...
|
167
|
+
# TODO: Implement this feature without clobbering all stubs/mocks
|
168
|
+
Mocha::Mockery.instance.teardown
|
169
|
+
end
|
170
|
+
=end
|
171
|
+
|
172
|
+
|
173
|
+
private
|
174
|
+
|
175
|
+
# Find the nearest fixtures folder to the provided
|
176
|
+
# path by checking each parent directory.
|
177
|
+
def find_fixtures path
|
178
|
+
# Return nil if path is nil or is not a file:
|
179
|
+
return nil if(path.nil? || !File.exists?(path))
|
180
|
+
# Get the parent directory if path is a file:
|
181
|
+
path = File.dirname(path) if !File.directory? path
|
182
|
+
# Check for a folder at "#{path}/fixtures":
|
183
|
+
fixture_path = File.join(path, FIXTURES_NAME)
|
184
|
+
# Return the fixtures folder if found:
|
185
|
+
return fixture_path if File.directory? fixture_path
|
186
|
+
# Move up one directory and try again:
|
187
|
+
return find_fixtures File.dirname(path)
|
188
|
+
end
|
189
|
+
|
190
|
+
end
|
191
|
+
|
192
|
+
# TODO: Consider adding these:
|
193
|
+
# Some generator-related assertions:
|
194
|
+
# assert_generated_file(name, &block) # block passed the file contents
|
195
|
+
# assert_directory_exists(name)
|
196
|
+
# assert_generated_class(name, &block)
|
197
|
+
# assert_generated_module(name, &block)
|
198
|
+
# assert_generated_test_for(name, &block)
|
199
|
+
# The assert_generated_(class|module|test_for) &block is passed the body of the class/module within the file
|
200
|
+
# assert_has_method(body, *methods) # check that the body has a list of methods (methods with parentheses not supported yet)
|
201
|
+
#
|
202
|
+
# Other helper methods are:
|
203
|
+
# app_root_files - put this in teardown to show files generated by the test method (e.g. p app_root_files)
|
204
|
+
# bare_setup - place this in setup method to create the app_root folder for each test
|
205
|
+
# bare_teardown - place this in teardown method to destroy the TMP_ROOT or app_root folder after each test
|
206
|
+
|
207
|
+
|
208
|
+
# Prevent log messages from interrupting the test output:
|
209
|
+
Sprout::Log.debug = true
|
210
|
+
Sprout::ProgressBar.debug = true
|
211
|
+
|