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
data/spec/i18n/text_spec.rb
DELETED
@@ -1,184 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe YARD::I18n::Text do
|
4
|
-
describe "#extract_messages" do
|
5
|
-
def extract_messages(input, options = {})
|
6
|
-
text = YARD::I18n::Text.new(StringIO.new(input), options)
|
7
|
-
messages = []
|
8
|
-
text.extract_messages do |*message|
|
9
|
-
messages << message
|
10
|
-
end
|
11
|
-
messages
|
12
|
-
end
|
13
|
-
|
14
|
-
describe "Header" do
|
15
|
-
it "extracts at attribute" do
|
16
|
-
text = <<-eot
|
17
|
-
# @title Getting Started Guide
|
18
|
-
|
19
|
-
# Getting Started with YARD
|
20
|
-
eot
|
21
|
-
expect(extract_messages(text, :have_header => true)).to eq(
|
22
|
-
[[:attribute, "title", "Getting Started Guide", 1],
|
23
|
-
[:paragraph, "# Getting Started with YARD", 3]]
|
24
|
-
)
|
25
|
-
end
|
26
|
-
|
27
|
-
it "ignores markup line" do
|
28
|
-
text = <<-eot
|
29
|
-
#!markdown
|
30
|
-
# @title Getting Started Guide
|
31
|
-
|
32
|
-
# Getting Started with YARD
|
33
|
-
eot
|
34
|
-
expect(extract_messages(text, :have_header => true)).to eq(
|
35
|
-
[[:attribute, "title", "Getting Started Guide", 2],
|
36
|
-
[:paragraph, "# Getting Started with YARD", 4]]
|
37
|
-
)
|
38
|
-
end
|
39
|
-
|
40
|
-
it "terminates header block by markup line not at the first line" do
|
41
|
-
text = <<-eot
|
42
|
-
# @title Getting Started Guide
|
43
|
-
#!markdown
|
44
|
-
|
45
|
-
# Getting Started with YARD
|
46
|
-
eot
|
47
|
-
expect(extract_messages(text, :have_header => true)).to eq(
|
48
|
-
[[:attribute, "title", "Getting Started Guide", 1],
|
49
|
-
[:paragraph, "#!markdown", 2],
|
50
|
-
[:paragraph, "# Getting Started with YARD", 4]]
|
51
|
-
)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe "Body" do
|
56
|
-
it "splits to paragraphs" do
|
57
|
-
paragraph1 = <<-eop.strip
|
58
|
-
Note that class methods must not be referred to with the "::" namespace
|
59
|
-
separator. Only modules, classes and constants should use "::".
|
60
|
-
eop
|
61
|
-
paragraph2 = <<-eop.strip
|
62
|
-
You can also do lookups on any installed gems. Just make sure to build the
|
63
|
-
.yardoc databases for installed gems with:
|
64
|
-
eop
|
65
|
-
text = <<-eot
|
66
|
-
#{paragraph1}
|
67
|
-
|
68
|
-
#{paragraph2}
|
69
|
-
eot
|
70
|
-
expect(extract_messages(text)).to eq(
|
71
|
-
[[:paragraph, paragraph1, 1],
|
72
|
-
[:paragraph, paragraph2, 4]]
|
73
|
-
)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
describe "#translate" do
|
79
|
-
def locale
|
80
|
-
locale = YARD::I18n::Locale.new("fr")
|
81
|
-
messages = locale.instance_variable_get(:@messages)
|
82
|
-
messages["markdown"] = "markdown (markdown in fr)"
|
83
|
-
messages["Hello"] = "Bonjour (Hello in fr)"
|
84
|
-
messages["Paragraph 1."] = "Paragraphe 1."
|
85
|
-
messages["Paragraph 2."] = "Paragraphe 2."
|
86
|
-
locale
|
87
|
-
end
|
88
|
-
|
89
|
-
def translate(input, options = {})
|
90
|
-
text = YARD::I18n::Text.new(StringIO.new(input), options)
|
91
|
-
text.translate(locale)
|
92
|
-
end
|
93
|
-
|
94
|
-
describe "Header" do
|
95
|
-
it "extracts at attribute" do
|
96
|
-
text = <<-eot
|
97
|
-
# @title Hello
|
98
|
-
|
99
|
-
# Getting Started with YARD
|
100
|
-
|
101
|
-
Paragraph.
|
102
|
-
eot
|
103
|
-
expect(translate(text, :have_header => true)).to eq <<-eot
|
104
|
-
# @title Bonjour (Hello in fr)
|
105
|
-
|
106
|
-
# Getting Started with YARD
|
107
|
-
|
108
|
-
Paragraph.
|
109
|
-
eot
|
110
|
-
end
|
111
|
-
|
112
|
-
it "ignores markup line" do
|
113
|
-
text = <<-eot
|
114
|
-
#!markdown
|
115
|
-
# @title Hello
|
116
|
-
|
117
|
-
# Getting Started with YARD
|
118
|
-
|
119
|
-
Paragraph.
|
120
|
-
eot
|
121
|
-
expect(translate(text, :have_header => true)).to eq <<-eot
|
122
|
-
#!markdown
|
123
|
-
# @title Bonjour (Hello in fr)
|
124
|
-
|
125
|
-
# Getting Started with YARD
|
126
|
-
|
127
|
-
Paragraph.
|
128
|
-
eot
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
describe "Body" do
|
133
|
-
it "splits to paragraphs" do
|
134
|
-
paragraph1 = <<-eop.strip
|
135
|
-
Paragraph 1.
|
136
|
-
eop
|
137
|
-
paragraph2 = <<-eop.strip
|
138
|
-
Paragraph 2.
|
139
|
-
eop
|
140
|
-
text = <<-eot
|
141
|
-
#{paragraph1}
|
142
|
-
|
143
|
-
#{paragraph2}
|
144
|
-
eot
|
145
|
-
expect(translate(text)).to eq <<-eot
|
146
|
-
Paragraphe 1.
|
147
|
-
|
148
|
-
Paragraphe 2.
|
149
|
-
eot
|
150
|
-
end
|
151
|
-
|
152
|
-
it "does not modify non-translated message" do
|
153
|
-
nonexistent_paragraph = <<-eop.strip
|
154
|
-
Nonexsitent paragraph.
|
155
|
-
eop
|
156
|
-
text = <<-eot
|
157
|
-
#{nonexistent_paragraph}
|
158
|
-
eot
|
159
|
-
expect(translate(text)).to eq <<-eot
|
160
|
-
#{nonexistent_paragraph}
|
161
|
-
eot
|
162
|
-
end
|
163
|
-
|
164
|
-
it "keeps empty lines" do
|
165
|
-
text = <<-eot
|
166
|
-
Paragraph 1.
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
Paragraph 2.
|
172
|
-
eot
|
173
|
-
expect(translate(text)).to eq <<-eot
|
174
|
-
Paragraphe 1.
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
Paragraphe 2.
|
180
|
-
eot
|
181
|
-
end
|
182
|
-
end
|
183
|
-
end
|
184
|
-
end
|
data/spec/logging_spec.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe YARD::Logger do
|
4
|
-
describe "#show_backtraces" do
|
5
|
-
it "is true if debug level is on" do
|
6
|
-
log.show_backtraces = true
|
7
|
-
log.enter_level(Logger::DEBUG) do
|
8
|
-
log.show_backtraces = false
|
9
|
-
expect(log.show_backtraces).to be true
|
10
|
-
end
|
11
|
-
expect(log.show_backtraces).to be false
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "#backtrace" do
|
16
|
-
before { log.show_backtraces = true }
|
17
|
-
after { log.show_backtraces = false }
|
18
|
-
|
19
|
-
it "logs backtrace in error by default" do
|
20
|
-
expect(log).to receive(:error).with("RuntimeError: foo")
|
21
|
-
expect(log).to receive(:error).with("Stack trace:\n\tline1\n\tline2\n")
|
22
|
-
exc = RuntimeError.new("foo")
|
23
|
-
exc.set_backtrace(['line1', 'line2'])
|
24
|
-
log.enter_level(Logger::INFO) { log.backtrace(exc) }
|
25
|
-
end
|
26
|
-
|
27
|
-
it "allows backtrace to be entered in other modes" do
|
28
|
-
expect(log).to receive(:warn).with("RuntimeError: foo")
|
29
|
-
expect(log).to receive(:warn).with("Stack trace:\n\tline1\n\tline2\n")
|
30
|
-
exc = RuntimeError.new("foo")
|
31
|
-
exc.set_backtrace(['line1', 'line2'])
|
32
|
-
log.enter_level(Logger::INFO) { log.backtrace(exc, :warn) }
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
describe '#warn' do
|
37
|
-
before { log.warned = false }
|
38
|
-
after { log.warned = false }
|
39
|
-
|
40
|
-
it 'changes #warned from false to true' do
|
41
|
-
expect { log.warn('message') }.to change(log, :warned).from(false).to(true)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
data/spec/options_spec.rb
DELETED
@@ -1,171 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe YARD::Options do
|
4
|
-
class FooOptions < YARD::Options
|
5
|
-
attr_accessor :foo
|
6
|
-
def initialize; self.foo = "abc" end
|
7
|
-
end
|
8
|
-
|
9
|
-
describe ".default_attr" do
|
10
|
-
it "allows default attributes to be defined with symbols" do
|
11
|
-
class DefaultOptions1 < YARD::Options
|
12
|
-
default_attr :foo, 'HELLO'
|
13
|
-
end
|
14
|
-
o = DefaultOptions1.new
|
15
|
-
o.reset_defaults
|
16
|
-
expect(o.foo).to eq 'HELLO'
|
17
|
-
end
|
18
|
-
|
19
|
-
it "calls lambda if value is a Proc" do
|
20
|
-
class DefaultOptions2 < YARD::Options
|
21
|
-
default_attr :foo, lambda { 100 }
|
22
|
-
end
|
23
|
-
o = DefaultOptions2.new
|
24
|
-
o.reset_defaults
|
25
|
-
expect(o.foo).to eq 100
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe "#reset_defaults" do
|
30
|
-
it "does not define defaults until reset is called" do
|
31
|
-
class ResetDefaultOptions1 < YARD::Options
|
32
|
-
default_attr :foo, 'FOO'
|
33
|
-
end
|
34
|
-
expect(ResetDefaultOptions1.new.foo).to be nil
|
35
|
-
o = ResetDefaultOptions1.new
|
36
|
-
o.reset_defaults
|
37
|
-
expect(o.foo).to eq 'FOO'
|
38
|
-
end
|
39
|
-
|
40
|
-
it "uses defaults from superclass as well" do
|
41
|
-
class ResetDefaultOptions2 < YARD::Options
|
42
|
-
default_attr :foo, 'FOO'
|
43
|
-
end
|
44
|
-
class ResetDefaultOptions3 < ResetDefaultOptions2
|
45
|
-
end
|
46
|
-
o = ResetDefaultOptions3.new
|
47
|
-
o.reset_defaults
|
48
|
-
expect(o.foo).to eq 'FOO'
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
describe "#delete" do
|
53
|
-
it "deletes an option" do
|
54
|
-
o = FooOptions.new
|
55
|
-
o.delete(:foo)
|
56
|
-
expect(o.to_hash).to eq({})
|
57
|
-
end
|
58
|
-
|
59
|
-
it "does not error if an option is deleted that does not exist" do
|
60
|
-
o = FooOptions.new
|
61
|
-
o.delete(:foo)
|
62
|
-
o.delete(:foo)
|
63
|
-
expect(o.to_hash).to eq({})
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
describe "#[]" do
|
68
|
-
it "handles getting option values using hash syntax" do
|
69
|
-
expect(FooOptions.new[:foo]).to eq "abc"
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
describe "#[]=" do
|
74
|
-
it "handles setting options using hash syntax" do
|
75
|
-
o = FooOptions.new
|
76
|
-
o[:foo] = "xyz"
|
77
|
-
expect(o[:foo]).to eq "xyz"
|
78
|
-
end
|
79
|
-
|
80
|
-
it "allows setting of unregistered keys" do
|
81
|
-
o = FooOptions.new
|
82
|
-
o[:bar] = "foo"
|
83
|
-
expect(o[:bar]).to eq "foo"
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
describe "#method_missing" do
|
88
|
-
it "allows setting of unregistered keys" do
|
89
|
-
o = FooOptions.new
|
90
|
-
o.bar = 'foo'
|
91
|
-
expect(o.bar).to eq 'foo'
|
92
|
-
end
|
93
|
-
|
94
|
-
it "allows getting values of unregistered keys (return nil)" do
|
95
|
-
expect(FooOptions.new.bar).to be nil
|
96
|
-
end
|
97
|
-
|
98
|
-
it "prints debugging messages about unregistered keys" do
|
99
|
-
expect(log).to receive(:debug).with("Attempting to access unregistered key bar on FooOptions")
|
100
|
-
FooOptions.new.bar
|
101
|
-
expect(log).to receive(:debug).with("Attempting to set unregistered key bar on FooOptions")
|
102
|
-
FooOptions.new.bar = 1
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
describe "#update" do
|
107
|
-
it "allows updating of options" do
|
108
|
-
expect(FooOptions.new.update(:foo => "xyz").foo).to eq "xyz"
|
109
|
-
end
|
110
|
-
|
111
|
-
it "does not ignore keys with no setter (OpenStruct behaviour)" do
|
112
|
-
o = FooOptions.new
|
113
|
-
o.update(:bar => "xyz")
|
114
|
-
expect(o.to_hash).to eq(:foo => "abc", :bar => "xyz")
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
describe "#merge" do
|
119
|
-
it "updates a new object" do
|
120
|
-
o = FooOptions.new
|
121
|
-
expect(o.merge(:foo => "xyz").object_id).not_to eq o.object_id
|
122
|
-
expect(o.merge(:foo => "xyz").to_hash).to eq(:foo => "xyz")
|
123
|
-
end
|
124
|
-
|
125
|
-
it "adds in values from original object" do
|
126
|
-
o = FooOptions.new
|
127
|
-
o.update(:bar => "foo")
|
128
|
-
expect(o.merge(:baz => 1).to_hash).to eq(:foo => "abc", :bar => "foo", :baz => 1)
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
describe "#to_hash" do
|
133
|
-
it "converts all instance variables and symbolized keys" do
|
134
|
-
class ToHashOptions1 < YARD::Options
|
135
|
-
attr_accessor :foo, :bar, :baz
|
136
|
-
def initialize; @foo = 1; @bar = 2; @baz = "hello" end
|
137
|
-
end
|
138
|
-
o = ToHashOptions1.new
|
139
|
-
hash = o.to_hash
|
140
|
-
expect(hash.keys).to include(:foo, :bar, :baz)
|
141
|
-
expect(hash[:foo]).to eq 1
|
142
|
-
expect(hash[:bar]).to eq 2
|
143
|
-
expect(hash[:baz]).to eq "hello"
|
144
|
-
end
|
145
|
-
|
146
|
-
it "uses accessor when converting values to hash" do
|
147
|
-
class ToHashOptions2 < YARD::Options
|
148
|
-
def initialize; @foo = 1 end
|
149
|
-
def foo; "HELLO#{@foo}" end
|
150
|
-
end
|
151
|
-
o = ToHashOptions2.new
|
152
|
-
expect(o.to_hash).to eq(:foo => "HELLO1")
|
153
|
-
end
|
154
|
-
|
155
|
-
it "ignores ivars with no accessor" do
|
156
|
-
class ToHashOptions3 < YARD::Options
|
157
|
-
attr_accessor :foo
|
158
|
-
def initialize; @foo = 1; @bar = "NOIGNORE" end
|
159
|
-
end
|
160
|
-
o = ToHashOptions3.new
|
161
|
-
expect(o.to_hash).to eq(:foo => 1, :bar => "NOIGNORE")
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
describe "#tap" do
|
166
|
-
it "supports #tap(&block) (even in 1.8.6)" do
|
167
|
-
o = FooOptions.new.tap {|obj| obj.foo = :BAR }
|
168
|
-
expect(o.to_hash).to eq(:foo => :BAR)
|
169
|
-
end
|
170
|
-
end
|
171
|
-
end
|
data/spec/parser/base_spec.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe YARD::Parser::Base do
|
4
|
-
describe "#initialize" do
|
5
|
-
class MyParser < Parser::Base; def initialize(a, b) end end
|
6
|
-
|
7
|
-
it "takes 2 arguments" do
|
8
|
-
expect { YARD::Parser::Base.new }.to raise_error(ArgumentError,
|
9
|
-
/wrong (number|#) of arguments|given 0, expected 2/)
|
10
|
-
end
|
11
|
-
|
12
|
-
it "raises NotImplementedError on #initialize" do
|
13
|
-
expect { YARD::Parser::Base.new('a', 'b') }.to raise_error(NotImplementedError)
|
14
|
-
end
|
15
|
-
|
16
|
-
it "raises NotImplementedError on #parse" do
|
17
|
-
expect { MyParser.new('a', 'b').parse }.to raise_error(NotImplementedError)
|
18
|
-
end
|
19
|
-
|
20
|
-
it "raises NotImplementedError on #tokenize" do
|
21
|
-
expect { MyParser.new('a', 'b').tokenize }.to raise_error(NotImplementedError)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,236 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe YARD::Parser::C::CParser do
|
4
|
-
describe "#parse" do
|
5
|
-
def parse(contents)
|
6
|
-
Registry.clear
|
7
|
-
YARD.parse_string(contents, :c)
|
8
|
-
end
|
9
|
-
|
10
|
-
describe "Array class" do
|
11
|
-
before(:all) do
|
12
|
-
file = File.join(File.dirname(__FILE__), 'examples', 'array.c.txt')
|
13
|
-
parse(File.read(file))
|
14
|
-
end
|
15
|
-
|
16
|
-
it "parses Array class" do
|
17
|
-
obj = YARD::Registry.at('Array')
|
18
|
-
expect(obj).not_to be nil
|
19
|
-
expect(obj.docstring).not_to be_blank
|
20
|
-
end
|
21
|
-
|
22
|
-
it "parses method" do
|
23
|
-
obj = YARD::Registry.at('Array#initialize')
|
24
|
-
expect(obj.docstring).not_to be_blank
|
25
|
-
expect(obj.tags(:overload).size).to be > 1
|
26
|
-
end
|
27
|
-
|
28
|
-
it "parses new_ary return type" do
|
29
|
-
obj = YARD::Registry.at('Array#map')
|
30
|
-
expect(obj.tags(:overload).count do |overload|
|
31
|
-
overload.tag(:return) && overload.tag(:return).types == ['Enumerator']
|
32
|
-
end).to eq 2
|
33
|
-
expect(obj.tags(:overload).count do |overload|
|
34
|
-
overload.tag(:return) && overload.tag(:return).types == ['Array']
|
35
|
-
end).to eq 2
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe "C++ namespace" do
|
40
|
-
before(:all) do
|
41
|
-
file = File.join(File.dirname(__FILE__), 'examples', 'namespace.cpp.txt')
|
42
|
-
parse(File.read(file))
|
43
|
-
end
|
44
|
-
|
45
|
-
it "parses Rect class" do
|
46
|
-
obj = YARD::Registry.at('Rect')
|
47
|
-
expect(obj).not_to be nil
|
48
|
-
expect(obj.docstring).not_to be_blank
|
49
|
-
end
|
50
|
-
|
51
|
-
it "parses method inside of namespace" do
|
52
|
-
obj = YARD::Registry.at('Rect#inspect')
|
53
|
-
expect(obj.docstring).not_to be_blank
|
54
|
-
end
|
55
|
-
|
56
|
-
it "parses method after namespace" do
|
57
|
-
obj = YARD::Registry.at('Rect#hello_world')
|
58
|
-
expect(obj.docstring).not_to be_blank
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
describe "Source located in extra files" do
|
63
|
-
before(:all) do
|
64
|
-
@multifile = File.join(File.dirname(__FILE__), 'examples', 'multifile.c.txt')
|
65
|
-
@extrafile = File.join(File.dirname(__FILE__), 'examples', 'extrafile.c.txt')
|
66
|
-
@contents = File.read(@multifile)
|
67
|
-
end
|
68
|
-
|
69
|
-
it "looks for methods in extra files (if 'in' comment is found)" do
|
70
|
-
extra_contents = File.read(@extrafile)
|
71
|
-
expect(File).to receive(:read).with('extra.c').and_return(extra_contents)
|
72
|
-
parse(@contents)
|
73
|
-
expect(Registry.at('Multifile#extra').docstring).to eq 'foo'
|
74
|
-
end
|
75
|
-
|
76
|
-
it "stops searching for extra source file gracefully if file is not found" do
|
77
|
-
expect(File).to receive(:read).with('extra.c').and_raise(Errno::ENOENT)
|
78
|
-
expect(log).to receive(:warn).with("Missing source file `extra.c' when parsing Multifile#extra")
|
79
|
-
parse(@contents)
|
80
|
-
expect(Registry.at('Multifile#extra').docstring).to eq ''
|
81
|
-
end
|
82
|
-
|
83
|
-
it "differentiates between a struct and a pointer to a struct retval" do
|
84
|
-
parse(@contents)
|
85
|
-
expect(Registry.at('Multifile#hello_mars').docstring).to eq 'Hello Mars'
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
describe "Foo class" do
|
90
|
-
it "does not include comments in docstring source" do
|
91
|
-
parse <<-eof
|
92
|
-
/*
|
93
|
-
* Hello world
|
94
|
-
*/
|
95
|
-
VALUE foo(VALUE x) {
|
96
|
-
int value = x;
|
97
|
-
}
|
98
|
-
|
99
|
-
void Init_Foo() {
|
100
|
-
rb_define_method(rb_cFoo, "foo", foo, 1);
|
101
|
-
}
|
102
|
-
eof
|
103
|
-
expect(Registry.at('Foo#foo').source.gsub(/\s\s+/, ' ')).to eq(
|
104
|
-
"VALUE foo(VALUE x) { int value = x;\n}"
|
105
|
-
)
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
describe "Constant" do
|
110
|
-
it "does not truncate docstring" do
|
111
|
-
parse <<-eof
|
112
|
-
#define MSK_DEADBEEF 0xdeadbeef
|
113
|
-
void
|
114
|
-
Init_Mask(void)
|
115
|
-
{
|
116
|
-
rb_cMask = rb_define_class("Mask", rb_cObject);
|
117
|
-
/* 0xdeadbeef: This constant is frequently used to indicate a
|
118
|
-
* software crash or deadlock in embedded systems. */
|
119
|
-
rb_define_const(rb_cMask, "DEADBEEF", INT2FIX(MSK_DEADBEEF));
|
120
|
-
}
|
121
|
-
eof
|
122
|
-
constant = Registry.at('Mask::DEADBEEF')
|
123
|
-
expect(constant.value).to eq '0xdeadbeef'
|
124
|
-
expect(constant.docstring).to eq "This constant is frequently used to indicate a\nsoftware crash or deadlock in embedded systems."
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
describe "Macros" do
|
129
|
-
it "handles param## inside of macros" do
|
130
|
-
thr = Thread.new do
|
131
|
-
parse <<-eof
|
132
|
-
void
|
133
|
-
Init_gobject_gparamspecs(void)
|
134
|
-
{
|
135
|
-
VALUE cParamSpec = GTYPE2CLASS(G_TYPE_PARAM);
|
136
|
-
VALUE c;
|
137
|
-
|
138
|
-
#define DEF_NUMERIC_PSPEC_METHODS(c, typename) \
|
139
|
-
G_STMT_START {\
|
140
|
-
rbg_define_method(c, "initialize", typename##_initialize, 7); \
|
141
|
-
rbg_define_method(c, "minimum", typename##_minimum, 0); \
|
142
|
-
rbg_define_method(c, "maximum", typename##_maximum, 0); \
|
143
|
-
rbg_define_method(c, "range", typename##_range, 0); \
|
144
|
-
} G_STMT_END
|
145
|
-
|
146
|
-
#if 0
|
147
|
-
rbg_define_method(c, "default_value", typename##_default_value, 0); \
|
148
|
-
rb_define_alias(c, "default", "default_value"); \
|
149
|
-
|
150
|
-
#endif
|
151
|
-
|
152
|
-
c = G_DEF_CLASS(G_TYPE_PARAM_CHAR, "Char", cParamSpec);
|
153
|
-
DEF_NUMERIC_PSPEC_METHODS(c, char);
|
154
|
-
eof
|
155
|
-
end
|
156
|
-
thr.join(5)
|
157
|
-
if thr.alive?
|
158
|
-
thr.kill
|
159
|
-
raise "Did not parse in time"
|
160
|
-
end
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
describe "C macros in declaration" do
|
165
|
-
it "handles C macros in method declaration" do
|
166
|
-
Registry.clear
|
167
|
-
parse <<-eof
|
168
|
-
// docstring
|
169
|
-
FOOBAR VALUE func() { }
|
170
|
-
|
171
|
-
void
|
172
|
-
Init_mod(void)
|
173
|
-
{
|
174
|
-
rb_define_method(rb_cFoo, "func", func, 0); \
|
175
|
-
}
|
176
|
-
eof
|
177
|
-
|
178
|
-
expect(Registry.at('Foo#func').docstring).to eq "docstring"
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
describe "File singleton methods" do
|
183
|
-
before(:all) do
|
184
|
-
file = File.join(File.dirname(__FILE__), 'examples', 'file.c.txt')
|
185
|
-
parse(File.read(file))
|
186
|
-
end
|
187
|
-
|
188
|
-
it "parses methods from define_filetest_function" do
|
189
|
-
obj = YARD::Registry.at('File.exist?')
|
190
|
-
expect(obj).not_to be nil
|
191
|
-
expect(obj.docstring).not_to be_blank
|
192
|
-
end
|
193
|
-
end
|
194
|
-
end
|
195
|
-
|
196
|
-
describe "Override comments" do
|
197
|
-
before(:all) do
|
198
|
-
Registry.clear
|
199
|
-
override_file = File.join(File.dirname(__FILE__), 'examples', 'override.c.txt')
|
200
|
-
@override_parser = YARD.parse_string(File.read(override_file), :c)
|
201
|
-
end
|
202
|
-
|
203
|
-
it "parses GMP::Z class" do
|
204
|
-
z = YARD::Registry.at('GMP::Z')
|
205
|
-
expect(z).not_to be nil
|
206
|
-
expect(z.docstring).not_to be_blank
|
207
|
-
end
|
208
|
-
|
209
|
-
it "parses GMP::Z methods w/ bodies" do
|
210
|
-
add = YARD::Registry.at('GMP::Z#+')
|
211
|
-
expect(add.docstring).not_to be_blank
|
212
|
-
expect(add.source).not_to be nil
|
213
|
-
expect(add.source).not_to be_empty
|
214
|
-
|
215
|
-
add_self = YARD::Registry.at('GMP::Z#+')
|
216
|
-
expect(add_self.docstring).not_to be_blank
|
217
|
-
expect(add_self.source).not_to be nil
|
218
|
-
expect(add_self.source).not_to be_empty
|
219
|
-
|
220
|
-
sqrtrem = YARD::Registry.at('GMP::Z#+')
|
221
|
-
expect(sqrtrem.docstring).not_to be_blank
|
222
|
-
expect(sqrtrem.source).not_to be nil
|
223
|
-
expect(sqrtrem.source).not_to be_empty
|
224
|
-
end
|
225
|
-
|
226
|
-
it "parses GMP::Z methods w/o bodies" do
|
227
|
-
neg = YARD::Registry.at('GMP::Z#neg')
|
228
|
-
expect(neg.docstring).not_to be_blank
|
229
|
-
expect(neg.source).to be nil
|
230
|
-
|
231
|
-
neg_self = YARD::Registry.at('GMP::Z#neg')
|
232
|
-
expect(neg_self.docstring).not_to be_blank
|
233
|
-
expect(neg_self.source).to be nil
|
234
|
-
end
|
235
|
-
end
|
236
|
-
end
|