summaryrefslogtreecommitdiff
path: root/lib/coderay/encoders
diff options
context:
space:
mode:
authormurphy <murphy@rubychan.de>2009-12-30 07:04:02 +0000
committermurphy <murphy@rubychan.de>2009-12-30 07:04:02 +0000
commit1203a2900ca86f08c9caddb7b13c9ec3765b9f52 (patch)
treefc8150924cd5cd4a981779f78de6025e97a08be1 /lib/coderay/encoders
parent21421f836ae4ffe7c10745ce1db8e40862c9b22b (diff)
downloadcoderay-1203a2900ca86f08c9caddb7b13c9ec3765b9f52.tar.gz
Filters: Cleanups, refactorization, tests.
Diffstat (limited to 'lib/coderay/encoders')
-rw-r--r--lib/coderay/encoders/comment_filter.rb29
-rw-r--r--lib/coderay/encoders/filter.rb59
-rw-r--r--lib/coderay/encoders/token_class_filter.rb62
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