summaryrefslogtreecommitdiff
path: root/test/suite.rb
diff options
context:
space:
mode:
authormurphy <murphy@rubychan.de>2005-10-29 04:55:53 +0000
committermurphy <murphy@rubychan.de>2005-10-29 04:55:53 +0000
commit32440c8970eb351320ed3a9d5a986d275d3371c8 (patch)
treee86c71a856593d14ba03ce896f6ac773cddb6fec /test/suite.rb
parentfb64737038ca13b4047219c429560b97b98fe22b (diff)
downloadcoderay-32440c8970eb351320ed3a9d5a986d275d3371c8.tar.gz
Added Test environment.
Diffstat (limited to 'test/suite.rb')
-rw-r--r--test/suite.rb106
1 files changed, 106 insertions, 0 deletions
diff --git a/test/suite.rb b/test/suite.rb
new file mode 100644
index 0000000..dca72ef
--- /dev/null
+++ b/test/suite.rb
@@ -0,0 +1,106 @@
+mydir = File.dirname(__FILE__)
+$:.unshift mydir + '/../lib/'
+
+$VERBOSE = true
+
+require 'coderay'
+CodeRay::Encoders[:tokens]
+CodeRay::Encoders[:html]
+
+require 'test/unit'
+include Test::Unit
+
+class CodeRaySuite < TestCase
+
+ def self.dir &block
+ @dir ||= File.dirname(@file)
+ if block
+ Dir.chdir @dir, &block
+ end
+ @dir
+ end
+
+ def dir &block
+ self.class.dir(&block)
+ end
+
+ def extension
+ 'in.' + self.class::EXTENSION
+ end
+
+ def lang
+ self.class::LANG
+ end
+
+ def test_ALL
+ CodeRay::Scanners.load lang
+ tokenizer = CodeRay::Encoders[:debug].new
+ highlighter = CodeRay::Encoders[:html].new(
+ :tab_width => 2,
+ :line_numbers => :table,
+ :wrap => :page,
+ :hint => :info
+ )
+
+ dir do
+ for input in Dir["*.#{extension}"]
+ puts "[ testing #{input}... ]"
+ name = File.basename(input, ".#{extension}")
+ output = name + '.out.' + tokenizer.file_extension
+ code = File.open(input, 'rb') { |f| break f.read }
+
+ tokens = CodeRay.scan code, lang
+ result = tokenizer.encode_tokens tokens
+ highlighted = highlighter.encode_tokens tokens
+
+ File.open(name + '.html', 'w') do |f| f.write highlighted end
+
+ if File.exist? output
+ expected = File.read output
+ ok = expected == result
+ computed = output.sub('.out.', '.computed.')
+ unless ok
+ File.open(computed, 'w') { |f| f.write result }
+ print `gvimdiff #{output} #{computed}` if $DEBUG
+ end
+ assert(ok, "Scan error: #{computed} != #{output}")
+ else
+ File.open(output, 'w') do |f| f.write result end
+ puts "New test: #{output}"
+ end
+
+ end
+ end
+ end
+
+end
+
+require 'test/unit/testsuite'
+$suite = TestSuite.new
+
+def load_suite name
+ begin
+ require name + '/suite.rb'
+ rescue LoadError
+ $stderr.puts <<-ERR
+
+!! Folder #{File.split(__FILE__).first + '/' + name} not found
+
+ ERR
+ false
+ end
+end
+
+if subsuite = ARGV.find { |a| break $1 if a[/^([^-].*)/] }
+ load_suite(subsuite) or exit
+else
+ Dir[mydir + '/*/'].each { |suite| load_suite suite }
+end
+
+if ARGV.include? '-f'
+ require 'test/unit/ui/fox/testrunner'
+ UI::Fox::TestRunner.run $suite
+else
+ require 'test/unit/ui/console/testrunner'
+ UI::Console::TestRunner.run $suite
+end