csd 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (258) hide show
  1. data/COPYING +1 -2
  2. data/README.rdoc +7 -1
  3. data/Rakefile +7 -2
  4. data/VERSION +1 -1
  5. data/csd.gemspec +18 -216
  6. data/lib/csd.rb +6 -16
  7. data/lib/csd/application.rb +2 -2
  8. data/lib/csd/application/default.rb +15 -14
  9. data/lib/csd/application/default/base.rb +1 -1
  10. data/lib/csd/application/minisip.rb +43 -11
  11. data/lib/csd/application/minisip/about.yml +5 -5
  12. data/lib/csd/application/minisip/base.rb +82 -70
  13. data/lib/csd/application/minisip/error.rb +1 -1
  14. data/lib/csd/application/minisip/options/common.rb +1 -1
  15. data/lib/csd/application/minisip/options/compile.rb +1 -1
  16. data/lib/csd/application/minisip/options/package.rb +1 -1
  17. data/lib/csd/application/minisip/unix.rb +40 -27
  18. data/lib/csd/application/minisip/unix/darwin.rb +12 -0
  19. data/lib/csd/application/minisip/unix/linux.rb +1 -11
  20. data/lib/csd/application/minisip/unix/linux/debian.rb +14 -25
  21. data/lib/csd/application/minisip/unix/linux/debian/ubuntu10.rb +12 -13
  22. data/lib/csd/applications.rb +5 -5
  23. data/lib/csd/commands.rb +164 -89
  24. data/lib/csd/container.rb +61 -0
  25. data/lib/csd/error.rb +10 -1
  26. data/lib/csd/extensions.rb +3 -2
  27. data/lib/csd/extensions/core/array.rb +29 -1
  28. data/lib/csd/extensions/core/dir.rb +15 -24
  29. data/lib/csd/extensions/core/object.rb +10 -2
  30. data/lib/csd/extensions/core/option_parser.rb +22 -3
  31. data/lib/csd/extensions/core/pathname.rb +30 -2
  32. data/lib/csd/extensions/core/string.rb +51 -4
  33. data/lib/csd/extensions/gem/platform.rb +18 -3
  34. data/lib/csd/{options.rb → options_parser.rb} +16 -20
  35. data/lib/csd/path_container.rb +24 -0
  36. data/lib/csd/user_interface.rb +2 -0
  37. data/lib/csd/user_interface/base.rb +26 -0
  38. data/lib/csd/user_interface/cli.rb +37 -0
  39. data/lib/csd/vendor/active_support/MIT-LICENSE +20 -0
  40. data/lib/csd/vendor/active_support/inflector.rb +155 -0
  41. data/lib/csd/vendor/term/GPL2-LICENSE +339 -0
  42. data/lib/csd/vendor/term/ansicolor.rb +113 -0
  43. data/lib/csd/version.rb +13 -4
  44. data/test/application/test_minisip.rb +45 -0
  45. data/test/functional/test_applications.rb +10 -16
  46. data/test/functional/test_commands.rb +260 -23
  47. data/test/unit/test_string.rb +1 -1
  48. metadata +18 -216
  49. data/lib/active_support.rb +0 -75
  50. data/lib/active_support/all.rb +0 -3
  51. data/lib/active_support/backtrace_cleaner.rb +0 -94
  52. data/lib/active_support/base64.rb +0 -42
  53. data/lib/active_support/basic_object.rb +0 -21
  54. data/lib/active_support/benchmarkable.rb +0 -60
  55. data/lib/active_support/buffered_logger.rb +0 -132
  56. data/lib/active_support/builder.rb +0 -6
  57. data/lib/active_support/cache.rb +0 -626
  58. data/lib/active_support/cache/compressed_mem_cache_store.rb +0 -13
  59. data/lib/active_support/cache/file_store.rb +0 -188
  60. data/lib/active_support/cache/mem_cache_store.rb +0 -191
  61. data/lib/active_support/cache/memory_store.rb +0 -159
  62. data/lib/active_support/cache/strategy/local_cache.rb +0 -164
  63. data/lib/active_support/cache/synchronized_memory_store.rb +0 -11
  64. data/lib/active_support/callbacks.rb +0 -600
  65. data/lib/active_support/concern.rb +0 -29
  66. data/lib/active_support/configurable.rb +0 -36
  67. data/lib/active_support/core_ext.rb +0 -3
  68. data/lib/active_support/core_ext/array.rb +0 -7
  69. data/lib/active_support/core_ext/array/access.rb +0 -46
  70. data/lib/active_support/core_ext/array/conversions.rb +0 -164
  71. data/lib/active_support/core_ext/array/extract_options.rb +0 -29
  72. data/lib/active_support/core_ext/array/grouping.rb +0 -100
  73. data/lib/active_support/core_ext/array/random_access.rb +0 -20
  74. data/lib/active_support/core_ext/array/uniq_by.rb +0 -17
  75. data/lib/active_support/core_ext/array/wrap.rb +0 -22
  76. data/lib/active_support/core_ext/benchmark.rb +0 -7
  77. data/lib/active_support/core_ext/big_decimal.rb +0 -1
  78. data/lib/active_support/core_ext/big_decimal/conversions.rb +0 -27
  79. data/lib/active_support/core_ext/cgi.rb +0 -1
  80. data/lib/active_support/core_ext/cgi/escape_skipping_slashes.rb +0 -19
  81. data/lib/active_support/core_ext/class.rb +0 -4
  82. data/lib/active_support/core_ext/class/attribute.rb +0 -67
  83. data/lib/active_support/core_ext/class/attribute_accessors.rb +0 -63
  84. data/lib/active_support/core_ext/class/delegating_attributes.rb +0 -44
  85. data/lib/active_support/core_ext/class/inheritable_attributes.rb +0 -232
  86. data/lib/active_support/core_ext/class/subclasses.rb +0 -55
  87. data/lib/active_support/core_ext/date/acts_like.rb +0 -8
  88. data/lib/active_support/core_ext/date/calculations.rb +0 -240
  89. data/lib/active_support/core_ext/date/conversions.rb +0 -99
  90. data/lib/active_support/core_ext/date/freeze.rb +0 -31
  91. data/lib/active_support/core_ext/date_time/acts_like.rb +0 -13
  92. data/lib/active_support/core_ext/date_time/calculations.rb +0 -113
  93. data/lib/active_support/core_ext/date_time/conversions.rb +0 -102
  94. data/lib/active_support/core_ext/date_time/zones.rb +0 -17
  95. data/lib/active_support/core_ext/enumerable.rb +0 -119
  96. data/lib/active_support/core_ext/exception.rb +0 -3
  97. data/lib/active_support/core_ext/file.rb +0 -2
  98. data/lib/active_support/core_ext/file/atomic.rb +0 -41
  99. data/lib/active_support/core_ext/file/path.rb +0 -5
  100. data/lib/active_support/core_ext/float.rb +0 -1
  101. data/lib/active_support/core_ext/float/rounding.rb +0 -19
  102. data/lib/active_support/core_ext/hash.rb +0 -8
  103. data/lib/active_support/core_ext/hash/conversions.rb +0 -150
  104. data/lib/active_support/core_ext/hash/deep_merge.rb +0 -16
  105. data/lib/active_support/core_ext/hash/diff.rb +0 -13
  106. data/lib/active_support/core_ext/hash/except.rb +0 -24
  107. data/lib/active_support/core_ext/hash/indifferent_access.rb +0 -14
  108. data/lib/active_support/core_ext/hash/keys.rb +0 -45
  109. data/lib/active_support/core_ext/hash/reverse_merge.rb +0 -28
  110. data/lib/active_support/core_ext/hash/slice.rb +0 -38
  111. data/lib/active_support/core_ext/integer.rb +0 -3
  112. data/lib/active_support/core_ext/integer/inflections.rb +0 -14
  113. data/lib/active_support/core_ext/integer/multiple.rb +0 -6
  114. data/lib/active_support/core_ext/integer/time.rb +0 -39
  115. data/lib/active_support/core_ext/kernel.rb +0 -5
  116. data/lib/active_support/core_ext/kernel/agnostics.rb +0 -11
  117. data/lib/active_support/core_ext/kernel/debugger.rb +0 -16
  118. data/lib/active_support/core_ext/kernel/reporting.rb +0 -62
  119. data/lib/active_support/core_ext/kernel/requires.rb +0 -26
  120. data/lib/active_support/core_ext/kernel/singleton_class.rb +0 -13
  121. data/lib/active_support/core_ext/load_error.rb +0 -23
  122. data/lib/active_support/core_ext/logger.rb +0 -146
  123. data/lib/active_support/core_ext/module.rb +0 -12
  124. data/lib/active_support/core_ext/module/aliasing.rb +0 -70
  125. data/lib/active_support/core_ext/module/anonymous.rb +0 -24
  126. data/lib/active_support/core_ext/module/attr_accessor_with_default.rb +0 -31
  127. data/lib/active_support/core_ext/module/attr_internal.rb +0 -32
  128. data/lib/active_support/core_ext/module/attribute_accessors.rb +0 -66
  129. data/lib/active_support/core_ext/module/delegation.rb +0 -146
  130. data/lib/active_support/core_ext/module/deprecation.rb +0 -9
  131. data/lib/active_support/core_ext/module/introspection.rb +0 -88
  132. data/lib/active_support/core_ext/module/method_names.rb +0 -14
  133. data/lib/active_support/core_ext/module/reachable.rb +0 -10
  134. data/lib/active_support/core_ext/module/remove_method.rb +0 -6
  135. data/lib/active_support/core_ext/module/synchronization.rb +0 -42
  136. data/lib/active_support/core_ext/name_error.rb +0 -18
  137. data/lib/active_support/core_ext/numeric.rb +0 -2
  138. data/lib/active_support/core_ext/numeric/bytes.rb +0 -44
  139. data/lib/active_support/core_ext/numeric/time.rb +0 -77
  140. data/lib/active_support/core_ext/object.rb +0 -14
  141. data/lib/active_support/core_ext/object/acts_like.rb +0 -10
  142. data/lib/active_support/core_ext/object/blank.rb +0 -76
  143. data/lib/active_support/core_ext/object/conversions.rb +0 -4
  144. data/lib/active_support/core_ext/object/duplicable.rb +0 -65
  145. data/lib/active_support/core_ext/object/extending.rb +0 -11
  146. data/lib/active_support/core_ext/object/instance_variables.rb +0 -67
  147. data/lib/active_support/core_ext/object/misc.rb +0 -2
  148. data/lib/active_support/core_ext/object/returning.rb +0 -42
  149. data/lib/active_support/core_ext/object/to_param.rb +0 -49
  150. data/lib/active_support/core_ext/object/to_query.rb +0 -27
  151. data/lib/active_support/core_ext/object/try.rb +0 -36
  152. data/lib/active_support/core_ext/object/with_options.rb +0 -26
  153. data/lib/active_support/core_ext/proc.rb +0 -14
  154. data/lib/active_support/core_ext/process.rb +0 -1
  155. data/lib/active_support/core_ext/process/daemon.rb +0 -23
  156. data/lib/active_support/core_ext/range.rb +0 -4
  157. data/lib/active_support/core_ext/range/blockless_step.rb +0 -29
  158. data/lib/active_support/core_ext/range/conversions.rb +0 -21
  159. data/lib/active_support/core_ext/range/include_range.rb +0 -21
  160. data/lib/active_support/core_ext/range/overlaps.rb +0 -8
  161. data/lib/active_support/core_ext/regexp.rb +0 -5
  162. data/lib/active_support/core_ext/rexml.rb +0 -46
  163. data/lib/active_support/core_ext/string.rb +0 -12
  164. data/lib/active_support/core_ext/string/access.rb +0 -99
  165. data/lib/active_support/core_ext/string/behavior.rb +0 -7
  166. data/lib/active_support/core_ext/string/conversions.rb +0 -61
  167. data/lib/active_support/core_ext/string/encoding.rb +0 -11
  168. data/lib/active_support/core_ext/string/exclude.rb +0 -6
  169. data/lib/active_support/core_ext/string/filters.rb +0 -49
  170. data/lib/active_support/core_ext/string/inflections.rb +0 -149
  171. data/lib/active_support/core_ext/string/interpolation.rb +0 -2
  172. data/lib/active_support/core_ext/string/multibyte.rb +0 -72
  173. data/lib/active_support/core_ext/string/output_safety.rb +0 -109
  174. data/lib/active_support/core_ext/string/starts_ends_with.rb +0 -4
  175. data/lib/active_support/core_ext/string/xchar.rb +0 -18
  176. data/lib/active_support/core_ext/time/acts_like.rb +0 -8
  177. data/lib/active_support/core_ext/time/calculations.rb +0 -282
  178. data/lib/active_support/core_ext/time/conversions.rb +0 -85
  179. data/lib/active_support/core_ext/time/marshal.rb +0 -56
  180. data/lib/active_support/core_ext/time/publicize_conversion_methods.rb +0 -10
  181. data/lib/active_support/core_ext/time/zones.rb +0 -78
  182. data/lib/active_support/core_ext/uri.rb +0 -22
  183. data/lib/active_support/dependencies.rb +0 -628
  184. data/lib/active_support/dependencies/autoload.rb +0 -50
  185. data/lib/active_support/deprecation.rb +0 -18
  186. data/lib/active_support/deprecation/behaviors.rb +0 -38
  187. data/lib/active_support/deprecation/method_wrappers.rb +0 -29
  188. data/lib/active_support/deprecation/proxy_wrappers.rb +0 -74
  189. data/lib/active_support/deprecation/reporting.rb +0 -56
  190. data/lib/active_support/duration.rb +0 -105
  191. data/lib/active_support/gzip.rb +0 -25
  192. data/lib/active_support/hash_with_indifferent_access.rb +0 -145
  193. data/lib/active_support/i18n.rb +0 -8
  194. data/lib/active_support/inflections.rb +0 -56
  195. data/lib/active_support/inflector.rb +0 -7
  196. data/lib/active_support/inflector/inflections.rb +0 -211
  197. data/lib/active_support/inflector/methods.rb +0 -141
  198. data/lib/active_support/inflector/transliterate.rb +0 -97
  199. data/lib/active_support/json.rb +0 -2
  200. data/lib/active_support/json/backends/jsongem.rb +0 -43
  201. data/lib/active_support/json/backends/yajl.rb +0 -40
  202. data/lib/active_support/json/backends/yaml.rb +0 -90
  203. data/lib/active_support/json/decoding.rb +0 -51
  204. data/lib/active_support/json/encoding.rb +0 -254
  205. data/lib/active_support/json/variable.rb +0 -11
  206. data/lib/active_support/lazy_load_hooks.rb +0 -27
  207. data/lib/active_support/locale/en.yml +0 -36
  208. data/lib/active_support/memoizable.rb +0 -103
  209. data/lib/active_support/message_encryptor.rb +0 -71
  210. data/lib/active_support/message_verifier.rb +0 -62
  211. data/lib/active_support/multibyte.rb +0 -44
  212. data/lib/active_support/multibyte/chars.rb +0 -480
  213. data/lib/active_support/multibyte/exceptions.rb +0 -8
  214. data/lib/active_support/multibyte/unicode.rb +0 -393
  215. data/lib/active_support/multibyte/utils.rb +0 -60
  216. data/lib/active_support/notifications.rb +0 -81
  217. data/lib/active_support/notifications/fanout.rb +0 -93
  218. data/lib/active_support/notifications/instrumenter.rb +0 -56
  219. data/lib/active_support/option_merger.rb +0 -25
  220. data/lib/active_support/ordered_hash.rb +0 -158
  221. data/lib/active_support/ordered_options.rb +0 -27
  222. data/lib/active_support/railtie.rb +0 -100
  223. data/lib/active_support/rescuable.rb +0 -114
  224. data/lib/active_support/ruby/shim.rb +0 -22
  225. data/lib/active_support/secure_random.rb +0 -199
  226. data/lib/active_support/string_inquirer.rb +0 -21
  227. data/lib/active_support/test_case.rb +0 -42
  228. data/lib/active_support/testing/assertions.rb +0 -82
  229. data/lib/active_support/testing/declarative.rb +0 -40
  230. data/lib/active_support/testing/default.rb +0 -9
  231. data/lib/active_support/testing/deprecation.rb +0 -55
  232. data/lib/active_support/testing/isolation.rb +0 -154
  233. data/lib/active_support/testing/pending.rb +0 -48
  234. data/lib/active_support/testing/performance.rb +0 -455
  235. data/lib/active_support/testing/setup_and_teardown.rb +0 -111
  236. data/lib/active_support/time.rb +0 -34
  237. data/lib/active_support/time/autoload.rb +0 -5
  238. data/lib/active_support/time_with_zone.rb +0 -341
  239. data/lib/active_support/values/time_zone.rb +0 -377
  240. data/lib/active_support/values/unicode_tables.dat +0 -0
  241. data/lib/active_support/version.rb +0 -10
  242. data/lib/active_support/whiny_nil.rb +0 -60
  243. data/lib/active_support/xml_mini.rb +0 -158
  244. data/lib/active_support/xml_mini/jdom.rb +0 -168
  245. data/lib/active_support/xml_mini/libxml.rb +0 -80
  246. data/lib/active_support/xml_mini/libxmlsax.rb +0 -85
  247. data/lib/active_support/xml_mini/nokogiri.rb +0 -78
  248. data/lib/active_support/xml_mini/nokogirisax.rb +0 -83
  249. data/lib/active_support/xml_mini/rexml.rb +0 -129
  250. data/lib/csd/extensions/core/file.rb +0 -14
  251. data/lib/csd/global_open_struct.rb +0 -19
  252. data/lib/csd/path.rb +0 -32
  253. data/lib/csd/ui.rb +0 -2
  254. data/lib/csd/ui/cli.rb +0 -8
  255. data/lib/csd/ui/ui.rb +0 -45
  256. data/lib/term/ansicolor.rb +0 -102
  257. data/lib/term/ansicolor/.keep +0 -0
  258. data/lib/term/ansicolor/version.rb +0 -10
