rb8-trepanning 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. data/.gitignore +3 -0
  2. data/CHANGES +34 -0
  3. data/ChangeLog +875 -0
  4. data/README.textile +59 -0
  5. data/Rakefile +215 -0
  6. data/app/.gitignore +1 -0
  7. data/app/cmd_parse.kpeg +241 -0
  8. data/app/cmd_parse.rb +212 -0
  9. data/app/cmd_parser.rb +1948 -0
  10. data/app/complete.rb +79 -0
  11. data/app/default.rb +90 -0
  12. data/app/display.rb +148 -0
  13. data/app/eventbuffer.rb +147 -0
  14. data/app/frame.rb +166 -0
  15. data/app/irb.rb +114 -0
  16. data/app/options.rb +200 -0
  17. data/app/run.rb +74 -0
  18. data/app/util.rb +65 -0
  19. data/bin/.gitignore +1 -0
  20. data/bin/trepan8 +115 -0
  21. data/data/.gitignore +1 -0
  22. data/data/irbrc +41 -0
  23. data/interface/.gitignore +1 -0
  24. data/interface/base_intf.rb +109 -0
  25. data/interface/client.rb +82 -0
  26. data/interface/comcodes.rb +20 -0
  27. data/interface/script.rb +110 -0
  28. data/interface/server.rb +147 -0
  29. data/interface/user.rb +165 -0
  30. data/io/base_io.rb +148 -0
  31. data/io/input.rb +158 -0
  32. data/io/null_output.rb +46 -0
  33. data/io/string_array.rb +156 -0
  34. data/io/tcpclient.rb +129 -0
  35. data/io/tcpfns.rb +33 -0
  36. data/io/tcpserver.rb +141 -0
  37. data/lib/debugger.rb +8 -0
  38. data/lib/trepanning.rb +283 -0
  39. data/processor/.gitignore +1 -0
  40. data/processor/command-ruby-debug/breakpoints.rb +155 -0
  41. data/processor/command-ruby-debug/catchpoint.rb +55 -0
  42. data/processor/command-ruby-debug/condition.rb +49 -0
  43. data/processor/command-ruby-debug/control.rb +31 -0
  44. data/processor/command-ruby-debug/display.rb +120 -0
  45. data/processor/command-ruby-debug/enable.rb +202 -0
  46. data/processor/command-ruby-debug/frame.rb +199 -0
  47. data/processor/command-ruby-debug/help.rb +63 -0
  48. data/processor/command-ruby-debug/info.rb +359 -0
  49. data/processor/command-ruby-debug/method.rb +84 -0
  50. data/processor/command-ruby-debug/reload.rb +40 -0
  51. data/processor/command-ruby-debug/save.rb +90 -0
  52. data/processor/command-ruby-debug/set.rb +237 -0
  53. data/processor/command-ruby-debug/show.rb +251 -0
  54. data/processor/command-ruby-debug/source.rb +36 -0
  55. data/processor/command-ruby-debug/threads.rb +189 -0
  56. data/processor/command-ruby-debug/trace.rb +57 -0
  57. data/processor/command-ruby-debug/variables.rb +199 -0
  58. data/processor/command.rb +270 -0
  59. data/processor/command/.gitignore +1 -0
  60. data/processor/command/alias.rb +54 -0
  61. data/processor/command/backtrace.rb +123 -0
  62. data/processor/command/base/cmd.rb +177 -0
  63. data/processor/command/base/subcmd.rb +230 -0
  64. data/processor/command/base/submgr.rb +188 -0
  65. data/processor/command/base/subsubcmd.rb +128 -0
  66. data/processor/command/base/subsubmgr.rb +199 -0
  67. data/processor/command/break.rb +114 -0
  68. data/processor/command/catch.rb +71 -0
  69. data/processor/command/complete.rb +39 -0
  70. data/processor/command/continue.rb +57 -0
  71. data/processor/command/directory.rb +50 -0
  72. data/processor/command/disable.rb +85 -0
  73. data/processor/command/display.rb +78 -0
  74. data/processor/command/down.rb +54 -0
  75. data/processor/command/edit.rb +79 -0
  76. data/processor/command/enable.rb +48 -0
  77. data/processor/command/eval.rb +90 -0
  78. data/processor/command/exit.rb +66 -0
  79. data/processor/command/finish.rb +59 -0
  80. data/processor/command/frame.rb +97 -0
  81. data/processor/command/help.rb +230 -0
  82. data/processor/command/help/.gitignore +1 -0
  83. data/processor/command/help/README +10 -0
  84. data/processor/command/help/command.txt +58 -0
  85. data/processor/command/help/examples.txt +16 -0
  86. data/processor/command/help/filename.txt +40 -0
  87. data/processor/command/help/location.txt +37 -0
  88. data/processor/command/help/suffixes.txt +17 -0
  89. data/processor/command/info.rb +28 -0
  90. data/processor/command/info_subcmd/.gitignore +1 -0
  91. data/processor/command/info_subcmd/args.rb +39 -0
  92. data/processor/command/info_subcmd/breakpoints.rb +80 -0
  93. data/processor/command/info_subcmd/catch.rb +36 -0
  94. data/processor/command/info_subcmd/files.rb +39 -0
  95. data/processor/command/info_subcmd/globals.rb +64 -0
  96. data/processor/command/info_subcmd/line.rb +30 -0
  97. data/processor/command/info_subcmd/locals.rb +69 -0
  98. data/processor/command/info_subcmd/macro.rb +62 -0
  99. data/processor/command/info_subcmd/program.rb +51 -0
  100. data/processor/command/info_subcmd/ruby.rb +57 -0
  101. data/processor/command/info_subcmd/source.rb +74 -0
  102. data/processor/command/info_subcmd/stack.rb +25 -0
  103. data/processor/command/info_subcmd/threads.rb +75 -0
  104. data/processor/command/kill.rb +78 -0
  105. data/processor/command/list.rb +117 -0
  106. data/processor/command/macro.rb +68 -0
  107. data/processor/command/next.rb +79 -0
  108. data/processor/command/parsetree.rb +56 -0
  109. data/processor/command/pp.rb +40 -0
  110. data/processor/command/pr.rb +37 -0
  111. data/processor/command/ps.rb +40 -0
  112. data/processor/command/restart.rb +86 -0
  113. data/processor/command/save.rb +58 -0
  114. data/processor/command/set.rb +47 -0
  115. data/processor/command/set_subcmd/.gitignore +1 -0
  116. data/processor/command/set_subcmd/abbrev.rb +25 -0
  117. data/processor/command/set_subcmd/auto.rb +27 -0
  118. data/processor/command/set_subcmd/auto_subcmd/.gitignore +1 -0
  119. data/processor/command/set_subcmd/auto_subcmd/eval.rb +53 -0
  120. data/processor/command/set_subcmd/auto_subcmd/irb.rb +33 -0
  121. data/processor/command/set_subcmd/auto_subcmd/list.rb +33 -0
  122. data/processor/command/set_subcmd/basename.rb +25 -0
  123. data/processor/command/set_subcmd/callstyle.rb +46 -0
  124. data/processor/command/set_subcmd/confirm.rb +24 -0
  125. data/processor/command/set_subcmd/debug.rb +47 -0
  126. data/processor/command/set_subcmd/different.rb +61 -0
  127. data/processor/command/set_subcmd/highlight.rb +43 -0
  128. data/processor/command/set_subcmd/max.rb +26 -0
  129. data/processor/command/set_subcmd/max_subcmd/list.rb +49 -0
  130. data/processor/command/set_subcmd/max_subcmd/stack.rb +50 -0
  131. data/processor/command/set_subcmd/max_subcmd/string.rb +76 -0
  132. data/processor/command/set_subcmd/max_subcmd/width.rb +49 -0
  133. data/processor/command/set_subcmd/reload.rb +42 -0
  134. data/processor/command/set_subcmd/timer.rb +58 -0
  135. data/processor/command/set_subcmd/trace.rb +37 -0
  136. data/processor/command/set_subcmd/trace_subcmd/buffer.rb +42 -0
  137. data/processor/command/set_subcmd/trace_subcmd/print.rb +41 -0
  138. data/processor/command/shell.rb +139 -0
  139. data/processor/command/show.rb +39 -0
  140. data/processor/command/show_subcmd/.gitignore +1 -0
  141. data/processor/command/show_subcmd/abbrev.rb +20 -0
  142. data/processor/command/show_subcmd/alias.rb +46 -0
  143. data/processor/command/show_subcmd/args.rb +34 -0
  144. data/processor/command/show_subcmd/auto.rb +28 -0
  145. data/processor/command/show_subcmd/auto_subcmd/eval.rb +27 -0
  146. data/processor/command/show_subcmd/auto_subcmd/irb.rb +23 -0
  147. data/processor/command/show_subcmd/auto_subcmd/list.rb +22 -0
  148. data/processor/command/show_subcmd/basename.rb +20 -0
  149. data/processor/command/show_subcmd/callstyle.rb +22 -0
  150. data/processor/command/show_subcmd/confirm.rb +18 -0
  151. data/processor/command/show_subcmd/debug.rb +26 -0
  152. data/processor/command/show_subcmd/debug_subcmd/dbgr.rb +21 -0
  153. data/processor/command/show_subcmd/debug_subcmd/skip.rb +22 -0
  154. data/processor/command/show_subcmd/debug_subcmd/step.rb +22 -0
  155. data/processor/command/show_subcmd/different.rb +26 -0
  156. data/processor/command/show_subcmd/directories.rb +22 -0
  157. data/processor/command/show_subcmd/highlight.rb +24 -0
  158. data/processor/command/show_subcmd/max.rb +27 -0
  159. data/processor/command/show_subcmd/max_subcmd/list.rb +38 -0
  160. data/processor/command/show_subcmd/max_subcmd/stack.rb +36 -0
  161. data/processor/command/show_subcmd/max_subcmd/string.rb +42 -0
  162. data/processor/command/show_subcmd/max_subcmd/width.rb +37 -0
  163. data/processor/command/show_subcmd/reload.rb +18 -0
  164. data/processor/command/show_subcmd/timer.rb +18 -0
  165. data/processor/command/show_subcmd/trace.rb +29 -0
  166. data/processor/command/show_subcmd/trace_subcmd/buffer.rb +65 -0
  167. data/processor/command/show_subcmd/trace_subcmd/print.rb +23 -0
  168. data/processor/command/show_subcmd/version.rb +23 -0
  169. data/processor/command/source.rb +134 -0
  170. data/processor/command/step.rb +81 -0
  171. data/processor/command/tbreak.rb +19 -0
  172. data/processor/command/unalias.rb +44 -0
  173. data/processor/command/undisplay.rb +59 -0
  174. data/processor/command/up.rb +72 -0
  175. data/processor/default.rb +56 -0
  176. data/processor/display.rb +17 -0
  177. data/processor/eval.rb +113 -0
  178. data/processor/eventbuf.rb +105 -0
  179. data/processor/frame.rb +172 -0
  180. data/processor/help.rb +92 -0
  181. data/processor/helper.rb +76 -0
  182. data/processor/hook.rb +134 -0
  183. data/processor/load_cmds.rb +258 -0
  184. data/processor/location.rb +174 -0
  185. data/processor/main.rb +455 -0
  186. data/processor/mock.rb +136 -0
  187. data/processor/msg.rb +61 -0
  188. data/processor/processor.rb +674 -0
  189. data/processor/running.rb +168 -0
  190. data/processor/stepping.rb +18 -0
  191. data/processor/subcmd.rb +161 -0
  192. data/processor/validate.rb +355 -0
  193. data/processor/virtual.rb +34 -0
  194. data/test/data/.gitignore +1 -0
  195. data/test/data/break_bad.cmd +19 -0
  196. data/test/data/break_bad.right +29 -0
  197. data/test/data/break_loop_bug.cmd +5 -0
  198. data/test/data/break_loop_bug.right +15 -0
  199. data/test/data/dollar-0.right +2 -0
  200. data/test/data/dollar-0a.right +2 -0
  201. data/test/data/dollar-0b.right +2 -0
  202. data/test/data/edit.cmd +14 -0
  203. data/test/data/edit.right +24 -0
  204. data/test/data/file-with-space.cmd +6 -0
  205. data/test/data/file-with-space.right +4 -0
  206. data/test/data/printvar.cmd +17 -0
  207. data/test/data/printvar.right +31 -0
  208. data/test/data/raise.cmd +11 -0
  209. data/test/data/raise.right +19 -0
  210. data/test/data/source.cmd +5 -0
  211. data/test/data/source.right +18 -0
  212. data/test/data/stepping-1.9.right +50 -0
  213. data/test/data/stepping.cmd +21 -0
  214. data/test/data/stepping.right +48 -0
  215. data/test/data/trepan8-save.1 +6 -0
  216. data/test/example/bp_loop_issue.rb +3 -0
  217. data/test/example/break-bug.rb +7 -0
  218. data/test/example/brkpt-class-bug.rb +8 -0
  219. data/test/example/classes.rb +11 -0
  220. data/test/example/dollar-0.rb +5 -0
  221. data/test/example/except-bug1.rb +4 -0
  222. data/test/example/except-bug2.rb +7 -0
  223. data/test/example/file with space.rb +1 -0
  224. data/test/example/gcd.rb +18 -0
  225. data/test/example/info-var-bug.rb +47 -0
  226. data/test/example/info-var-bug2.rb +2 -0
  227. data/test/example/null.rb +1 -0
  228. data/test/example/pm-bug.rb +3 -0
  229. data/test/example/pm.rb +11 -0
  230. data/test/example/raise.rb +3 -0
  231. data/test/integration/.gitignore +4 -0
  232. data/test/integration/config.yaml +8 -0
  233. data/test/integration/helper.rb +154 -0
  234. data/test/integration/test-break_bad.rb +26 -0
  235. data/test/integration/test-dollar-0.rb +31 -0
  236. data/test/integration/test-edit.rb +17 -0
  237. data/test/integration/test-file-with-space.rb +26 -0
  238. data/test/integration/test-printvar.rb +17 -0
  239. data/test/integration/test-raise.rb +21 -0
  240. data/test/integration/test-source.rb +16 -0
  241. data/test/integration/test-stepping.rb +24 -0
  242. data/test/unit/.gitignore +1 -0
  243. data/test/unit/cmd-helper.rb +52 -0
  244. data/test/unit/mock-helper.rb +12 -0
  245. data/test/unit/test-app-cmd_parse.rb +97 -0
  246. data/test/unit/test-app-cmd_parser.rb +23 -0
  247. data/test/unit/test-app-complete.rb +39 -0
  248. data/test/unit/test-app-frame.rb +32 -0
  249. data/test/unit/test-app-options.rb +92 -0
  250. data/test/unit/test-app-run.rb +14 -0
  251. data/test/unit/test-app-util.rb +44 -0
  252. data/test/unit/test-base-cmd.rb +45 -0
  253. data/test/unit/test-base-subcmd.rb +57 -0
  254. data/test/unit/test-base-submgr.rb +23 -0
  255. data/test/unit/test-base-subsubcmd.rb +17 -0
  256. data/test/unit/test-cmd-alias.rb +48 -0
  257. data/test/unit/test-cmd-exit.rb +27 -0
  258. data/test/unit/test-cmd-help.rb +104 -0
  259. data/test/unit/test-cmd-kill.rb +46 -0
  260. data/test/unit/test-cmd-source.rb +34 -0
  261. data/test/unit/test-completion.rb +42 -0
  262. data/test/unit/test-intf-user.rb +46 -0
  263. data/test/unit/test-io-input.rb +27 -0
  264. data/test/unit/test-io-tcp.rb +33 -0
  265. data/test/unit/test-io-tcpclient.rb +54 -0
  266. data/test/unit/test-io-tcpfns.rb +17 -0
  267. data/test/unit/test-io-tcpserver.rb +50 -0
  268. data/test/unit/test-proc-eval.rb +36 -0
  269. data/test/unit/test-proc-hook.rb +30 -0
  270. data/test/unit/test-proc-load_cmds.rb +50 -0
  271. data/test/unit/test-proc-location.rb +79 -0
  272. data/test/unit/test-subcmd-help.rb +44 -0
  273. data/trepan8.gemspec +52 -0
  274. metadata +391 -0
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env ruby
2
+ require 'test/unit'
3
+ require 'rubygems'; require 'require_relative'
4
+ require_relative '../../processor/command/base/cmd'
5
+
6
+ class Trepan::Command::Test < Trepan::Command
7
+ NAME = 'test'
8
+ CATEGORY = 'testcategory'
9
+ completion %w(a aa ab ba aac)
10
+ end
11
+
12
+ class TestBaseCommand < Test::Unit::TestCase
13
+
14
+ class MockCmdProcessor
15
+ # The below functions aren't tested/called, but they are the
16
+ # methods required by a command and are placeholders for when we
17
+ # do start testing.
18
+ def initialize(dbgr)
19
+ end
20
+ def confirm(message, default)
21
+ p ['confirm: ', message, default]
22
+ end
23
+ def errmsg(message, opts)
24
+ p ['err:', message, opts]
25
+ end
26
+ def msg(message, opts)
27
+ p [message, opts]
28
+ end
29
+ def msg_nocr(message, opts)
30
+ p ['nocr: ', message, opts]
31
+ end
32
+ def section(message, opts)
33
+ p ['section: ', message, opts]
34
+ end
35
+ end
36
+
37
+ def setup
38
+ @proc = MockCmdProcessor.new(nil)
39
+ @cmd = Trepan::Command::Test.new(@proc)
40
+ end
41
+
42
+ def test_base_completion
43
+ assert_equal(%w(aa aac), @cmd.complete('aa'))
44
+ end
45
+ end
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env ruby
2
+ require 'test/unit'
3
+ require 'rubygems'; require 'require_relative'
4
+ # require_relative '../../app/core'
5
+ require_relative '../../processor/mock'
6
+ require_relative '../../processor/command/exit'
7
+ require_relative '../../processor/command/base/subcmd'
8
+
9
+ $errors = []
10
+ class TestBaseSubCommand < Test::Unit::TestCase
11
+
12
+ def setup
13
+ $errors = []
14
+ $msgs = []
15
+ @dbgr = MockDebugger::MockDebugger.new(:start_frame=>2)
16
+ @cmdproc = Trepan::CmdProcessor.new(@dbgr.intf)
17
+ @cmds = @cmdproc.instance_variable_get('@commands')
18
+ @exit_cmd = @cmds['exit']
19
+ @exit_subcmd = Trepan::Subcommand.new(@exit_cmd)
20
+ def @exit_subcmd.msg(message)
21
+ $msgs << message
22
+ end
23
+ def @exit_subcmd.errmsg(message)
24
+ $errors << message
25
+ end
26
+ end
27
+
28
+ def test_base_subcommand
29
+ assert @exit_subcmd
30
+ assert_raises RuntimeError do
31
+ @exit_subcmd.run
32
+ end
33
+ assert_equal([], $errors)
34
+ @exit_subcmd.run_set_int('', 'testing 1 2 3')
35
+ assert_equal(1, $errors.size)
36
+ assert_equal(Fixnum, @exit_subcmd.settings[:maxwidth].class)
37
+ @cmds.each do |cmd_name, cmd_obj|
38
+ next unless cmd_obj.is_a?(Trepan::SubcommandMgr)
39
+ cmd_obj.subcmds.subcmds.each do |subcmd_name, subcmd_obj|
40
+ %w(HELP NAME PREFIX).each do |attr|
41
+ constants = subcmd_obj.class.constants
42
+ assert_equal(true,
43
+ constants.member?(attr)||constants.member?(attr.to_sym),
44
+ "Constant #{attr} should be defined in \"#{cmd_obj.name} #{subcmd_obj.class::NAME}\"")
45
+ end
46
+ end
47
+
48
+ end
49
+ end
50
+
51
+ def test_show_on_off
52
+ assert_equal('on', @exit_subcmd.show_onoff(true))
53
+ assert_equal('off', @exit_subcmd.show_onoff(false))
54
+ assert_equal('unset', @exit_subcmd.show_onoff(nil))
55
+ assert_equal('??', @exit_subcmd.show_onoff(5))
56
+ end
57
+ end
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems'; require 'require_relative'
3
+ require_relative 'cmd-helper'
4
+ # We will use set as our canonical example
5
+ require_relative '../../processor/command/set'
6
+
7
+ class TestBaseSubcommandMgr < Test::Unit::TestCase
8
+
9
+ include UnitHelper
10
+ def setup
11
+ common_setup
12
+ end
13
+
14
+ def test_basic
15
+ my_cmd = @cmds['show']
16
+ assert_equal(%w(debug different directories), my_cmd.complete('d'),
17
+ "Should be able to complete 'd'")
18
+ assert_equal(%w(show args), my_cmd.subcmds.lookup('ar').prefix,
19
+ "Should be able to complete lookup('ar')")
20
+ assert_equal(nil, my_cmd.subcmds.lookup('a'),
21
+ "Shouldn't find since we have 'show args' and 'show auto'")
22
+ end
23
+ end
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+ require 'test/unit'
3
+ require 'rubygems'; require 'require_relative'
4
+ require_relative '../../processor/command/base/subsubcmd'
5
+
6
+ $errors = []
7
+ class TestBaseSubCommand < Test::Unit::TestCase
8
+
9
+ def test_prefix_set
10
+ Trepanning::SubSubcommand.set_name_prefix('/tmp/show_subcmd/auto_subcmd/food.rb',
11
+ self.class)
12
+ assert_equal('food', NAME, "should have set NAME")
13
+ assert_equal('show auto food', CMD)
14
+ assert_equal(%w(show auto food), PREFIX)
15
+ end
16
+
17
+ end
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems'; require 'require_relative'
3
+ require_relative 'cmd-helper'
4
+ require_relative '../../processor/command/alias'
5
+ require_relative '../../processor/command/unalias'
6
+
7
+ # Test commands alias and unalias
8
+ class TestCommandAliasUnalias < Test::Unit::TestCase
9
+
10
+ include UnitHelper
11
+ def setup
12
+ common_setup
13
+ @name = File.basename(__FILE__, '.rb').split(/-/)[2]
14
+ end
15
+
16
+ def check_alias(should_not_have, cmd_name, *args)
17
+ @cmdproc.instance_variable_set('@msgs', [])
18
+ @cmdproc.instance_variable_set('@errmsgs', [])
19
+ arg_str = args.join(' ')
20
+ my_cmd = @cmds[cmd_name]
21
+ my_cmd.run([cmd_name] + args)
22
+ shoulda = should_not_have ? ['no ', ''] : ['', 'no ']
23
+ msgs = @cmdproc.instance_variable_get('@msgs')
24
+ errmsgs = @cmdproc.instance_variable_get('@errmsgs')
25
+ assert_equal(should_not_have, msgs.empty?,
26
+ "Expecting %s%s for #{arg_str}.\n Got #{msgs}" %
27
+ [shoulda[0], cmd_name])
28
+ assert_equal(!should_not_have, errmsgs.empty?,
29
+ "Expecting %serror for #{arg_str}.\n Got #{errmsgs}" %
30
+ shoulda[1])
31
+ end
32
+
33
+ def alias_defined?(alias_name)
34
+ @cmdproc.aliases.member?(alias_name)
35
+ end
36
+
37
+ def test_alias_command
38
+
39
+ assert_equal(false, @cmdproc.aliases.empty?,
40
+ 'There should be some aliases defined')
41
+
42
+ assert_equal(false, alias_defined?('ki'))
43
+ check_alias(false, 'alias', 'ki', 'kill')
44
+ assert_equal(true, alias_defined?('ki'))
45
+ check_alias(false, 'unalias', 'ki')
46
+ assert_equal(false, alias_defined?('ki'))
47
+ end
48
+ end
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+ require 'test/unit'
3
+ require 'rubygems'; require 'require_relative'
4
+ require_relative './mock-helper'
5
+ require_relative '../../processor/command/exit'
6
+
7
+ class TestCommandExit < Test::Unit::TestCase
8
+ include MockUnitHelper
9
+ def setup
10
+ @name = File.basename(__FILE__, '.rb').split(/-/)[2]
11
+ common_setup(@name)
12
+ end
13
+
14
+ def test_basic
15
+ pid = fork { @cmd.run([@name, '10']) }
16
+ Process.wait
17
+ assert_equal(10, $?.exitstatus)
18
+ pid = fork { @cmd.run([@name]) }
19
+ Process.wait
20
+ assert_equal(0, $?.exitstatus)
21
+ # FIXME: should test that finalization routines get run;
22
+ # should test 'confirm' gets run; and should test that
23
+ # 'unconditional' is handled correctly.
24
+ end
25
+
26
+
27
+ end
@@ -0,0 +1,104 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems'; require 'require_relative'
3
+ require_relative 'cmd-helper'
4
+ require_relative '../../processor/command/help'
5
+
6
+ class TestCommandHelp < Test::Unit::TestCase
7
+
8
+ include UnitHelper
9
+ def setup
10
+ common_setup
11
+ @name = File.basename(__FILE__, '.rb').split(/-/)[2]
12
+ @my_cmd = @cmds[@name]
13
+ end
14
+
15
+ def check_help(should_not_have, *args)
16
+ @cmdproc.instance_variable_set('@msgs', [])
17
+ @cmdproc.instance_variable_set('@errmsgs', [])
18
+ arg_str = args.join(' ')
19
+ @my_cmd.run([@name] + args)
20
+ shoulda = should_not_have ? ['no ', ''] : ['', 'no ']
21
+ msgs = @cmdproc.instance_variable_get('@msgs')
22
+ errmsgs = @cmdproc.instance_variable_get('@errmsgs')
23
+ assert_equal(should_not_have, msgs.empty?,
24
+ "Expecting %shelp for %s.\n Got %s" %
25
+ [shoulda[0], arg_str, msgs])
26
+ assert_equal(!should_not_have, errmsgs.empty?,
27
+ "Expecting %serror for %s.\n Got %s" %
28
+ [shoulda[1], arg_str, msgs])
29
+ end
30
+
31
+ def test_help_command
32
+
33
+ # Test we can run 'help *cmd* for each command
34
+ @cmds.keys.each do |cmd_name|
35
+ check_help(false, cmd_name)
36
+ end
37
+
38
+ # Test we can run 'help *alias* for each alias
39
+ @cmdproc.aliases.keys.each do |alias_name|
40
+ check_help(false, alias_name)
41
+ end
42
+
43
+ # double-check specific commands and aliases
44
+ %w(kill n help).each do |cmd_pat|
45
+ check_help(false, cmd_pat)
46
+ end
47
+
48
+ # Test patterns
49
+ %w(* k.* ki).each do |cmd_pat|
50
+ check_help(false, cmd_pat)
51
+ end
52
+
53
+ # Test categories
54
+ %w(running stack).each do |cmd_pat|
55
+ check_help(false, cmd_pat)
56
+ end
57
+
58
+ # # Test sub help and subhelp patterns
59
+ # [%w(info file), %w(show *)].each do |args|
60
+ # check_help(false, args)
61
+ # end
62
+
63
+ # Test invalid commands
64
+ %w(bogus abcd.*).each do |cmd_pat|
65
+ check_help(true, cmd_pat)
66
+ end
67
+
68
+ # invalid help subcommands
69
+ [%w(info fdafds), %w(fedafdsa *)].each do |args|
70
+ check_help(true, *args)
71
+ end
72
+
73
+ # screwball error
74
+ check_help(true, '["info",')
75
+
76
+ end
77
+
78
+ # FIXME: Do better than this.
79
+ def check_subcmd_help(cmd_name, subcmd, *args)
80
+ def subcmd.msg(mess)
81
+ @msgs << mess
82
+ end
83
+ subcmd.instance_variable_set('@msgs', [])
84
+ subcmd.instance_variable_set('@errmsgs', [])
85
+ subcmd.help(cmd_name)
86
+ assert subcmd.instance_variable_get('@msgs')
87
+ # subcmd.help
88
+ end
89
+
90
+ def test_help_subcommand
91
+ # Get list of commands with subcmds
92
+ cmd_names = @cmds.values.map do |c|
93
+ c.instance_variable_defined?(:@subcmds) ? c.name : nil
94
+ end.compact
95
+ cmd_names.each do |cmd_name|
96
+ check_subcmd_help(cmd_name, @cmds[cmd_name].subcmds)
97
+ end
98
+ end
99
+
100
+ def test_help_complete
101
+ assert_equal(%w(break breakpoints), @my_cmd.complete('br'))
102
+ assert_equal(%w(directory disable display), @my_cmd.complete('di'))
103
+ end
104
+ end
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems'; require 'require_relative'
3
+ require_relative './mock-helper'
4
+ require_relative '../../processor/command/kill'
5
+
6
+ class TestCommandKill < Test::Unit::TestCase
7
+ include MockUnitHelper
8
+ def setup
9
+ @name = File.basename(__FILE__, '.rb').split(/-/)[2]
10
+ common_setup(@name)
11
+ def @cmd.msg(message)
12
+ @msgs << message
13
+ end
14
+ def @cmd.errmsg(message)
15
+ @errmsgs << message
16
+ end
17
+ reset_cmdproc_vars
18
+ end
19
+
20
+ def reset_cmdproc_vars
21
+ @cmd.instance_variable_set('@msgs', [])
22
+ @cmd.instance_variable_set('@errmsgs', [])
23
+ @cmd.proc.leave_cmd_loop = false
24
+ end
25
+
26
+ def test_kill_command
27
+ @cmd.run([@name, 'foo'])
28
+ assert_equal(false, @cmd.proc.leave_cmd_loop)
29
+ assert_equal(1, @cmd.instance_variable_get('@errmsgs').size)
30
+
31
+ if false
32
+ save_trap = Signal.trap(10) {
33
+ @success = true
34
+ }
35
+
36
+ @success = false
37
+ @cmd.run([@name, '10'])
38
+ # assert_equal(true, @success,
39
+ # 'Should have run the handler')
40
+ end
41
+
42
+ ensure
43
+ # restore old trap if any
44
+ trap(10, save_trap)
45
+ end
46
+ end
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems'; require 'require_relative'
3
+ require_relative './mock-helper'
4
+ require_relative '../../processor/command/source'
5
+
6
+ # Test command source
7
+ class TestCommandSource < Test::Unit::TestCase
8
+
9
+ include MockUnitHelper
10
+ def setup
11
+ @name = File.basename(__FILE__, '.rb').split(/-/)[2]
12
+ common_setup(@name)
13
+ end
14
+
15
+ def test_source_opts
16
+
17
+ [['--quiet', :verbose, false],
18
+ ['-q', :quiet, true],
19
+ ['--no-quiet', :quiet, false],
20
+ ['--continue', :abort_on_error, false],
21
+ ['--no-continue', :abort_on_error, true],
22
+ ['-c', :abort_on_error, false],
23
+ ['-v', :verbose, true],
24
+ ['--verbose', :verbose, true],
25
+ ['--no-verbose', :verbose, false]
26
+ ].each do |opt, key, expect|
27
+ options =
28
+ @cmd.parse_options(Trepan::Command::SourceCommand::DEFAULT_OPTIONS.dup,
29
+ opt)
30
+ assert_equal(expect, options[key],
31
+ "Option #{opt} using key #{key} failure")
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env ruby
2
+ require 'test/unit'
3
+ require 'rubygems'; require 'require_relative'
4
+ require_relative '../../lib/trepanning'
5
+
6
+ # We don't want to do completion or save history.
7
+ # This is one hacky way to make sure this doesn't happen
8
+ def Trepan::GNU_readline?
9
+ end
10
+
11
+ # Test commands completion
12
+ class TestCompletion < Test::Unit::TestCase
13
+ def test_completion
14
+ [
15
+ ['sho', 'sho', ['show']], # Simple single completion
16
+ ['un', 'un', ['unalias', 'undisplay']], # Simple multiple completion
17
+ ['show', 'show', ['show']], # Completion when word is complete
18
+ ['irb ', 'irb ', []], # Don't add anything - no more
19
+ ['set auto', 'auto', ['auto']], # Single completion on two words
20
+ ['set au', 'au', ['auto']], # Single completion when there are two words
21
+ ['sho aut', 'aut', ['auto']], # Add a space because there is more
22
+ ['set auto eval ', '', ['off', 'on']], # Many 3-word completions
23
+
24
+ # Many two-word completions
25
+ ['set auto ', '', ['eval', 'irb', 'list']],
26
+
27
+ ['set auto e', 'e', ['eval']],
28
+ ## ['disas', 'disas', ['disassemble']], # Another single completion
29
+ ## FIXME:
30
+ # ['help syn', 'syn', ['syntax']],
31
+ ['help br', 'br', ['break', 'breakpoints']],
32
+ ['where', 'where', ['where']], # Single alias completion
33
+ ['set basename o', 'o', ['off', 'on']],
34
+ ].each do |line, token, expect_completion|
35
+ assert_equal(expect_completion,
36
+ $trepan_completion_proc.call(token, line),
37
+ "Bad completion on #{line.inspect} with #{token.inspect}")
38
+ end
39
+ assert($trepan_completion_proc.call('', '').size > 30,
40
+ 'Initial completion should return more than 30 commands')
41
+ end
42
+ end