diff options
author | murphy <murphy@rubychan.de> | 2006-07-11 05:47:22 +0000 |
---|---|---|
committer | murphy <murphy@rubychan.de> | 2006-07-11 05:47:22 +0000 |
commit | 8e47e97db61205e5212e787f2f87dcfef50724a9 (patch) | |
tree | d97e436e0a9a65ed1c540bd8fe57f7c5701d2621 /test/coderay_suite.rb | |
parent | b63db60ed20bb28bb8f9e70e021c63aca96a6257 (diff) | |
download | coderay-8e47e97db61205e5212e787f2f87dcfef50724a9.tar.gz |
Oups, I forgot the totally revamped test system.
Diffstat (limited to 'test/coderay_suite.rb')
-rw-r--r-- | test/coderay_suite.rb | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/test/coderay_suite.rb b/test/coderay_suite.rb new file mode 100644 index 0000000..7829a54 --- /dev/null +++ b/test/coderay_suite.rb @@ -0,0 +1,150 @@ +$mydir = File.dirname __FILE__ +$:.unshift File.join($mydir, '..', 'lib') + +require 'coderay' + +module CodeRay + + require 'test/unit' + + class TestCase < Test::Unit::TestCase + + class << self + def inherited child + CodeRay::TestSuite << child.suite + end + + # Calls its block with the working directory set to the examples + # for this test case. + def dir + examples = File.join $mydir, lang.to_s + Dir.chdir examples do + yield + end + end + + def lang + @lang ||= name.downcase.to_sym + end + + def extension extension = nil + if extension + @extension = extension.to_s + else + @extension ||= lang.to_s + end + end + end + + def extension + @extension ||= 'in.' + self.class.extension + end + + def test_ALL + puts + puts " >> Running #{self.class.name} <<" + puts + scanner = CodeRay::Scanners[self.class.lang].new + tokenizer = CodeRay::Encoders[:debug].new + highlighter = CodeRay::Encoders[:html].new( + :tab_width => 2, + :line_numbers => :inline, + :wrap => :page, + :hint => :debug, + :css => :class + ) + + self.class.dir do + for input in Dir["*.#{extension}"] + next if ENV['testonly'] and ENV['testonly'] != File.basename(input, ".#{extension}") + print "testing #{input}: " + name = File.basename(input, ".#{extension}") + output = name + '.out.' + tokenizer.file_extension + code = File.open(input, 'rb') { |f| break f.read } + + unless ENV['noincremental'] + print 'incremental, ' + for size in 0..[code.size, 300].min + print size, '.' if ENV['showprogress'] + scanner.string = code[0,size] + scanner.tokenize + end + end + + print 'complete, ' + scanner.string = code + tokens = scanner.tokens + result = tokenizer.encode_tokens tokens + + if File.exist? output + expected = File.open(output, 'rb') { |f| break f.read } + ok = expected == result + computed = output.sub('.out.', '.computed.') + unless ok + File.open(computed, 'wb') { |f| f.write result } + print `gvimdiff #{output} #{computed}` if ENV['diff'] + end + assert(ok, "Scan error: #{computed} != #{output}") unless ENV['diff'] + else + File.open(output, 'wb') do |f| f.write result end + puts "New test: #{output}" + end + + print 'highlighting, ' + highlighted = highlighter.encode_tokens tokens + File.open(name + '.html', 'w') { |f| f.write highlighted } + + puts 'finished.' + end + end + end + + end + + require 'test/unit/testsuite' + + class TestSuite + @suite = Test::Unit::TestSuite.new 'CodeRay::Scanners' + class << self + + def << sub_suite + @suite << sub_suite + end + + def load_suite name + begin + suite = File.join($mydir, name, 'suite.rb') + require suite + rescue LoadError + $stderr.puts <<-ERR + + !! Suite #{suite} not found + + ERR + false + end + end + + def load + if subsuite = ARGV.find { |a| break $1 if a[/^([^-].*)/] } || ENV['scannerlang'] + load_suite(subsuite) or exit + else + Dir[File.join($mydir, '*', '')].each { |suite| load_suite File.basename(suite) } + end + end + + def run + load + $VERBOSE = true + if ARGV.include? '-f' + require 'test/unit/ui/fox/testrunner' + Test::Unit::UI::Fox::TestRunner + else + require 'test/unit/ui/console/testrunner' + Test::Unit::UI::Console::TestRunner + end.run @suite + end + end + end + +end |