diff options
Diffstat (limited to 'test/racc/testscanner.rb')
-rw-r--r-- | test/racc/testscanner.rb | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/test/racc/testscanner.rb b/test/racc/testscanner.rb new file mode 100644 index 0000000000..471c6bac5c --- /dev/null +++ b/test/racc/testscanner.rb @@ -0,0 +1,51 @@ +# +# racc scanner tester +# + +require 'racc/raccs' + + +class ScanError < StandardError; end + +def testdata( dir, argv ) + if argv.empty? then + Dir.glob( dir + '/*' ) - + Dir.glob( dir + '/*.swp' ) - + [ dir + '/CVS' ] + else + argv.collect {|i| dir + '/' + i } + end +end + + +if ARGV.delete '--print' then + $raccs_print_type = true + printonly = true +else + printonly = false +end + +testdata( File.dirname($0) + '/scandata', ARGV ).each do |file| + $stderr.print File.basename(file) + ': ' + begin + ok = File.read(file) + s = Racc::GrammarFileScanner.new( ok ) + sym, (val, lineno) = s.scan + if printonly then + $stderr.puts + $stderr.puts val + next + end + + val = '{' + val + "}\n" + sym == :ACTION or raise ScanError, 'is not action!' + val == ok or raise ScanError, "\n>>>\n#{ok}----\n#{val}<<<" + + $stderr.puts 'ok' + rescue => err + $stderr.puts 'fail (' + err.type.to_s + ')' + $stderr.puts err.message + $stderr.puts err.backtrace + $stderr.puts + end +end |