linecache193 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env ruby
2
+ # $Id$
3
+ begin require 'rubygems' rescue LoadError end
4
+ # require 'ruby-debug' ; Debugger.start(:post-mortem => true)
5
+
6
+ module TraceLineNumbers
7
+ @@SRC_DIR = File.expand_path(File.dirname(__FILE__))
8
+ begin
9
+ require File.join(@@SRC_DIR, '..', 'ext\trace_nums', 'trace_nums19')
10
+ rescue LoadError
11
+ # MSWindows seems to put this in lib rather than ext.
12
+ require File.join(@@SRC_DIR, '..', 'lib', 'trace_nums19')
13
+ end
14
+
15
+ # Return an array of lines numbers that could be
16
+ # stopped at given a file name of a Ruby program.
17
+ def lnums_for_file(file)
18
+ lnums_for_str(File.read(file))
19
+ end
20
+ module_function :lnums_for_file
21
+
22
+ # Return an array of lines numbers that could be
23
+ # stopped at given a file name of a Ruby program.
24
+ # We assume the each line has \n at the end. If not
25
+ # set the newline parameters to \n.
26
+ def lnums_for_str_array(string_array, newline='')
27
+ lnums_for_str(string_array.join(newline))
28
+ end
29
+ module_function :lnums_for_str_array
30
+ end
31
+
32
+ if __FILE__ == $0
33
+ SCRIPT_LINES__ = {} unless defined? SCRIPT_LINES__
34
+ # test_file = '../test/rcov-bug.rb'
35
+ test_file = '../test/lnum-data/begin1.rb'
36
+ if File.exists?(test_file)
37
+ puts TraceLineNumbers.lnums_for_file(test_file).inspect
38
+ load(test_file, 0) # for later
39
+ end
40
+ puts TraceLineNumbers.lnums_for_file(__FILE__).inspect
41
+ unless SCRIPT_LINES__.empty?
42
+ key = SCRIPT_LINES__.keys.first
43
+ puts key
44
+ puts SCRIPT_LINES__[key]
45
+ puts TraceLineNumbers.lnums_for_str_array(SCRIPT_LINES__[key]).inspect
46
+ end
47
+ end
@@ -0,0 +1,130 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # begin require 'rubygems' rescue LoadError end
4
+ # require 'ruby-debug' ; Debugger.start
5
+
6
+ TEST_DIR = File.expand_path(File.dirname(__FILE__))
7
+ TOP_SRC_DIR = File.join(TEST_DIR, '..')
8
+ require File.join(TOP_SRC_DIR, 'lib', 'tracelines19.rb')
9
+
10
+ def dump_file(file, opts)
11
+ puts file
12
+ begin
13
+ fp = File.open(file, 'r')
14
+ rescue Errno::ENOENT
15
+ puts "File #{file} is not readable."
16
+ return
17
+ end
18
+ lines = fp.read
19
+ if opts[:print_source]
20
+ puts '=' * 80
21
+ puts lines
22
+ end
23
+ if opts[:print_parse]
24
+ puts '=' * 80
25
+ cmd = "#{File.join(TEST_DIR, 'parse-show.rb')} #{file}"
26
+ system(cmd)
27
+ end
28
+ if opts[:print_trace]
29
+ require 'tracer'
30
+ puts '=' * 80
31
+ tracer = Tracer.new
32
+ tracer.add_filter lambda {|event, f, line, id, binding, klass|
33
+ __FILE__ != f && event == 'line'
34
+ }
35
+ tracer.on{load(file)}
36
+ end
37
+ expected_lnums = nil
38
+ if opts[:expect_line]
39
+ fp.rewind
40
+ first_line = fp.readline.chomp
41
+ expected_str = first_line[1..-1]
42
+ begin
43
+ expected_lnums = eval(expected_str, binding, __FILE__, __LINE__)
44
+ rescue SyntaxError
45
+ puts '=' * 80
46
+ puts "Failed reading expected values from #{file}"
47
+ end
48
+ end
49
+ fp.close()
50
+ got_lnums = TraceLineNumbers.lnums_for_str(lines)
51
+ if expected_lnums
52
+ puts "expecting: #{expected_lnums.inspect}"
53
+ puts '-' * 80
54
+ if expected_lnums
55
+ if got_lnums != expected_lnums
56
+ puts "mismatch: #{got_lnums.inspect}"
57
+ else
58
+ puts 'Got what was expected.'
59
+ end
60
+ else
61
+ puts got_lnums.inspect
62
+ end
63
+ else
64
+ puts got_lnums.inspect
65
+ end
66
+ end
67
+
68
+ require 'getoptlong'
69
+ program = File.basename($0)
70
+ opts = {
71
+ :print_source => true, # Print source file?
72
+ :print_trace => true, # Run Tracer over file?
73
+ :expect_line => true, # Source file has expected (correct) list of lines?
74
+ :print_parse => true, # Show ParseTree output?
75
+ }
76
+
77
+ getopts = GetoptLong.new(
78
+ [ '--expect', '-e', GetoptLong::NO_ARGUMENT ],
79
+ [ '--no-expect', '-E', GetoptLong::NO_ARGUMENT ],
80
+ [ '--help', '-h', GetoptLong::NO_ARGUMENT ],
81
+ [ '--parse', '-p', GetoptLong::NO_ARGUMENT ],
82
+ [ '--no-parse', '-P', GetoptLong::NO_ARGUMENT ],
83
+ [ '--source', '-s', GetoptLong::NO_ARGUMENT ],
84
+ [ '--no-source', '-S', GetoptLong::NO_ARGUMENT ],
85
+ [ '--trace', '-t', GetoptLong::NO_ARGUMENT ],
86
+ [ '--no-trace', '-T', GetoptLong::NO_ARGUMENT ])
87
+
88
+ getopts.each do |opt, arg|
89
+ case opt
90
+ when '--help'
91
+ puts "usage
92
+ Usage: #{$program} [options] file1 file2 ...
93
+
94
+ Diagnostic program to make see what TraceLineNumbers does and compare
95
+ against other output.
96
+
97
+ options:
98
+ -e --expect Read source file expected comment (default)
99
+ -E --no-expect Don't look for source file expected comment
100
+ -p --parse Show ParseTree Output (default)
101
+ -P --no-parse Don't show ParseTree output
102
+ -s --source Show source file (default)
103
+ -S --no-source Don't print source
104
+ -t --trace Show Tracer output (default)
105
+ -T --no-trace Don't show Tracer output
106
+ "
107
+ when '--expect'
108
+ opts[:expect_line] = true
109
+ when '--no-expect'
110
+ opts[:expect_line] = false
111
+ when '--parse'
112
+ opts[:print_parse] = true
113
+ when '--no-parse'
114
+ opts[:print_parse] = false
115
+ when '--source'
116
+ opts[:print_source] = true
117
+ when '--no-source'
118
+ opts[:print_source] = false
119
+ when '--trace'
120
+ opts[:print_trace] = true
121
+ when '--no-trace'
122
+ opts[:print_trace] = false
123
+ else
124
+ puts "Unknown and ignored option #{opt}"
125
+ end
126
+ end
127
+
128
+ ARGV.each do |file|
129
+ dump_file(file, opts)
130
+ end
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pp'
4
+ begin require 'rubygems' rescue LoadError end
5
+ require 'parse_tree'
6
+
7
+ ARGV.push "-" if ARGV.empty?
8
+
9
+ parse_tree = ParseTree.new(true)
10
+
11
+ ARGV.each do |file|
12
+ ruby = file == "-" ? $stdin.read : File.read(file)
13
+ pp parse_tree.parse_tree_for_string(ruby, file).first
14
+ end
@@ -0,0 +1,10 @@
1
+ # [3, 10]
2
+ # Some rcov bugs.
3
+ z = "
4
+ Now is the time
5
+ "
6
+
7
+ z =~
8
+ /
9
+ 5
10
+ /ix
@@ -0,0 +1,2 @@
1
+ # This is a small test file.
2
+
@@ -0,0 +1,151 @@
1
+ #!/usr/bin/env ruby
2
+ require 'test/unit'
3
+ require 'fileutils'
4
+ require 'tempfile'
5
+ require 'set'
6
+
7
+ # require 'rubygems'
8
+ # require 'ruby-debug'; Debugger.start
9
+
10
+ # Test LineCache module
11
+ class TestLineCache < Test::Unit::TestCase
12
+ @@TEST_DIR = File.expand_path(File.dirname(__FILE__))
13
+ @@TOP_SRC_DIR = File.join(@@TEST_DIR, '..', 'lib')
14
+ require File.join(@@TOP_SRC_DIR, 'linecache19.rb')
15
+
16
+ def setup
17
+ LineCache::clear_file_cache
18
+ end
19
+
20
+ def test_basic
21
+ fp = File.open(__FILE__, 'r')
22
+ compare_lines = fp.readlines()
23
+ fp.close
24
+
25
+ # Test getlines to read this file.
26
+ lines = LineCache::getlines(__FILE__)
27
+ assert_equal(compare_lines, lines,
28
+ 'We should get exactly the same lines as reading this file.')
29
+
30
+ # Test getline to read this file. The file should now be cached,
31
+ # so internally a different set of routines are used.
32
+ test_line = 1
33
+ line = LineCache::getline(__FILE__, test_line)
34
+ assert_equal(compare_lines[test_line-1], line,
35
+ 'We should get exactly the same line as reading this file.')
36
+
37
+ # Test getting the line via a relative file name
38
+ Dir.chdir(File.dirname(__FILE__)) do
39
+ short_file = File.basename(__FILE__)
40
+ test_line = 10
41
+ line = LineCache::getline(short_file, test_line)
42
+ assert_equal(compare_lines[test_line-1], line,
43
+ 'Short filename lookup should work')
44
+ end
45
+
46
+ # Write a temporary file; read contents, rewrite it and check that
47
+ # we get a change when calling getline.
48
+ tf = Tempfile.new("testing")
49
+ test_string = "Now is the time.\n"
50
+ tf.puts(test_string)
51
+ tf.close
52
+ line = LineCache::getline(tf.path, 1)
53
+ assert_equal(test_string, line,
54
+ "C'mon - a simple line test like this worked before.")
55
+ tf.open
56
+ test_string = "Now is another time.\n"
57
+ tf.puts(test_string)
58
+ tf.close
59
+ LineCache::checkcache
60
+ line = LineCache::getline(tf.path, 1)
61
+ assert_equal(test_string, line,
62
+ "checkcache should have reread the temporary file.")
63
+ FileUtils.rm tf.path
64
+
65
+ LineCache::update_cache(__FILE__)
66
+ LineCache::clear_file_cache
67
+ end
68
+
69
+ def test_cached
70
+ assert_equal(false, LineCache::cached?(__FILE__),
71
+ "file #{__FILE__} shouldn't be cached - just cleared cache.")
72
+ line = LineCache::getline(__FILE__, 1)
73
+ assert line
74
+ assert_equal(true, LineCache::cached?(__FILE__),
75
+ "file #{__FILE__} should now be cached")
76
+ assert_equal(false, LineCache::cached_script?('./short-file'),
77
+ "Should not find './short-file' in SCRIPT_LINES__")
78
+ assert_equal(true, 78 < LineCache.size(__FILE__))
79
+ Dir.chdir(File.dirname(__FILE__)) do
80
+ load('./short-file', 0)
81
+ assert_equal(true, LineCache::cached_script?('./short-file'),
82
+ "Should be able to find './short-file' in SCRIPT_LINES__")
83
+ end
84
+ end
85
+
86
+ def test_remap
87
+ LineCache::remap_file(__FILE__, 'another-name')
88
+ line1 = LineCache::getline('another-name', 1)
89
+ line2 = LineCache::getline(__FILE__, 1)
90
+ assert_equal(line1, line2, 'Both lines should be the same via remap_file')
91
+ end
92
+
93
+ def test_remap_lines
94
+ LineCache::remap_file_lines(__FILE__, 'test2', (10..11), 6)
95
+
96
+ line5 = LineCache::getline(__FILE__, 5)
97
+ LineCache::remap_file_lines(__FILE__, 'test2', 9, 5)
98
+ rline9 = LineCache::getline('test2', 9)
99
+ assert_equal(line5, rline9,
100
+ 'lines should be the same via remap_file_line - remap integer')
101
+
102
+ line6 = LineCache::getline(__FILE__, 6)
103
+ rline10 = LineCache::getline('test2', 10)
104
+ assert_equal(line6, rline10,
105
+ 'lines should be the same via remap_file_line - range')
106
+
107
+ line7 = LineCache::getline(__FILE__, 7)
108
+ rline11 = LineCache::getline('test2', 11)
109
+ assert_equal(line7, rline11,
110
+ 'lines should be the same via remap_file_line - range')
111
+
112
+ line8 = LineCache::getline(__FILE__, 8)
113
+ LineCache::remap_file_lines(__FILE__, nil, 20, 8)
114
+ rline20 = LineCache::getline(__FILE__, 20)
115
+ assert_equal(line8, rline20,
116
+ 'lines should be the same via remap_file_line - nil file')
117
+ end
118
+
119
+ def test_stat
120
+ assert_equal(nil, LineCache::stat(__FILE__),
121
+ "stat for #{__FILE__} shouldn't be nil - just cleared cache.")
122
+ line = LineCache::getline(__FILE__, 1)
123
+ assert line
124
+ assert(LineCache::stat(__FILE__),
125
+ "file #{__FILE__} should now have a stat")
126
+ end
127
+
128
+ def test_path
129
+ assert_equal(nil, LineCache::path(__FILE__),
130
+ "path for #{__FILE__} should be nil - just cleared cache.")
131
+ path = LineCache::cache(__FILE__)
132
+ assert path
133
+ assert_equal(path, LineCache::path(__FILE__),
134
+ "path of #{__FILE__} should be the same as we got before")
135
+ end
136
+
137
+ def test_trace_line_numbers
138
+ test_file = File.join(@@TEST_DIR, 'short-file')
139
+ assert_equal([], LineCache::trace_line_numbers(test_file))
140
+ test_file = File.join(@@TEST_DIR, 'rcov-bug.rb')
141
+ assert_equal([3, 10], LineCache::trace_line_numbers(test_file))
142
+ end
143
+
144
+ def test_sha1
145
+ test_file = File.join(@@TEST_DIR, 'short-file')
146
+ LineCache::cache(test_file)
147
+ assert_equal('1134f95ea84a3dcc67d7d1bf41390ee1a03af6d2',
148
+ LineCache::sha1(test_file))
149
+ end
150
+
151
+ end
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env ruby
2
+ # $Id$
3
+ require 'test/unit'
4
+ require 'fileutils'
5
+ require 'tempfile'
6
+
7
+ # require 'rubygems'
8
+ # require 'ruby-debug'; Debugger.init
9
+
10
+ SCRIPT_LINES__ = {} unless defined? SCRIPT_LINES__
11
+ # Test TestLineNumbers module
12
+ class TestLineNumbers1 < Test::Unit::TestCase
13
+
14
+ @@TEST_DIR = File.expand_path(File.dirname(__FILE__))
15
+ @@TOP_SRC_DIR = File.join(@@TEST_DIR, '..', 'lib')
16
+ require File.join(@@TOP_SRC_DIR, 'tracelines19.rb')
17
+
18
+ @@rcov_file = File.join(@@TEST_DIR, 'rcov-bug.rb')
19
+ File.open(@@rcov_file, 'r') {|fp|
20
+ first_line = fp.readline[1..-2]
21
+ @@rcov_lnums = eval(first_line, binding, __FILE__, __LINE__)
22
+ }
23
+
24
+ def test_for_file
25
+ rcov_lines = TraceLineNumbers.lnums_for_file(@@rcov_file)
26
+ assert_equal(@@rcov_lnums, rcov_lines)
27
+ end
28
+
29
+ def test_for_string
30
+ string = "# Some rcov bugs.\nz = \"\nNow is the time\n\"\n\nz =~ \n /\n 5\n /ix\n"
31
+ rcov_lines = TraceLineNumbers.lnums_for_str(string)
32
+ assert_equal([2, 9], rcov_lines)
33
+ end
34
+
35
+ def test_for_string_array
36
+ load(@@rcov_file, 0)
37
+ rcov_lines =
38
+ TraceLineNumbers.lnums_for_str_array(SCRIPT_LINES__[@@rcov_file])
39
+ assert_equal(@@rcov_lnums, rcov_lines)
40
+ end
41
+ end
metadata ADDED
@@ -0,0 +1,99 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: linecache193
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - R. Bernstein
13
+ - Mark Moseley
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-04-02 00:00:00 -07:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: ruby_core_source
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ - 1
31
+ - 4
32
+ version: 0.1.4
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ description: |
36
+ Linecache is a module for reading and caching lines. This may be useful for
37
+ example in a debugger where the same lines are shown many times.
38
+
39
+ email: mark@fast-software.com
40
+ executables: []
41
+
42
+ extensions:
43
+ - ext/trace_nums/extconf.rb
44
+ extra_rdoc_files:
45
+ - README
46
+ - lib/linecache19.rb
47
+ - lib/tracelines19.rb
48
+ files:
49
+ - AUTHORS
50
+ - COPYING
51
+ - ChangeLog
52
+ - NEWS
53
+ - README
54
+ - Rakefile
55
+ - VERSION
56
+ - ext/trace_nums/extconf.rb
57
+ - ext/trace_nums/trace_nums.c
58
+ - ext/trace_nums/trace_nums.h
59
+ - lib/linecache19.rb
60
+ - lib/tracelines19.rb
61
+ - test/short-file
62
+ - test/lnum-diag.rb
63
+ - test/parse-show.rb
64
+ - test/rcov-bug.rb
65
+ has_rdoc: true
66
+ homepage: http://rubyforge.org/projects/ruby-debug19
67
+ licenses: []
68
+
69
+ post_install_message:
70
+ rdoc_options:
71
+ - --charset=UTF-8
72
+ require_paths:
73
+ - lib
74
+ required_ruby_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ segments:
79
+ - 1
80
+ - 9
81
+ - 2
82
+ version: 1.9.2
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ requirements: []
91
+
92
+ rubyforge_project: ruby-debug19
93
+ rubygems_version: 1.3.6
94
+ signing_key:
95
+ specification_version: 3
96
+ summary: Read file with caching
97
+ test_files:
98
+ - test/test-linecache.rb
99
+ - test/test-tracelines.rb