2010-12-28 17:08:56 -05:00
|
|
|
require 'rubygems'
|
|
|
|
require 'minitest/autorun'
|
|
|
|
require 'rdoc/stats'
|
|
|
|
require 'rdoc/code_objects'
|
|
|
|
require 'rdoc/markup'
|
|
|
|
require 'rdoc/parser'
|
|
|
|
|
|
|
|
class TestRDocStats < MiniTest::Unit::TestCase
|
|
|
|
|
|
|
|
def setup
|
|
|
|
RDoc::TopLevel.reset
|
|
|
|
|
|
|
|
@s = RDoc::Stats.new 0
|
|
|
|
end
|
|
|
|
|
2011-02-01 19:32:30 -05:00
|
|
|
def test_report_attr
|
|
|
|
tl = RDoc::TopLevel.new 'file.rb'
|
|
|
|
c = tl.add_class RDoc::NormalClass, 'C'
|
|
|
|
c.record_location tl
|
|
|
|
c.comment = 'C'
|
|
|
|
|
|
|
|
a = RDoc::Attr.new nil, 'a', 'RW', nil
|
|
|
|
a.record_location tl
|
|
|
|
c.add_attribute a
|
|
|
|
|
|
|
|
RDoc::TopLevel.complete :public
|
|
|
|
|
|
|
|
report = @s.report
|
|
|
|
|
|
|
|
expected = <<-EXPECTED
|
|
|
|
The following items are not documented:
|
|
|
|
|
|
|
|
class C # is documented
|
|
|
|
|
|
|
|
attr_accessor :a # in file file.rb
|
|
|
|
end
|
|
|
|
EXPECTED
|
|
|
|
|
|
|
|
assert_equal expected, report
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_report_attr_documented
|
|
|
|
tl = RDoc::TopLevel.new 'file.rb'
|
|
|
|
c = tl.add_class RDoc::NormalClass, 'C'
|
|
|
|
c.record_location tl
|
|
|
|
c.comment = 'C'
|
|
|
|
|
|
|
|
a = RDoc::Attr.new nil, 'a', 'RW', 'a'
|
|
|
|
a.record_location tl
|
|
|
|
c.add_attribute a
|
|
|
|
|
|
|
|
RDoc::TopLevel.complete :public
|
|
|
|
|
|
|
|
report = @s.report
|
|
|
|
|
|
|
|
assert_equal @s.great_job, report
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_report_constant
|
|
|
|
tl = RDoc::TopLevel.new 'file.rb'
|
|
|
|
m = tl.add_module RDoc::NormalModule, 'M'
|
|
|
|
m.record_location tl
|
|
|
|
m.comment = 'M'
|
|
|
|
|
|
|
|
c = RDoc::Constant.new 'C', nil, nil
|
|
|
|
c.record_location tl
|
|
|
|
m.add_constant c
|
|
|
|
|
|
|
|
RDoc::TopLevel.complete :public
|
|
|
|
|
|
|
|
report = @s.report
|
|
|
|
|
|
|
|
expected = <<-EXPECTED
|
|
|
|
The following items are not documented:
|
|
|
|
|
|
|
|
module M # is documented
|
|
|
|
|
|
|
|
# in file file.rb
|
|
|
|
C = nil
|
|
|
|
end
|
|
|
|
EXPECTED
|
|
|
|
|
|
|
|
assert_equal expected, report
|
|
|
|
end
|
|
|
|
|
2010-12-28 17:08:56 -05:00
|
|
|
def test_report_constant_alias
|
2011-02-01 19:32:30 -05:00
|
|
|
tl = RDoc::TopLevel.new 'file.rb'
|
2010-12-28 17:08:56 -05:00
|
|
|
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
|
|
|
|
|
|
|
|
RDoc::TopLevel.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)
|
|
|
|
end
|
|
|
|
|
2011-02-01 19:32:30 -05:00
|
|
|
def test_report_constant_documented
|
|
|
|
tl = RDoc::TopLevel.new 'file.rb'
|
|
|
|
m = tl.add_module RDoc::NormalModule, 'M'
|
|
|
|
m.record_location tl
|
|
|
|
m.comment = 'M'
|
|
|
|
|
|
|
|
c = RDoc::Constant.new 'C', nil, 'C'
|
|
|
|
c.record_location tl
|
|
|
|
m.add_constant c
|
|
|
|
|
|
|
|
RDoc::TopLevel.complete :public
|
|
|
|
|
|
|
|
report = @s.report
|
|
|
|
|
|
|
|
assert_equal @s.great_job, report
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_report_class
|
|
|
|
tl = RDoc::TopLevel.new 'file.rb'
|
|
|
|
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'
|
|
|
|
|
|
|
|
RDoc::TopLevel.complete :public
|
|
|
|
|
|
|
|
report = @s.report
|
|
|
|
|
|
|
|
expected = <<-EXPECTED
|
|
|
|
The following items are not documented:
|
|
|
|
|
|
|
|
# in files:
|
|
|
|
# file.rb
|
|
|
|
|
|
|
|
class C
|
|
|
|
end
|
|
|
|
EXPECTED
|
|
|
|
|
|
|
|
assert_equal expected, report
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_report_class_documented
|
|
|
|
tl = RDoc::TopLevel.new 'file.rb'
|
|
|
|
c = tl.add_class RDoc::NormalClass, 'C'
|
|
|
|
c.record_location tl
|
|
|
|
c.comment = 'C'
|
|
|
|
|
|
|
|
m = RDoc::AnyMethod.new nil, 'm'
|
|
|
|
m.record_location tl
|
|
|
|
c.add_method m
|
|
|
|
m.comment = 'm'
|
|
|
|
|
|
|
|
RDoc::TopLevel.complete :public
|
|
|
|
|
|
|
|
report = @s.report
|
|
|
|
|
|
|
|
assert_equal @s.great_job, report
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_report_class_documented_level_1
|
|
|
|
tl = RDoc::TopLevel.new 'file.rb'
|
|
|
|
c1 = tl.add_class RDoc::NormalClass, 'C1'
|
|
|
|
c1.record_location tl
|
|
|
|
c1.comment = 'C1'
|
|
|
|
|
|
|
|
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'
|
|
|
|
|
|
|
|
RDoc::TopLevel.complete :public
|
|
|
|
|
|
|
|
@s.coverage_level = 1
|
|
|
|
|
|
|
|
report = @s.report
|
|
|
|
|
|
|
|
expected = <<-EXPECTED
|
|
|
|
The following items are not documented:
|
|
|
|
|
|
|
|
|
|
|
|
# in files:
|
|
|
|
# file.rb
|
|
|
|
|
|
|
|
class C2
|
|
|
|
end
|
|
|
|
EXPECTED
|
|
|
|
|
|
|
|
assert_equal expected, report
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_report_class_empty
|
|
|
|
tl = RDoc::TopLevel.new 'file.rb'
|
|
|
|
tl.add_class RDoc::NormalClass, 'C'
|
|
|
|
|
|
|
|
RDoc::TopLevel.complete :public
|
|
|
|
|
|
|
|
report = @s.report
|
|
|
|
|
|
|
|
expected = <<-EXPECTED
|
|
|
|
The following items are not documented:
|
|
|
|
|
|
|
|
# class C is referenced but empty.
|
|
|
|
#
|
|
|
|
# It probably came from another project. I'm sorry I'm holding it against you.
|
|
|
|
EXPECTED
|
|
|
|
|
|
|
|
assert_equal expected, report
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_report_class_empty_2
|
|
|
|
tl = RDoc::TopLevel.new 'file.rb'
|
|
|
|
c1 = tl.add_class RDoc::NormalClass, 'C1'
|
|
|
|
c1.record_location tl
|
|
|
|
|
|
|
|
c2 = tl.add_class RDoc::NormalClass, 'C2'
|
|
|
|
c2.record_location tl
|
|
|
|
c2.comment = 'C2'
|
|
|
|
|
|
|
|
RDoc::TopLevel.complete :public
|
|
|
|
|
|
|
|
@s.coverage_level = 1
|
|
|
|
report = @s.report
|
|
|
|
|
|
|
|
expected = <<-EXPECTED
|
|
|
|
The following items are not documented:
|
|
|
|
|
|
|
|
# in files:
|
|
|
|
# file.rb
|
|
|
|
|
|
|
|
class C1
|
|
|
|
end
|
|
|
|
|
|
|
|
EXPECTED
|
|
|
|
|
|
|
|
assert_equal expected, report
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_report_class_method_documented
|
|
|
|
tl = RDoc::TopLevel.new 'file.rb'
|
|
|
|
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'
|
|
|
|
|
|
|
|
RDoc::TopLevel.complete :public
|
|
|
|
|
|
|
|
report = @s.report
|
|
|
|
|
|
|
|
expected = <<-EXPECTED
|
|
|
|
The following items are not documented:
|
|
|
|
|
|
|
|
# in files:
|
|
|
|
# file.rb
|
|
|
|
|
|
|
|
class C
|
|
|
|
end
|
|
|
|
EXPECTED
|
|
|
|
|
|
|
|
assert_equal expected, report
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_report_empty
|
|
|
|
RDoc::TopLevel.complete :public
|
|
|
|
|
|
|
|
report = @s.report
|
|
|
|
|
|
|
|
assert_equal @s.great_job, report
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_report_method
|
|
|
|
tl = RDoc::TopLevel.new 'file.rb'
|
|
|
|
c = tl.add_class RDoc::NormalClass, 'C'
|
|
|
|
c.record_location tl
|
|
|
|
c.comment = 'C'
|
|
|
|
|
|
|
|
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'
|
|
|
|
|
|
|
|
RDoc::TopLevel.complete :public
|
|
|
|
|
|
|
|
report = @s.report
|
|
|
|
|
|
|
|
expected = <<-EXPECTED
|
|
|
|
The following items are not documented:
|
|
|
|
|
|
|
|
class C # is documented
|
|
|
|
|
|
|
|
# in file file.rb
|
|
|
|
def m1; end
|
|
|
|
|
|
|
|
end
|
|
|
|
EXPECTED
|
|
|
|
|
|
|
|
assert_equal expected, report
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_report_method_documented
|
|
|
|
tl = RDoc::TopLevel.new 'file.rb'
|
|
|
|
c = tl.add_class RDoc::NormalClass, 'C'
|
|
|
|
c.record_location tl
|
|
|
|
c.comment = 'C'
|
|
|
|
|
|
|
|
m = RDoc::AnyMethod.new nil, 'm'
|
|
|
|
m.record_location tl
|
|
|
|
c.add_method m
|
|
|
|
m.comment = 'm'
|
|
|
|
|
|
|
|
RDoc::TopLevel.complete :public
|
|
|
|
|
|
|
|
report = @s.report
|
|
|
|
|
|
|
|
assert_equal @s.great_job, report
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_report_method_parameters
|
|
|
|
tl = RDoc::TopLevel.new 'file.rb'
|
|
|
|
c = tl.add_class RDoc::NormalClass, 'C'
|
|
|
|
c.record_location tl
|
|
|
|
c.comment = 'C'
|
|
|
|
|
|
|
|
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'
|
|
|
|
|
|
|
|
RDoc::TopLevel.complete :public
|
|
|
|
|
|
|
|
@s.coverage_level = 1
|
|
|
|
report = @s.report
|
|
|
|
|
|
|
|
expected = <<-EXPECTED
|
|
|
|
The following items are not documented:
|
|
|
|
|
|
|
|
class C # is documented
|
|
|
|
|
|
|
|
# in file file.rb
|
|
|
|
# +p2+ is not documented
|
|
|
|
def m1(p1, p2); end
|
|
|
|
|
|
|
|
end
|
|
|
|
EXPECTED
|
|
|
|
|
|
|
|
assert_equal expected, report
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_report_method_parameters_documented
|
|
|
|
tl = RDoc::TopLevel.new 'file.rb'
|
|
|
|
c = tl.add_class RDoc::NormalClass, 'C'
|
|
|
|
c.record_location tl
|
|
|
|
c.comment = 'C'
|
|
|
|
|
|
|
|
m = RDoc::AnyMethod.new nil, 'm'
|
|
|
|
m.record_location tl
|
|
|
|
m.params = '(p1)'
|
|
|
|
m.comment = 'Stuff with +p1+'
|
|
|
|
c.add_method m
|
|
|
|
|
|
|
|
RDoc::TopLevel.complete :public
|
|
|
|
|
|
|
|
@s.coverage_level = 1
|
|
|
|
report = @s.report
|
|
|
|
|
|
|
|
assert_equal @s.great_job, report
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_report_method_parameters_yield
|
|
|
|
tl = RDoc::TopLevel.new 'file.rb'
|
|
|
|
c = tl.add_class RDoc::NormalClass, 'C'
|
|
|
|
c.record_location tl
|
|
|
|
c.comment = 'C'
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
RDoc::TopLevel.complete :public
|
|
|
|
|
|
|
|
@s.coverage_level = 1
|
|
|
|
report = @s.report
|
|
|
|
|
|
|
|
expected = <<-EXPECTED
|
|
|
|
The following items are not documented:
|
|
|
|
|
|
|
|
class C # is documented
|
|
|
|
|
|
|
|
# in file file.rb
|
|
|
|
# +b+, +d+ is not documented
|
|
|
|
def m; end
|
|
|
|
|
|
|
|
end
|
|
|
|
EXPECTED
|
|
|
|
|
|
|
|
assert_equal expected, report
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_summary
|
|
|
|
tl = RDoc::TopLevel.new 'file.rb'
|
|
|
|
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
|
|
|
|
|
|
|
|
RDoc::TopLevel.complete :public
|
|
|
|
|
|
|
|
summary = @s.summary
|
|
|
|
summary.sub!(/Elapsed:.*/, '')
|
|
|
|
|
|
|
|
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
|
|
|
|
tl = RDoc::TopLevel.new 'file.rb'
|
|
|
|
c = tl.add_class RDoc::NormalClass, 'C'
|
|
|
|
c.record_location tl
|
|
|
|
|
|
|
|
RDoc::TopLevel.complete :public
|
|
|
|
|
|
|
|
@s.coverage_level = false
|
|
|
|
|
|
|
|
summary = @s.summary
|
|
|
|
summary.sub!(/Elapsed:.*/, '')
|
|
|
|
|
|
|
|
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
|
|
|
|
tl = RDoc::TopLevel.new 'file.rb'
|
|
|
|
c = tl.add_class RDoc::NormalClass, 'C'
|
|
|
|
c.record_location tl
|
|
|
|
c.comment = 'C'
|
|
|
|
|
|
|
|
m = RDoc::AnyMethod.new nil, 'm'
|
|
|
|
m.record_location tl
|
|
|
|
m.params = '(p1, p2)'
|
|
|
|
m.comment = 'Stuff with +p1+'
|
|
|
|
c.add_method m
|
|
|
|
|
|
|
|
RDoc::TopLevel.complete :public
|
|
|
|
|
|
|
|
@s.coverage_level = 1
|
|
|
|
@s.report
|
|
|
|
|
|
|
|
summary = @s.summary
|
|
|
|
summary.sub!(/Elapsed:.*/, '')
|
|
|
|
|
|
|
|
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
|
|
|
|
|
2010-12-28 17:08:56 -05:00
|
|
|
end
|
|
|
|
|