summaryrefslogtreecommitdiff
path: root/test/coderay_suite.rb
diff options
context:
space:
mode:
authormurphy <murphy@rubychan.de>2006-07-11 05:47:22 +0000
committermurphy <murphy@rubychan.de>2006-07-11 05:47:22 +0000
commit8e47e97db61205e5212e787f2f87dcfef50724a9 (patch)
treed97e436e0a9a65ed1c540bd8fe57f7c5701d2621 /test/coderay_suite.rb
parentb63db60ed20bb28bb8f9e70e021c63aca96a6257 (diff)
downloadcoderay-8e47e97db61205e5212e787f2f87dcfef50724a9.tar.gz
Oups, I forgot the totally revamped test system.
Diffstat (limited to 'test/coderay_suite.rb')
-rw-r--r--test/coderay_suite.rb150
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