aboutsummaryrefslogtreecommitdiffstats
path: root/test/rdoc/test_rdoc_parser_ruby.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/rdoc/test_rdoc_parser_ruby.rb')
-rw-r--r--test/rdoc/test_rdoc_parser_ruby.rb305
1 files changed, 270 insertions, 35 deletions
diff --git a/test/rdoc/test_rdoc_parser_ruby.rb b/test/rdoc/test_rdoc_parser_ruby.rb
index e28112fbee..ce2aaae981 100644
--- a/test/rdoc/test_rdoc_parser_ruby.rb
+++ b/test/rdoc/test_rdoc_parser_ruby.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require 'rdoc/test_case'
+require 'minitest_helper'
class TestRDocParserRuby < RDoc::TestCase
@@ -231,8 +231,8 @@ class C; end
@parser.look_for_directives_in @top_level, comment
section = @top_level.current_section
- assert_equal nil, section.title
- assert_equal nil, section.comment
+ assert_nil section.title
+ assert_nil section.comment
assert_equal "# how to make a section:\n# # :section: new section\n",
comment.text
@@ -306,6 +306,67 @@ ruby
assert_equal @top_level, sum.file
end
+ def test_parse_on_ignored_nl_with_nil_text
+ util_parser <<ruby
+class Foo
+ def meth
+ variable # comment
+ .chain
+ end
+end
+ruby
+
+ expected = <<EXPECTED
+<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">meth</span>
+ <span class="ruby-identifier">variable</span> <span class="ruby-comment"># comment</span>
+ .<span class="ruby-identifier">chain</span>
+<span class="ruby-keyword">end</span>
+EXPECTED
+ expected = expected.rstrip
+
+ @parser.scan
+
+ foo = @store.find_class_named 'Foo'
+ meth = foo.method_list.first
+
+ assert_equal 'meth', meth.name
+ assert_equal @top_level, meth.file
+
+ markup_code = meth.markup_code.sub(/^.*\n/, '')
+ assert_equal expected, markup_code
+ end
+
+ def test_parse_redefined_op_with_constant
+ klass = RDoc::NormalClass.new 'Foo'
+ klass.parent = @top_level
+
+ comment = RDoc::Comment.new '', @top_level
+
+ util_parser <<ruby
+def meth
+ Integer::**()
+ return Integer::**()
+ break Integer::**()
+ case Integer::**()
+ when Integer::**()
+ end
+ while Integer::**()
+ end
+ yield Integer::**()
+ defined? Integer::**()
+ if Integer::**()
+ end
+end
+ruby
+
+ tk = @parser.get_tk
+
+ @parser.parse_method klass, RDoc::Parser::Ruby::NORMAL, tk, comment
+
+ meth = klass.method_list.first
+ assert_equal 'meth', meth.name
+ end
+
def test_parse_alias
klass = RDoc::NormalClass.new 'Foo'
klass.parent = @top_level
@@ -813,6 +874,31 @@ end
assert_match(/Expected class name or '<<'\. Got/, err)
end
+ def test_parse_syntax_error_code
+ @options.verbosity = 2
+ stds = capture_io do
+ begin
+ util_parser <<INVALID_CODE
+# invalid class name
+class Invalid::@@Code
+end
+INVALID_CODE
+ @parser.scan
+ rescue
+ end
+ end
+ err = stds[1]
+
+ expected = <<EXPECTED
+RDoc::Parser::Ruby failure around line 2 of
+#{@filename}
+
+class Invalid::@@Code
+EXPECTED
+
+ assert_match(expected, err)
+ end
+
def test_parse_multi_ghost_methods
util_parser <<-'CLASS'
class Foo
@@ -1139,7 +1225,7 @@ EOF
assert_equal @top_level, foo.file
assert_equal 1, foo.line
- assert_equal nil, foo.viewer
+ assert_nil foo.viewer
assert_equal true, foo.document_children
assert_equal true, foo.document_self
assert_equal false, foo.done_documenting
@@ -1202,21 +1288,21 @@ EOF
assert_equal @top_level, foo.file
assert_equal 1, foo.line
- assert_equal [], foo.aliases
- assert_equal nil, foo.block_params
- assert_equal nil, foo.call_seq
- assert_equal nil, foo.is_alias_for
- assert_equal nil, foo.viewer
- assert_equal true, foo.document_children
- assert_equal true, foo.document_self
- assert_equal '', foo.params
- assert_equal false, foo.done_documenting
- assert_equal false, foo.dont_rename_initialize
- assert_equal false, foo.force_documentation
- assert_equal klass, foo.parent
- assert_equal false, foo.singleton
- assert_equal :public, foo.visibility
- assert_equal "\n", foo.text
+ assert_equal [], foo.aliases
+ assert_nil foo.block_params
+ assert_nil foo.call_seq
+ assert_nil foo.is_alias_for
+ assert_nil foo.viewer
+ assert_equal true, foo.document_children
+ assert_equal true, foo.document_self
+ assert_equal '', foo.params
+ assert_equal false, foo.done_documenting
+ assert_equal false, foo.dont_rename_initialize
+ assert_equal false, foo.force_documentation
+ assert_equal klass, foo.parent
+ assert_equal false, foo.singleton
+ assert_equal :public, foo.visibility
+ assert_equal "\n", foo.text
assert_equal klass.current_section, foo.section
stream = [
@@ -1302,6 +1388,9 @@ EOF
@parser.parse_constant klass, tk, @comment
+ assert_equal [], klass.modules.map(&:full_name)
+ assert_equal ['Foo::B', 'Foo::A'], klass.classes.map(&:full_name)
+ assert_equal ['Foo::A'], klass.constants.map(&:full_name)
assert_equal 'Foo::A', klass.find_module_named('A').full_name
end
@@ -1516,19 +1605,19 @@ end
assert_equal 1, foo.line
assert_equal [], foo.aliases
- assert_equal nil, foo.block_params
- assert_equal nil, foo.call_seq
+ assert_nil foo.block_params
+ assert_nil foo.call_seq
assert_equal true, foo.document_children
assert_equal true, foo.document_self
assert_equal false, foo.done_documenting
assert_equal false, foo.dont_rename_initialize
assert_equal false, foo.force_documentation
- assert_equal nil, foo.is_alias_for
+ assert_nil foo.is_alias_for
assert_equal '', foo.params
assert_equal klass, foo.parent
assert_equal false, foo.singleton
assert_equal 'add_my_method :foo', foo.text
- assert_equal nil, foo.viewer
+ assert_nil foo.viewer
assert_equal :public, foo.visibility
assert_equal klass.current_section, foo.section
@@ -1726,10 +1815,10 @@ end
assert_equal 1, foo.line
assert_equal [], foo.aliases
- assert_equal nil, foo.block_params
- assert_equal nil, foo.call_seq
- assert_equal nil, foo.is_alias_for
- assert_equal nil, foo.viewer
+ assert_nil foo.block_params
+ assert_nil foo.call_seq
+ assert_nil foo.is_alias_for
+ assert_nil foo.viewer
assert_equal true, foo.document_children
assert_equal true, foo.document_self
assert_equal '()', foo.params
@@ -2981,12 +3070,12 @@ RUBY
@parser.skip_tkspace
- assert_equal nil, @parser.parse_symbol_in_arg
+ assert_nil @parser.parse_symbol_in_arg
@parser.get_tk # skip ','
@parser.skip_tkspace
- assert_equal nil, @parser.parse_symbol_in_arg
+ assert_nil @parser.parse_symbol_in_arg
end
def test_parse_statements_alias_method
@@ -3090,7 +3179,7 @@ end
assert_equal 'category', directive
assert_equal 'test', value
- assert_equal nil, parser.get_tk
+ assert_nil parser.get_tk
end
def test_read_directive_allow
@@ -3100,7 +3189,7 @@ end
assert_nil directive
- assert_equal nil, parser.get_tk
+ assert_nil parser.get_tk
end
def test_read_directive_empty
@@ -3110,7 +3199,7 @@ end
assert_nil directive
- assert_equal nil, parser.get_tk
+ assert_nil parser.get_tk
end
def test_read_directive_no_comment
@@ -3120,7 +3209,7 @@ end
assert_nil directive
- assert_equal nil, parser.get_tk
+ assert_nil parser.get_tk
end
def test_read_directive_one_liner
@@ -3197,14 +3286,14 @@ end
util_parser '"#{"#{"a")}" if b}"'
assert_equal '"#{"#{"a")}" if b}"', @parser.get_tk[:text]
- assert_equal nil, @parser.get_tk
+ assert_nil @parser.get_tk
end
def test_sanity_interpolation_curly
util_parser '%{ #{} }'
assert_equal '%{ #{} }', @parser.get_tk[:text]
- assert_equal nil, @parser.get_tk
+ assert_nil @parser.get_tk
end
def test_sanity_interpolation_format
@@ -3842,4 +3931,150 @@ end
second_file_content, @options, @stats
end
+ def test_parse_const_third_party
+ util_parser <<-CLASS
+class A
+ true if B
+ true if B::C
+ true if B::C::D
+
+ module B
+ end
+end
+ CLASS
+
+ tk = @parser.get_tk
+
+ @parser.parse_class @top_level, RDoc::Parser::Ruby::NORMAL, tk, @comment
+
+ a = @top_level.classes.first
+ assert_equal 'A', a.full_name
+
+ visible = @store.all_modules.reject { |mod| mod.suppressed? }
+ visible = visible.map { |mod| mod.full_name }
+
+ assert_equal ['A::B'], visible
+ end
+
+ def test_parse_const_alias_defined_elsewhere
+ util_parser <<-CLASS
+module A
+ Aliased = Defined
+end
+
+module A
+ class Defined
+ end
+end
+ CLASS
+
+ @parser.scan
+
+ a = @top_level.modules.first
+ assert_equal 'A', a.full_name
+ aliased = a.constants.first
+ assert_equal 'A::Aliased', aliased.full_name
+ assert_equal [], a.modules.map(&:full_name)
+ assert_equal ['A::Defined', 'A::Aliased'], a.classes.map(&:full_name)
+ assert_equal ['A::Aliased'], a.constants.map(&:full_name)
+
+ visible = @store.all_modules.reject { |mod| mod.suppressed? }
+ visible = visible.map { |mod| mod.full_name }
+
+ assert_equal ['A'], visible
+ end
+
+ def test_parse_const_alias_defined_far_away
+ util_parser <<-CLASS
+module A
+ Aliased = ::B::C::Defined
+end
+
+module B
+ module C
+ class Defined
+ end
+ end
+end
+ CLASS
+
+ @parser.scan
+
+ a = @top_level.modules.first
+ assert_equal 'A', a.full_name
+ assert_empty a.classes
+ assert_empty a.modules
+ assert_equal ['A::Aliased'], a.constants.map(&:full_name)
+
+ defined = @store.find_class_named 'B::C::Defined'
+ assert_equal 'B::C::Defined', defined.full_name
+
+ aliased = @store.find_class_named 'B::C::Aliased'
+ assert_equal 'B::C::Aliased', aliased.full_name
+
+ visible = @store.all_modules.reject { |mod| mod.suppressed? }
+ visible = visible.map { |mod| mod.full_name }
+
+ assert_equal ['A', 'B', 'B::C'], visible
+ end
+
+ def test_parse_const_alias_defined_elsewhere
+ util_parser <<-CLASS
+module A
+ Aliased = Defined
+end
+
+module A
+ class Defined
+ end
+end
+ CLASS
+
+ @parser.scan
+
+ a = @top_level.modules.first
+ assert_equal 'A', a.full_name
+ aliased = a.constants.first
+ assert_equal 'A::Aliased', aliased.full_name
+
+ visible = @store.all_modules.reject { |mod| mod.suppressed? }
+ visible = visible.map { |mod| mod.full_name }
+
+ assert_equal ['A'], visible
+ end
+
+ def test_parse_const_alias_defined_far_away
+ util_parser <<-CLASS
+module A
+ Aliased = ::B::C::Defined
+end
+
+module B
+ module C
+ class Defined
+ end
+ end
+end
+ CLASS
+
+ @parser.scan
+
+ a = @top_level.modules.first
+ assert_equal 'A', a.full_name
+ assert_empty a.classes
+ assert_empty a.modules
+ assert_equal ['A::Aliased'], a.constants.map(&:full_name)
+
+ defined = @store.find_class_named 'B::C::Defined'
+ assert_equal 'B::C::Defined', defined.full_name
+
+ aliased = @store.find_class_named 'B::C::Aliased'
+ assert_equal 'B::C::Aliased', aliased.full_name
+
+ visible = @store.all_modules.reject { |mod| mod.suppressed? }
+ visible = visible.map { |mod| mod.full_name }
+
+ assert_equal ['A', 'B', 'B::C'], visible
+ end
+
end