Chris@909: require 'test/unit' Chris@909: Chris@909: $:.unshift File.expand_path('../../../lib', __FILE__) Chris@909: require 'coderay' Chris@909: Chris@909: class ExamplesTest < Test::Unit::TestCase Chris@909: Chris@909: def test_examples Chris@909: # output as HTML div (using inline CSS styles) Chris@909: div = CodeRay.scan('puts "Hello, world!"', :ruby).div Chris@909: assert_equal <<-DIV, div Chris@909:
Chris@909:
puts "Hello, world!"
Chris@909:
Chris@909: DIV Chris@909: Chris@909: # ...with line numbers Chris@909: div = CodeRay.scan(<<-CODE.chomp, :ruby).div(:line_numbers => :table) Chris@909: 5.times do Chris@909: puts 'Hello, world!' Chris@909: end Chris@909: CODE Chris@909: assert_equal <<-DIV, div Chris@909: Chris@909: Chris@909: Chris@909:
1
Chris@909: 2
Chris@909: 3
Chris@909: 
5.times do
Chris@909:   puts 'Hello, world!'
Chris@909: end
Chris@909: DIV Chris@909: Chris@909: # output as standalone HTML page (using CSS classes) Chris@909: page = CodeRay.scan('puts "Hello, world!"', :ruby).page Chris@909: assert page[<<-PAGE] Chris@909: Chris@909: Chris@909: Chris@909: Chris@909: Chris@909:
Chris@909: 
puts "Hello, world!"
Chris@909: Chris@909: Chris@909: PAGE Chris@909: Chris@909: # keep scanned tokens for later use Chris@909: tokens = CodeRay.scan('{ "just": "an", "example": 42 }', :json) Chris@909: assert_kind_of CodeRay::TokensProxy, tokens Chris@909: Chris@909: assert_equal ["{", :operator, " ", :space, :begin_group, :key, Chris@909: "\"", :delimiter, "just", :content, "\"", :delimiter, Chris@909: :end_group, :key, ":", :operator, " ", :space, Chris@909: :begin_group, :string, "\"", :delimiter, "an", :content, Chris@909: "\"", :delimiter, :end_group, :string, ",", :operator, Chris@909: " ", :space, :begin_group, :key, "\"", :delimiter, Chris@909: "example", :content, "\"", :delimiter, :end_group, :key, Chris@909: ":", :operator, " ", :space, "42", :integer, Chris@909: " ", :space, "}", :operator], tokens.tokens Chris@909: Chris@909: # produce a token statistic Chris@909: assert_equal <<-STATISTIC, tokens.statistic Chris@909: Chris@909: Code Statistics Chris@909: Chris@909: Tokens 26 Chris@909: Non-Whitespace 15 Chris@909: Bytes Total 31 Chris@909: Chris@909: Token Types (7): Chris@909: type count ratio size (average) Chris@909: ------------------------------------------------------------- Chris@909: TOTAL 26 100.00 % 1.2 Chris@909: delimiter 6 23.08 % 1.0 Chris@909: operator 5 19.23 % 1.0 Chris@909: space 5 19.23 % 1.0 Chris@909: key 4 15.38 % 0.0 Chris@909: :begin_group 3 11.54 % 0.0 Chris@909: :end_group 3 11.54 % 0.0 Chris@909: content 3 11.54 % 4.3 Chris@909: string 2 7.69 % 0.0 Chris@909: integer 1 3.85 % 2.0 Chris@909: Chris@909: STATISTIC Chris@909: Chris@909: # count the tokens Chris@909: assert_equal 26, tokens.count Chris@909: Chris@909: # produce a HTML div, but with CSS classes Chris@909: div = tokens.div(:css => :class) Chris@909: assert_equal <<-DIV, div Chris@909:
Chris@909:
{ "just": "an", "example": 42 }
Chris@909:
Chris@909: DIV Chris@909: Chris@909: # highlight a file (HTML div); guess the file type base on the extension Chris@909: require 'coderay/helpers/file_type' Chris@909: assert_equal :ruby, CodeRay::FileType[__FILE__] Chris@909: Chris@909: # get a new scanner for Python Chris@909: python_scanner = CodeRay.scanner :python Chris@909: assert_kind_of CodeRay::Scanners::Python, python_scanner Chris@909: Chris@909: # get a new encoder for terminal Chris@909: terminal_encoder = CodeRay.encoder :term Chris@909: assert_kind_of CodeRay::Encoders::Terminal, terminal_encoder Chris@909: Chris@909: # scanning into tokens Chris@909: tokens = python_scanner.tokenize 'import this; # The Zen of Python' Chris@909: assert_equal ["import", :keyword, " ", :space, "this", :include, Chris@909: ";", :operator, " ", :space, "# The Zen of Python", :comment], tokens Chris@909: Chris@909: # format the tokens Chris@909: term = terminal_encoder.encode_tokens(tokens) Chris@909: assert_equal "\e[1;31mimport\e[0m \e[33mthis\e[0m; \e[37m# The Zen of Python\e[0m", term Chris@909: Chris@909: # re-using scanner and encoder Chris@909: ruby_highlighter = CodeRay::Duo[:ruby, :div] Chris@909: div = ruby_highlighter.encode('puts "Hello, world!"') Chris@909: assert_equal <<-DIV, div Chris@909:
Chris@909:
puts "Hello, world!"
Chris@909:
Chris@909: DIV Chris@909: end Chris@909: Chris@909: end