diff options
author | murphy <murphy@rubychan.de> | 2010-05-01 01:31:56 +0000 |
---|---|---|
committer | murphy <murphy@rubychan.de> | 2010-05-01 01:31:56 +0000 |
commit | fa975bbf5d40644d987887b4cf273a3f02612f03 (patch) | |
tree | 5ffada8100c1b6cb9057dec7985daaf6d1851396 /lib/coderay/encoders/statistic.rb | |
parent | e271dc13633fa6dba9fb87f415d72505af0cc88c (diff) | |
download | coderay-fa975bbf5d40644d987887b4cf273a3f02612f03.tar.gz |
Direct Streaming! See #142 and Changes.textile.
Diffstat (limited to 'lib/coderay/encoders/statistic.rb')
-rw-r--r-- | lib/coderay/encoders/statistic.rb | 85 |
1 files changed, 83 insertions, 2 deletions
diff --git a/lib/coderay/encoders/statistic.rb b/lib/coderay/encoders/statistic.rb index 1b38938..d267b21 100644 --- a/lib/coderay/encoders/statistic.rb +++ b/lib/coderay/encoders/statistic.rb @@ -1,3 +1,4 @@ +($:.unshift '../..'; require 'coderay') unless defined? CodeRay module CodeRay module Encoders @@ -34,9 +35,25 @@ module Encoders end # TODO Hierarchy handling - def block_token action, kind + def begin_group kind + block_token 'begin_group' + end + + def end_group kind + block_token 'end_group' + end + + def begin_line kind + block_token 'begin_line' + end + + def end_line kind + block_token 'end_line' + end + + def block_token action @type_stats['TOTAL'].count += 1 - @type_stats['open/close'].count += 1 + @type_stats[action].count += 1 end STATS = <<-STATS # :nodoc: @@ -77,3 +94,67 @@ Token Types (%d): 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 StatisticEncoderTest < Test::Unit::TestCase + + def test_creation + assert CodeRay::Encoders::Statistic < CodeRay::Encoders::Encoder + stats = nil + assert_nothing_raised do + stats = CodeRay.encoder :statistic + end + assert_kind_of CodeRay::Encoders::Encoder, stats + end + + TEST_INPUT = CodeRay::Tokens[ + ['10', :integer], + ['(\\)', :operator], + [:begin_group, :string], + ['test', :content], + [:end_group, :string], + [:begin_line, :test], + ["\n", :space], + ["\n \t", :space], + [" \n", :space], + ["[]", :method], + [:end_line, :test], + ].flatten + TEST_OUTPUT = <<-'DEBUG' + +Code Statistics + +Tokens 11 + Non-Whitespace 4 +Bytes Total 20 + +Token Types (5): + type count ratio size (average) +------------------------------------------------------------- + TOTAL 11 100.00 % 1.8 + space 3 27.27 % 3.0 + begin_group 1 9.09 % 0.0 + begin_line 1 9.09 % 0.0 + content 1 9.09 % 4.0 + end_group 1 9.09 % 0.0 + end_line 1 9.09 % 0.0 + integer 1 9.09 % 2.0 + method 1 9.09 % 2.0 + operator 1 9.09 % 3.0 + + DEBUG + + def test_filtering_text_tokens + assert_equal TEST_OUTPUT, CodeRay::Encoders::Statistic.new.encode_tokens(TEST_INPUT) + assert_equal TEST_OUTPUT, TEST_INPUT.statistic + end + +end
\ No newline at end of file |