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.

Files changed (211) hide show
  1. data/CHANGELOG.md +10 -0
  2. data/Gemfile +28 -0
  3. data/MIT-LICENSE +3 -2
  4. data/POSTINSTALL.rdoc +28 -0
  5. data/README.textile +152 -0
  6. data/bin/sprout +1 -131
  7. data/bin/sprout-generator +10 -0
  8. data/bin/sprout-library +11 -0
  9. data/bin/sprout-tool +10 -0
  10. data/lib/sprout.rb +4 -500
  11. data/lib/sprout/archive_unpacker.rb +122 -206
  12. data/lib/sprout/base.rb +90 -0
  13. data/lib/sprout/concern.rb +30 -0
  14. data/lib/sprout/dir.rb +23 -0
  15. data/lib/sprout/errors.rb +94 -0
  16. data/lib/sprout/executable.rb +496 -0
  17. data/lib/sprout/executable/boolean.rb +35 -0
  18. data/lib/sprout/executable/collection_param.rb +53 -0
  19. data/lib/sprout/executable/file_param.rb +53 -0
  20. data/lib/sprout/executable/files.rb +26 -0
  21. data/lib/sprout/executable/number.rb +10 -0
  22. data/lib/sprout/executable/param.rb +222 -0
  23. data/lib/sprout/executable/parameter_factory.rb +28 -0
  24. data/lib/sprout/executable/path.rb +21 -0
  25. data/lib/sprout/executable/paths.rb +21 -0
  26. data/lib/sprout/executable/string_param.rb +15 -0
  27. data/lib/sprout/executable/strings.rb +11 -0
  28. data/lib/sprout/executable/url.rb +10 -0
  29. data/lib/sprout/executable/urls.rb +10 -0
  30. data/lib/sprout/file_target.rb +76 -0
  31. data/lib/sprout/generator/base.rb +233 -0
  32. data/lib/sprout/generator/command.rb +67 -0
  33. data/lib/sprout/generator/directory_manifest.rb +49 -0
  34. data/lib/sprout/generator/file_manifest.rb +55 -0
  35. data/lib/sprout/generator/manifest.rb +13 -0
  36. data/lib/sprout/generator/template_manifest.rb +13 -0
  37. data/lib/sprout/generators/generator/generator_generator.rb +48 -0
  38. data/lib/sprout/generators/generator/templates/generator_class.rb +17 -0
  39. data/lib/sprout/generators/generator/templates/generator_executable +9 -0
  40. data/lib/sprout/generators/generator/templates/generator_template +1 -0
  41. data/lib/sprout/generators/generator/templates/generator_test.rb +37 -0
  42. data/lib/sprout/generators/generator/templates/generator_test_helper.rb +16 -0
  43. data/lib/sprout/generators/library/library_generator.rb +20 -0
  44. data/lib/sprout/generators/library/templates/library.gemspec +19 -0
  45. data/lib/sprout/generators/library/templates/library.rb +15 -0
  46. data/lib/sprout/generators/ruby/ruby_generator.rb +59 -0
  47. data/lib/sprout/generators/ruby/templates/ruby_base.rb +10 -0
  48. data/lib/sprout/generators/ruby/templates/ruby_executable +6 -0
  49. data/lib/sprout/generators/ruby/templates/ruby_gemfile +4 -0
  50. data/lib/sprout/generators/ruby/templates/ruby_input.rb +7 -0
  51. data/lib/sprout/generators/tool/templates/Gemfile +4 -0
  52. data/lib/sprout/generators/tool/templates/tool.gemspec +22 -0
  53. data/lib/sprout/generators/tool/templates/tool.rb +38 -0
  54. data/lib/sprout/generators/tool/tool_generator.rb +36 -0
  55. data/lib/sprout/library.rb +111 -0
  56. data/lib/sprout/log.rb +1 -0
  57. data/lib/sprout/platform.rb +71 -0
  58. data/lib/sprout/process_runner.rb +80 -40
  59. data/lib/sprout/progress_bar.rb +341 -0
  60. data/lib/sprout/rdoc_parser.rb +91 -0
  61. data/lib/sprout/remote_file_loader.rb +72 -50
  62. data/lib/sprout/remote_file_target.rb +44 -152
  63. data/lib/sprout/ruby_feature.rb +167 -0
  64. data/lib/sprout/specification.rb +197 -0
  65. data/lib/sprout/string.rb +19 -0
  66. data/lib/sprout/system.rb +35 -0
  67. data/lib/sprout/system/base_system.rb +225 -0
  68. data/lib/sprout/system/java_system.rb +9 -0
  69. data/lib/sprout/system/osx_system.rb +26 -0
  70. data/lib/sprout/system/unix_system.rb +72 -0
  71. data/lib/sprout/system/vista_system.rb +16 -0
  72. data/lib/sprout/system/win_nix_system.rb +41 -0
  73. data/lib/sprout/system/win_system.rb +76 -0
  74. data/lib/sprout/test/sprout_test_case.rb +211 -0
  75. data/lib/sprout/version.rb +9 -4
  76. data/rakefile.rb +85 -144
  77. data/script/console +10 -0
  78. data/script/destroy +14 -0
  79. data/script/generate +14 -0
  80. data/sprout.gemspec +26 -0
  81. data/test/fixtures/archive_unpacker/copyable/some_file.exe +0 -0
  82. data/test/fixtures/archive_unpacker/copyable/some_file.rb +0 -0
  83. data/test/fixtures/archive_unpacker/copyable/some_file.swc +0 -0
  84. data/test/fixtures/archive_unpacker/tgz/some folder.tgz +0 -0
  85. data/test/fixtures/archive_unpacker/tgz/some_file.tgz +0 -0
  86. data/test/fixtures/archive_unpacker/zip/some folder.zip +0 -0
  87. data/test/fixtures/archive_unpacker/zip/some_file.zip +0 -0
  88. data/test/fixtures/examples/app_generator.rb +127 -0
  89. data/test/fixtures/examples/echo_inputs.rb +151 -0
  90. data/test/fixtures/executable/echochamber_gem/bin/echochamber +3 -0
  91. data/test/fixtures/executable/echochamber_gem/echo_chamber.rb +10 -0
  92. data/test/fixtures/executable/flex3sdk_gem/flex3sdk.rb +11 -0
  93. data/test/fixtures/executable/flex3sdk_gem/mxmlc +3 -0
  94. data/test/fixtures/executable/flex3sdk_gem/mxmlc.bat +3 -0
  95. data/test/fixtures/executable/mxmlc.rb +805 -0
  96. data/test/fixtures/executable/params/input.as +0 -0
  97. data/test/fixtures/executable/params/input2.as +0 -0
  98. data/test/fixtures/executable/params/input3.as +0 -0
  99. data/test/fixtures/executable/params/mxmlc +5 -0
  100. data/test/fixtures/executable/path with spaces/input.as b/data/test/fixtures/executable/path with → spaces/input.as +0 -0
  101. data/test/fixtures/executable/path with spaces/input2.as b/data/test/fixtures/executable/path with → spaces/input2.as +0 -0
  102. data/test/fixtures/executable/path with spaces/input3.as b/data/test/fixtures/executable/path with → spaces/input3.as +0 -0
  103. data/test/fixtures/executable/paths/folder1/file1 +0 -0
  104. data/test/fixtures/executable/paths/folder1/file2 +0 -0
  105. data/test/fixtures/executable/paths/folder1/file3 +0 -0
  106. data/test/fixtures/executable/paths/folder2/file4 +0 -0
  107. data/test/fixtures/executable/paths/folder2/file5 +0 -0
  108. data/test/fixtures/executable/paths/folder3/file6 +0 -0
  109. data/test/fixtures/executable/src/Main.as +0 -0
  110. data/test/fixtures/executable/windows_line_endings +47 -0
  111. data/test/fixtures/generators/song_generator.rb +11 -0
  112. data/test/fixtures/generators/song_subclass/least_favorite.rb +10 -0
  113. data/test/fixtures/generators/song_subclass/templates/Song.txt +3 -0
  114. data/test/fixtures/generators/temp_generator.rb +24 -0
  115. data/test/fixtures/generators/templates/Main.as +9 -0
  116. data/test/fixtures/generators/templates/OtherFileTemplate +1 -0
  117. data/test/fixtures/generators/templates/SomeFile +1 -0
  118. data/test/fixtures/generators/templates/SomeSubclassFile +2 -0
  119. data/test/fixtures/generators/templates/Song.txt +3 -0
  120. data/test/fixtures/generators/templates/destroy +0 -0
  121. data/test/fixtures/generators/templates/generate +0 -0
  122. data/test/fixtures/library/archive/Archive.swc +0 -0
  123. data/test/fixtures/library/sources/lib/a/A.as +0 -0
  124. data/test/fixtures/library/sources/lib/b/B.as +0 -0
  125. data/test/fixtures/library/sources/src/Source.as +0 -0
  126. data/test/fixtures/process_runner/chmod_script.sh +3 -0
  127. data/test/fixtures/process_runner/dir with spaces/chmod_script.sh +3 -0
  128. data/test/fixtures/process_runner/failure +5 -0
  129. data/test/fixtures/process_runner/success +4 -0
  130. data/test/fixtures/remote_file_loader/md5/echochamber-test.zip +0 -0
  131. data/test/fixtures/remote_file_loader/md5/file_with_known_md5 +0 -0
  132. data/test/fixtures/remote_file_target/bin/echochamber +3 -0
  133. data/test/fixtures/remote_file_target/bin/echochamber.bat +3 -0
  134. data/test/fixtures/remote_file_target/echochamber-test.zip +0 -0
  135. data/test/fixtures/specification/asunit4.rb +25 -0
  136. data/test/fixtures/specification/ext/AsUnit-4.1.pre.swc +0 -0
  137. data/test/fixtures/specification/flashplayer.rb +30 -0
  138. data/test/fixtures/specification/flex4sdk.rb +72 -0
  139. data/test/fixtures/specification/flexunit4.sproutspec +17 -0
  140. data/test/fixtures/specification/lib/as3reflection/Reflection.as +0 -0
  141. data/test/fixtures/specification/src/AsUnit.as +0 -0
  142. data/test/fixtures/user/mxmlc_crlf +3 -0
  143. data/test/unit/archive_unpacker_test.rb +108 -0
  144. data/test/unit/boolean_param_test.rb +38 -0
  145. data/test/unit/executable_option_parser_test.rb +142 -0
  146. data/test/unit/executable_param_test.rb +76 -0
  147. data/test/unit/executable_test.rb +237 -0
  148. data/test/unit/fake_executable_task.rb +22 -0
  149. data/test/unit/fake_other_executable.rb +20 -0
  150. data/test/unit/fake_process_runner.rb +29 -0
  151. data/test/unit/file_param_test.rb +61 -0
  152. data/test/unit/file_target_test.rb +42 -0
  153. data/test/unit/files_param_test.rb +72 -0
  154. data/test/unit/generator_generator_test.rb +85 -0
  155. data/test/unit/generator_test.rb +333 -0
  156. data/test/unit/library_generator_test.rb +41 -0
  157. data/test/unit/library_test.rb +88 -0
  158. data/test/unit/osx_system_test.rb +20 -0
  159. data/test/unit/path_param_test.rb +43 -0
  160. data/test/unit/paths_param_test.rb +53 -0
  161. data/test/unit/platform_test.rb +76 -0
  162. data/test/unit/process_runner_test.rb +104 -0
  163. data/test/unit/rdoc_parser_test.rb +15 -0
  164. data/test/unit/remote_file_loader_test.rb +34 -0
  165. data/test/unit/remote_file_target_test.rb +105 -0
  166. data/test/unit/ruby_feature_test.rb +108 -0
  167. data/test/unit/ruby_generator_test.rb +70 -0
  168. data/test/unit/specification_test.rb +73 -0
  169. data/test/unit/sprout_test.rb +170 -0
  170. data/test/unit/sprout_test_helper.rb +18 -0
  171. data/test/unit/string_param_test.rb +19 -0
  172. data/test/unit/string_test.rb +20 -0
  173. data/test/unit/strings_param_test.rb +27 -0
  174. data/test/unit/test_helper.rb +1 -0
  175. data/test/unit/tool_generator_test.rb +43 -0
  176. data/test/unit/unix_system_test.rb +52 -0
  177. data/test/unit/user_test.rb +147 -0
  178. data/test/unit/vista_system_test.rb +40 -0
  179. data/test/unit/win_nix_system_test.rb +26 -0
  180. data/test/unit/win_system_test.rb +61 -0
  181. metadata +318 -113
  182. data/doc/Bundle +0 -14
  183. data/doc/Generator +0 -35
  184. data/doc/Library +0 -63
  185. data/doc/Task +0 -21
  186. data/doc/Tool +0 -20
  187. data/lib/platform.rb +0 -113
  188. data/lib/progress_bar.rb +0 -354
  189. data/lib/sprout/builder.rb +0 -51
  190. data/lib/sprout/bundle_resolver.rb +0 -349
  191. data/lib/sprout/commands/generate.rb +0 -9
  192. data/lib/sprout/dynamic_accessors.rb +0 -40
  193. data/lib/sprout/general_tasks.rb +0 -6
  194. data/lib/sprout/generator.rb +0 -7
  195. data/lib/sprout/generator/base_mixins.rb +0 -186
  196. data/lib/sprout/generator/named_base.rb +0 -227
  197. data/lib/sprout/project_model.rb +0 -278
  198. data/lib/sprout/simple_resolver.rb +0 -88
  199. data/lib/sprout/tasks/erb_resolver.rb +0 -118
  200. data/lib/sprout/tasks/gem_wrap_task.rb +0 -214
  201. data/lib/sprout/tasks/git_task.rb +0 -134
  202. data/lib/sprout/tasks/library_task.rb +0 -118
  203. data/lib/sprout/tasks/sftp_task.rb +0 -248
  204. data/lib/sprout/tasks/ssh_task.rb +0 -153
  205. data/lib/sprout/tasks/tool_task.rb +0 -836
  206. data/lib/sprout/tasks/zip_task.rb +0 -158
  207. data/lib/sprout/tool_task_model.rb +0 -19
  208. data/lib/sprout/user.rb +0 -415
  209. data/lib/sprout/version_file.rb +0 -89
  210. data/lib/sprout/zip_util.rb +0 -61
  211. data/samples/gem_wrap/rakefile.rb +0 -17
@@ -0,0 +1,9 @@
1
+
2
+ module Sprout::System
3
+
4
+ # The concrete system for the JRuby environment
5
+ class JavaSystem < BaseSystem
6
+
7
+ end
8
+ end
9
+
@@ -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,16 @@
1
+
2
+ module Sprout::System
3
+
4
+ class VistaSystem < WinSystem
5
+
6
+ def find_home
7
+ return env_userprofile unless env_userprofile.nil?
8
+ super
9
+ end
10
+
11
+ def env_userprofile
12
+ ENV['USERPROFILE']
13
+ end
14
+ end
15
+ end
16
+
@@ -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
+