annotate vendor/plugins/coderay-0.9.2/lib/coderay/encoders/json.rb @ 864:2465362d1b56 bug_145

Close obsolete branch bug_145
author Chris Cannam
date Wed, 11 May 2011 11:57:41 +0100
parents 513646585e45
children
rev   line source
Chris@0 1 ($:.unshift '../..'; require 'coderay') unless defined? CodeRay
Chris@0 2 module CodeRay
Chris@0 3 module Encoders
Chris@0 4
Chris@0 5 # = JSON Encoder
Chris@0 6 class JSON < Encoder
Chris@0 7
Chris@0 8 register_for :json
Chris@0 9 FILE_EXTENSION = 'json'
Chris@0 10
Chris@0 11 protected
Chris@0 12 def setup options
Chris@0 13 begin
Chris@0 14 require 'json'
Chris@0 15 rescue LoadError
Chris@0 16 require 'rubygems'
Chris@0 17 require 'json'
Chris@0 18 end
Chris@0 19 @out = []
Chris@0 20 end
Chris@0 21
Chris@0 22 def text_token text, kind
Chris@0 23 { :type => 'text', :text => text, :kind => kind }
Chris@0 24 end
Chris@0 25
Chris@0 26 def block_token action, kind
Chris@0 27 { :type => 'block', :action => action, :kind => kind }
Chris@0 28 end
Chris@0 29
Chris@0 30 def finish options
Chris@0 31 @out.to_json
Chris@0 32 end
Chris@0 33
Chris@0 34 end
Chris@0 35
Chris@0 36 end
Chris@0 37 end
Chris@0 38
Chris@0 39 if $0 == __FILE__
Chris@0 40 $VERBOSE = true
Chris@0 41 $: << File.join(File.dirname(__FILE__), '..')
Chris@0 42 eval DATA.read, nil, $0, __LINE__ + 4
Chris@0 43 end
Chris@0 44
Chris@0 45 __END__
Chris@0 46 require 'test/unit'
Chris@0 47 $:.delete '.'
Chris@0 48 require 'rubygems' if RUBY_VERSION < '1.9'
Chris@0 49
Chris@0 50 class JSONEncoderTest < Test::Unit::TestCase
Chris@0 51
Chris@0 52 def test_json_output
Chris@0 53 tokens = CodeRay.scan <<-RUBY, :ruby
Chris@0 54 puts "Hello world!"
Chris@0 55 RUBY
Chris@0 56 require 'json'
Chris@0 57 assert_equal [
Chris@0 58 {"type"=>"text", "text"=>"puts", "kind"=>"ident"},
Chris@0 59 {"type"=>"text", "text"=>" ", "kind"=>"space"},
Chris@0 60 {"type"=>"block", "action"=>"open", "kind"=>"string"},
Chris@0 61 {"type"=>"text", "text"=>"\"", "kind"=>"delimiter"},
Chris@0 62 {"type"=>"text", "text"=>"Hello world!", "kind"=>"content"},
Chris@0 63 {"type"=>"text", "text"=>"\"", "kind"=>"delimiter"},
Chris@0 64 {"type"=>"block", "action"=>"close", "kind"=>"string"},
Chris@0 65 {"type"=>"text", "text"=>"\n", "kind"=>"space"}
Chris@0 66 ], JSON.load(tokens.json)
Chris@0 67 end
Chris@0 68
Chris@0 69 end