@@ -0,0 +1,113 @@
1
+ module CSD
2
+ module Vendor
3
+ # Author
4
+ #
5
+ # Florian Frank <flori@ping.de>
6
+ #
7
+ # License
8
+ #
9
+ # This is free software; you can redistribute it and/or modify
10
+ # it under the terms of the GNU General Public License Version 2
11
+ # as published by the Free Software Foundation: GNU GPL. module Term
12
+ #
13
+ module Term
14
+ # The ANSIColor module can be used for namespacing and mixed into your own classes.
15
+ #
16
+ module ANSIColor
17
+ # :stopdoc:
18
+ ATTRIBUTES = [
19
+ [ :clear , 0 ],
20
+ [ :reset , 0 ], # synonym for :clear
21
+ [ :bold , 1 ],
22
+ [ :dark , 2 ],
23
+ [ :italic , 3 ], # not widely implemented
24
+ [ :underline , 4 ],
25
+ [ :blink , 5 ],
26
+ [ :rapid_blink , 6 ], # not widely implemented
27
+ [ :negative , 7 ], # no reverse because of String#reverse
28
+ [ :concealed , 8 ],
29
+ [ :strikethrough, 9 ], # not widely implemented
30
+ [ :black , 30 ],
31
+ [ :red , 31 ],
32
+ [ :green , 32 ],
33
+ [ :yellow , 33 ],
34
+ [ :blue , 34 ],
35
+ [ :magenta , 35 ],
36
+ [ :cyan , 36 ],
37
+ [ :white , 37 ],
38
+ [ :on_black , 40 ],
39
+ [ :on_red , 41 ],
40
+ [ :on_green , 42 ],
41
+ [ :on_yellow , 43 ],
42
+ [ :on_blue , 44 ],
43
+ [ :on_magenta , 45 ],
44
+ [ :on_cyan , 46 ],
45
+ [ :on_white , 47 ],
46
+ ]
47
+
48
+ ATTRIBUTE_NAMES = ATTRIBUTES.transpose.first
49
+ # :startdoc:
50
+
51
+ # Returns true, if the coloring function of this module
52
+ # is switched on, false otherwise.
53
+ def self.coloring?
54
+ @coloring
55
+ end
56
+
57
+ # Turns the coloring on or off globally, so you can easily do
58
+ # this for example:
59
+ # Term::ANSIColor::coloring = STDOUT.isatty
60
+ def self.coloring=(val)
61
+ @coloring = val
62
+ end
63
+ self.coloring = true
64
+
65
+ ATTRIBUTES.each do |c, v|
66
+ eval %Q{
67
+ def #{c}(string = nil)
68
+ result = ''
69
+ result << "\e[#{v}m" if Term::ANSIColor.coloring?
70
+ if block_given?
71
+ result << yield
72
+ elsif string
73
+ result << string
74
+ elsif respond_to?(:to_str)
75
+ result << to_str
76
+ else
77
+ return result #only switch on
78
+ end
79
+ result << "\e[0m" if Term::ANSIColor.coloring?
80
+ result
81
+ end
82
+ }
83
+ end
84
+
85
+ # Regular expression that is used to scan for ANSI-sequences while
86
+ # uncoloring strings.
87
+ COLORED_REGEXP = /\e\[(?:[34][0-7]|[0-9])?m/
88
+
89
+ # Returns an uncolored version of the string, that is all
90
+ # ANSI-sequences are stripped from the string.
91
+ def uncolored(string = nil) # :yields:
92
+ if block_given?
93
+ yield.gsub(COLORED_REGEXP, '')
94
+ elsif string
95
+ string.gsub(COLORED_REGEXP, '')
96
+ elsif respond_to?(:to_str)
97
+ to_str.gsub(COLORED_REGEXP, '')
98
+ else
99
+ ''
100
+ end
101
+ end
102
+
103
+ module_function
104
+
105
+ # Returns an array of all Term::ANSIColor attributes as symbols.
106
+ def attributes
107
+ ATTRIBUTE_NAMES
108
+ end
109
+ extend self
110
+ end
111
+ end
112
+ end
113
+ end
@@ -1,10 +1,19 @@
1
- # encoding: utf-8
2
- require File.join(File.dirname(__FILE__), 'path')
1
+ # -*- encoding: UTF-8 -*-
2
+ require 'csd/container'
3
3
 
4
4
  module CSD
5
5
 
6
- # This global variable holds the version number of this gem by reading the VERSION file.
6
+ # This global variable holds the version number of this gem by trying to read the VERSION file.
7
+ # If the VERSION file cannot be read, it will be defined to 0.0.0 as a fallback.
8
+ # Ideally it would be hardcoded in this file, because it cannot be guaranteed that the VERSION
9
+ # file exists (see http://weblog.rubyonrails.org/2009/9/1/gem-packaging-best-practices). But we
10
+ # use it anyway, because Jeweler (a gem to create gems more easily) needs it and the risk is not that big.
7
11
  #
8
- Version = VERSION = File.read(File.join(Path.gem, 'VERSION')) unless defined?(Version)
12
+ Version = VERSION = begin
13
+ File.read(File.join(Path.gem, 'VERSION'))
14
+ rescue Errno::ENOENT => e
15
+ UI.debug "The VERSION file could not be found. Setting `Version´ to 0.0.0"
16
+ '0.0.0'
17
+ end
9
18
 
10
19
  end
@@ -0,0 +1,45 @@
1
+ require 'helper'
2
+ require 'csd/application/minisip'
3
+
4
+ class TestDir < Test::Unit::TestCase
5
+
6
+ include CSD
7
+
8
+ context "The Minisip application" do
9
+
10
+ setup do
11
+ Options.clear
12
+ @app = Application::Minisip::Base.new
13
+ end
14
+
15
+ teardown do
16
+ end
17
+
18
+ should "respond to valid actions" do
19
+ assert @app.respond_to?(:compile)
20
+ end
21
+
22
+ should "know how to identify a subset of libraries with --only" do
23
+ Options.only = nil
24
+ assert_equal Application::Minisip::Base::LIBRARIES, @app.libraries
25
+ Options.only = %w{ libmcrypto }
26
+ assert_equal %w{ libmcrypto }, @app.libraries
27
+ Options.only = %w{ does-not-exist }
28
+ assert @app.libraries == []
29
+ Options.only = Application::Minisip::Base::LIBRARIES
30
+ assert_equal Application::Minisip::Base::LIBRARIES, @app.libraries
31
+ Options.only = %w{ minisip libmutil }
32
+ assert_equal %w{ libmutil minisip }, @app.libraries
33
+ end
34
+
35
+ context "when downloading source code" do
36
+
37
+ should "dummy" do
38
+ assert true
39
+ end
40
+
41
+ end # context "when downloading source code"
42
+
43
+ end # context "The Minisip application"
44
+
45
+ end
@@ -64,23 +64,17 @@ class TestApplications < Test::Unit::TestCase
64
64
  end # context "the application module"
65
65
 
66
66
  end # context "and considering a valid application, find"
67
+
68
+ context "find" do
67
69
 
68
- end # context "When analyzing arguments"
69
-
70
- #context "all" do
71
-
72
- #should "return all apropriete Application objects as an array" do
73
- # dirs = Dir.directories(Path.applications)
74
- # apps = Applications.all
75
- # assert_equal dirs.size, apps.size
76
- # Applications.all do |app|
77
- # assert_includes directories, 'app'
78
- # end
79
- #
80
- #end
70
+ should "do not evaluate to +true+ for an invalid application search term" do
71
+ assert !Applications.find(nil)
72
+ assert !Applications.find('')
73
+ assert !Applications.find('i-for-sure-do-not-exist')
74
+ end
81
75
 
82
- #end # context "directories"
83
-
84
- #end # context "As a Dir function"
76
+ end
77
+
78
+ end # context "When analyzing arguments"
85
79
 
86
80
  end
@@ -5,13 +5,35 @@ class TestCommands < Test::Unit::TestCase
5
5
 
6
6
  include CSD
7
7
 
8
+ DUMMY_TEXT = %q{PART I
9
+
10
+ NIGHT
11
+
12
+ A high vaulted narrow Gothic chamber.
13
+ FAUST, restless, seated at his desk.
14
+
15
+ FAUST
16
+
17
+ I HAVE, alas! Philosophy,
18
+ Medicine, Jurisprudence too,
19
+ And to my cost Theology,
20
+ With ardent labour, studied through.
21
+ And here I stand, with all my lore,
22
+ Poor fool, no wiser than before.
23
+ Magister, doctor styled, indeed,
24
+ Already these ten years I lead,
25
+ Up, down, across, and to and fro,
26
+ My pupils by the nose,--and learn,
27
+ That we in truth can nothing know!}
28
+
29
+ DUMMY_GIT = 'http://github.com/csd/dummy.git'
30
+
8
31
  context "As a directory function" do
9
32
 
10
33
  setup do
11
34
  Options.silent = true
12
35
  Options.reveal = false
13
- Options.dry = false
14
- @tmp = Dir.mktmpdir
36
+ @tmp = Pathname.new Dir.mktmpdir
15
37
  @dir = Pathname.new File.join(@tmp, 'folder')
16
38
  @subdir = Pathname.new File.join(@dir, 'subfolder')
17
39
  end
@@ -24,7 +46,7 @@ class TestCommands < Test::Unit::TestCase
24
46
 
25
47
  should "return the proper CommandResult if the directory already existed" do
26
48
  ensure_mkdir(@dir)
27
- assert_kind_of(Commands::CommandResult, result = Cmd.mkdir(@dir))
49
+ assert_kind_of(CommandResult, result = Cmd.mkdir(@dir))
28
50
  assert result.success?
29
51
  assert result.already_existed?
30
52
  assert result.writable?
@@ -32,33 +54,43 @@ class TestCommands < Test::Unit::TestCase
32
54
 
33
55
  should "return a successful CommandResult but not actually do anything in reveal mode" do
34
56
  Options.reveal = true
35
- assert_kind_of(Commands::CommandResult, result = Cmd.mkdir(@dir))
57
+ assert_kind_of(CommandResult, result = Cmd.mkdir(@dir))
36
58
  assert !@dir.directory?
37
59
  assert result.success?
38
60
  assert !result.already_existed?
39
61
  assert result.writable?
40
62
  end
41
63
 
42
- should "return a failing CommandResult but not actually do anything in dry mode" do
43
- Options.dry = true
44
- assert_kind_of(Commands::CommandResult, result = Cmd.mkdir(@dir))
45
- assert !@dir.directory?
64
+ should "create the directory if it doesn't exist yet" do
65
+ assert_kind_of(CommandResult, result = Cmd.mkdir(@dir))
66
+ assert result.success?
67
+ assert !result.already_existed?
68
+ assert result.writable?
69
+ end
70
+
71
+ should "notify if there is no permission to create a new directory without die_on_failure" do
72
+ ensure_mkdir(@dir)
73
+ @dir.chmod(0000)
74
+ assert_kind_of(CommandResult, result = Cmd.mkdir(File.join(@dir, 'subdir_in_readonly_dir'), :die_on_failure => false))
46
75
  assert !result.success?
47
76
  assert !result.already_existed?
48
77
  assert !result.writable?
78
+ @dir.chmod(0777) # Cleanup
49
79
  end
50
80
 
51
- should "create the directory if it doesn't exist yet" do
52
- assert_kind_of(Commands::CommandResult, result = Cmd.mkdir(@dir))
53
- assert result.success?
54
- assert !result.already_existed?
55
- assert result.writable?
81
+ should "notify if there is no permission to create a new directory with die_on_failure" do
82
+ ensure_mkdir(@dir)
83
+ @dir.chmod(0000)
84
+ assert_raise(Error::UI::Die) {
85
+ Cmd.mkdir(File.join(@dir, 'subdir_in_readonly_dir'), :die_on_failure => true)
86
+ }
87
+ @dir.chmod(0777) # Cleanup
56
88
  end
57
89
 
58
- should "notify if there is no permission to create the directory" do
90
+ should "notify if there is no permission to create an existing directory" do
59
91
  ensure_mkdir(@dir)
60
92
  @dir.chmod(0000)
61
- assert_kind_of(Commands::CommandResult, result = Cmd.mkdir(@dir))
93
+ assert_kind_of(CommandResult, result = Cmd.mkdir(@dir))
62
94
  assert result.success?
63
95
  assert result.already_existed?
64
96
  assert !result.writable?
@@ -70,34 +102,46 @@ class TestCommands < Test::Unit::TestCase
70
102
  context "cd" do
71
103
 
72
104
  should "return a CommanResult with success? if the directory was changed successfully" do
73
- assert_kind_of(Commands::CommandResult, result = Cmd.cd('/'))
105
+ assert_kind_of(CommandResult, result = Cmd.cd('/'))
74
106
  assert result.success?
75
- assert_kind_of(Commands::CommandResult, result = Cmd.cd(@tmp))
107
+ assert_kind_of(CommandResult, result = Cmd.cd(@tmp))
76
108
  assert result.success?
77
109
  end
78
110
 
79
- should "realize when the target is not a directory, but a file or something" do
111
+ should "realize when the target is not a directory, but a file or something without die_on_failure" do
80
112
  testfile_path = File.join(@tmp, 'testfile')
81
113
  File.new(testfile_path, 'w')
82
- assert_kind_of(Commands::CommandResult, result = Cmd.cd(testfile_path))
114
+ assert_kind_of(CommandResult, result = Cmd.cd(testfile_path, :die_on_failure => false))
83
115
  assert !result.success?
84
116
  end
85
117
 
86
- should "realize when the target doesn't exist" do
87
- assert_kind_of(Commands::CommandResult, result = Cmd.cd('/i/for/sure/dont/exist'))
118
+ should "realize when the target is not a directory, but a file or something with die_on_failure" do
119
+ testfile_path = File.join(@tmp, 'testfile')
120
+ assert_raise(Error::UI::Die) {
121
+ Cmd.cd(testfile_path, :die_on_failure => true)
122
+ }
123
+ end
124
+
125
+ should "realize when the target doesn't exist without die_on_failure" do
126
+ assert_kind_of(CommandResult, result = Cmd.cd('/i/for/sure/dont/exist', :die_on_failure => false))
88
127
  assert !result.success?
89
128
  end
129
+
130
+ should "realize when the target doesn't exist with die_on_failure" do
131
+ assert_raise(Error::UI::Die) {
132
+ Cmd.cd('/i/for/sure/dont/exist', :die_on_failure => true)
133
+ }
134
+ end
90
135
 
91
136
  should "fake changing the directory in reveal mode" do
92
137
  Options.reveal = true
93
138
  current_pwd = Dir.pwd
94
- assert_kind_of(Commands::CommandResult, result = Cmd.cd('/i/for/sure/dont/exist'))
139
+ assert_kind_of(CommandResult, result = Cmd.cd('/i/for/sure/dont/exist'))
95
140
  assert result.success?
96
141
  assert_equal current_pwd, Dir.pwd
97
142
  end
98
143
 
99
144
  should "actually change the directory in dry mode" do
100
- Options.dry = true
101
145
  assert_not_equal '/', Dir.pwd
102
146
  assert result = Cmd.cd('/')
103
147
  assert result.success?
@@ -106,6 +150,199 @@ class TestCommands < Test::Unit::TestCase
106
150
 
107
151
  end # context "cd"
108
152
 
153
+ context "when working with files" do
154
+
155
+ setup do
156
+ ensure_mkdir(@dir)
157
+ ensure_mkdir(@subdir)
158
+ @file1 = Pathname.new File.join(@tmp, 'file1')
159
+ @file2 = Pathname.new File.join(@tmp, 'file2')
160
+ @file3 = Pathname.new File.join(@dir, 'file3')
161
+ [@file1, @file2, @file3].each { |file| assert FileUtils.touch(file) }
162
+ end
163
+
164
+ teardown do
165
+ assert FileUtils.rm_r(@tmp)
166
+ @tmp = Pathname.new Dir.mktmpdir
167
+ end
168
+
169
+ context "copy" do
170
+
171
+ should "copy one file into another folder" do
172
+ assert_kind_of(CommandResult, result = Cmd.copy(@file1, @subdir))
173
+ assert result.success?
174
+ assert File.exist?(File.join(@subdir, File.basename(@file1)))
175
+ end
176
+
177
+ should "copy several files into another folder" do
178
+ assert_kind_of(CommandResult, result = Cmd.copy([@file1, @file2, @file3], @subdir))
179
+ assert result.success?
180
+ [@file1, @file2, @file3].each do |file|
181
+ assert File.exist?(File.join(@subdir, File.basename(file)))
182
+ end
183
+ end
184
+
185
+ should "know when a source file doesn't exist without die_on_failure" do
186
+ assert_kind_of(CommandResult, result = Cmd.copy('/no/source', @subdir, :die_on_failure => false))
187
+ assert !result.success?
188
+ end
189
+
190
+ should "know when a source file doesn't exist with die_on_failure" do
191
+ assert_raise(Error::UI::Die) {
192
+ Cmd.copy('/no/source', @subdir, :die_on_failure => true)
193
+ }
194
+ end
195
+
196
+ should "know when a destination directory doesn't exist without die_on_failure" do
197
+ assert_kind_of(CommandResult, result = Cmd.copy(@file1, '/no/destination', :die_on_failure => false))
198
+ assert !result.success?
199
+ end
200
+
201
+ should "know when a destination directory doesn't exist with die_on_failure" do
202
+ assert_raise(Error::UI::Die) {
203
+ Cmd.copy(@file1, '/no/destination', :die_on_failure => true)
204
+ }
205
+ end
206
+
207
+ end # context "copy"
208
+
209
+ context "move" do
210
+
211
+ should "move one file into another folder" do
212
+ assert_kind_of(CommandResult, result = Cmd.move(@file1, @subdir))
213
+ assert result.success?
214
+ assert !File.exist?(@file1)
215
+ assert File.exist?(File.join(@subdir, File.basename(@file1)))
216
+ end
217
+
218
+ should "move several files into another folder" do
219
+ assert_kind_of(CommandResult, result = Cmd.move([@file1, @file2, @file3], @subdir))
220
+ assert result.success?
221
+ [@file1, @file2, @file3].each do |file|
222
+ assert !File.exist?(file)
223
+ assert File.exist?(File.join(@subdir, File.basename(file)))
224
+ end
225
+ end
226
+
227
+ should "know when a source file doesn't exist without die_on_failure" do
228
+ assert_kind_of(CommandResult, result = Cmd.move('/no/source', @subdir, :die_on_failure => false))
229
+ assert !result.success?
230
+ end
231
+
232
+ should "know when a source file doesn't exist with die_on_failure" do
233
+ assert_raise(Error::UI::Die) {
234
+ Cmd.move('/no/source', @subdir, :die_on_failure => true)
235
+ }
236
+ end
237
+
238
+ should "not mind when a destination doesn't exist even with die_on_failure" do
239
+ assert_kind_of(CommandResult, result = Cmd.move(@file1, File.join(@subdir, 'newfile'), :die_on_failure => true))
240
+ assert result.success?
241
+ assert !File.exist?(@file1)
242
+ assert File.exist?(File.join(@subdir, 'newfile'))
243
+ end
244
+
245
+ end # context "move"
246
+
247
+ context "replace" do
248
+
249
+ setup do
250
+ File.open(@file1, 'w') { |f| assert f.write(DUMMY_TEXT) }
251
+ end
252
+
253
+ should "be unsuccessful if the file doesn't exist without die_on_failure" do
254
+ assert_kind_of(CommandResult, result = Cmd.replace('/i/am/not/there', 'FAUST', 'GOETHE', :die_on_failure => false))
255
+ assert !result.success?
256
+ end
257
+
258
+ should "be unsuccessful if the file doesn't exist with die_on_failure" do
259
+ assert_raise(Error::UI::Die) {
260
+ Cmd.replace('/i/am/not/there', 'FAUST', 'GOETHE')
261
+ }
262
+ end
263
+
264
+ should "do a simple replacement in a file" do
265
+ assert_kind_of(CommandResult, result = Cmd.replace(@file1, 'FAUST', 'GOETHE'))
266
+ assert result.success?
267
+ assert_equal DUMMY_TEXT.gsub('FAUST', 'GOETHE'), File.read(@file1)
268
+ end
269
+
270
+ should "do nothing if the file doesnt have anything to replace" do
271
+ assert_kind_of(CommandResult, result = Cmd.replace(@file1, 'ASDF', 'FDSA'))
272
+ assert_equal DUMMY_TEXT, File.read(@file1)
273
+ assert result.success?
274
+ end
275
+
276
+ should "replace multiple items in one file" do
277
+ Cmd.replace @file1 do |r|
278
+ assert_kind_of(CommandResult, r.replace('FAUST', 'GOETHE'))
279
+ assert_equal DUMMY_TEXT.gsub('FAUST', 'GOETHE'), File.read(@file1)
280
+ assert_kind_of(CommandResult, r.replace("Philosophy,\n", 'Philosophy, '))
281
+ assert File.read(@file1).scan('Philosophy, Medicine')
282
+ end
283
+ end
284
+
285
+ end # context "replace"
286
+
287
+ end # context "when working with files"
288
+
109
289
  end # context "As a directory function"
290
+
291
+ context "run" do
292
+
293
+ setup do
294
+ Options.silent = true
295
+ Options.reveal = false
296
+ end
297
+
298
+ should "return a successfull CommandResult if the command was OK" do
299
+ assert_kind_of(CommandResult, result = Cmd.run('cd'))
300
+ assert result.success?
301
+ end
302
+
303
+ should "return a non-successfull CommandResult if the command was bad without die_on_failure" do
304
+ assert_kind_of(CommandResult, result = Cmd.run('this-command-does-not-exist', :die_on_failure => false))
305
+ assert !result.success?
306
+ end
307
+
308
+ end
309
+
310
+ context "git_clone" do
311
+
312
+ setup do
313
+ # For some gross reasons the Jeweler::Tasks.new instance modifies the ENV, trying to tell GIT some things
314
+ # that disturb our testing here. We need to undo this here, and it is not a nice solution, but it works.
315
+ ENV.keys.select { |k| k =~ /^GIT_/ }.each { |k| ENV.delete(k) }
316
+ Options.silent = true
317
+ Options.reveal = false
318
+ @tmp = Pathname.new Dir.mktmpdir
319
+ @dir = Pathname.new(File.join(@tmp, 'dummy'))
320
+ Dir.chdir @tmp # Since we're removing the directory in the teardown, we should better not be in it
321
+ end
322
+
323
+ teardown do
324
+ assert FileUtils.rm_r(@tmp)
325
+ end
326
+
327
+ should "not successfully download a non-existent git repository without die_on_failure" do
328
+ assert_kind_of(CommandResult, result = Cmd.git_clone('an invalid git repository', 'invalid_git_repository.git', @dir, :die_on_failure => false))
329
+ assert !result.success?
330
+ end
331
+
332
+ should "download a simple git repository" do
333
+ assert_kind_of(CommandResult, result = Cmd.git_clone('a sample git repository', DUMMY_GIT, @dir))
334
+ assert result.success?
335
+ assert @dir.directory?
336
+ assert File.exist?(File.join(@dir, 'dummy.txt'))
337
+ end
338
+
339
+ should "do nothing at the destination in reveal mode" do
340
+ Options.reveal = true
341
+ assert_kind_of(CommandResult, result = Cmd.git_clone('a sample git repository', DUMMY_GIT, @dir))
342
+ assert result.success?
343
+ assert !@dir.directory?
344
+ end
345
+
346
+ end
110
347
 
111
348
  end