Permalink
Fetching contributors…
Cannot retrieve contributors at this time
executable file 131 lines (121 sloc) 3.66 KB
#!/usr/bin/env ruby
# begin require 'rubygems' rescue LoadError end
# require 'ruby-debug' ; Debugger.start
TEST_DIR = File.expand_path(File.dirname(__FILE__))
TOP_SRC_DIR = File.join(TEST_DIR, '..')
require File.join(TOP_SRC_DIR, 'lib', 'tracelines.rb')
def dump_file(file, opts)
puts file
begin
fp = File.open(file, 'r')
rescue Errno::ENOENT
puts "File #{file} is not readable."
return
end
lines = fp.read
if opts[:print_source]
puts '=' * 80
puts lines
end
if opts[:print_parse]
puts '=' * 80
cmd = "#{File.join(TEST_DIR, 'parse-show.rb')} #{file}"
system(cmd)
end
if opts[:print_trace]
require 'tracer'
puts '=' * 80
tracer = Tracer.new
tracer.add_filter lambda {|event, f, line, id, binding, klass|
__FILE__ != f && event == 'line'
}
tracer.on{load(file)}
end
expected_lnums = nil
if opts[:expect_line]
fp.rewind
first_line = fp.readline.chomp
expected_str = first_line[1..-1]
begin
expected_lnums = eval(expected_str, binding, __FILE__, __LINE__)
rescue SyntaxError
puts '=' * 80
puts "Failed reading expected values from #{file}"
end
end
fp.close()
got_lnums = TraceLineNumbers.lnums_for_str(lines)
if expected_lnums
puts "expecting: #{expected_lnums.inspect}"
puts '-' * 80
if expected_lnums
if got_lnums != expected_lnums
puts "mismatch: #{got_lnums.inspect}"
else
puts 'Got what was expected.'
end
else
puts got_lnums.inspect
end
else
puts got_lnums.inspect
end
end
require 'getoptlong'
program = File.basename($0)
opts = {
:print_source => true, # Print source file?
:print_trace => true, # Run Tracer over file?
:expect_line => true, # Source file has expected (correct) list of lines?
:print_parse => true, # Show ParseTree output?
}
getopts = GetoptLong.new(
[ '--expect', '-e', GetoptLong::NO_ARGUMENT ],
[ '--no-expect', '-E', GetoptLong::NO_ARGUMENT ],
[ '--help', '-h', GetoptLong::NO_ARGUMENT ],
[ '--parse', '-p', GetoptLong::NO_ARGUMENT ],
[ '--no-parse', '-P', GetoptLong::NO_ARGUMENT ],
[ '--source', '-s', GetoptLong::NO_ARGUMENT ],
[ '--no-source', '-S', GetoptLong::NO_ARGUMENT ],
[ '--trace', '-t', GetoptLong::NO_ARGUMENT ],
[ '--no-trace', '-T', GetoptLong::NO_ARGUMENT ])
getopts.each do |opt, arg|
case opt
when '--help'
puts "usage
Usage: #{$program} [options] file1 file2 ...
Diagnostic program to make see what TraceLineNumbers does and compare
against other output.
options:
-e --expect Read source file expected comment (default)
-E --no-expect Don't look for source file expected comment
-p --parse Show ParseTree Output (default)
-P --no-parse Don't show ParseTree output
-s --source Show source file (default)
-S --no-source Don't print source
-t --trace Show Tracer output (default)
-T --no-trace Don't show Tracer output
"
when '--expect'
opts[:expect_line] = true
when '--no-expect'
opts[:expect_line] = false
when '--parse'
opts[:print_parse] = true
when '--no-parse'
opts[:print_parse] = false
when '--source'
opts[:print_source] = true
when '--no-source'
opts[:print_source] = false
when '--trace'
opts[:print_trace] = true
when '--no-trace'
opts[:print_trace] = false
else
puts "Unknown and ignored option #{opt}"
end
end
ARGV.each do |file|
dump_file(file, opts)
end