yard 0.7.5 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of yard might be problematic. Click here for more details.
- data/.yardopts +10 -2
- data/ChangeLog +1263 -38
- data/LEGAL +5 -5
- data/LICENSE +1 -1
- data/README.md +91 -82
- data/Rakefile +6 -6
- data/benchmarks/builtins_vs_eval.rb +1 -1
- data/benchmarks/erb_vs_erubis.rb +4 -4
- data/benchmarks/generation.rb +5 -5
- data/benchmarks/parsing.rb +2 -2
- data/benchmarks/registry_store_types.rb +48 -0
- data/bin/yard +9 -1
- data/bin/yardoc +9 -1
- data/bin/yri +10 -2
- data/docs/CodeObjects.md +10 -10
- data/docs/GettingStarted.md +85 -83
- data/docs/Handlers.md +21 -21
- data/docs/Overview.md +7 -7
- data/docs/Parser.md +30 -30
- data/docs/Tags.md +250 -554
- data/docs/TagsArch.md +123 -0
- data/docs/Templates.md +58 -80
- data/docs/WhatsNew.md +378 -133
- data/docs/templates/default/fulldoc/html/full_list_tag.erb +7 -0
- data/docs/templates/default/fulldoc/html/setup.rb +6 -0
- data/docs/templates/default/layout/html/setup.rb +8 -0
- data/docs/templates/default/layout/html/tag_list.erb +11 -0
- data/docs/templates/default/yard_tags/html/list.erb +18 -0
- data/docs/templates/default/yard_tags/html/setup.rb +27 -0
- data/docs/templates/plugin.rb +65 -0
- data/lib/yard.rb +1 -10
- data/lib/yard/autoload.rb +75 -27
- data/lib/yard/cli/command.rb +5 -2
- data/lib/yard/cli/command_parser.rb +3 -2
- data/lib/yard/cli/diff.rb +1 -1
- data/lib/yard/cli/i18n.rb +69 -0
- data/lib/yard/cli/list.rb +1 -1
- data/lib/yard/cli/server.rb +30 -7
- data/lib/yard/cli/stats.rb +5 -6
- data/lib/yard/cli/yardoc.rb +95 -45
- data/lib/yard/cli/yri.rb +24 -3
- data/lib/yard/code_objects/base.rb +35 -4
- data/lib/yard/code_objects/extra_file_object.rb +1 -1
- data/lib/yard/code_objects/macro_object.rb +56 -99
- data/lib/yard/code_objects/method_object.rb +44 -6
- data/lib/yard/config.rb +18 -8
- data/lib/yard/core_ext/symbol_hash.rb +1 -1
- data/lib/yard/docstring.rb +45 -85
- data/lib/yard/docstring_parser.rb +269 -0
- data/lib/yard/handlers/base.rb +129 -118
- data/lib/yard/handlers/c/alias_handler.rb +15 -0
- data/lib/yard/handlers/c/attribute_handler.rb +13 -0
- data/lib/yard/handlers/c/base.rb +110 -0
- data/lib/yard/handlers/c/class_handler.rb +26 -0
- data/lib/yard/handlers/c/constant_handler.rb +12 -0
- data/lib/yard/handlers/c/handler_methods.rb +165 -0
- data/lib/yard/handlers/c/init_handler.rb +16 -0
- data/lib/yard/handlers/c/method_handler.rb +35 -0
- data/lib/yard/handlers/c/mixin_handler.rb +13 -0
- data/lib/yard/handlers/c/module_handler.rb +16 -0
- data/lib/yard/handlers/c/override_comment_handler.rb +22 -0
- data/lib/yard/handlers/c/path_handler.rb +10 -0
- data/lib/yard/handlers/c/struct_handler.rb +12 -0
- data/lib/yard/handlers/c/symbol_handler.rb +7 -0
- data/lib/yard/handlers/processor.rb +41 -30
- data/lib/yard/handlers/ruby/alias_handler.rb +0 -2
- data/lib/yard/handlers/ruby/attribute_handler.rb +16 -17
- data/lib/yard/handlers/ruby/base.rb +10 -6
- data/lib/yard/handlers/ruby/comment_handler.rb +9 -0
- data/lib/yard/handlers/ruby/dsl_handler.rb +14 -0
- data/lib/yard/handlers/ruby/dsl_handler_methods.rb +71 -0
- data/lib/yard/handlers/ruby/legacy/alias_handler.rb +0 -3
- data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +16 -17
- data/lib/yard/handlers/ruby/legacy/base.rb +28 -6
- data/lib/yard/handlers/ruby/legacy/comment_handler.rb +9 -0
- data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +16 -0
- data/lib/yard/handlers/ruby/legacy/method_handler.rb +0 -2
- data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +1 -1
- data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +18 -0
- data/lib/yard/handlers/ruby/method_handler.rb +10 -15
- data/lib/yard/handlers/ruby/mixin_handler.rb +1 -1
- data/lib/yard/handlers/ruby/module_function_handler.rb +26 -0
- data/lib/yard/handlers/ruby/struct_handler_methods.rb +3 -2
- data/lib/yard/i18n/pot_generator.rb +281 -0
- data/lib/yard/i18n/text.rb +72 -0
- data/lib/yard/logging.rb +3 -7
- data/lib/yard/options.rb +216 -0
- data/lib/yard/parser/c/c_parser.rb +225 -0
- data/lib/yard/parser/c/comment_parser.rb +131 -0
- data/lib/yard/parser/c/statement.rb +63 -0
- data/lib/yard/parser/ruby/ast_node.rb +91 -1
- data/lib/yard/parser/ruby/legacy/ruby_parser.rb +1 -0
- data/lib/yard/parser/ruby/legacy/statement.rb +7 -2
- data/lib/yard/parser/ruby/legacy/statement_list.rb +13 -22
- data/lib/yard/parser/ruby/ruby_parser.rb +87 -26
- data/lib/yard/parser/source_parser.rb +89 -88
- data/lib/yard/rake/yardoc_task.rb +1 -1
- data/lib/yard/registry.rb +21 -10
- data/lib/yard/registry_store.rb +48 -0
- data/lib/yard/serializers/file_system_serializer.rb +18 -20
- data/lib/yard/serializers/yardoc_serializer.rb +1 -0
- data/lib/yard/server/adapter.rb +2 -2
- data/lib/yard/server/commands/base.rb +1 -1
- data/lib/yard/server/commands/display_object_command.rb +13 -6
- data/lib/yard/server/commands/frames_command.rb +4 -21
- data/lib/yard/server/commands/library_command.rb +57 -11
- data/lib/yard/server/commands/list_command.rb +10 -34
- data/lib/yard/server/commands/search_command.rb +8 -2
- data/lib/yard/server/doc_server_helper.rb +34 -0
- data/lib/yard/server/rack_adapter.rb +5 -1
- data/lib/yard/server/router.rb +4 -10
- data/lib/yard/server/static_caching.rb +2 -2
- data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +2 -2
- data/lib/yard/server/templates/default/fulldoc/html/js/live.js +0 -15
- data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +3 -3
- data/lib/yard/server/templates/default/layout/html/script_setup.erb +8 -0
- data/lib/yard/server/templates/doc_server/processing/html/processing.erb +1 -1
- data/lib/yard/server/templates/doc_server/search/html/setup.rb +1 -1
- data/lib/yard/tags/default_factory.rb +31 -4
- data/lib/yard/tags/directives.rb +593 -0
- data/lib/yard/tags/library.rb +437 -35
- data/lib/yard/templates/engine.rb +17 -12
- data/lib/yard/templates/helpers/base_helper.rb +8 -2
- data/lib/yard/templates/helpers/html_helper.rb +57 -14
- data/lib/yard/templates/helpers/markup/rdoc_markup.rb +1 -1
- data/lib/yard/templates/helpers/markup_helper.rb +9 -9
- data/lib/yard/templates/helpers/text_helper.rb +2 -2
- data/lib/yard/templates/template.rb +42 -13
- data/lib/yard/templates/template_options.rb +81 -0
- data/spec/cli/command_parser_spec.rb +4 -4
- data/spec/cli/command_spec.rb +3 -3
- data/spec/cli/config_spec.rb +13 -13
- data/spec/cli/diff_spec.rb +13 -10
- data/spec/cli/gems_spec.rb +12 -12
- data/spec/cli/help_spec.rb +2 -2
- data/spec/cli/i18n_spec.rb +111 -0
- data/spec/cli/server_spec.rb +66 -18
- data/spec/cli/stats_spec.rb +15 -15
- data/spec/cli/yardoc_spec.rb +124 -97
- data/spec/cli/yri_spec.rb +14 -12
- data/spec/code_objects/base_spec.rb +104 -46
- data/spec/code_objects/class_object_spec.rb +33 -33
- data/spec/code_objects/code_object_list_spec.rb +5 -5
- data/spec/code_objects/constants_spec.rb +4 -3
- data/spec/code_objects/extra_file_object_spec.rb +19 -19
- data/spec/code_objects/macro_object_spec.rb +31 -37
- data/spec/code_objects/method_object_spec.rb +46 -23
- data/spec/code_objects/module_object_spec.rb +16 -16
- data/spec/code_objects/namespace_object_spec.rb +6 -6
- data/spec/code_objects/proxy_spec.rb +19 -19
- data/spec/config_spec.rb +33 -24
- data/spec/core_ext/array_spec.rb +1 -1
- data/spec/core_ext/file_spec.rb +8 -8
- data/spec/core_ext/hash_spec.rb +1 -1
- data/spec/core_ext/insertion_spec.rb +3 -3
- data/spec/core_ext/module_spec.rb +1 -1
- data/spec/core_ext/string_spec.rb +6 -6
- data/spec/core_ext/symbol_hash_spec.rb +11 -11
- data/spec/docstring_parser_spec.rb +207 -0
- data/spec/docstring_spec.rb +33 -146
- data/spec/handlers/alias_handler_spec.rb +14 -14
- data/spec/handlers/attribute_handler_spec.rb +20 -20
- data/spec/handlers/base_spec.rb +16 -16
- data/spec/handlers/c/alias_handler_spec.rb +33 -0
- data/spec/handlers/c/attribute_handler_spec.rb +40 -0
- data/spec/handlers/c/class_handler_spec.rb +64 -0
- data/spec/handlers/c/constant_handler_spec.rb +68 -0
- data/spec/handlers/c/init_handler_spec.rb +36 -0
- data/spec/handlers/c/method_handler_spec.rb +228 -0
- data/spec/handlers/c/mixin_handler_spec.rb +27 -0
- data/spec/handlers/c/module_handler_spec.rb +38 -0
- data/spec/handlers/c/override_comment_handler_spec.rb +43 -0
- data/spec/handlers/c/path_handler_spec.rb +35 -0
- data/spec/handlers/c/spec_helper.rb +11 -0
- data/spec/handlers/c/struct_handler_spec.rb +15 -0
- data/spec/handlers/class_condition_handler_spec.rb +10 -10
- data/spec/handlers/class_handler_spec.rb +38 -38
- data/spec/handlers/class_variable_handler_spec.rb +1 -1
- data/spec/handlers/constant_handler_spec.rb +7 -7
- data/spec/handlers/{macro_handler_spec.rb → dsl_handler_spec.rb} +72 -53
- data/spec/handlers/examples/alias_handler_001.rb.txt +5 -5
- data/spec/handlers/examples/class_condition_handler_001.rb.txt +9 -9
- data/spec/handlers/examples/class_handler_001.rb.txt +1 -1
- data/spec/handlers/examples/dsl_handler_001.rb.txt +110 -0
- data/spec/handlers/examples/exception_handler_001.rb.txt +14 -14
- data/spec/handlers/examples/method_condition_handler_001.rb.txt +2 -2
- data/spec/handlers/examples/method_handler_001.rb.txt +16 -16
- data/spec/handlers/examples/mixin_handler_001.rb.txt +8 -4
- data/spec/handlers/examples/private_constant_handler_001.rb.txt +1 -1
- data/spec/handlers/examples/visibility_handler_001.rb.txt +3 -3
- data/spec/handlers/examples/yield_handler_001.rb.txt +13 -14
- data/spec/handlers/exception_handler_spec.rb +9 -9
- data/spec/handlers/extend_handler_spec.rb +2 -2
- data/spec/handlers/legacy_base_spec.rb +34 -34
- data/spec/handlers/method_condition_handler_spec.rb +2 -2
- data/spec/handlers/method_handler_spec.rb +33 -33
- data/spec/handlers/mixin_handler_spec.rb +13 -9
- data/spec/handlers/module_function_handler_spec.rb +82 -0
- data/spec/handlers/module_handler_spec.rb +6 -6
- data/spec/handlers/private_constant_handler_spec.rb +3 -3
- data/spec/handlers/processor_spec.rb +5 -5
- data/spec/handlers/ruby/base_spec.rb +10 -6
- data/spec/handlers/ruby/legacy/base_spec.rb +11 -7
- data/spec/handlers/spec_helper.rb +2 -3
- data/spec/handlers/visibility_handler_spec.rb +6 -6
- data/spec/handlers/yield_handler_spec.rb +8 -8
- data/spec/i18n/pot_generator_spec.rb +244 -0
- data/spec/i18n/text_spec.rb +69 -0
- data/spec/options_spec.rb +160 -0
- data/spec/parser/base_spec.rb +3 -3
- data/spec/parser/c_parser_spec.rb +31 -257
- data/spec/parser/examples/array.c.txt +187 -187
- data/spec/parser/examples/extrafile.c.txt +1 -1
- data/spec/parser/examples/override.c.txt +1 -1
- data/spec/parser/ruby/ast_node_spec.rb +1 -1
- data/spec/parser/ruby/legacy/statement_list_spec.rb +24 -24
- data/spec/parser/ruby/legacy/token_list_spec.rb +7 -7
- data/spec/parser/ruby/ruby_parser_spec.rb +56 -34
- data/spec/parser/source_parser_spec.rb +125 -65
- data/spec/parser/tag_parsing_spec.rb +4 -4
- data/spec/rake/yardoc_task_spec.rb +10 -8
- data/spec/registry_spec.rb +65 -36
- data/spec/registry_store_spec.rb +90 -40
- data/spec/serializers/file_system_serializer_spec.rb +12 -12
- data/spec/serializers/yardoc_serializer_spec.rb +2 -2
- data/spec/server/adapter_spec.rb +3 -3
- data/spec/server/commands/base_spec.rb +8 -8
- data/spec/server/commands/library_command_spec.rb +3 -3
- data/spec/server/commands/static_file_command_spec.rb +7 -7
- data/spec/server/doc_server_helper_spec.rb +1 -1
- data/spec/server/doc_server_serializer_spec.rb +6 -6
- data/spec/server/rack_adapter_spec.rb +3 -3
- data/spec/server/router_spec.rb +19 -19
- data/spec/server/static_caching_spec.rb +4 -4
- data/spec/spec_helper.rb +7 -7
- data/spec/tags/default_factory_spec.rb +24 -16
- data/spec/tags/directives_spec.rb +422 -0
- data/spec/tags/library_spec.rb +15 -4
- data/spec/tags/overload_tag_spec.rb +6 -6
- data/spec/tags/ref_tag_list_spec.rb +8 -8
- data/spec/templates/class_spec.rb +7 -7
- data/spec/templates/constant_spec.rb +7 -7
- data/spec/templates/engine_spec.rb +28 -36
- data/spec/templates/examples/class001.html +108 -108
- data/spec/templates/examples/class002.html +17 -17
- data/spec/templates/examples/constant001.txt +1 -1
- data/spec/templates/examples/method001.html +45 -45
- data/spec/templates/examples/method002.html +25 -25
- data/spec/templates/examples/method003.html +60 -60
- data/spec/templates/examples/method004.html +7 -7
- data/spec/templates/examples/method005.html +28 -28
- data/spec/templates/examples/module001.html +321 -321
- data/spec/templates/examples/module001.txt +1 -1
- data/spec/templates/examples/module002.html +130 -130
- data/spec/templates/examples/module003.html +74 -74
- data/spec/templates/examples/module004.html +388 -0
- data/spec/templates/helpers/base_helper_spec.rb +32 -32
- data/spec/templates/helpers/html_helper_spec.rb +87 -68
- data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +9 -9
- data/spec/templates/helpers/markup/rdoc_markup_spec.rb +16 -16
- data/spec/templates/helpers/markup_helper_spec.rb +31 -28
- data/spec/templates/helpers/method_helper_spec.rb +7 -7
- data/spec/templates/helpers/shared_signature_examples.rb +9 -7
- data/spec/templates/helpers/text_helper_spec.rb +3 -3
- data/spec/templates/method_spec.rb +13 -13
- data/spec/templates/module_spec.rb +70 -24
- data/spec/templates/onefile_spec.rb +32 -15
- data/spec/templates/section_spec.rb +23 -23
- data/spec/templates/spec_helper.rb +31 -1
- data/spec/templates/tag_spec.rb +5 -5
- data/spec/templates/template_spec.rb +54 -46
- data/spec/verifier_spec.rb +5 -5
- data/templates/default/class/setup.rb +2 -2
- data/templates/default/docstring/html/abstract.erb +1 -1
- data/templates/default/docstring/html/note.erb +1 -1
- data/templates/default/docstring/html/private.erb +1 -1
- data/templates/default/docstring/html/todo.erb +1 -1
- data/templates/default/docstring/setup.rb +2 -2
- data/templates/default/fulldoc/html/css/full_list.css +4 -2
- data/templates/default/fulldoc/html/css/style.css +50 -44
- data/templates/default/fulldoc/html/frames.erb +21 -6
- data/templates/default/fulldoc/html/full_list.erb +5 -3
- data/templates/default/fulldoc/html/{full_list_files.erb → full_list_file.erb} +0 -0
- data/templates/default/fulldoc/html/js/app.js +29 -26
- data/templates/default/fulldoc/html/js/full_list.js +9 -9
- data/templates/default/fulldoc/html/js/jquery.js +4 -16
- data/templates/default/fulldoc/html/setup.rb +42 -38
- data/templates/default/layout/dot/header.erb +1 -1
- data/templates/default/layout/html/breadcrumb.erb +6 -6
- data/templates/default/layout/html/files.erb +1 -1
- data/templates/default/layout/html/footer.erb +1 -1
- data/templates/default/layout/html/headers.erb +3 -6
- data/templates/default/layout/html/index.erb +1 -1
- data/templates/default/layout/html/layout.erb +3 -7
- data/templates/default/layout/html/objects.erb +1 -1
- data/templates/default/layout/html/script_setup.erb +5 -0
- data/templates/default/layout/html/search.erb +4 -1
- data/templates/default/layout/html/setup.rb +8 -8
- data/templates/default/method_details/html/method_signature.erb +10 -3
- data/templates/default/method_details/setup.rb +1 -0
- data/templates/default/module/dot/info.erb +1 -1
- data/templates/default/module/dot/setup.rb +2 -2
- data/templates/default/module/html/attribute_details.erb +1 -1
- data/templates/default/module/html/children.erb +1 -1
- data/templates/default/module/html/defines.erb +1 -1
- data/templates/default/module/html/inherited_methods.erb +5 -4
- data/templates/default/module/html/item_summary.erb +15 -5
- data/templates/default/module/html/method_details_list.erb +2 -2
- data/templates/default/module/setup.rb +25 -12
- data/templates/default/module/text/setup.rb +1 -1
- data/templates/default/onefile/html/layout.erb +1 -1
- data/templates/default/onefile/html/setup.rb +2 -2
- data/templates/default/tags/html/example.erb +4 -2
- data/templates/default/tags/html/option.erb +1 -1
- data/templates/default/tags/html/overload.erb +1 -1
- data/templates/default/tags/html/see.erb +1 -1
- data/templates/default/tags/html/tag.erb +1 -1
- data/templates/default/tags/setup.rb +4 -3
- data/templates/guide/fulldoc/html/css/style.css +8 -8
- data/templates/guide/fulldoc/html/js/app.js +6 -6
- data/templates/guide/fulldoc/html/setup.rb +12 -12
- data/templates/guide/layout/html/layout.erb +11 -11
- data/templates/guide/layout/html/setup.rb +9 -9
- data/templates/guide/method/html/header.erb +2 -2
- data/templates/guide/method/html/setup.rb +1 -1
- metadata +68 -18
- data/bin/yard-graph +0 -4
- data/bin/yard-server +0 -4
- data/docs/Glossary.md +0 -12
- data/lib/yard/handlers/ruby/legacy/macro_handler.rb +0 -39
- data/lib/yard/handlers/ruby/macro_handler.rb +0 -40
- data/lib/yard/handlers/ruby/macro_handler_methods.rb +0 -131
- data/lib/yard/parser/c_parser.rb +0 -497
- data/lib/yard/server/templates/default/layout/html/headers.erb +0 -16
- data/lib/yard/server/templates/doc_server/frames/html/frames.erb +0 -13
- data/lib/yard/server/templates/doc_server/frames/html/setup.rb +0 -3
- data/lib/yard/server/templates/doc_server/full_list/html/full_list.erb +0 -34
- data/lib/yard/server/templates/doc_server/full_list/html/setup.rb +0 -20
- data/spec/handlers/examples/macro_handler_001.rb.txt +0 -83
data/spec/spec_helper.rb
CHANGED
@@ -11,7 +11,7 @@ unless defined?(HAVE_RIPPER)
|
|
11
11
|
begin require 'ripper'; rescue LoadError; end
|
12
12
|
HAVE_RIPPER = defined?(::Ripper) && !ENV['LEGACY'] ? true : false
|
13
13
|
LEGACY_PARSER = !HAVE_RIPPER
|
14
|
-
|
14
|
+
|
15
15
|
class YARD::Parser::SourceParser
|
16
16
|
def self.parser_type; :ruby18 end
|
17
17
|
end if ENV['LEGACY']
|
@@ -37,18 +37,18 @@ def described_in_docs(klass, meth, file = nil)
|
|
37
37
|
YARD::Parser::SourceParser.new.parse(filename)
|
38
38
|
end
|
39
39
|
end
|
40
|
-
|
40
|
+
|
41
41
|
# Get the object
|
42
42
|
objname = klass.name + (meth[0,1] == '#' ? meth : '::' + meth)
|
43
43
|
obj = Registry.at(objname)
|
44
44
|
raise "Cannot find object #{objname} described by spec." unless obj
|
45
45
|
raise "#{obj.path} has no @it tags to spec." unless obj.has_tag? :it
|
46
|
-
|
46
|
+
|
47
47
|
# Run examples
|
48
48
|
describe(klass, meth) do
|
49
49
|
obj.tags(:it).each do |it|
|
50
50
|
path = File.relative_path(YARD::ROOT, obj.file)
|
51
|
-
it(it.name + " (from #{path}:#{obj.line})") do
|
51
|
+
it(it.name + " (from #{path}:#{obj.line})") do
|
52
52
|
begin
|
53
53
|
eval(it.text)
|
54
54
|
rescue => e
|
@@ -68,13 +68,13 @@ def docspec(objname = self.class.description, klass = self.class.described_type)
|
|
68
68
|
next unless File.exists? filename
|
69
69
|
YARD::Parser::SourceParser.new.parse(filename)
|
70
70
|
end
|
71
|
-
|
71
|
+
|
72
72
|
# Get the object
|
73
73
|
objname = klass.name + objname if objname =~ /^[^A-Z]/
|
74
74
|
obj = Registry.at(objname)
|
75
75
|
raise "Cannot find object #{objname} described by spec." unless obj
|
76
76
|
raise "#{obj.path} has no @example tags to spec." unless obj.has_tag? :example
|
77
|
-
|
77
|
+
|
78
78
|
# Run examples
|
79
79
|
obj.tags(:example).each do |exs|
|
80
80
|
exs.text.split(/\n/).each do |ex|
|
@@ -95,7 +95,7 @@ module Kernel
|
|
95
95
|
puts args.map {|arg| CGI.escapeHTML(arg.inspect) }.join("<br/>\n")
|
96
96
|
args.first
|
97
97
|
end
|
98
|
-
|
98
|
+
|
99
99
|
def puts(str)
|
100
100
|
STDOUT.puts str + "<br/>\n"
|
101
101
|
str
|
@@ -13,7 +13,7 @@ describe YARD::Tags::DefaultFactory do
|
|
13
13
|
def parse_types(types)
|
14
14
|
@f.send(:extract_types_and_name_from_text, types)
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
it "should handle one type" do
|
18
18
|
parse_types('[A]').should == [nil, ['A'], ""]
|
19
19
|
end
|
@@ -21,17 +21,25 @@ describe YARD::Tags::DefaultFactory do
|
|
21
21
|
it "should handle a list of types" do
|
22
22
|
parse_types('[A, B, C]').should == [nil, ['A', 'B', 'C'], ""]
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
|
+
it "should handle ducktypes" do
|
26
|
+
parse_types('[#foo]').should == [nil, ['#foo'], '']
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should handle ducktypes with special method names" do
|
30
|
+
parse_types('[#foo=]').should == [nil, ['#foo='], '']
|
31
|
+
end
|
32
|
+
|
25
33
|
it "should return the text before and after the type list" do
|
26
34
|
parse_types(' b <String> description').should == ['b', ['String'], 'description']
|
27
35
|
parse_types('b c <String> description (test)').should == [nil, nil, 'b c <String> description (test)']
|
28
36
|
end
|
29
|
-
|
37
|
+
|
30
38
|
it "should handle a complex list of types" do
|
31
39
|
v = parse_types(' [Test, Array<String, Hash, C>, String]')
|
32
40
|
v.should include(["Test", "Array<String, Hash, C>", "String"])
|
33
41
|
end
|
34
|
-
|
42
|
+
|
35
43
|
it "should handle any of the following start/end delimiting chars: (), <>, {}, []" do
|
36
44
|
a = parse_types('[a,b,c]')
|
37
45
|
b = parse_types('<a,b,c>')
|
@@ -42,17 +50,17 @@ describe YARD::Tags::DefaultFactory do
|
|
42
50
|
c.should == d
|
43
51
|
a.should include(['a','b','c'])
|
44
52
|
end
|
45
|
-
|
53
|
+
|
46
54
|
it "should return the text before the type list as the last element" do
|
47
55
|
parse_types('b[x, y, z]').should == ['b', ['x', 'y', 'z'], '']
|
48
56
|
parse_types(' ! <x>').should == ["!", ['x'], '']
|
49
57
|
end
|
50
|
-
|
58
|
+
|
51
59
|
it "should return text unparsed if there is no type list" do
|
52
60
|
parse_types('').should == [nil, nil, '']
|
53
61
|
parse_types('[]').should == [nil, nil, '[]']
|
54
62
|
end
|
55
|
-
|
63
|
+
|
56
64
|
it "should allow A => B syntax" do
|
57
65
|
v = parse_types(' [Test, Array<String, Hash{A => {B => C}}, C>, String]')
|
58
66
|
v.should include(["Test", "Array<String, Hash{A => {B => C}}, C>", "String"])
|
@@ -63,22 +71,22 @@ describe YARD::Tags::DefaultFactory do
|
|
63
71
|
def parse_types(text)
|
64
72
|
@f.send(:parse_tag_with_types, 'test', text)
|
65
73
|
end
|
66
|
-
|
74
|
+
|
67
75
|
it "should parse given types and description" do
|
68
76
|
YARD::Tags::Tag.should_receive(:new).with("test", "description", ["x", "y", "z"])
|
69
77
|
parse_types(' [x, y, z] description')
|
70
78
|
end
|
71
|
-
|
79
|
+
|
72
80
|
it "should parse given types only" do
|
73
81
|
YARD::Tags::Tag.should_receive(:new).with("test", "", ["x", "y", "z"])
|
74
82
|
parse_types(' [x, y, z] ')
|
75
83
|
end
|
76
|
-
|
84
|
+
|
77
85
|
it "should allow type list to be omitted" do
|
78
86
|
YARD::Tags::Tag.should_receive(:new).with('test', 'description', nil)
|
79
87
|
parse_types(' description ')
|
80
88
|
end
|
81
|
-
|
89
|
+
|
82
90
|
it "should raise an error if a name is specified before type list" do
|
83
91
|
lambda { parse_types('b<String> desc') }.should raise_error(YARD::Tags::TagFormatError, 'cannot specify a name before type list for \'@test\'')
|
84
92
|
end
|
@@ -88,7 +96,7 @@ describe YARD::Tags::DefaultFactory do
|
|
88
96
|
def parse_types(text)
|
89
97
|
@f.send(:parse_tag_with_types_name_and_default, 'test', text)
|
90
98
|
end
|
91
|
-
|
99
|
+
|
92
100
|
it "should parse a standard type list with name before types (no default)" do
|
93
101
|
YARD::Tags::DefaultTag.should_receive(:new).with("test", "description", ["x", "y", "z"], 'NAME', nil)
|
94
102
|
parse_types('NAME [x, y, z] description')
|
@@ -98,7 +106,7 @@ describe YARD::Tags::DefaultFactory do
|
|
98
106
|
YARD::Tags::DefaultTag.should_receive(:new).with("test", "description", ["x", "y", "z"], 'NAME', nil)
|
99
107
|
parse_types(' [x, y, z] NAME description')
|
100
108
|
end
|
101
|
-
|
109
|
+
|
102
110
|
it "should parse a tag definition with name, typelist and default" do
|
103
111
|
YARD::Tags::DefaultTag.should_receive(:new).with("test", "description", ["x", "y", "z"], 'NAME', ['default', 'values'])
|
104
112
|
parse_types(' [x, y, z] NAME (default, values) description')
|
@@ -108,7 +116,7 @@ describe YARD::Tags::DefaultFactory do
|
|
108
116
|
YARD::Tags::DefaultTag.should_receive(:new).with("test", "description", ["x", "y", "z"], 'NAME', ['default', 'values'])
|
109
117
|
parse_types(' NAME [x, y, z] (default, values) description')
|
110
118
|
end
|
111
|
-
|
119
|
+
|
112
120
|
it "should allow typelist to be omitted" do
|
113
121
|
YARD::Tags::DefaultTag.should_receive(:new).with("test", "description", nil, 'NAME', ['default', 'values'])
|
114
122
|
parse_types(' NAME (default, values) description')
|
@@ -119,13 +127,13 @@ describe YARD::Tags::DefaultFactory do
|
|
119
127
|
def parse_options(text)
|
120
128
|
@f.parse_tag_with_options('option', text)
|
121
129
|
end
|
122
|
-
|
130
|
+
|
123
131
|
it "should have a name before tag info" do
|
124
132
|
t = parse_options("xyz key [Types] (default) description")
|
125
133
|
t.tag_name.should == 'option'
|
126
134
|
t.name.should == 'xyz'
|
127
135
|
end
|
128
|
-
|
136
|
+
|
129
137
|
it "should parse the rest of the tag like DefaultTag" do
|
130
138
|
t = parse_options("xyz key [Types] (default) description")
|
131
139
|
t.pair.should be_instance_of(Tags::DefaultTag)
|
@@ -0,0 +1,422 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
+
|
3
|
+
def tag_parse(content, object = nil, handler = nil)
|
4
|
+
@parser = DocstringParser.new
|
5
|
+
@parser.parse(content, object, handler)
|
6
|
+
@parser
|
7
|
+
end
|
8
|
+
|
9
|
+
describe YARD::Tags::ParseDirective do
|
10
|
+
describe '#call' do
|
11
|
+
after { Registry.clear }
|
12
|
+
|
13
|
+
it "should parse if handler=nil but use file=(stdin)" do
|
14
|
+
tag_parse %{@!parse
|
15
|
+
# Docstring here
|
16
|
+
def foo; end
|
17
|
+
}
|
18
|
+
Registry.at('#foo').docstring.should == "Docstring here"
|
19
|
+
Registry.at('#foo').file.should == '(stdin)'
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should allow parser type to be specified in type" do
|
23
|
+
tag_parse %{@!parse [c]
|
24
|
+
void Init_Foo() {
|
25
|
+
rb_define_method(rb_cMyClass, "foo", foo, 1);
|
26
|
+
}
|
27
|
+
}
|
28
|
+
Registry.at('MyClass#foo').should_not be_nil
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should parse code in context of current handler" do
|
32
|
+
src = <<-eof
|
33
|
+
class A
|
34
|
+
# @!parse
|
35
|
+
# def foo; end
|
36
|
+
eval "def foo; end"
|
37
|
+
end
|
38
|
+
eof
|
39
|
+
parser = Parser::SourceParser.new
|
40
|
+
parser.file = "myfile.rb"
|
41
|
+
parser.parse(StringIO.new(src))
|
42
|
+
Registry.at('A#foo').file.should == 'myfile.rb'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe YARD::Tags::GroupDirective do
|
48
|
+
describe '#call' do
|
49
|
+
it "should do nothing if handler=nil" do
|
50
|
+
tag_parse("@!group foo")
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should set group value in parser state (with handler)" do
|
54
|
+
handler = OpenStruct.new(:extra_state => OpenStruct.new)
|
55
|
+
tag_parse("@!group foo", nil, handler)
|
56
|
+
handler.extra_state.group.should == 'foo'
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe YARD::Tags::EndGroupDirective do
|
62
|
+
describe '#call' do
|
63
|
+
it "should do nothing if handler=nil" do
|
64
|
+
tag_parse("@!endgroup foo")
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should set group value in parser state (with handler)" do
|
68
|
+
handler = OpenStruct.new(:extra_state => OpenStruct.new(:group => "foo"))
|
69
|
+
tag_parse("@!endgroup", nil, handler)
|
70
|
+
handler.extra_state.group.should be_nil
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe YARD::Tags::MacroDirective do
|
76
|
+
def handler
|
77
|
+
OpenStruct.new(:call_params => %w(a b c),
|
78
|
+
:caller_method => 'foo',
|
79
|
+
:scope => :instance, :visibility => :public,
|
80
|
+
:namespace => P('Foo::Bar'),
|
81
|
+
:statement => OpenStruct.new(:source => 'foo :a, :b, :c'))
|
82
|
+
end
|
83
|
+
|
84
|
+
after(:all) { Registry.clear }
|
85
|
+
|
86
|
+
describe '#call' do
|
87
|
+
it "should define new macro when [new] is provided" do
|
88
|
+
tag_parse("@!macro [new] foo\n foo")
|
89
|
+
CodeObjects::MacroObject.find('foo').macro_data.should == 'foo'
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should define new macro if text block is provided" do
|
93
|
+
tag_parse("@!macro bar\n bar")
|
94
|
+
CodeObjects::MacroObject.find('bar').macro_data.should == 'bar'
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should expand macros and return #expanded_text to tag parser" do
|
98
|
+
tag_parse("@!macro [new] foo\n foo")
|
99
|
+
tag_parse("@!macro foo").text.should == 'foo'
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should not expand new macro if docstring is unattached" do
|
103
|
+
tag_parse("@!macro [new] foo\n foo").text.should_not == 'foo'
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should expand new anonymous macro even if docstring is unattached" do
|
107
|
+
tag_parse("@!macro\n foo").text.should == 'foo'
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should allow multiple macros to be expanded" do
|
111
|
+
tag_parse("@!macro [new] foo\n foo")
|
112
|
+
tag_parse("@!macro bar\n bar")
|
113
|
+
tag_parse("@!macro foo\n@!macro bar").text.should == "foo\nbar"
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should allow anonymous macros" do
|
117
|
+
tag_parse("@!macro\n a b c", nil, handler)
|
118
|
+
@parser.text.should == 'a b c'
|
119
|
+
end
|
120
|
+
|
121
|
+
it "should expand call_params and caller_method using $N when handler is provided" do
|
122
|
+
tag_parse("@!macro\n $1 $2 $3", nil, handler)
|
123
|
+
@parser.text.should == 'a b c'
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should attach macro to method if one exists" do
|
127
|
+
tag_parse("@!macro [attach] attached\n $1 $2 $3", nil, handler)
|
128
|
+
macro = CodeObjects::MacroObject.find('attached')
|
129
|
+
macro.method_object.should == P('Foo::Bar.foo')
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should not expand new attached macro if defined on class method" do
|
133
|
+
baz = CodeObjects::MethodObject.new(P('Foo::Bar'), :baz, :class)
|
134
|
+
baz.visibility.should == :public
|
135
|
+
tag_parse("@!macro [attach] attached2\n @!visibility private", baz, handler)
|
136
|
+
macro = CodeObjects::MacroObject.find('attached2')
|
137
|
+
macro.method_object.should == P('Foo::Bar.baz')
|
138
|
+
baz.visibility.should == :public
|
139
|
+
end
|
140
|
+
|
141
|
+
it "should not attempt to expand macro values if handler = nil" do
|
142
|
+
tag_parse("@!macro [attach] xyz\n $1 $2 $3")
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
describe YARD::Tags::MethodDirective do
|
148
|
+
describe '#call' do
|
149
|
+
after { Registry.clear }
|
150
|
+
|
151
|
+
it "should use entire docstring if no indented data is found" do
|
152
|
+
YARD.parse_string <<-eof
|
153
|
+
class Foo
|
154
|
+
# @!method foo
|
155
|
+
# @!method bar
|
156
|
+
# @!scope class
|
157
|
+
end
|
158
|
+
eof
|
159
|
+
Registry.at('Foo.foo').should be_a(CodeObjects::MethodObject)
|
160
|
+
Registry.at('Foo.bar').should be_a(CodeObjects::MethodObject)
|
161
|
+
end
|
162
|
+
|
163
|
+
it "should handle indented block text in @!method" do
|
164
|
+
YARD.parse_string <<-eof
|
165
|
+
# @!method foo(a)
|
166
|
+
# Docstring here
|
167
|
+
# @return [String] the foo
|
168
|
+
# Ignore this
|
169
|
+
# @param [String] a
|
170
|
+
eof
|
171
|
+
foo = Registry.at('#foo')
|
172
|
+
foo.docstring.should == "Docstring here"
|
173
|
+
foo.docstring.tag(:return).should_not be_nil
|
174
|
+
foo.tag(:param).should be_nil
|
175
|
+
end
|
176
|
+
|
177
|
+
it "should execute directives on object in indented block" do
|
178
|
+
YARD.parse_string <<-eof
|
179
|
+
class Foo
|
180
|
+
# @!method foo(a)
|
181
|
+
# @!scope class
|
182
|
+
# @!visibility private
|
183
|
+
# @!method bar
|
184
|
+
# Hello
|
185
|
+
# Ignore this
|
186
|
+
end
|
187
|
+
eof
|
188
|
+
foo = Registry.at('Foo.foo')
|
189
|
+
foo.visibility.should == :private
|
190
|
+
bar = Registry.at('Foo#bar')
|
191
|
+
bar.visibility.should == :public
|
192
|
+
end
|
193
|
+
|
194
|
+
it "should be able to define multiple @methods in docstring" do
|
195
|
+
YARD.parse_string <<-eof
|
196
|
+
class Foo
|
197
|
+
# @!method foo1
|
198
|
+
# Docstring1
|
199
|
+
# @!method foo2
|
200
|
+
# Docstring2
|
201
|
+
# @!method foo3
|
202
|
+
# @!scope class
|
203
|
+
# Docstring3
|
204
|
+
end
|
205
|
+
eof
|
206
|
+
foo1 = Registry.at('Foo#foo1')
|
207
|
+
foo2 = Registry.at('Foo#foo2')
|
208
|
+
foo3 = Registry.at('Foo.foo3')
|
209
|
+
foo1.docstring.should == 'Docstring1'
|
210
|
+
foo2.docstring.should == 'Docstring2'
|
211
|
+
foo3.docstring.should == 'Docstring3'
|
212
|
+
end
|
213
|
+
|
214
|
+
it "should define the method inside namespace if attached to namespace object" do
|
215
|
+
YARD.parse_string <<-eof
|
216
|
+
module Foo
|
217
|
+
# @!method foo
|
218
|
+
# Docstring1
|
219
|
+
# @!method bar
|
220
|
+
# Docstring2
|
221
|
+
class Bar
|
222
|
+
end
|
223
|
+
end
|
224
|
+
eof
|
225
|
+
Registry.at('Foo::Bar#foo').docstring.should == 'Docstring1'
|
226
|
+
Registry.at('Foo::Bar#bar').docstring.should == 'Docstring2'
|
227
|
+
end
|
228
|
+
|
229
|
+
it "should set scope to class if signature has 'self.' prefix" do
|
230
|
+
YARD.parse_string <<-eof
|
231
|
+
# @!method self.foo
|
232
|
+
# @!method self. bar
|
233
|
+
# @!method self.baz()
|
234
|
+
class Foo
|
235
|
+
end
|
236
|
+
eof
|
237
|
+
%w(foo bar baz).each do |name|
|
238
|
+
Registry.at("Foo.#{name}").should be_a(CodeObjects::MethodObject)
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
242
|
+
it "should be able to define method with module scope (module function)" do
|
243
|
+
YARD.parse_string <<-eof
|
244
|
+
# @!method foo
|
245
|
+
# @!scope module
|
246
|
+
# This is a docstring
|
247
|
+
# @return [Boolean] whether this is true
|
248
|
+
class Foo
|
249
|
+
end
|
250
|
+
eof
|
251
|
+
foo_c = Registry.at('Foo.foo')
|
252
|
+
foo_i = Registry.at('Foo#foo')
|
253
|
+
foo_c.should_not be_nil
|
254
|
+
foo_i.should_not be_nil
|
255
|
+
foo_c.should be_module_function
|
256
|
+
foo_c.docstring.should == foo_i.docstring
|
257
|
+
foo_c.tag(:return).text.should == foo_i.tag(:return).text
|
258
|
+
end
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
262
|
+
describe YARD::Tags::AttributeDirective do
|
263
|
+
describe '#call' do
|
264
|
+
after { Registry.clear }
|
265
|
+
|
266
|
+
it "should use entire docstring if no indented data is found" do
|
267
|
+
YARD.parse_string <<-eof
|
268
|
+
class Foo
|
269
|
+
# @!attribute foo
|
270
|
+
# @!attribute bar
|
271
|
+
# @!scope class
|
272
|
+
end
|
273
|
+
eof
|
274
|
+
Registry.at('Foo.foo').should be_reader
|
275
|
+
Registry.at('Foo.bar').should be_reader
|
276
|
+
end
|
277
|
+
|
278
|
+
it "should handle indented block in @!attribute" do
|
279
|
+
YARD.parse_string <<-eof
|
280
|
+
# @!attribute foo
|
281
|
+
# Docstring here
|
282
|
+
# @return [String] the foo
|
283
|
+
# Ignore this
|
284
|
+
# @param [String] a
|
285
|
+
eof
|
286
|
+
foo = Registry.at('#foo')
|
287
|
+
foo.is_attribute?.should == true
|
288
|
+
foo.docstring.should == "Docstring here"
|
289
|
+
foo.docstring.tag(:return).should_not be_nil
|
290
|
+
foo.tag(:param).should be_nil
|
291
|
+
end
|
292
|
+
|
293
|
+
it "should be able to define multiple @attributes in docstring" do
|
294
|
+
YARD.parse_string <<-eof
|
295
|
+
class Foo
|
296
|
+
# @!attribute [r] foo1
|
297
|
+
# Docstring1
|
298
|
+
# @!attribute [w] foo2
|
299
|
+
# Docstring2
|
300
|
+
# @!attribute foo3
|
301
|
+
# @!scope class
|
302
|
+
# Docstring3
|
303
|
+
end
|
304
|
+
eof
|
305
|
+
foo1 = Registry.at('Foo#foo1')
|
306
|
+
foo2 = Registry.at('Foo#foo2=')
|
307
|
+
foo3 = Registry.at('Foo.foo3')
|
308
|
+
foo4 = Registry.at('Foo.foo3=')
|
309
|
+
foo1.should be_reader
|
310
|
+
foo2.should be_writer
|
311
|
+
foo3.should be_reader
|
312
|
+
foo1.docstring.should == 'Docstring1'
|
313
|
+
foo2.docstring.should == 'Docstring2'
|
314
|
+
foo3.docstring.should == 'Docstring3'
|
315
|
+
foo4.should be_writer
|
316
|
+
foo1.attr_info[:write].should be_nil
|
317
|
+
foo2.attr_info[:read].should be_nil
|
318
|
+
end
|
319
|
+
|
320
|
+
it "should define the attr inside namespace if attached to namespace object" do
|
321
|
+
YARD.parse_string <<-eof
|
322
|
+
module Foo
|
323
|
+
# @!attribute [r] foo
|
324
|
+
# @!attribute [r] bar
|
325
|
+
class Bar
|
326
|
+
end
|
327
|
+
end
|
328
|
+
eof
|
329
|
+
Registry.at('Foo::Bar#foo').should be_reader
|
330
|
+
Registry.at('Foo::Bar#bar').should be_reader
|
331
|
+
end
|
332
|
+
end
|
333
|
+
|
334
|
+
it "should set scope to class if signature has 'self.' prefix" do
|
335
|
+
YARD.parse_string <<-eof
|
336
|
+
# @!attribute self.foo
|
337
|
+
# @!attribute self. bar
|
338
|
+
# @!attribute self.baz
|
339
|
+
class Foo
|
340
|
+
end
|
341
|
+
eof
|
342
|
+
%w(foo bar baz).each do |name|
|
343
|
+
Registry.at("Foo.#{name}").should be_reader
|
344
|
+
end
|
345
|
+
end
|
346
|
+
end
|
347
|
+
|
348
|
+
describe YARD::Tags::ScopeDirective do
|
349
|
+
describe '#call' do
|
350
|
+
after { Registry.clear }
|
351
|
+
|
352
|
+
it "should set state on tag parser if object = nil" do
|
353
|
+
tag_parse("@!scope class")
|
354
|
+
@parser.state.scope.should == :class
|
355
|
+
end
|
356
|
+
|
357
|
+
it "should set state on tag parser if object is namespace" do
|
358
|
+
object = CodeObjects::ClassObject.new(:root, 'Foo')
|
359
|
+
tag_parse("@!scope class", object)
|
360
|
+
object[:scope].should be_nil
|
361
|
+
@parser.state.scope.should == :class
|
362
|
+
end
|
363
|
+
|
364
|
+
it "should set scope on object if object is a method object" do
|
365
|
+
object = CodeObjects::MethodObject.new(:root, 'foo')
|
366
|
+
tag_parse("@!scope class", object)
|
367
|
+
object.scope.should == :class
|
368
|
+
end
|
369
|
+
|
370
|
+
%w(class instance module).each do |type|
|
371
|
+
it "should allow #{type} as value" do
|
372
|
+
tag_parse("@!scope #{type}")
|
373
|
+
@parser.state.scope.should == type.to_sym
|
374
|
+
end
|
375
|
+
end
|
376
|
+
|
377
|
+
%w(invalid foo FOO CLASS INSTANCE).each do |type|
|
378
|
+
it "should not allow #{type} as value" do
|
379
|
+
tag_parse("@!scope #{type}")
|
380
|
+
@parser.state.scope.should be_nil
|
381
|
+
end
|
382
|
+
end
|
383
|
+
end
|
384
|
+
end
|
385
|
+
|
386
|
+
describe YARD::Tags::VisibilityDirective do
|
387
|
+
describe '#call' do
|
388
|
+
after { Registry.clear }
|
389
|
+
|
390
|
+
it "should set visibility on tag parser if object = nil" do
|
391
|
+
tag_parse("@!visibility private")
|
392
|
+
@parser.state.visibility.should == :private
|
393
|
+
end
|
394
|
+
|
395
|
+
it "should set state on tag parser if object is namespace" do
|
396
|
+
object = CodeObjects::ClassObject.new(:root, 'Foo')
|
397
|
+
tag_parse("@!visibility protected", object)
|
398
|
+
object.visibility.should == :protected
|
399
|
+
@parser.state.visibility.should be_nil
|
400
|
+
end
|
401
|
+
|
402
|
+
it "should set visibility on object if object is a method object" do
|
403
|
+
object = CodeObjects::MethodObject.new(:root, 'foo')
|
404
|
+
tag_parse("@!visibility private", object)
|
405
|
+
object.visibility.should == :private
|
406
|
+
end
|
407
|
+
|
408
|
+
%w(public private protected).each do |type|
|
409
|
+
it "should allow #{type} as value" do
|
410
|
+
tag_parse("@!visibility #{type}")
|
411
|
+
@parser.state.visibility.should == type.to_sym
|
412
|
+
end
|
413
|
+
end
|
414
|
+
|
415
|
+
%w(invalid foo FOO PRIVATE INSTANCE).each do |type|
|
416
|
+
it "should not allow #{type} as value" do
|
417
|
+
tag_parse("@!visibility #{type}")
|
418
|
+
@parser.state.visibility.should be_nil
|
419
|
+
end
|
420
|
+
end
|
421
|
+
end
|
422
|
+
end
|