diff options
Diffstat (limited to 'jni/ruby/test/rdoc/test_rdoc_stats.rb')
-rw-r--r-- | jni/ruby/test/rdoc/test_rdoc_stats.rb | 722 |
1 files changed, 722 insertions, 0 deletions
diff --git a/jni/ruby/test/rdoc/test_rdoc_stats.rb b/jni/ruby/test/rdoc/test_rdoc_stats.rb new file mode 100644 index 0000000..cd37c29 --- /dev/null +++ b/jni/ruby/test/rdoc/test_rdoc_stats.rb @@ -0,0 +1,722 @@ +require 'rdoc/test_case' + +class TestRDocStats < RDoc::TestCase + + def setup + super + + @s = RDoc::Stats.new @store, 0 + + @tl = @store.add_file 'file.rb' + @tl.parser = RDoc::Parser::Ruby + end + + def test_doc_stats + c = RDoc::CodeObject.new + + assert_equal [1, 1], @s.doc_stats([c]) + end + + def test_doc_stats_documented + c = RDoc::CodeObject.new + c.comment = comment 'x' + + assert_equal [1, 0], @s.doc_stats([c]) + end + + def test_doc_stats_display_eh + c = RDoc::CodeObject.new + c.ignore + + assert_equal [0, 0], @s.doc_stats([c]) + end + + def test_report_attr + c = @tl.add_class RDoc::NormalClass, 'C' + c.record_location @tl + c.add_comment 'C', @tl + + a = RDoc::Attr.new nil, 'a', 'RW', nil + a.record_location @tl + c.add_attribute a + + @store.complete :public + + report = @s.report + + expected = + doc( + para('The following items are not documented:'), + blank_line, + verb( + "class C # is documented\n", + "\n", + " attr_accessor :a # in file file.rb\n", + "\n", + "end\n"), + blank_line) + + assert_equal expected, report + end + + def test_report_attr_documented + c = @tl.add_class RDoc::NormalClass, 'C' + c.record_location @tl + c.add_comment 'C', @tl + + a = RDoc::Attr.new nil, 'a', 'RW', 'a' + a.record_location @tl + c.add_attribute a + + @store.complete :public + + report = @s.report + + assert_equal @s.great_job, report + end + + def test_report_attr_line + c = @tl.add_class RDoc::NormalClass, 'C' + c.record_location @tl + c.add_comment 'C', @tl + + a = RDoc::Attr.new nil, 'a', 'RW', nil + a.record_location @tl + a.line = 3 + c.add_attribute a + + @store.complete :public + + assert_match '# in file file.rb:3', @s.report.accept(to_rdoc) + end + + def test_report_constant + m = @tl.add_module RDoc::NormalModule, 'M' + m.record_location @tl + m.add_comment 'M', @tl + + c = RDoc::Constant.new 'C', nil, nil + c.record_location @tl + m.add_constant c + + @store.complete :public + + report = @s.report + + expected = + doc( + para('The following items are not documented:'), + blank_line, + verb( + "module M # is documented\n", + "\n", + " # in file file.rb\n", + " C = nil\n", + "\n", + "end\n"), + blank_line) + + assert_equal expected, report + end + + def test_report_constant_alias + mod = @tl.add_module RDoc::NormalModule, 'M' + + c = @tl.add_class RDoc::NormalClass, 'C' + mod.add_constant c + + ca = RDoc::Constant.new 'CA', nil, nil + ca.is_alias_for = c + + @tl.add_constant ca + + @store.complete :public + + report = @s.report + + # TODO change this to refute match, aliases should be ignored as they are + # programmer convenience constructs + assert_match 'class Object', report.accept(to_rdoc) + end + + def test_report_constant_documented + m = @tl.add_module RDoc::NormalModule, 'M' + m.record_location @tl + m.add_comment 'M', @tl + + c = RDoc::Constant.new 'C', nil, 'C' + c.record_location @tl + m.add_constant c + + @store.complete :public + + report = @s.report + + assert_equal @s.great_job, report + end + + def test_report_constant_line + m = @tl.add_module RDoc::NormalModule, 'M' + m.record_location @tl + m.add_comment 'M', @tl + + c = RDoc::Constant.new 'C', nil, nil + c.record_location @tl + c.line = 5 + m.add_constant c + + @store.complete :public + + assert_match '# in file file.rb:5', @s.report.accept(to_rdoc) + end + + def test_report_class + c = @tl.add_class RDoc::NormalClass, 'C' + c.record_location @tl + + m = RDoc::AnyMethod.new nil, 'm' + m.record_location @tl + c.add_method m + m.comment = 'm' + + @store.complete :public + + report = @s.report + + expected = + doc( + para('The following items are not documented:'), + blank_line, + para('In files:'), + list(:BULLET, *[ + item(nil, para('file.rb'))]), + blank_line, + verb("class C\n", "end\n"), + blank_line) + + assert_equal expected, report + end + + def test_report_skip_object + c = @tl.add_class RDoc::NormalClass, 'Object' + c.record_location @tl + + m = RDoc::AnyMethod.new nil, 'm' + m.record_location @tl + c.add_method m + m.comment = 'm' + + @store.complete :public + + refute_match %r%^class Object$%, @s.report.accept(to_rdoc) + end + + def test_report_class_documented + c = @tl.add_class RDoc::NormalClass, 'C' + c.record_location @tl + c.add_comment 'C', @tl + + m = RDoc::AnyMethod.new nil, 'm' + m.record_location @tl + c.add_method m + m.comment = 'm' + + @store.complete :public + + report = @s.report + + assert_equal @s.great_job, report + end + + def test_report_class_documented_level_1 + c1 = @tl.add_class RDoc::NormalClass, 'C1' + c1.record_location @tl + c1.add_comment 'C1', @tl + + m1 = RDoc::AnyMethod.new nil, 'm1' + m1.record_location @tl + c1.add_method m1 + m1.comment = 'm1' + + c2 = @tl.add_class RDoc::NormalClass, 'C2' + c2.record_location @tl + + m2 = RDoc::AnyMethod.new nil, 'm2' + m2.record_location @tl + c2.add_method m2 + m2.comment = 'm2' + + @store.complete :public + + @s.coverage_level = 1 + + report = @s.report + + expected = + doc( + para('The following items are not documented:'), + blank_line, + para('In files:'), + list(:BULLET, *[ + item(nil, para('file.rb'))]), + blank_line, + verb("class C2\n", "end\n"), + blank_line) + + assert_equal expected, report + end + + def test_report_class_empty + @tl.add_class RDoc::NormalClass, 'C' + + @store.complete :public + + report = @s.report + + expected = + doc( + para('The following items are not documented:'), + blank_line, + para('class C is referenced but empty.'), + para("It probably came from another project. I'm sorry I'm holding it against you."), + blank_line) + + assert_equal expected, report + end + + def test_report_class_empty_2 + c1 = @tl.add_class RDoc::NormalClass, 'C1' + c1.record_location @tl + + c2 = @tl.add_class RDoc::NormalClass, 'C2' + c2.record_location @tl + c2.add_comment 'C2', @tl + + @store.complete :public + + @s.coverage_level = 1 + report = @s.report + + expected = + doc( + para('The following items are not documented:'), + blank_line, + para('In files:'), + list(:BULLET, *[ + item(nil, para('file.rb'))]), + blank_line, + verb("class C1\n", "end\n"), + blank_line) + + assert_equal expected, report + end + + def test_report_class_method_documented + c = @tl.add_class RDoc::NormalClass, 'C' + c.record_location @tl + + m = RDoc::AnyMethod.new nil, 'm' + m.record_location @tl + c.add_method m + m.comment = 'm' + + @store.complete :public + + report = @s.report + + expected = + doc( + para('The following items are not documented:'), + blank_line, + para('In files:'), + list(:BULLET, *[ + item(nil, para('file.rb'))]), + blank_line, + verb("class C\n", "end\n"), + blank_line) + + assert_equal expected, report + end + + def test_report_class_module_ignore + c = @tl.add_class RDoc::NormalClass, 'C' + c.ignore + + @store.complete :public + + report = @s.report_class_module c + + assert_nil report + end + + def test_report_empty + @store.complete :public + + report = @s.report + + assert_equal @s.great_job, report + end + + def test_report_method + c = @tl.add_class RDoc::NormalClass, 'C' + c.record_location @tl + c.add_comment 'C', @tl + + m1 = RDoc::AnyMethod.new nil, 'm1' + m1.record_location @tl + c.add_method m1 + + m2 = RDoc::AnyMethod.new nil, 'm2' + m2.record_location @tl + c.add_method m2 + m2.comment = 'm2' + + @store.complete :public + + report = @s.report + + expected = + doc( + para('The following items are not documented:'), + blank_line, + verb(*[ + "class C # is documented\n", + "\n", + " # in file file.rb\n", + " def m1; end\n", + "\n", + "end\n"]), + blank_line) + + assert_equal expected, report + end + + def test_report_method_class + c = @tl.add_class RDoc::NormalClass, 'C' + c.record_location @tl + c.add_comment 'C', @tl + + m1 = RDoc::AnyMethod.new nil, 'm1' + m1.record_location @tl + m1.singleton = true + c.add_method m1 + + m2 = RDoc::AnyMethod.new nil, 'm2' + m2.record_location @tl + m2.singleton = true + c.add_method m2 + m2.comment = 'm2' + + @store.complete :public + + report = @s.report + + expected = + doc( + para('The following items are not documented:'), + blank_line, + verb(*[ + "class C # is documented\n", + "\n", + " # in file file.rb\n", + " def self.m1; end\n", + "\n", + "end\n"]), + blank_line) + + assert_equal expected, report + end + + def test_report_method_documented + c = @tl.add_class RDoc::NormalClass, 'C' + c.record_location @tl + c.add_comment 'C', @tl + + m = RDoc::AnyMethod.new nil, 'm' + m.record_location @tl + c.add_method m + m.comment = 'm' + + @store.complete :public + + report = @s.report + + assert_equal @s.great_job, report + end + + def test_report_method_line + c = @tl.add_class RDoc::NormalClass, 'C' + c.record_location @tl + c.add_comment 'C', @tl + + m1 = RDoc::AnyMethod.new nil, 'm1' + m1.record_location @tl + m1.line = 4 + c.add_method m1 + + @store.complete :public + + assert_match '# in file file.rb:4', @s.report.accept(to_rdoc) + end + + def test_report_method_parameters + c = @tl.add_class RDoc::NormalClass, 'C' + c.record_location @tl + c.add_comment 'C', @tl + + m1 = RDoc::AnyMethod.new nil, 'm1' + m1.record_location @tl + m1.params = '(p1, p2)' + m1.comment = 'Stuff with +p1+' + c.add_method m1 + + m2 = RDoc::AnyMethod.new nil, 'm2' + m2.record_location @tl + c.add_method m2 + m2.comment = 'm2' + + @store.complete :public + + @s.coverage_level = 1 + report = @s.report + + expected = + doc( + para('The following items are not documented:'), + blank_line, + verb(*[ + "class C # is documented\n", + "\n", + " # in file file.rb\n", + " # +p2+ is not documented\n", + " def m1(p1, p2); end\n", + "\n", + "end\n"]), + blank_line) + + assert_equal expected, report + end + + def test_report_method_parameters_documented + @tl.parser = RDoc::Parser::Ruby + c = @tl.add_class RDoc::NormalClass, 'C' + c.record_location @tl + c.add_comment 'C', @tl + + m = RDoc::AnyMethod.new nil, 'm' + m.record_location @tl + m.params = '(p1)' + m.comment = 'Stuff with +p1+' + c.add_method m + + @store.complete :public + + @s.coverage_level = 1 + report = @s.report + + assert_equal @s.great_job, report + end + + def test_report_method_parameters_yield + c = @tl.add_class RDoc::NormalClass, 'C' + c.record_location @tl + c.add_comment 'C', @tl + + m = RDoc::AnyMethod.new nil, 'm' + m.record_location @tl + m.call_seq = <<-SEQ +m(a) { |c| ... } +m(a, b) { |c, d| ... } + SEQ + m.comment = 'Stuff with +a+, yields +c+ for you to do stuff with' + c.add_method m + + @store.complete :public + + @s.coverage_level = 1 + report = @s.report + + expected = + doc( + para('The following items are not documented:'), + blank_line, + verb( + "class C # is documented\n", + "\n", + " # in file file.rb\n", + " # +b+, +d+ is not documented\n", + " def m; end\n", + "\n", + "end\n"), + blank_line) + + assert_equal expected, report + end + + def test_summary + c = @tl.add_class RDoc::NormalClass, 'C' + c.record_location @tl + + m = @tl.add_module RDoc::NormalModule, 'M' + m.record_location @tl + + a = RDoc::Attr.new nil, 'a', 'RW', nil + a.record_location @tl + c.add_attribute a + + c_c = RDoc::Constant.new 'C', nil, nil + c_c.record_location @tl + c.add_constant c_c + + m = RDoc::AnyMethod.new nil, 'm' + m.record_location @tl + c.add_method m + + @store.complete :public + + summary = @s.summary.accept to_rdoc + summary.sub!(/ Elapsed:.*/m, '') + + expected = <<-EXPECTED + Files: 0 + + Classes: 1 (1 undocumented) + Modules: 1 (1 undocumented) + Constants: 1 (1 undocumented) + Attributes: 1 (1 undocumented) + Methods: 1 (1 undocumented) + + Total: 5 (5 undocumented) + 0.00% documented + + EXPECTED + + assert_equal summary, expected + end + + def test_summary_level_false + c = @tl.add_class RDoc::NormalClass, 'C' + c.record_location @tl + + @store.complete :public + + @s.coverage_level = false + + summary = @s.summary.accept to_rdoc + summary.sub!(/ Elapsed:.*/m, '') + + expected = <<-EXPECTED + Files: 0 + + Classes: 1 (1 undocumented) + Modules: 0 (0 undocumented) + Constants: 0 (0 undocumented) + Attributes: 0 (0 undocumented) + Methods: 0 (0 undocumented) + + Total: 1 (1 undocumented) + 0.00% documented + + EXPECTED + + assert_equal summary, expected + end + + def test_summary_level_1 + c = @tl.add_class RDoc::NormalClass, 'C' + c.record_location @tl + c.add_comment 'C', @tl + + m = RDoc::AnyMethod.new nil, 'm' + m.record_location @tl + m.params = '(p1, p2)' + m.comment = 'Stuff with +p1+' + c.add_method m + + @store.complete :public + + @s.coverage_level = 1 + @s.report + + summary = @s.summary.accept to_rdoc + summary.sub!(/ Elapsed:.*/m, '') + + expected = <<-EXPECTED + Files: 0 + + Classes: 1 (0 undocumented) + Modules: 0 (0 undocumented) + Constants: 0 (0 undocumented) + Attributes: 0 (0 undocumented) + Methods: 1 (0 undocumented) + Parameters: 2 (1 undocumented) + + Total: 4 (1 undocumented) + 75.00% documented + + EXPECTED + + assert_equal summary, expected + end + + def to_rdoc + RDoc::Markup::ToRdoc.new + end + + def test_undoc_params + method = RDoc::AnyMethod.new [], 'm' + method.params = '(a)' + method.comment = comment 'comment' + + total, undoc = @s.undoc_params method + + assert_equal 1, total + assert_equal %w[a], undoc + end + + def test_undoc_params_block + method = RDoc::AnyMethod.new [], 'm' + method.params = '(&a)' + method.comment = comment '+a+' + + total, undoc = @s.undoc_params method + + assert_equal 1, total + assert_empty undoc + end + + def test_undoc_params_documented + method = RDoc::AnyMethod.new [], 'm' + method.params = '(a)' + method.comment = comment '+a+' + + total, undoc = @s.undoc_params method + + assert_equal 1, total + assert_empty undoc + end + + def test_undoc_params_keywords + method = RDoc::AnyMethod.new [], 'm' + method.params = '(**a)' + method.comment = comment '+a+' + + total, undoc = @s.undoc_params method + + assert_equal 1, total + assert_empty undoc + end + + def test_undoc_params_splat + method = RDoc::AnyMethod.new [], 'm' + method.params = '(*a)' + method.comment = comment '+a+' + + total, undoc = @s.undoc_params method + + assert_equal 1, total + assert_empty undoc + end + +end + |