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.
- data/.gitignore +3 -0
- data/CHANGES +34 -0
- data/ChangeLog +875 -0
- data/README.textile +59 -0
- data/Rakefile +215 -0
- data/app/.gitignore +1 -0
- data/app/cmd_parse.kpeg +241 -0
- data/app/cmd_parse.rb +212 -0
- data/app/cmd_parser.rb +1948 -0
- data/app/complete.rb +79 -0
- data/app/default.rb +90 -0
- data/app/display.rb +148 -0
- data/app/eventbuffer.rb +147 -0
- data/app/frame.rb +166 -0
- data/app/irb.rb +114 -0
- data/app/options.rb +200 -0
- data/app/run.rb +74 -0
- data/app/util.rb +65 -0
- data/bin/.gitignore +1 -0
- data/bin/trepan8 +115 -0
- data/data/.gitignore +1 -0
- data/data/irbrc +41 -0
- data/interface/.gitignore +1 -0
- data/interface/base_intf.rb +109 -0
- data/interface/client.rb +82 -0
- data/interface/comcodes.rb +20 -0
- data/interface/script.rb +110 -0
- data/interface/server.rb +147 -0
- data/interface/user.rb +165 -0
- data/io/base_io.rb +148 -0
- data/io/input.rb +158 -0
- data/io/null_output.rb +46 -0
- data/io/string_array.rb +156 -0
- data/io/tcpclient.rb +129 -0
- data/io/tcpfns.rb +33 -0
- data/io/tcpserver.rb +141 -0
- data/lib/debugger.rb +8 -0
- data/lib/trepanning.rb +283 -0
- data/processor/.gitignore +1 -0
- data/processor/command-ruby-debug/breakpoints.rb +155 -0
- data/processor/command-ruby-debug/catchpoint.rb +55 -0
- data/processor/command-ruby-debug/condition.rb +49 -0
- data/processor/command-ruby-debug/control.rb +31 -0
- data/processor/command-ruby-debug/display.rb +120 -0
- data/processor/command-ruby-debug/enable.rb +202 -0
- data/processor/command-ruby-debug/frame.rb +199 -0
- data/processor/command-ruby-debug/help.rb +63 -0
- data/processor/command-ruby-debug/info.rb +359 -0
- data/processor/command-ruby-debug/method.rb +84 -0
- data/processor/command-ruby-debug/reload.rb +40 -0
- data/processor/command-ruby-debug/save.rb +90 -0
- data/processor/command-ruby-debug/set.rb +237 -0
- data/processor/command-ruby-debug/show.rb +251 -0
- data/processor/command-ruby-debug/source.rb +36 -0
- data/processor/command-ruby-debug/threads.rb +189 -0
- data/processor/command-ruby-debug/trace.rb +57 -0
- data/processor/command-ruby-debug/variables.rb +199 -0
- data/processor/command.rb +270 -0
- data/processor/command/.gitignore +1 -0
- data/processor/command/alias.rb +54 -0
- data/processor/command/backtrace.rb +123 -0
- data/processor/command/base/cmd.rb +177 -0
- data/processor/command/base/subcmd.rb +230 -0
- data/processor/command/base/submgr.rb +188 -0
- data/processor/command/base/subsubcmd.rb +128 -0
- data/processor/command/base/subsubmgr.rb +199 -0
- data/processor/command/break.rb +114 -0
- data/processor/command/catch.rb +71 -0
- data/processor/command/complete.rb +39 -0
- data/processor/command/continue.rb +57 -0
- data/processor/command/directory.rb +50 -0
- data/processor/command/disable.rb +85 -0
- data/processor/command/display.rb +78 -0
- data/processor/command/down.rb +54 -0
- data/processor/command/edit.rb +79 -0
- data/processor/command/enable.rb +48 -0
- data/processor/command/eval.rb +90 -0
- data/processor/command/exit.rb +66 -0
- data/processor/command/finish.rb +59 -0
- data/processor/command/frame.rb +97 -0
- data/processor/command/help.rb +230 -0
- data/processor/command/help/.gitignore +1 -0
- data/processor/command/help/README +10 -0
- data/processor/command/help/command.txt +58 -0
- data/processor/command/help/examples.txt +16 -0
- data/processor/command/help/filename.txt +40 -0
- data/processor/command/help/location.txt +37 -0
- data/processor/command/help/suffixes.txt +17 -0
- data/processor/command/info.rb +28 -0
- data/processor/command/info_subcmd/.gitignore +1 -0
- data/processor/command/info_subcmd/args.rb +39 -0
- data/processor/command/info_subcmd/breakpoints.rb +80 -0
- data/processor/command/info_subcmd/catch.rb +36 -0
- data/processor/command/info_subcmd/files.rb +39 -0
- data/processor/command/info_subcmd/globals.rb +64 -0
- data/processor/command/info_subcmd/line.rb +30 -0
- data/processor/command/info_subcmd/locals.rb +69 -0
- data/processor/command/info_subcmd/macro.rb +62 -0
- data/processor/command/info_subcmd/program.rb +51 -0
- data/processor/command/info_subcmd/ruby.rb +57 -0
- data/processor/command/info_subcmd/source.rb +74 -0
- data/processor/command/info_subcmd/stack.rb +25 -0
- data/processor/command/info_subcmd/threads.rb +75 -0
- data/processor/command/kill.rb +78 -0
- data/processor/command/list.rb +117 -0
- data/processor/command/macro.rb +68 -0
- data/processor/command/next.rb +79 -0
- data/processor/command/parsetree.rb +56 -0
- data/processor/command/pp.rb +40 -0
- data/processor/command/pr.rb +37 -0
- data/processor/command/ps.rb +40 -0
- data/processor/command/restart.rb +86 -0
- data/processor/command/save.rb +58 -0
- data/processor/command/set.rb +47 -0
- data/processor/command/set_subcmd/.gitignore +1 -0
- data/processor/command/set_subcmd/abbrev.rb +25 -0
- data/processor/command/set_subcmd/auto.rb +27 -0
- data/processor/command/set_subcmd/auto_subcmd/.gitignore +1 -0
- data/processor/command/set_subcmd/auto_subcmd/eval.rb +53 -0
- data/processor/command/set_subcmd/auto_subcmd/irb.rb +33 -0
- data/processor/command/set_subcmd/auto_subcmd/list.rb +33 -0
- data/processor/command/set_subcmd/basename.rb +25 -0
- data/processor/command/set_subcmd/callstyle.rb +46 -0
- data/processor/command/set_subcmd/confirm.rb +24 -0
- data/processor/command/set_subcmd/debug.rb +47 -0
- data/processor/command/set_subcmd/different.rb +61 -0
- data/processor/command/set_subcmd/highlight.rb +43 -0
- data/processor/command/set_subcmd/max.rb +26 -0
- data/processor/command/set_subcmd/max_subcmd/list.rb +49 -0
- data/processor/command/set_subcmd/max_subcmd/stack.rb +50 -0
- data/processor/command/set_subcmd/max_subcmd/string.rb +76 -0
- data/processor/command/set_subcmd/max_subcmd/width.rb +49 -0
- data/processor/command/set_subcmd/reload.rb +42 -0
- data/processor/command/set_subcmd/timer.rb +58 -0
- data/processor/command/set_subcmd/trace.rb +37 -0
- data/processor/command/set_subcmd/trace_subcmd/buffer.rb +42 -0
- data/processor/command/set_subcmd/trace_subcmd/print.rb +41 -0
- data/processor/command/shell.rb +139 -0
- data/processor/command/show.rb +39 -0
- data/processor/command/show_subcmd/.gitignore +1 -0
- data/processor/command/show_subcmd/abbrev.rb +20 -0
- data/processor/command/show_subcmd/alias.rb +46 -0
- data/processor/command/show_subcmd/args.rb +34 -0
- data/processor/command/show_subcmd/auto.rb +28 -0
- data/processor/command/show_subcmd/auto_subcmd/eval.rb +27 -0
- data/processor/command/show_subcmd/auto_subcmd/irb.rb +23 -0
- data/processor/command/show_subcmd/auto_subcmd/list.rb +22 -0
- data/processor/command/show_subcmd/basename.rb +20 -0
- data/processor/command/show_subcmd/callstyle.rb +22 -0
- data/processor/command/show_subcmd/confirm.rb +18 -0
- data/processor/command/show_subcmd/debug.rb +26 -0
- data/processor/command/show_subcmd/debug_subcmd/dbgr.rb +21 -0
- data/processor/command/show_subcmd/debug_subcmd/skip.rb +22 -0
- data/processor/command/show_subcmd/debug_subcmd/step.rb +22 -0
- data/processor/command/show_subcmd/different.rb +26 -0
- data/processor/command/show_subcmd/directories.rb +22 -0
- data/processor/command/show_subcmd/highlight.rb +24 -0
- data/processor/command/show_subcmd/max.rb +27 -0
- data/processor/command/show_subcmd/max_subcmd/list.rb +38 -0
- data/processor/command/show_subcmd/max_subcmd/stack.rb +36 -0
- data/processor/command/show_subcmd/max_subcmd/string.rb +42 -0
- data/processor/command/show_subcmd/max_subcmd/width.rb +37 -0
- data/processor/command/show_subcmd/reload.rb +18 -0
- data/processor/command/show_subcmd/timer.rb +18 -0
- data/processor/command/show_subcmd/trace.rb +29 -0
- data/processor/command/show_subcmd/trace_subcmd/buffer.rb +65 -0
- data/processor/command/show_subcmd/trace_subcmd/print.rb +23 -0
- data/processor/command/show_subcmd/version.rb +23 -0
- data/processor/command/source.rb +134 -0
- data/processor/command/step.rb +81 -0
- data/processor/command/tbreak.rb +19 -0
- data/processor/command/unalias.rb +44 -0
- data/processor/command/undisplay.rb +59 -0
- data/processor/command/up.rb +72 -0
- data/processor/default.rb +56 -0
- data/processor/display.rb +17 -0
- data/processor/eval.rb +113 -0
- data/processor/eventbuf.rb +105 -0
- data/processor/frame.rb +172 -0
- data/processor/help.rb +92 -0
- data/processor/helper.rb +76 -0
- data/processor/hook.rb +134 -0
- data/processor/load_cmds.rb +258 -0
- data/processor/location.rb +174 -0
- data/processor/main.rb +455 -0
- data/processor/mock.rb +136 -0
- data/processor/msg.rb +61 -0
- data/processor/processor.rb +674 -0
- data/processor/running.rb +168 -0
- data/processor/stepping.rb +18 -0
- data/processor/subcmd.rb +161 -0
- data/processor/validate.rb +355 -0
- data/processor/virtual.rb +34 -0
- data/test/data/.gitignore +1 -0
- data/test/data/break_bad.cmd +19 -0
- data/test/data/break_bad.right +29 -0
- data/test/data/break_loop_bug.cmd +5 -0
- data/test/data/break_loop_bug.right +15 -0
- data/test/data/dollar-0.right +2 -0
- data/test/data/dollar-0a.right +2 -0
- data/test/data/dollar-0b.right +2 -0
- data/test/data/edit.cmd +14 -0
- data/test/data/edit.right +24 -0
- data/test/data/file-with-space.cmd +6 -0
- data/test/data/file-with-space.right +4 -0
- data/test/data/printvar.cmd +17 -0
- data/test/data/printvar.right +31 -0
- data/test/data/raise.cmd +11 -0
- data/test/data/raise.right +19 -0
- data/test/data/source.cmd +5 -0
- data/test/data/source.right +18 -0
- data/test/data/stepping-1.9.right +50 -0
- data/test/data/stepping.cmd +21 -0
- data/test/data/stepping.right +48 -0
- data/test/data/trepan8-save.1 +6 -0
- data/test/example/bp_loop_issue.rb +3 -0
- data/test/example/break-bug.rb +7 -0
- data/test/example/brkpt-class-bug.rb +8 -0
- data/test/example/classes.rb +11 -0
- data/test/example/dollar-0.rb +5 -0
- data/test/example/except-bug1.rb +4 -0
- data/test/example/except-bug2.rb +7 -0
- data/test/example/file with space.rb +1 -0
- data/test/example/gcd.rb +18 -0
- data/test/example/info-var-bug.rb +47 -0
- data/test/example/info-var-bug2.rb +2 -0
- data/test/example/null.rb +1 -0
- data/test/example/pm-bug.rb +3 -0
- data/test/example/pm.rb +11 -0
- data/test/example/raise.rb +3 -0
- data/test/integration/.gitignore +4 -0
- data/test/integration/config.yaml +8 -0
- data/test/integration/helper.rb +154 -0
- data/test/integration/test-break_bad.rb +26 -0
- data/test/integration/test-dollar-0.rb +31 -0
- data/test/integration/test-edit.rb +17 -0
- data/test/integration/test-file-with-space.rb +26 -0
- data/test/integration/test-printvar.rb +17 -0
- data/test/integration/test-raise.rb +21 -0
- data/test/integration/test-source.rb +16 -0
- data/test/integration/test-stepping.rb +24 -0
- data/test/unit/.gitignore +1 -0
- data/test/unit/cmd-helper.rb +52 -0
- data/test/unit/mock-helper.rb +12 -0
- data/test/unit/test-app-cmd_parse.rb +97 -0
- data/test/unit/test-app-cmd_parser.rb +23 -0
- data/test/unit/test-app-complete.rb +39 -0
- data/test/unit/test-app-frame.rb +32 -0
- data/test/unit/test-app-options.rb +92 -0
- data/test/unit/test-app-run.rb +14 -0
- data/test/unit/test-app-util.rb +44 -0
- data/test/unit/test-base-cmd.rb +45 -0
- data/test/unit/test-base-subcmd.rb +57 -0
- data/test/unit/test-base-submgr.rb +23 -0
- data/test/unit/test-base-subsubcmd.rb +17 -0
- data/test/unit/test-cmd-alias.rb +48 -0
- data/test/unit/test-cmd-exit.rb +27 -0
- data/test/unit/test-cmd-help.rb +104 -0
- data/test/unit/test-cmd-kill.rb +46 -0
- data/test/unit/test-cmd-source.rb +34 -0
- data/test/unit/test-completion.rb +42 -0
- data/test/unit/test-intf-user.rb +46 -0
- data/test/unit/test-io-input.rb +27 -0
- data/test/unit/test-io-tcp.rb +33 -0
- data/test/unit/test-io-tcpclient.rb +54 -0
- data/test/unit/test-io-tcpfns.rb +17 -0
- data/test/unit/test-io-tcpserver.rb +50 -0
- data/test/unit/test-proc-eval.rb +36 -0
- data/test/unit/test-proc-hook.rb +30 -0
- data/test/unit/test-proc-load_cmds.rb +50 -0
- data/test/unit/test-proc-location.rb +79 -0
- data/test/unit/test-subcmd-help.rb +44 -0
- data/trepan8.gemspec +52 -0
- 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
|