yard 0.9.24 → 0.9.25
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +37 -24
- data/CHANGELOG.md +18 -3
- data/README.md +96 -101
- data/Rakefile +2 -0
- data/lib/yard/cli/diff.rb +4 -1
- data/lib/yard/cli/server.rb +22 -13
- data/lib/yard/code_objects/proxy.rb +2 -1
- data/lib/yard/globals.rb +1 -1
- data/lib/yard/handlers/c/base.rb +164 -129
- data/lib/yard/parser/ruby/ruby_parser.rb +6 -4
- data/lib/yard/registry_store.rb +1 -1
- data/lib/yard/templates/helpers/html_helper.rb +10 -3
- data/lib/yard/templates/helpers/markup/rdoc_markup.rb +5 -4
- data/lib/yard/version.rb +1 -1
- data/tasks/update_error_map.rake +53 -0
- data/yard.gemspec +1 -1
- metadata +3 -207
- data/spec/cli/command_parser_spec.rb +0 -43
- data/spec/cli/command_spec.rb +0 -36
- data/spec/cli/config_spec.rb +0 -148
- data/spec/cli/diff_spec.rb +0 -254
- data/spec/cli/display_spec.rb +0 -30
- data/spec/cli/gems_spec.rb +0 -81
- data/spec/cli/graph_spec.rb +0 -18
- data/spec/cli/help_spec.rb +0 -22
- data/spec/cli/i18n_spec.rb +0 -107
- data/spec/cli/list_spec.rb +0 -8
- data/spec/cli/markup_types_spec.rb +0 -22
- data/spec/cli/server_spec.rb +0 -324
- data/spec/cli/stats_spec.rb +0 -96
- data/spec/cli/yard_on_yard_spec.rb +0 -38
- data/spec/cli/yardoc_spec.rb +0 -896
- data/spec/cli/yri_spec.rb +0 -101
- data/spec/code_objects/base_spec.rb +0 -485
- data/spec/code_objects/class_object_spec.rb +0 -226
- data/spec/code_objects/code_object_list_spec.rb +0 -36
- data/spec/code_objects/constants_spec.rb +0 -116
- data/spec/code_objects/extra_file_object_spec.rb +0 -161
- data/spec/code_objects/macro_object_spec.rb +0 -150
- data/spec/code_objects/method_object_spec.rb +0 -184
- data/spec/code_objects/module_object_spec.rb +0 -142
- data/spec/code_objects/namespace_mapper_spec.rb +0 -32
- data/spec/code_objects/namespace_object_spec.rb +0 -171
- data/spec/code_objects/proxy_spec.rb +0 -147
- data/spec/code_objects/spec_helper.rb +0 -3
- data/spec/config_spec.rb +0 -171
- data/spec/core_ext/array_spec.rb +0 -13
- data/spec/core_ext/file_spec.rb +0 -72
- data/spec/core_ext/hash_spec.rb +0 -14
- data/spec/core_ext/insertion_spec.rb +0 -37
- data/spec/core_ext/module_spec.rb +0 -9
- data/spec/core_ext/string_spec.rb +0 -42
- data/spec/core_ext/symbol_hash_spec.rb +0 -89
- data/spec/docstring_parser_spec.rb +0 -280
- data/spec/docstring_spec.rb +0 -373
- data/spec/handlers/alias_handler_spec.rb +0 -82
- data/spec/handlers/attribute_handler_spec.rb +0 -96
- data/spec/handlers/base_spec.rb +0 -216
- data/spec/handlers/c/alias_handler_spec.rb +0 -34
- data/spec/handlers/c/attribute_handler_spec.rb +0 -41
- data/spec/handlers/c/class_handler_spec.rb +0 -78
- data/spec/handlers/c/constant_handler_spec.rb +0 -71
- data/spec/handlers/c/init_handler_spec.rb +0 -48
- data/spec/handlers/c/method_handler_spec.rb +0 -327
- data/spec/handlers/c/mixin_handler_spec.rb +0 -44
- data/spec/handlers/c/module_handler_spec.rb +0 -71
- data/spec/handlers/c/override_comment_handler_spec.rb +0 -47
- data/spec/handlers/c/path_handler_spec.rb +0 -36
- data/spec/handlers/c/spec_helper.rb +0 -23
- data/spec/handlers/c/struct_handler_spec.rb +0 -16
- data/spec/handlers/class_condition_handler_spec.rb +0 -87
- data/spec/handlers/class_handler_spec.rb +0 -247
- data/spec/handlers/class_method_handler_shared_examples.rb +0 -133
- data/spec/handlers/class_variable_handler_spec.rb +0 -12
- data/spec/handlers/constant_handler_spec.rb +0 -112
- data/spec/handlers/decorator_handler_methods_spec.rb +0 -393
- data/spec/handlers/dsl_handler_spec.rb +0 -226
- data/spec/handlers/examples/alias_handler_001.rb.txt +0 -46
- data/spec/handlers/examples/attribute_handler_001.rb.txt +0 -32
- data/spec/handlers/examples/class_condition_handler_001.rb.txt +0 -69
- data/spec/handlers/examples/class_handler_001.rb.txt +0 -120
- data/spec/handlers/examples/class_variable_handler_001.rb.txt +0 -10
- data/spec/handlers/examples/constant_handler_001.rb.txt +0 -35
- data/spec/handlers/examples/dsl_handler_001.rb.txt +0 -156
- data/spec/handlers/examples/exception_handler_001.rb.txt +0 -59
- data/spec/handlers/examples/extend_handler_001.rb.txt +0 -19
- data/spec/handlers/examples/method_condition_handler_001.rb.txt +0 -10
- data/spec/handlers/examples/method_handler_001.rb.txt +0 -128
- data/spec/handlers/examples/mixin_handler_001.rb.txt +0 -40
- data/spec/handlers/examples/module_handler_001.rb.txt +0 -29
- data/spec/handlers/examples/private_constant_handler_001.rb.txt +0 -8
- data/spec/handlers/examples/process_handler_001.rb.txt +0 -11
- data/spec/handlers/examples/visibility_handler_001.rb.txt +0 -36
- data/spec/handlers/examples/yield_handler_001.rb.txt +0 -54
- data/spec/handlers/exception_handler_spec.rb +0 -49
- data/spec/handlers/extend_handler_spec.rb +0 -28
- data/spec/handlers/legacy_base_spec.rb +0 -128
- data/spec/handlers/method_condition_handler_spec.rb +0 -15
- data/spec/handlers/method_handler_spec.rb +0 -214
- data/spec/handlers/mixin_handler_spec.rb +0 -60
- data/spec/handlers/module_function_handler_spec.rb +0 -106
- data/spec/handlers/module_handler_spec.rb +0 -35
- data/spec/handlers/private_class_method_handler_spec.rb +0 -11
- data/spec/handlers/private_constant_handler_spec.rb +0 -25
- data/spec/handlers/processor_spec.rb +0 -35
- data/spec/handlers/public_class_method_handler_spec.rb +0 -11
- data/spec/handlers/ruby/base_spec.rb +0 -95
- data/spec/handlers/ruby/legacy/base_spec.rb +0 -84
- data/spec/handlers/spec_helper.rb +0 -33
- data/spec/handlers/visibility_handler_spec.rb +0 -44
- data/spec/handlers/yield_handler_spec.rb +0 -52
- data/spec/i18n/locale_spec.rb +0 -81
- data/spec/i18n/message_spec.rb +0 -52
- data/spec/i18n/messages_spec.rb +0 -67
- data/spec/i18n/pot_generator_spec.rb +0 -295
- data/spec/i18n/text_spec.rb +0 -184
- data/spec/logging_spec.rb +0 -44
- data/spec/options_spec.rb +0 -171
- data/spec/parser/base_spec.rb +0 -24
- data/spec/parser/c_parser_spec.rb +0 -236
- data/spec/parser/examples/array.c.txt +0 -6267
- data/spec/parser/examples/example1.rb.txt +0 -8
- data/spec/parser/examples/extrafile.c.txt +0 -8
- data/spec/parser/examples/file.c.txt +0 -28
- data/spec/parser/examples/multifile.c.txt +0 -22
- data/spec/parser/examples/namespace.cpp.txt +0 -68
- data/spec/parser/examples/override.c.txt +0 -424
- data/spec/parser/examples/parse_in_order_001.rb.txt +0 -2
- data/spec/parser/examples/parse_in_order_002.rb.txt +0 -2
- data/spec/parser/examples/tag_handler_001.rb.txt +0 -8
- data/spec/parser/ruby/ast_node_spec.rb +0 -33
- data/spec/parser/ruby/legacy/statement_list_spec.rb +0 -299
- data/spec/parser/ruby/legacy/token_list_spec.rb +0 -79
- data/spec/parser/ruby/ruby_parser_spec.rb +0 -520
- data/spec/parser/ruby/token_resolver_spec.rb +0 -165
- data/spec/parser/source_parser_spec.rb +0 -727
- data/spec/parser/tag_parsing_spec.rb +0 -17
- data/spec/rake/yardoc_task_spec.rb +0 -118
- data/spec/registry_resolver_spec.rb +0 -15
- data/spec/registry_spec.rb +0 -463
- data/spec/registry_store_spec.rb +0 -327
- data/spec/rubygems/doc_manager_spec.rb +0 -112
- data/spec/serializers/data/serialized_yardoc/checksums +0 -1
- data/spec/serializers/data/serialized_yardoc/objects/Foo.dat +0 -0
- data/spec/serializers/data/serialized_yardoc/objects/Foo/bar_i.dat +0 -0
- data/spec/serializers/data/serialized_yardoc/objects/Foo/baz_i.dat +0 -0
- data/spec/serializers/data/serialized_yardoc/objects/root.dat +0 -0
- data/spec/serializers/data/serialized_yardoc/proxy_types +0 -2
- data/spec/serializers/file_system_serializer_spec.rb +0 -145
- data/spec/serializers/spec_helper.rb +0 -2
- data/spec/serializers/yardoc_serializer_spec.rb +0 -90
- data/spec/server/adapter_spec.rb +0 -39
- data/spec/server/commands/base_spec.rb +0 -91
- data/spec/server/commands/library_command_spec.rb +0 -39
- data/spec/server/doc_server_helper_spec.rb +0 -72
- data/spec/server/doc_server_serializer_spec.rb +0 -60
- data/spec/server/rack_adapter_spec.rb +0 -21
- data/spec/server/router_spec.rb +0 -123
- data/spec/server/spec_helper.rb +0 -22
- data/spec/server/static_caching_spec.rb +0 -47
- data/spec/server/webrick_servlet_spec.rb +0 -20
- data/spec/server_spec.rb +0 -19
- data/spec/spec_helper.rb +0 -212
- data/spec/tags/default_factory_spec.rb +0 -168
- data/spec/tags/default_tag_spec.rb +0 -11
- data/spec/tags/directives_spec.rb +0 -463
- data/spec/tags/library_spec.rb +0 -48
- data/spec/tags/overload_tag_spec.rb +0 -53
- data/spec/tags/ref_tag_list_spec.rb +0 -53
- data/spec/tags/types_explainer_spec.rb +0 -203
- data/spec/templates/class_spec.rb +0 -45
- data/spec/templates/constant_spec.rb +0 -41
- data/spec/templates/engine_spec.rb +0 -131
- data/spec/templates/examples/class001.html +0 -308
- data/spec/templates/examples/class001.txt +0 -36
- data/spec/templates/examples/class002.html +0 -39
- data/spec/templates/examples/constant001.txt +0 -25
- data/spec/templates/examples/constant002.txt +0 -7
- data/spec/templates/examples/constant003.txt +0 -11
- data/spec/templates/examples/method001.html +0 -137
- data/spec/templates/examples/method001.txt +0 -35
- data/spec/templates/examples/method002.html +0 -91
- data/spec/templates/examples/method002.txt +0 -20
- data/spec/templates/examples/method003.html +0 -165
- data/spec/templates/examples/method003.txt +0 -45
- data/spec/templates/examples/method004.html +0 -48
- data/spec/templates/examples/method004.txt +0 -10
- data/spec/templates/examples/method005.html +0 -105
- data/spec/templates/examples/method005.txt +0 -33
- data/spec/templates/examples/method006.html +0 -108
- data/spec/templates/examples/method006.txt +0 -20
- data/spec/templates/examples/module001.dot +0 -33
- data/spec/templates/examples/module001.html +0 -833
- data/spec/templates/examples/module001.txt +0 -33
- data/spec/templates/examples/module002.html +0 -341
- data/spec/templates/examples/module003.html +0 -202
- data/spec/templates/examples/module004.html +0 -394
- data/spec/templates/examples/module005.html +0 -82
- data/spec/templates/examples/tag001.txt +0 -82
- data/spec/templates/helpers/base_helper_spec.rb +0 -171
- data/spec/templates/helpers/html_helper_spec.rb +0 -666
- data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +0 -65
- data/spec/templates/helpers/markup/rdoc_markup_spec.rb +0 -84
- data/spec/templates/helpers/markup_helper_spec.rb +0 -136
- data/spec/templates/helpers/method_helper_spec.rb +0 -107
- data/spec/templates/helpers/module_helper_spec.rb +0 -35
- data/spec/templates/helpers/shared_signature_examples.rb +0 -126
- data/spec/templates/helpers/text_helper_spec.rb +0 -65
- data/spec/templates/markup_processor_integrations/asciidoctor_spec.rb +0 -60
- data/spec/templates/markup_processor_integrations/integration_spec_helper.rb +0 -50
- data/spec/templates/markup_processor_integrations/rdoc_markdown_spec.rb +0 -48
- data/spec/templates/markup_processor_integrations/rdoc_spec.rb +0 -39
- data/spec/templates/markup_processor_integrations/redcarpet_spec.rb +0 -64
- data/spec/templates/markup_processor_integrations/redcloth_spec.rb +0 -64
- data/spec/templates/method_spec.rb +0 -118
- data/spec/templates/module_spec.rb +0 -203
- data/spec/templates/onefile_spec.rb +0 -66
- data/spec/templates/section_spec.rb +0 -144
- data/spec/templates/spec_helper.rb +0 -76
- data/spec/templates/tag_spec.rb +0 -52
- data/spec/templates/template_spec.rb +0 -410
- data/spec/verifier_spec.rb +0 -106
@@ -1,96 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require File.dirname(__FILE__) + '/spec_helper'
|
3
|
-
|
4
|
-
RSpec.describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}AttributeHandler" do
|
5
|
-
before(:all) { parse_file :attribute_handler_001, __FILE__ }
|
6
|
-
|
7
|
-
def read_write(namespace, name, read, write, scope = :instance)
|
8
|
-
rname = namespace.to_s + "#" + name.to_s
|
9
|
-
wname = namespace.to_s + "#" + name.to_s + "="
|
10
|
-
if read
|
11
|
-
expect(Registry.at(rname)).to be_instance_of(CodeObjects::MethodObject)
|
12
|
-
else
|
13
|
-
expect(Registry.at(rname)).to eq nil
|
14
|
-
end
|
15
|
-
|
16
|
-
if write
|
17
|
-
expect(Registry.at(wname)).to be_kind_of(CodeObjects::MethodObject)
|
18
|
-
else
|
19
|
-
expect(Registry.at(wname)).to eq nil
|
20
|
-
end
|
21
|
-
|
22
|
-
attrs = Registry.at(namespace).attributes[scope][name]
|
23
|
-
expect(attrs[:read]).to eq(read ? Registry.at(rname) : nil)
|
24
|
-
expect(attrs[:write]).to eq(write ? Registry.at(wname) : nil)
|
25
|
-
end
|
26
|
-
|
27
|
-
it "parses attributes inside modules too" do
|
28
|
-
expect(Registry.at("A#x=")).not_to eq nil
|
29
|
-
end
|
30
|
-
|
31
|
-
it "parses 'attr'" do
|
32
|
-
read_write(:B, :a, true, true)
|
33
|
-
read_write(:B, :a2, true, false)
|
34
|
-
read_write(:B, "a3", true, false)
|
35
|
-
end
|
36
|
-
|
37
|
-
it "parses 'attr_reader'" do
|
38
|
-
read_write(:B, :b, true, false)
|
39
|
-
end
|
40
|
-
|
41
|
-
it "parses 'attr_writer'" do
|
42
|
-
read_write(:B, :e, false, true)
|
43
|
-
end
|
44
|
-
|
45
|
-
it "parses 'attr_accessor'" do
|
46
|
-
read_write(:B, :f, true, true)
|
47
|
-
end
|
48
|
-
|
49
|
-
it "parses a list of attributes" do
|
50
|
-
read_write(:B, :b, true, false)
|
51
|
-
read_write(:B, :c, true, false)
|
52
|
-
read_write(:B, :d, true, false)
|
53
|
-
end
|
54
|
-
|
55
|
-
it "has a default docstring if one is not supplied" do
|
56
|
-
expect(Registry.at("B#f=").docstring).not_to be_empty
|
57
|
-
end
|
58
|
-
|
59
|
-
it "sets the correct docstring if one is supplied" do
|
60
|
-
expect(Registry.at("B#b").docstring).to eq "Docstring"
|
61
|
-
expect(Registry.at("B#c").docstring).to eq "Docstring"
|
62
|
-
expect(Registry.at("B#d").docstring).to eq "Docstring"
|
63
|
-
end
|
64
|
-
|
65
|
-
it "is able to differentiate between class and instance attributes" do
|
66
|
-
expect(P('B').class_attributes[:z][:read].scope).to eq :class
|
67
|
-
expect(P('B').instance_attributes[:z][:read].scope).to eq :instance
|
68
|
-
end
|
69
|
-
|
70
|
-
it "responds true in method's #is_attribute?" do
|
71
|
-
expect(P('B#a').is_attribute?).to be true
|
72
|
-
expect(P('B#a=').is_attribute?).to be true
|
73
|
-
end
|
74
|
-
|
75
|
-
it "does not return true for #is_explicit? in created methods" do
|
76
|
-
Registry.at(:B).meths.each do |meth|
|
77
|
-
expect(meth.is_explicit?).to be false
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
it "handles attr call with no arguments" do
|
82
|
-
expect { StubbedSourceParser.parse_string "attr" }.not_to raise_error
|
83
|
-
end
|
84
|
-
|
85
|
-
it "adds existing reader method as part of attr_writer combo" do
|
86
|
-
expect(Registry.at('C#foo=').attr_info[:read]).to eq Registry.at('C#foo')
|
87
|
-
end
|
88
|
-
|
89
|
-
it "adds existing writer method as part of attr_reader combo" do
|
90
|
-
expect(Registry.at('C#foo').attr_info[:write]).to eq Registry.at('C#foo=')
|
91
|
-
end
|
92
|
-
|
93
|
-
it "maintains visibility for attr_reader" do
|
94
|
-
expect(Registry.at('D#parser').visibility).to eq :protected
|
95
|
-
end
|
96
|
-
end
|
data/spec/handlers/base_spec.rb
DELETED
@@ -1,216 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require File.dirname(__FILE__) + '/spec_helper'
|
3
|
-
require 'ostruct'
|
4
|
-
|
5
|
-
include Parser
|
6
|
-
|
7
|
-
RSpec.describe YARD::Handlers::Base do
|
8
|
-
describe "#handles and inheritance" do
|
9
|
-
before do
|
10
|
-
allow(Handlers::Base).to receive(:inherited)
|
11
|
-
end
|
12
|
-
|
13
|
-
it "keeps track of subclasses" do
|
14
|
-
expect(Handlers::Base).to receive(:inherited).once
|
15
|
-
class TestHandler < Handlers::Base; end
|
16
|
-
end
|
17
|
-
|
18
|
-
it "raises NotImplementedError if process is called on a class with no #process" do
|
19
|
-
class TestNotImplementedHandler < Handlers::Base
|
20
|
-
end
|
21
|
-
|
22
|
-
expect { TestNotImplementedHandler.new(0, 0).process }.to raise_error(NotImplementedError)
|
23
|
-
end
|
24
|
-
|
25
|
-
it "allows multiple handles arguments" do
|
26
|
-
expect(Handlers::Base).to receive(:inherited).once
|
27
|
-
class TestHandler1 < Handlers::Base
|
28
|
-
handles :a, :b, :c
|
29
|
-
end
|
30
|
-
expect(TestHandler1.handlers).to eq [:a, :b, :c]
|
31
|
-
end
|
32
|
-
|
33
|
-
it "allows multiple handles calls" do
|
34
|
-
expect(Handlers::Base).to receive(:inherited).once
|
35
|
-
class TestHandler2 < Handlers::Base
|
36
|
-
handles :a
|
37
|
-
handles :b
|
38
|
-
handles :c
|
39
|
-
end
|
40
|
-
expect(TestHandler2.handlers).to eq [:a, :b, :c]
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe "#abort! (and HandlerAborted)" do
|
45
|
-
it "allows HandlerAborted to be raised" do
|
46
|
-
class AbortHandler1 < Handlers::Ruby::Base
|
47
|
-
process { abort! }
|
48
|
-
end
|
49
|
-
expect { AbortHandler1.new(nil, nil).process }.to raise_error(HandlerAborted)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe "transitive tags" do
|
54
|
-
it "adds transitive tags to children" do
|
55
|
-
Registry.clear
|
56
|
-
YARD.parse_string <<-eof
|
57
|
-
# @since 1.0
|
58
|
-
# @author Foo
|
59
|
-
class A
|
60
|
-
def foo; end
|
61
|
-
# @since 1.1
|
62
|
-
def bar; end
|
63
|
-
end
|
64
|
-
eof
|
65
|
-
expect(Registry.at('A').tag(:since).text).to eq "1.0"
|
66
|
-
expect(Registry.at('A#foo').tag(:since).text).to eq "1.0"
|
67
|
-
expect(Registry.at('A#bar').tag(:since).text).to eq "1.1"
|
68
|
-
expect(Registry.at('A#bar').tag(:author)).to be nil
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe "sharing global state" do
|
73
|
-
it "allows globals to share global state among handlers" do
|
74
|
-
class GlobalStateHandler1 < Handlers::Ruby::Base
|
75
|
-
class << self; attr_accessor :state end
|
76
|
-
handles :class
|
77
|
-
process { self.class.state = globals.foo; globals.foo = :bar }
|
78
|
-
end
|
79
|
-
|
80
|
-
class GlobalStateHandler2 < Handlers::Ruby::Base
|
81
|
-
class << self; attr_accessor :state end
|
82
|
-
handles :def
|
83
|
-
process { self.class.state = globals.foo }
|
84
|
-
end
|
85
|
-
|
86
|
-
2.times do
|
87
|
-
YARD.parse_string 'class Foo; end; def foo; end'
|
88
|
-
expect(GlobalStateHandler1.state).to eq nil
|
89
|
-
expect(GlobalStateHandler2.state).to eq :bar
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end if HAVE_RIPPER
|
93
|
-
|
94
|
-
describe "#push_state" do
|
95
|
-
def process(klass)
|
96
|
-
state = OpenStruct.new(:namespace => "ROOT", :scope => :instance, :owner => "ROOT")
|
97
|
-
klass.new(state, nil).process
|
98
|
-
end
|
99
|
-
|
100
|
-
it "pushes and return all old state info after block" do
|
101
|
-
class PushStateHandler1 < Handlers::Base
|
102
|
-
include RSpec::Matchers
|
103
|
-
RSpec::Expectations::Syntax.enable_expect(self)
|
104
|
-
|
105
|
-
def process
|
106
|
-
push_state(:namespace => "FOO", :scope => :class, :owner => "BAR") do
|
107
|
-
expect(namespace).to eq "FOO"
|
108
|
-
expect(scope).to eq :class
|
109
|
-
expect(owner).to eq "BAR"
|
110
|
-
end
|
111
|
-
expect(namespace).to eq "ROOT"
|
112
|
-
expect(owner).to eq "ROOT"
|
113
|
-
expect(scope).to eq :instance
|
114
|
-
end
|
115
|
-
end
|
116
|
-
process PushStateHandler1
|
117
|
-
end
|
118
|
-
|
119
|
-
it "allows owner to be pushed individually" do
|
120
|
-
class PushStateHandler2 < Handlers::Base
|
121
|
-
include RSpec::Matchers
|
122
|
-
RSpec::Expectations::Syntax.enable_expect(self)
|
123
|
-
|
124
|
-
def process
|
125
|
-
push_state(:owner => "BAR") do
|
126
|
-
expect(namespace).to eq "ROOT"
|
127
|
-
expect(scope).to eq :instance
|
128
|
-
expect(owner).to eq "BAR"
|
129
|
-
end
|
130
|
-
expect(owner).to eq "ROOT"
|
131
|
-
end
|
132
|
-
end
|
133
|
-
process PushStateHandler2
|
134
|
-
end
|
135
|
-
|
136
|
-
it "allows scope to be pushed individually" do
|
137
|
-
class PushStateHandler3 < Handlers::Base
|
138
|
-
include RSpec::Matchers
|
139
|
-
RSpec::Expectations::Syntax.enable_expect(self)
|
140
|
-
|
141
|
-
def process
|
142
|
-
push_state(:scope => :foo) do
|
143
|
-
expect(namespace).to eq "ROOT"
|
144
|
-
expect(scope).to eq :foo
|
145
|
-
expect(owner).to eq "ROOT"
|
146
|
-
end
|
147
|
-
expect(scope).to eq :instance
|
148
|
-
end
|
149
|
-
end
|
150
|
-
process PushStateHandler3
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
describe ".in_file" do
|
155
|
-
def parse(filename, parser_type, src = "class A; end")
|
156
|
-
parser = Parser::SourceParser.new(parser_type)
|
157
|
-
parser.instance_variable_set("@file", filename)
|
158
|
-
parser.parse(StringIO.new(src))
|
159
|
-
end
|
160
|
-
|
161
|
-
def create_handler(stmts, parser_type)
|
162
|
-
$handler_counter ||= 0
|
163
|
-
sklass = parser_type == :ruby ? "Base" : "Legacy::Base"
|
164
|
-
instance_eval(<<-eof, __FILE__, __LINE__ + 1)
|
165
|
-
class ::InFileHandler#{$handler_counter += 1} < Handlers::Ruby::#{sklass}
|
166
|
-
handles(/^class/)
|
167
|
-
#{stmts}
|
168
|
-
def process; MethodObject.new(:root, :FOO) end
|
169
|
-
end
|
170
|
-
eof
|
171
|
-
end
|
172
|
-
|
173
|
-
def test_handler(file, stmts, creates = true, parser_type = :ruby)
|
174
|
-
Registry.clear
|
175
|
-
expect(Registry.at('#FOO')).to be nil
|
176
|
-
create_handler(stmts, parser_type)
|
177
|
-
parse(file, parser_type)
|
178
|
-
expect(Registry.at('#FOO')).send(creates ? :not_to : :to, be_nil)
|
179
|
-
Handlers::Base.subclasses.delete_if {|k, _v| k.to_s =~ /^InFileHandler/ }
|
180
|
-
end
|
181
|
-
|
182
|
-
[:ruby, :ruby18].each do |parser_type|
|
183
|
-
next if parser_type == :ruby && LEGACY_PARSER
|
184
|
-
describe "Parser type = #{parser_type.inspect}" do
|
185
|
-
it "allows handler to be specific to a file" do
|
186
|
-
test_handler 'file_a.rb', 'in_file "file_a.rb"', true, parser_type
|
187
|
-
end
|
188
|
-
|
189
|
-
it "ignores handler if filename does not match" do
|
190
|
-
test_handler 'file_b.rb', 'in_file "file_a.rb"', false, parser_type
|
191
|
-
end
|
192
|
-
|
193
|
-
it "only tests filename part when given a String" do
|
194
|
-
test_handler '/path/to/file_a.rb', 'in_file "/to/file_a.rb"', false, parser_type
|
195
|
-
end
|
196
|
-
|
197
|
-
it "tests exact match for entire String" do
|
198
|
-
test_handler 'file_a.rb', 'in_file "file"', false, parser_type
|
199
|
-
end
|
200
|
-
|
201
|
-
it "allows a Regexp as argument and test against full path" do
|
202
|
-
test_handler 'file_a.rbx', 'in_file(/\.rbx$/)', true, parser_type
|
203
|
-
test_handler '/path/to/file_a.rbx', 'in_file(/\/to\/file_/)', true, parser_type
|
204
|
-
test_handler '/path/to/file_a.rbx', 'in_file(/^\/path/)', true, parser_type
|
205
|
-
end
|
206
|
-
|
207
|
-
it "allows multiple in_file declarations" do
|
208
|
-
stmts = 'in_file "x"; in_file(/y/); in_file "foo.rb"'
|
209
|
-
test_handler 'foo.rb', stmts, true, parser_type
|
210
|
-
test_handler 'xyzzy.rb', stmts, true, parser_type
|
211
|
-
test_handler 'x', stmts, true, parser_type
|
212
|
-
end
|
213
|
-
end
|
214
|
-
end
|
215
|
-
end
|
216
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require File.dirname(__FILE__) + "/spec_helper"
|
3
|
-
|
4
|
-
RSpec.describe YARD::Handlers::C::AliasHandler do
|
5
|
-
it "allows defining of aliases (rb_define_alias)" do
|
6
|
-
parse <<-eof
|
7
|
-
/* FOO */
|
8
|
-
VALUE foo(VALUE x) { int value = x; }
|
9
|
-
void Init_Foo() {
|
10
|
-
rb_cFoo = rb_define_class("Foo", rb_cObject);
|
11
|
-
rb_define_method(rb_cFoo, "foo", foo, 1);
|
12
|
-
rb_define_alias(rb_cFoo, "bar", "foo");
|
13
|
-
}
|
14
|
-
eof
|
15
|
-
|
16
|
-
expect(Registry.at('Foo#bar')).to be_is_alias
|
17
|
-
expect(Registry.at('Foo#bar').docstring).to eq 'FOO'
|
18
|
-
end
|
19
|
-
|
20
|
-
it "allows defining of aliases (rb_define_alias) of attributes" do
|
21
|
-
parse <<-eof
|
22
|
-
/* FOO */
|
23
|
-
VALUE foo(VALUE x) { int value = x; }
|
24
|
-
void Init_Foo() {
|
25
|
-
rb_cFoo = rb_define_class("Foo", rb_cObject);
|
26
|
-
rb_define_attr(rb_cFoo, "foo", 1, 0);
|
27
|
-
rb_define_alias(rb_cFoo, "foo?", "foo");
|
28
|
-
}
|
29
|
-
eof
|
30
|
-
|
31
|
-
expect(Registry.at('Foo#foo')).to be_reader
|
32
|
-
expect(Registry.at('Foo#foo?')).to be_is_alias
|
33
|
-
end
|
34
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require File.dirname(__FILE__) + "/spec_helper"
|
3
|
-
|
4
|
-
RSpec.describe YARD::Handlers::C::AttributeHandler do
|
5
|
-
def run(read, write, commented = nil)
|
6
|
-
parse <<-eof
|
7
|
-
/* FOO */
|
8
|
-
VALUE foo(VALUE x) { int value = x; }
|
9
|
-
void Init_Foo() {
|
10
|
-
rb_cFoo = rb_define_class("Foo", rb_cObject);
|
11
|
-
#{commented ? '/*' : ''}
|
12
|
-
rb_define_attr(rb_cFoo, "foo", #{read}, #{write});
|
13
|
-
#{commented ? '*/' : ''}
|
14
|
-
}
|
15
|
-
eof
|
16
|
-
end
|
17
|
-
|
18
|
-
it "handles readonly attribute (rb_define_attr)" do
|
19
|
-
run(1, 0)
|
20
|
-
expect(Registry.at('Foo#foo')).to be_reader
|
21
|
-
expect(Registry.at('Foo#foo=')).to be nil
|
22
|
-
end
|
23
|
-
|
24
|
-
it "handles writeonly attribute (rb_define_attr)" do
|
25
|
-
run(0, 1)
|
26
|
-
expect(Registry.at('Foo#foo')).to be nil
|
27
|
-
expect(Registry.at('Foo#foo=')).to be_writer
|
28
|
-
end
|
29
|
-
|
30
|
-
it "handles readwrite attribute (rb_define_attr)" do
|
31
|
-
run(1, 1)
|
32
|
-
expect(Registry.at('Foo#foo')).to be_reader
|
33
|
-
expect(Registry.at('Foo#foo=')).to be_writer
|
34
|
-
end
|
35
|
-
|
36
|
-
it "handles commented writeonly attribute (/* rb_define_attr */)" do
|
37
|
-
run(1, 1, true)
|
38
|
-
expect(Registry.at('Foo#foo')).to be_reader
|
39
|
-
expect(Registry.at('Foo#foo=')).to be_writer
|
40
|
-
end
|
41
|
-
end
|
@@ -1,78 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require File.dirname(__FILE__) + "/spec_helper"
|
3
|
-
|
4
|
-
RSpec.describe YARD::Handlers::C::ClassHandler do
|
5
|
-
it "registers classes" do
|
6
|
-
parse_init 'cFoo = rb_define_class("Foo", rb_cObject);'
|
7
|
-
expect(Registry.at('Foo').type).to eq :class
|
8
|
-
end
|
9
|
-
|
10
|
-
it "registers classes under namespaces" do
|
11
|
-
parse_init <<-EOF
|
12
|
-
cBar = rb_define_class("Bar", rb_cObject);
|
13
|
-
cFoo = rb_define_class_under( cBar, "Foo", rb_cBaz );
|
14
|
-
EOF
|
15
|
-
expect(Registry.at('Bar::Foo').type).to eq :class
|
16
|
-
expect(Registry.at('Bar::Foo').superclass.path).to eq 'Baz'
|
17
|
-
end
|
18
|
-
|
19
|
-
it "remembers symbol defined with class" do
|
20
|
-
parse_init(<<-eof)
|
21
|
-
cXYZ = rb_define_class("Foo", rb_cObject);
|
22
|
-
rb_define_method(cXYZ, "bar", bar, 0);
|
23
|
-
eof
|
24
|
-
expect(Registry.at('Foo').type).to eq :class
|
25
|
-
expect(Registry.at('Foo#bar')).not_to be nil
|
26
|
-
end
|
27
|
-
|
28
|
-
it "looks up superclass symbol name" do
|
29
|
-
parse_init(<<-eof)
|
30
|
-
cXYZ = rb_define_class("Foo", rb_cObject);
|
31
|
-
cBar = rb_define_class("Bar", cXYZ);
|
32
|
-
eof
|
33
|
-
expect(Registry.at('Bar').superclass).to eq Registry.at('Foo')
|
34
|
-
end
|
35
|
-
|
36
|
-
it "uses superclass symbol name as proxy if not found" do
|
37
|
-
parse_init(<<-eof)
|
38
|
-
// cXYZ = rb_define_class("Foo", rb_cObject);
|
39
|
-
cBar = rb_define_class("Bar", cXYZ);
|
40
|
-
eof
|
41
|
-
expect(Registry.at('Bar').superclass).to eq P('XYZ')
|
42
|
-
end
|
43
|
-
|
44
|
-
it "does not associate declaration comments as class docstring" do
|
45
|
-
parse_init(<<-eof)
|
46
|
-
/* Docstring! */
|
47
|
-
cFoo = rb_define_class("Foo", cObject);
|
48
|
-
eof
|
49
|
-
expect(Registry.at('Foo').docstring).to be_blank
|
50
|
-
end
|
51
|
-
|
52
|
-
it "associates a file with the declaration" do
|
53
|
-
parse_init(<<-eof)
|
54
|
-
cFoo = rb_define_class("Foo", cObject);
|
55
|
-
eof
|
56
|
-
expect(Registry.at('Foo').file).to eq '(stdin)'
|
57
|
-
expect(Registry.at('Foo').line).to eq 2
|
58
|
-
end
|
59
|
-
|
60
|
-
it "properly handles Proxy superclasses" do
|
61
|
-
parse_init <<-eof
|
62
|
-
mFoo = rb_define_module("Foo");
|
63
|
-
cBar = rb_define_class_under(mFoo, "Bar", rb_cBar);
|
64
|
-
eof
|
65
|
-
expect(Registry.at('Foo::Bar').type).to eq :class
|
66
|
-
expect(Registry.at('Foo::Bar').superclass).to eq P('Bar')
|
67
|
-
expect(Registry.at('Foo::Bar').superclass.type).to eq :class
|
68
|
-
end
|
69
|
-
|
70
|
-
it "resolves namespace variable names across multiple files" do
|
71
|
-
parse_multi_file_init(
|
72
|
-
'cBar = rb_define_class_under(cFoo, "Bar", rb_cObject);',
|
73
|
-
'cFoo = rb_define_class("Foo", rb_cObject);'
|
74
|
-
)
|
75
|
-
|
76
|
-
expect(Registry.at('Foo::Bar').type).to eq :class
|
77
|
-
end
|
78
|
-
end
|