diff options
author | murphy <murphy@rubychan.de> | 2009-12-30 07:04:02 +0000 |
---|---|---|
committer | murphy <murphy@rubychan.de> | 2009-12-30 07:04:02 +0000 |
commit | 1203a2900ca86f08c9caddb7b13c9ec3765b9f52 (patch) | |
tree | fc8150924cd5cd4a981779f78de6025e97a08be1 /lib/coderay/encoders | |
parent | 21421f836ae4ffe7c10745ce1db8e40862c9b22b (diff) | |
download | coderay-1203a2900ca86f08c9caddb7b13c9ec3765b9f52.tar.gz |
Filters: Cleanups, refactorization, tests.
Diffstat (limited to 'lib/coderay/encoders')
-rw-r--r-- | lib/coderay/encoders/comment_filter.rb | 29 | ||||
-rw-r--r-- | lib/coderay/encoders/filter.rb | 59 | ||||
-rw-r--r-- | lib/coderay/encoders/token_class_filter.rb | 62 |
3 files changed, 144 insertions, 6 deletions
diff --git a/lib/coderay/encoders/comment_filter.rb b/lib/coderay/encoders/comment_filter.rb index 62de696..4d3fb54 100644 --- a/lib/coderay/encoders/comment_filter.rb +++ b/lib/coderay/encoders/comment_filter.rb @@ -1,3 +1,4 @@ +($:.unshift '../..'; require 'coderay') unless defined? CodeRay module CodeRay module Encoders @@ -7,10 +8,36 @@ module Encoders register_for :comment_filter - DEFAULT_OPTIONS = TokenClassFilter::DEFAULT_OPTIONS.merge \ + DEFAULT_OPTIONS = superclass::DEFAULT_OPTIONS.merge \ :exclude => [:comment] end end end + +if $0 == __FILE__ + $VERBOSE = true + $: << File.join(File.dirname(__FILE__), '..') + eval DATA.read, nil, $0, __LINE__ + 4 +end + +__END__ +require 'test/unit' + +class CommentFilterTest < Test::Unit::TestCase + + def test_filtering_comments + tokens = CodeRay.scan <<-RUBY, :ruby +#!/usr/bin/env ruby +# a minimal Ruby program +puts "Hello world!" + RUBY + assert_equal <<-RUBY_FILTERED, tokens.comment_filter.text +#!/usr/bin/env ruby + +puts "Hello world!" + RUBY_FILTERED + end + +end
\ No newline at end of file diff --git a/lib/coderay/encoders/filter.rb b/lib/coderay/encoders/filter.rb index cb784f6..5e4b34d 100644 --- a/lib/coderay/encoders/filter.rb +++ b/lib/coderay/encoders/filter.rb @@ -1,3 +1,4 @@ +($:.unshift '../..'; require 'coderay') unless defined? CodeRay module CodeRay module Encoders @@ -10,7 +11,65 @@ module Encoders @out = Tokens.new end + def text_token text, kind + [text, kind] if include_text_token? text, kind + end + + def include_text_token? text, kind + true + end + + def block_token action, kind + [action, kind] if include_block_token? action, kind + end + + def include_block_token? action, kind + true + end + end end end + +if $0 == __FILE__ + $VERBOSE = true + $: << File.join(File.dirname(__FILE__), '..') + eval DATA.read, nil, $0, __LINE__ + 4 +end + +__END__ +require 'test/unit' + +class FilterTest < Test::Unit::TestCase + + def test_creation + assert CodeRay::Encoders::Filter < CodeRay::Encoders::Encoder + filter = nil + assert_nothing_raised do + filter = CodeRay.encoder :filter + end + assert_kind_of CodeRay::Encoders::Encoder, filter + end + + def test_filtering_text_tokens + tokens = CodeRay::Tokens.new + 10.times do |i| + tokens << [i.to_s, :index] + end + assert_equal tokens, CodeRay::Encoders::Filter.new.encode_tokens(tokens) + assert_equal tokens, tokens.filter + end + + def test_filtering_block_tokens + tokens = CodeRay::Tokens.new + 10.times do |i| + tokens << [:open, :index] + tokens << [i.to_s, :content] + tokens << [:close, :index] + end + assert_equal tokens, CodeRay::Encoders::Filter.new.encode_tokens(tokens) + assert_equal tokens, tokens.filter + end + +end diff --git a/lib/coderay/encoders/token_class_filter.rb b/lib/coderay/encoders/token_class_filter.rb index 97c75b7..a9e8673 100644 --- a/lib/coderay/encoders/token_class_filter.rb +++ b/lib/coderay/encoders/token_class_filter.rb @@ -1,3 +1,4 @@ +($:.unshift '../..'; require 'coderay') unless defined? CodeRay module CodeRay module Encoders @@ -17,16 +18,67 @@ module Encoders def setup options super @exclude = options[:exclude] + @exclude = Array(@exclude) unless @exclude == :all @include = options[:include] + @include = Array(@include) unless @include == :all end - def text_token text, kind - [text, kind] if \ - (@include == :all || @include.include?(kind)) && - !(@exclude == :all || @exclude.include?(kind)) + def include_text_token? text, kind + (@include == :all || @include.include?(kind)) && + !(@exclude == :all || @exclude.include?(kind)) end - + end end end + +if $0 == __FILE__ + $VERBOSE = true + $: << File.join(File.dirname(__FILE__), '..') + eval DATA.read, nil, $0, __LINE__ + 4 +end + +__END__ +require 'test/unit' + +class TokenClassFilterTest < Test::Unit::TestCase + + def test_creation + assert CodeRay::Encoders::TokenClassFilter < CodeRay::Encoders::Encoder + assert CodeRay::Encoders::TokenClassFilter < CodeRay::Encoders::Filter + filter = nil + assert_nothing_raised do + filter = CodeRay.encoder :token_class_filter + end + assert_instance_of CodeRay::Encoders::TokenClassFilter, filter + end + + def test_filtering_text_tokens + tokens = CodeRay::Tokens.new + for i in 1..10 + tokens << [i.to_s, :index] + tokens << [' ', :space] if i < 10 + end + assert_equal 10, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :exclude => :space).size + assert_equal 10, tokens.token_class_filter(:exclude => :space).size + assert_equal 9, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :include => :space).size + assert_equal 9, tokens.token_class_filter(:include => :space).size + assert_equal 0, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :exclude => :all).size + assert_equal 0, tokens.token_class_filter(:exclude => :all).size + end + + def test_filtering_block_tokens + tokens = CodeRay::Tokens.new + 10.times do |i| + tokens << [:open, :index] + tokens << [i.to_s, :content] + tokens << [:close, :index] + end + assert_equal 20, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :include => :blubb).size + assert_equal 20, tokens.token_class_filter(:include => :blubb).size + assert_equal 30, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :exclude => :index).size + assert_equal 30, tokens.token_class_filter(:exclude => :index).size + end + +end |