yard 0.9.21 → 0.9.26

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.

Files changed (250) hide show
  1. checksums.yaml +4 -4
  2. data/.dockerignore +0 -0
  3. data/.gitattributes +4 -0
  4. data/.github/FUNDING.yml +3 -0
  5. data/.github/ISSUE_TEMPLATE.md +6 -6
  6. data/.github/PULL_REQUEST_TEMPLATE.md +5 -5
  7. data/.github/workflows/ci.yml +42 -0
  8. data/.github/workflows/gem.yml +27 -0
  9. data/.gitignore +0 -0
  10. data/.rspec +0 -0
  11. data/.rubocop.yml +37 -24
  12. data/.travis.yml +0 -3
  13. data/.yardopts +0 -0
  14. data/.yardopts_guide +0 -0
  15. data/.yardopts_i18n +0 -0
  16. data/CHANGELOG.md +47 -4
  17. data/CONTRIBUTING.md +2 -2
  18. data/Gemfile +4 -3
  19. data/README.md +97 -102
  20. data/Rakefile +2 -0
  21. data/lib/yard/cli/diff.rb +4 -1
  22. data/lib/yard/cli/server.rb +22 -13
  23. data/lib/yard/code_objects/method_object.rb +1 -1
  24. data/lib/yard/code_objects/namespace_mapper.rb +30 -3
  25. data/lib/yard/code_objects/proxy.rb +2 -1
  26. data/lib/yard/globals.rb +1 -1
  27. data/lib/yard/handlers/c/base.rb +35 -0
  28. data/lib/yard/handlers/ruby/mixin_handler.rb +4 -1
  29. data/lib/yard/parser/ruby/legacy/irb/slex.rb +1 -1
  30. data/lib/yard/parser/ruby/ruby_parser.rb +6 -4
  31. data/lib/yard/parser/ruby/token_resolver.rb +3 -1
  32. data/lib/yard/parser/source_parser.rb +1 -1
  33. data/lib/yard/registry_resolver.rb +10 -24
  34. data/lib/yard/registry_store.rb +1 -1
  35. data/lib/yard/serializers/yardoc_serializer.rb +1 -1
  36. data/lib/yard/server/commands/base.rb +2 -2
  37. data/lib/yard/templates/helpers/html_helper.rb +10 -3
  38. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +1 -1
  39. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +5 -4
  40. data/lib/yard/templates/section.rb +1 -3
  41. data/lib/yard/version.rb +1 -1
  42. data/samus.json +15 -46
  43. data/tasks/update_error_map.rake +53 -0
  44. data/templates/default/fulldoc/html/css/style.css +1 -0
  45. data/templates/default/fulldoc/html/js/jquery.js +4 -2
  46. data/yard.gemspec +1 -2
  47. metadata +9 -206
  48. data/spec/cli/command_parser_spec.rb +0 -43
  49. data/spec/cli/command_spec.rb +0 -36
  50. data/spec/cli/config_spec.rb +0 -148
  51. data/spec/cli/diff_spec.rb +0 -254
  52. data/spec/cli/display_spec.rb +0 -30
  53. data/spec/cli/gems_spec.rb +0 -81
  54. data/spec/cli/graph_spec.rb +0 -18
  55. data/spec/cli/help_spec.rb +0 -22
  56. data/spec/cli/i18n_spec.rb +0 -107
  57. data/spec/cli/list_spec.rb +0 -8
  58. data/spec/cli/markup_types_spec.rb +0 -22
  59. data/spec/cli/server_spec.rb +0 -324
  60. data/spec/cli/stats_spec.rb +0 -96
  61. data/spec/cli/yard_on_yard_spec.rb +0 -38
  62. data/spec/cli/yardoc_spec.rb +0 -896
  63. data/spec/cli/yri_spec.rb +0 -101
  64. data/spec/code_objects/base_spec.rb +0 -485
  65. data/spec/code_objects/class_object_spec.rb +0 -226
  66. data/spec/code_objects/code_object_list_spec.rb +0 -36
  67. data/spec/code_objects/constants_spec.rb +0 -116
  68. data/spec/code_objects/extra_file_object_spec.rb +0 -161
  69. data/spec/code_objects/macro_object_spec.rb +0 -150
  70. data/spec/code_objects/method_object_spec.rb +0 -184
  71. data/spec/code_objects/module_object_spec.rb +0 -142
  72. data/spec/code_objects/namespace_object_spec.rb +0 -171
  73. data/spec/code_objects/proxy_spec.rb +0 -147
  74. data/spec/code_objects/spec_helper.rb +0 -3
  75. data/spec/config_spec.rb +0 -171
  76. data/spec/core_ext/array_spec.rb +0 -13
  77. data/spec/core_ext/file_spec.rb +0 -72
  78. data/spec/core_ext/hash_spec.rb +0 -14
  79. data/spec/core_ext/insertion_spec.rb +0 -37
  80. data/spec/core_ext/module_spec.rb +0 -9
  81. data/spec/core_ext/string_spec.rb +0 -42
  82. data/spec/core_ext/symbol_hash_spec.rb +0 -89
  83. data/spec/docstring_parser_spec.rb +0 -280
  84. data/spec/docstring_spec.rb +0 -373
  85. data/spec/handlers/alias_handler_spec.rb +0 -82
  86. data/spec/handlers/attribute_handler_spec.rb +0 -96
  87. data/spec/handlers/base_spec.rb +0 -216
  88. data/spec/handlers/c/alias_handler_spec.rb +0 -34
  89. data/spec/handlers/c/attribute_handler_spec.rb +0 -41
  90. data/spec/handlers/c/class_handler_spec.rb +0 -78
  91. data/spec/handlers/c/constant_handler_spec.rb +0 -71
  92. data/spec/handlers/c/init_handler_spec.rb +0 -48
  93. data/spec/handlers/c/method_handler_spec.rb +0 -327
  94. data/spec/handlers/c/mixin_handler_spec.rb +0 -44
  95. data/spec/handlers/c/module_handler_spec.rb +0 -71
  96. data/spec/handlers/c/override_comment_handler_spec.rb +0 -47
  97. data/spec/handlers/c/path_handler_spec.rb +0 -36
  98. data/spec/handlers/c/spec_helper.rb +0 -23
  99. data/spec/handlers/c/struct_handler_spec.rb +0 -16
  100. data/spec/handlers/class_condition_handler_spec.rb +0 -87
  101. data/spec/handlers/class_handler_spec.rb +0 -247
  102. data/spec/handlers/class_method_handler_shared_examples.rb +0 -133
  103. data/spec/handlers/class_variable_handler_spec.rb +0 -12
  104. data/spec/handlers/constant_handler_spec.rb +0 -112
  105. data/spec/handlers/decorator_handler_methods_spec.rb +0 -393
  106. data/spec/handlers/dsl_handler_spec.rb +0 -226
  107. data/spec/handlers/examples/alias_handler_001.rb.txt +0 -46
  108. data/spec/handlers/examples/attribute_handler_001.rb.txt +0 -32
  109. data/spec/handlers/examples/class_condition_handler_001.rb.txt +0 -69
  110. data/spec/handlers/examples/class_handler_001.rb.txt +0 -120
  111. data/spec/handlers/examples/class_variable_handler_001.rb.txt +0 -10
  112. data/spec/handlers/examples/constant_handler_001.rb.txt +0 -35
  113. data/spec/handlers/examples/dsl_handler_001.rb.txt +0 -156
  114. data/spec/handlers/examples/exception_handler_001.rb.txt +0 -59
  115. data/spec/handlers/examples/extend_handler_001.rb.txt +0 -19
  116. data/spec/handlers/examples/method_condition_handler_001.rb.txt +0 -10
  117. data/spec/handlers/examples/method_handler_001.rb.txt +0 -128
  118. data/spec/handlers/examples/mixin_handler_001.rb.txt +0 -40
  119. data/spec/handlers/examples/module_handler_001.rb.txt +0 -29
  120. data/spec/handlers/examples/private_constant_handler_001.rb.txt +0 -8
  121. data/spec/handlers/examples/process_handler_001.rb.txt +0 -11
  122. data/spec/handlers/examples/visibility_handler_001.rb.txt +0 -36
  123. data/spec/handlers/examples/yield_handler_001.rb.txt +0 -54
  124. data/spec/handlers/exception_handler_spec.rb +0 -49
  125. data/spec/handlers/extend_handler_spec.rb +0 -28
  126. data/spec/handlers/legacy_base_spec.rb +0 -128
  127. data/spec/handlers/method_condition_handler_spec.rb +0 -15
  128. data/spec/handlers/method_handler_spec.rb +0 -214
  129. data/spec/handlers/mixin_handler_spec.rb +0 -60
  130. data/spec/handlers/module_function_handler_spec.rb +0 -106
  131. data/spec/handlers/module_handler_spec.rb +0 -35
  132. data/spec/handlers/private_class_method_handler_spec.rb +0 -11
  133. data/spec/handlers/private_constant_handler_spec.rb +0 -25
  134. data/spec/handlers/processor_spec.rb +0 -35
  135. data/spec/handlers/public_class_method_handler_spec.rb +0 -11
  136. data/spec/handlers/ruby/base_spec.rb +0 -95
  137. data/spec/handlers/ruby/legacy/base_spec.rb +0 -84
  138. data/spec/handlers/spec_helper.rb +0 -33
  139. data/spec/handlers/visibility_handler_spec.rb +0 -44
  140. data/spec/handlers/yield_handler_spec.rb +0 -52
  141. data/spec/i18n/locale_spec.rb +0 -81
  142. data/spec/i18n/message_spec.rb +0 -52
  143. data/spec/i18n/messages_spec.rb +0 -67
  144. data/spec/i18n/pot_generator_spec.rb +0 -295
  145. data/spec/i18n/text_spec.rb +0 -184
  146. data/spec/logging_spec.rb +0 -44
  147. data/spec/options_spec.rb +0 -171
  148. data/spec/parser/base_spec.rb +0 -24
  149. data/spec/parser/c_parser_spec.rb +0 -236
  150. data/spec/parser/examples/array.c.txt +0 -6267
  151. data/spec/parser/examples/example1.rb.txt +0 -8
  152. data/spec/parser/examples/extrafile.c.txt +0 -8
  153. data/spec/parser/examples/file.c.txt +0 -28
  154. data/spec/parser/examples/multifile.c.txt +0 -22
  155. data/spec/parser/examples/namespace.cpp.txt +0 -68
  156. data/spec/parser/examples/override.c.txt +0 -424
  157. data/spec/parser/examples/parse_in_order_001.rb.txt +0 -2
  158. data/spec/parser/examples/parse_in_order_002.rb.txt +0 -2
  159. data/spec/parser/examples/tag_handler_001.rb.txt +0 -8
  160. data/spec/parser/ruby/ast_node_spec.rb +0 -33
  161. data/spec/parser/ruby/legacy/statement_list_spec.rb +0 -299
  162. data/spec/parser/ruby/legacy/token_list_spec.rb +0 -79
  163. data/spec/parser/ruby/ruby_parser_spec.rb +0 -508
  164. data/spec/parser/ruby/token_resolver_spec.rb +0 -165
  165. data/spec/parser/source_parser_spec.rb +0 -727
  166. data/spec/parser/tag_parsing_spec.rb +0 -17
  167. data/spec/rake/yardoc_task_spec.rb +0 -118
  168. data/spec/registry_spec.rb +0 -463
  169. data/spec/registry_store_spec.rb +0 -327
  170. data/spec/rubygems/doc_manager_spec.rb +0 -112
  171. data/spec/serializers/data/serialized_yardoc/checksums +0 -1
  172. data/spec/serializers/data/serialized_yardoc/objects/Foo.dat +0 -0
  173. data/spec/serializers/data/serialized_yardoc/objects/Foo/bar_i.dat +0 -0
  174. data/spec/serializers/data/serialized_yardoc/objects/Foo/baz_i.dat +0 -0
  175. data/spec/serializers/data/serialized_yardoc/objects/root.dat +0 -0
  176. data/spec/serializers/data/serialized_yardoc/proxy_types +0 -2
  177. data/spec/serializers/file_system_serializer_spec.rb +0 -145
  178. data/spec/serializers/spec_helper.rb +0 -2
  179. data/spec/serializers/yardoc_serializer_spec.rb +0 -78
  180. data/spec/server/adapter_spec.rb +0 -39
  181. data/spec/server/commands/base_spec.rb +0 -91
  182. data/spec/server/commands/library_command_spec.rb +0 -39
  183. data/spec/server/doc_server_helper_spec.rb +0 -72
  184. data/spec/server/doc_server_serializer_spec.rb +0 -60
  185. data/spec/server/rack_adapter_spec.rb +0 -21
  186. data/spec/server/router_spec.rb +0 -123
  187. data/spec/server/spec_helper.rb +0 -22
  188. data/spec/server/static_caching_spec.rb +0 -47
  189. data/spec/server/webrick_servlet_spec.rb +0 -20
  190. data/spec/server_spec.rb +0 -19
  191. data/spec/spec_helper.rb +0 -212
  192. data/spec/tags/default_factory_spec.rb +0 -168
  193. data/spec/tags/default_tag_spec.rb +0 -11
  194. data/spec/tags/directives_spec.rb +0 -463
  195. data/spec/tags/library_spec.rb +0 -48
  196. data/spec/tags/overload_tag_spec.rb +0 -53
  197. data/spec/tags/ref_tag_list_spec.rb +0 -53
  198. data/spec/tags/types_explainer_spec.rb +0 -203
  199. data/spec/templates/class_spec.rb +0 -45
  200. data/spec/templates/constant_spec.rb +0 -41
  201. data/spec/templates/engine_spec.rb +0 -131
  202. data/spec/templates/examples/class001.html +0 -308
  203. data/spec/templates/examples/class001.txt +0 -36
  204. data/spec/templates/examples/class002.html +0 -39
  205. data/spec/templates/examples/constant001.txt +0 -25
  206. data/spec/templates/examples/constant002.txt +0 -7
  207. data/spec/templates/examples/constant003.txt +0 -11
  208. data/spec/templates/examples/method001.html +0 -137
  209. data/spec/templates/examples/method001.txt +0 -35
  210. data/spec/templates/examples/method002.html +0 -91
  211. data/spec/templates/examples/method002.txt +0 -20
  212. data/spec/templates/examples/method003.html +0 -165
  213. data/spec/templates/examples/method003.txt +0 -45
  214. data/spec/templates/examples/method004.html +0 -48
  215. data/spec/templates/examples/method004.txt +0 -10
  216. data/spec/templates/examples/method005.html +0 -105
  217. data/spec/templates/examples/method005.txt +0 -33
  218. data/spec/templates/examples/method006.html +0 -108
  219. data/spec/templates/examples/method006.txt +0 -20
  220. data/spec/templates/examples/module001.dot +0 -33
  221. data/spec/templates/examples/module001.html +0 -833
  222. data/spec/templates/examples/module001.txt +0 -33
  223. data/spec/templates/examples/module002.html +0 -341
  224. data/spec/templates/examples/module003.html +0 -202
  225. data/spec/templates/examples/module004.html +0 -394
  226. data/spec/templates/examples/module005.html +0 -82
  227. data/spec/templates/examples/tag001.txt +0 -82
  228. data/spec/templates/helpers/base_helper_spec.rb +0 -171
  229. data/spec/templates/helpers/html_helper_spec.rb +0 -687
  230. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +0 -65
  231. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +0 -84
  232. data/spec/templates/helpers/markup_helper_spec.rb +0 -136
  233. data/spec/templates/helpers/method_helper_spec.rb +0 -107
  234. data/spec/templates/helpers/module_helper_spec.rb +0 -35
  235. data/spec/templates/helpers/shared_signature_examples.rb +0 -126
  236. data/spec/templates/helpers/text_helper_spec.rb +0 -65
  237. data/spec/templates/markup_processor_integrations/asciidoctor_spec.rb +0 -60
  238. data/spec/templates/markup_processor_integrations/integration_spec_helper.rb +0 -46
  239. data/spec/templates/markup_processor_integrations/rdoc_markdown_spec.rb +0 -59
  240. data/spec/templates/markup_processor_integrations/rdoc_spec.rb +0 -39
  241. data/spec/templates/markup_processor_integrations/redcarpet_spec.rb +0 -59
  242. data/spec/templates/markup_processor_integrations/redcloth_spec.rb +0 -48
  243. data/spec/templates/method_spec.rb +0 -118
  244. data/spec/templates/module_spec.rb +0 -203
  245. data/spec/templates/onefile_spec.rb +0 -66
  246. data/spec/templates/section_spec.rb +0 -144
  247. data/spec/templates/spec_helper.rb +0 -76
  248. data/spec/templates/tag_spec.rb +0 -52
  249. data/spec/templates/template_spec.rb +0 -410
  250. data/spec/verifier_spec.rb +0 -106
@@ -1,82 +0,0 @@
1
- ------------------------------------------------------------- Method: #m
2
- (Defined in: (stdin))
3
-
4
- root.m(opts = {}) {|a| ... } -> String
5
- ------------------------------------------------------------------------
6
-
7
- Deprecated. for great justice
8
-
9
- Abstract. override me
10
-
11
- Comments
12
-
13
- Examples:
14
- ---------
15
-
16
- # Wash your car
17
- car.wash
18
-
19
- # To kill a mockingbird
20
- a = String.new
21
- flip(a.reverse)
22
-
23
- Parameters:
24
- -----------
25
-
26
- (Hash) opts - the options
27
-
28
- Options Hash (opts):
29
- --------------------
30
-
31
- (Object) :key - default: '' - hello
32
-
33
- (Object) :key2 - default: X - hello
34
-
35
- Yields:
36
- -------
37
-
38
- - a block
39
-
40
- Yield Parameters:
41
- -----------------
42
-
43
- (String) a - a value
44
-
45
- Yield Returns:
46
- --------------
47
-
48
- (Hash) - a hash
49
-
50
- Returns:
51
- --------
52
-
53
- (String) - the result
54
-
55
- Raises:
56
- -------
57
-
58
- (Exception) - Exception class
59
-
60
- See Also:
61
- ---------
62
-
63
- - A
64
- - http://url.com
65
- - http://url.com - Example
66
-
67
- Author:
68
- -------
69
-
70
- Name
71
-
72
- Since:
73
- ------
74
-
75
- 1.0
76
-
77
- Version:
78
- --------
79
-
80
- 1.0
81
-
82
-
@@ -1,171 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe YARD::Templates::Helpers::BaseHelper do
4
- include YARD::Templates::Helpers::BaseHelper
5
-
6
- describe "#run_verifier" do
7
- it "runs verifier proc against list if provided" do
8
- mock = Verifier.new
9
- expect(mock).to receive(:call).with(1)
10
- expect(mock).to receive(:call).with(2)
11
- expect(mock).to receive(:call).with(3)
12
- expect(self).to receive(:options).at_least(1).times.and_return(Options.new.update(:verifier => mock))
13
- run_verifier [1, 2, 3]
14
- end
15
-
16
- it "prunes list if lambda returns false and only false" do
17
- mock = Verifier.new
18
- expect(self).to receive(:options).at_least(1).times.and_return(Options.new.update(:verifier => mock))
19
- expect(mock).to receive(:call).with(1).and_return(false)
20
- expect(mock).to receive(:call).with(2).and_return(true)
21
- expect(mock).to receive(:call).with(3).and_return(nil)
22
- expect(mock).to receive(:call).with(4).and_return("value")
23
- expect(run_verifier([1, 2, 3, 4])).to eq [2, 3, 4]
24
- end
25
-
26
- it "returns list if no verifier exists" do
27
- expect(self).to receive(:options).at_least(1).times.and_return(Options.new)
28
- expect(run_verifier([1, 2, 3])).to eq [1, 2, 3]
29
- end
30
- end
31
-
32
- describe "#h" do
33
- it "returns just the text" do
34
- expect(h("hello world")).to eq "hello world"
35
- expect(h(nil)).to eq nil
36
- end
37
- end
38
-
39
- describe "#link_object" do
40
- it "returns the title if provided" do
41
- expect(link_object(1, "title")).to eq "title"
42
- expect(link_object(Registry.root, "title")).to eq "title"
43
- end
44
-
45
- it "returns a path if argument is a Proxy or object" do
46
- expect(link_object(Registry.root)).to eq "Top Level Namespace"
47
- expect(link_object(P("Array"))).to eq "Array"
48
- end
49
-
50
- it "returns path of Proxified object if argument is a String or Symbol" do
51
- expect(link_object("Array")).to eq "Array"
52
- expect(link_object(:"A::B")).to eq "A::B"
53
- end
54
-
55
- it "returns the argument if not an object, proxy, String or Symbol" do
56
- expect(link_object(1)).to eq 1
57
- end
58
- end
59
-
60
- describe "#link_url" do
61
- it "returns the URL" do
62
- expect(link_url("http://url")).to eq "http://url"
63
- end
64
- end
65
-
66
- describe "#linkify" do
67
- let(:object) { Registry.root }
68
- # before do
69
- # stub!(:object).and_return(Registry.root)
70
- # end
71
-
72
- it "calls #link_url for mailto: links" do
73
- expect(self).to receive(:link_url)
74
- linkify("mailto:steve@example.com")
75
- end
76
-
77
- it "calls #link_url for URL schemes (http://)" do
78
- expect(self).to receive(:link_url)
79
- linkify("http://example.com")
80
- end
81
-
82
- it "calls #link_file for file: links" do
83
- expect(self).to receive(:link_file).with('Filename', nil, 'anchor')
84
- linkify("file:Filename#anchor")
85
- end
86
-
87
- it "passes off to #link_object if argument is an object" do
88
- obj = CodeObjects::NamespaceObject.new(nil, :YARD)
89
- expect(self).to receive(:link_object).with(obj)
90
- linkify obj
91
- end
92
-
93
- it "returns empty string and warn if object does not exist" do
94
- expect(log).to receive(:warn).with(/Cannot find object .* for inclusion/)
95
- expect(linkify('include:NotExist')).to eq ''
96
- end
97
-
98
- it "passes off to #link_url if argument is recognized as a URL" do
99
- url = "http://yardoc.org/"
100
- expect(self).to receive(:link_url).with(url, nil, :target => '_parent')
101
- linkify url
102
- end
103
-
104
- it "calls #link_include_object for include:ObjectName" do
105
- obj = CodeObjects::NamespaceObject.new(:root, :Foo)
106
- expect(self).to receive(:link_include_object).with(obj)
107
- linkify 'include:Foo'
108
- end
109
-
110
- it "calls #link_include_file for include:file:path/to/file" do
111
- expect(File).to receive(:file?).with('path/to/file').and_return(true)
112
- expect(File).to receive(:read).with('path/to/file').and_return('FOO')
113
- expect(linkify('include:file:path/to/file')).to eq 'FOO'
114
- end
115
-
116
- it "does not allow include:file for path above pwd" do
117
- expect(log).to receive(:warn).with("Cannot include file from path `a/b/../../../../file'")
118
- expect(linkify('include:file:a/b/../../../../file')).to eq ''
119
- end
120
-
121
- it "warns if include:file:path does not exist" do
122
- expect(log).to receive(:warn).with(/Cannot find file .+ for inclusion/)
123
- expect(linkify('include:file:notexist')).to eq ''
124
- end
125
- end
126
-
127
- describe "#format_types" do
128
- it "returns the list of types separated by commas surrounded by brackets" do
129
- expect(format_types(['a', 'b', 'c'])).to eq '(a, b, c)'
130
- end
131
-
132
- it "returns the list of types without brackets if brackets=false" do
133
- expect(format_types(['a', 'b', 'c'], false)).to eq 'a, b, c'
134
- end
135
-
136
- it "returns an empty string if list is empty or nil" do
137
- expect(format_types(nil)).to eq ""
138
- expect(format_types([])).to eq ""
139
- end
140
- end
141
-
142
- describe "#format_object_type" do
143
- it "returns Exception if type is Exception" do
144
- obj = double(:object, :is_exception? => true)
145
- allow(obj).to receive(:is_a?) {|arg| arg == YARD::CodeObjects::ClassObject }
146
- expect(format_object_type(obj)).to eq "Exception"
147
- end
148
-
149
- it "returns Class if type is Class" do
150
- obj = double(:object, :is_exception? => false)
151
- allow(obj).to receive(:is_a?) {|arg| arg == YARD::CodeObjects::ClassObject }
152
- expect(format_object_type(obj)).to eq "Class"
153
- end
154
-
155
- it "returns object type in other cases" do
156
- obj = double(:object, :type => "value")
157
- expect(format_object_type(obj)).to eq "Value"
158
- end
159
- end
160
-
161
- describe "#format_object_title" do
162
- it "returns Top Level Namespace for root object" do
163
- expect(format_object_title(Registry.root)).to eq "Top Level Namespace"
164
- end
165
-
166
- it "returns 'type: title' in other cases" do
167
- obj = double(:object, :type => :class, :title => "A::B::C")
168
- expect(format_object_title(obj)).to eq "Class: A::B::C"
169
- end
170
- end
171
- end
@@ -1,687 +0,0 @@
1
- # frozen_string_literal: true
2
- require File.dirname(__FILE__) + "/shared_signature_examples"
3
- require 'ostruct'
4
-
5
- RSpec.describe YARD::Templates::Helpers::HtmlHelper do
6
- include YARD::Templates::Helpers::BaseHelper
7
- include YARD::Templates::Helpers::HtmlHelper
8
- include YARD::Templates::Helpers::MethodHelper
9
-
10
- def options
11
- Templates::TemplateOptions.new.tap do |o|
12
- o.reset_defaults
13
- o.default_return = nil
14
- end
15
- end
16
-
17
- describe "#h" do
18
- it "uses #h to escape HTML" do
19
- expect(h('Usage: foo "bar" <baz>')).to eq "Usage: foo &quot;bar&quot; &lt;baz&gt;"
20
- end
21
- end
22
-
23
- describe "#charset" do
24
- it "returns foo if LANG=foo" do
25
- expect(ENV).to receive(:[]).with('LANG').and_return('shift_jis') if YARD.ruby18?
26
- expect(Encoding.default_external).to receive(:name).and_return('shift_jis') if defined?(Encoding)
27
- expect(charset).to eq 'shift_jis'
28
- end
29
-
30
- ['US-ASCII', 'ASCII-7BIT', 'ASCII-8BIT'].each do |type|
31
- it "converts #{type} to iso-8859-1" do
32
- expect(ENV).to receive(:[]).with('LANG').and_return(type) if YARD.ruby18?
33
- expect(Encoding.default_external).to receive(:name).and_return(type) if defined?(Encoding)
34
- expect(charset).to eq 'iso-8859-1'
35
- end
36
- end
37
-
38
- it "supports utf8 as an encoding value for utf-8" do
39
- type = 'utf8'
40
- expect(ENV).to receive(:[]).with('LANG').and_return(type) if YARD.ruby18?
41
- expect(Encoding.default_external).to receive(:name).and_return(type) if defined?(Encoding)
42
- expect(charset).to eq 'utf-8'
43
- end
44
-
45
- it "takes file encoding if there is a file" do
46
- @file = OpenStruct.new(:contents => String.new('foo').force_encoding('sjis'))
47
- # not the correct charset name, but good enough
48
- expect(['Shift_JIS', 'Windows-31J']).to include(charset)
49
- end if YARD.ruby19?
50
-
51
- it "takes file encoding if there is a file" do
52
- allow(ENV).to receive(:[]).with('LANG').and_return('utf-8') if YARD.ruby18?
53
- @file = OpenStruct.new(:contents => 'foo')
54
- expect(charset).to eq 'utf-8'
55
- end if YARD.ruby18?
56
-
57
- if YARD.ruby18?
58
- it "returns utf-8 if no LANG env is set" do
59
- expect(ENV).to receive(:[]).with('LANG').and_return(nil)
60
- expect(charset).to eq 'utf-8'
61
- end
62
-
63
- it "only returns charset part of lang" do
64
- expect(ENV).to receive(:[]).with('LANG').and_return('en_US.UTF-8')
65
- expect(charset).to eq 'utf-8'
66
- end
67
- end
68
- end
69
-
70
- describe "#format_types" do
71
- it "includes brackets by default" do
72
- text = ["String"]
73
- expect(self).to receive(:linkify).at_least(1).times.with("String", "String").and_return("String")
74
- expect(format_types(text)).to eq format_types(text, true)
75
- expect(format_types(text)).to eq "(<tt>String</tt>)"
76
- end
77
-
78
- it "avoids brackets if brackets=false" do
79
- expect(self).to receive(:linkify).with("String", "String").and_return("String")
80
- expect(self).to receive(:linkify).with("Symbol", "Symbol").and_return("Symbol")
81
- expect(format_types(["String", "Symbol"], false)).to eq "<tt>String</tt>, <tt>Symbol</tt>"
82
- end
83
-
84
- {"String" => [["String"],
85
- "<tt><a href=''>String</a></tt>"],
86
- "A::B::C" => [["A::B::C"],
87
- "<tt><a href=''>A::B::C</a></tt>"],
88
- "Array<String>" => [["Array", "String"],
89
- "<tt><a href=''>Array</a>&lt;<a href=''>String</a>&gt;</tt>"],
90
- "Array<String, Symbol>" => [["Array", "String", "Symbol"],
91
- "<tt><a href=''>Array</a>&lt;<a href=''>String</a>, <a href=''>Symbol</a>&gt;</tt>"],
92
- "Array<{String => Array<Symbol>}>" => [["Array", "String", "Array", "Symbol"],
93
- "<tt><a href=''>Array</a>&lt;{<a href=''>String</a> =&gt; " \
94
- "<a href=''>Array</a>&lt;<a href=''>Symbol</a>&gt;}&gt;</tt>"]}.each do |text, values|
95
- it "links all classes in #{text}" do
96
- if text.count('<') > 0
97
- expect(self).to receive(:h).with('<').at_least(text.count('<')).times.and_return("&lt;")
98
- end
99
- if text.count('>') > 0
100
- expect(self).to receive(:h).with('>').at_least(text.count('>')).times.and_return("&gt;")
101
- end
102
- values[0].each {|v| expect(self).to receive(:linkify).with(v, v).and_return("<a href=''>#{v}</a>") }
103
- expect(format_types([text], false)).to eq values[1]
104
- end
105
- end
106
- end
107
-
108
- describe "#htmlify" do
109
- it "does not use hard breaks for textile markup (RedCloth specific)" do
110
- begin; require 'redcloth'; rescue LoadError; pending 'test requires redcloth gem' end
111
- expect(htmlify("A\nB", :textile)).not_to include("<br")
112
- end
113
-
114
- it "uses hard breaks for textile_strict markup (RedCloth specific)" do
115
- begin; require 'redcloth'; rescue LoadError; pending 'test requires redcloth gem' end
116
- expect(htmlify("A\nB", :textile_strict)).to include("<br")
117
- end
118
-
119
- it "handles various encodings" do
120
- allow(self).to receive(:object).and_return(Registry.root)
121
- text = String.new("\xB0\xB1")
122
- if defined?(Encoding)
123
- utf8 = Encoding.find('utf-8')
124
-
125
- Encoding.default_internal = utf8 unless Encoding.default_internal == utf8
126
- text = text.force_encoding('binary')
127
- end
128
- htmlify(text, :text)
129
- # TODO: add more encoding tests
130
- end
131
-
132
- it "returns pre-formatted text with :pre markup" do
133
- expect(htmlify("fo\no\n\nbar<>", :pre)).to eq "<pre>fo\no\n\nbar&lt;&gt;</pre>"
134
- end
135
-
136
- it "returns regular text with :text markup" do
137
- expect(htmlify("fo\no\n\nbar<>", :text)).to eq "fo<br/>o<br/><br/>bar&lt;&gt;"
138
- end
139
-
140
- it "returns unmodified text with :none markup" do
141
- expect(htmlify("fo\no\n\nbar<>", :none)).to eq "fo\no\n\nbar&lt;&gt;"
142
- end
143
-
144
- it "highlights ruby if markup is :ruby" do
145
- expect(htmlify("class Foo; end", :ruby)).to match(/\A<pre class="code ruby"><span/)
146
- end
147
-
148
- it "includes file and htmlifies it" do
149
- load_markup_provider(:rdoc)
150
- expect(File).to receive(:file?).with('foo.rdoc').and_return(true)
151
- expect(File).to receive(:read).with('foo.rdoc').and_return('HI')
152
- expect(htmlify("{include:file:foo.rdoc}", :rdoc).gsub(/\s+/, '')).to eq "<p>HI</p>"
153
- end
154
-
155
- it "allows inline includes for {include:} in the middle of a line" do
156
- load_markup_provider(:rdoc)
157
- expect(File).to receive(:file?).with('foo.rdoc').and_return(true)
158
- expect(File).to receive(:read).with('foo.rdoc').and_return('HI')
159
- expect(htmlify("test {include:file:foo.rdoc}", :rdoc).gsub(/[\r?\n]+/, '')).to eq '<p>test HI</p>'
160
- end
161
-
162
- it "autolinks URLs (markdown specific)" do
163
- log.enter_level(Logger::FATAL) do
164
- unless markup_class(:markdown).to_s == "RedcarpetCompat"
165
- pending 'This test depends on a markdown engine that supports autolinking'
166
- end
167
- end
168
- expect(htmlify('http://example.com', :markdown).chomp.gsub('&#47;', '/')).to eq(
169
- '<p><a href="http://example.com">http://example.com</a></p>'
170
- )
171
- end
172
-
173
- it "does not autolink URLs inside of {} (markdown specific)" do
174
- log.enter_level(Logger::FATAL) do
175
- pending 'This test depends on markdown' unless markup_class(:markdown)
176
- end
177
- expect(htmlify('{http://example.com Title}', :markdown).chomp).to match(
178
- %r{<p><a href="http://example.com".*>Title</a></p>}
179
- )
180
- expect(htmlify('{http://example.com}', :markdown).chomp).to match(
181
- %r{<p><a href="http://example.com".*>http://example.com</a></p>}
182
- )
183
- end
184
-
185
- it "creates tables (markdown specific)" do
186
- log.enter_level(Logger::FATAL) do
187
- supports_table = %w(RedcarpetCompat Kramdown::Document)
188
- unless supports_table.include?(markup_class(:markdown).to_s)
189
- pending "This test depends on a markdown engine that supports tables"
190
- end
191
- end
192
-
193
- markdown = <<-EOF.strip
194
- City | State | Country
195
- --------|-------|--------
196
- Raleigh | NC | US
197
- Seattle | WA | US
198
- EOF
199
-
200
- html = htmlify(markdown, :markdown)
201
- expect(html).to match(/<table>/)
202
- expect(html).to match %r{<th>City</th>}
203
- expect(html).to match %r{<td>NC</td>}
204
- end
205
-
206
- it "handles fenced code blocks (Redcarpet specific)" do
207
- log.enter_level(Logger::FATAL) do
208
- unless markup_class(:markdown).to_s == 'RedcarpetCompat'
209
- pending 'This test is Redcarpet specific'
210
- end
211
- end
212
-
213
- markdown = "Introduction:\n```ruby\nputs\n\nputs\n```"
214
- html = htmlify(markdown, :markdown)
215
- expect(html).to match %r{^<p>Introduction:</p>.*<code class="ruby">}m
216
- end
217
-
218
- it "sets env and env-yard attributes (AsciiDoc specific)" do
219
- adoc = <<-EOF.strip.gsub(/^ +/, "") # strip and unindent
220
- ifdef::env[]
221
- Attribute "env" is set, and its value is "{env}".
222
- endif::[]
223
-
224
- ifdef::env-yard[]
225
- Attribute "env-yard" is set, and its value is "{env-yard}".
226
- endif::[]
227
- EOF
228
- html = htmlify(adoc, :asciidoc)
229
- expect(html).to match(/"env" is set, and its value is "yard"./)
230
- expect(html).to match(/"env-yard" is set, and its value is ""./)
231
- end
232
-
233
- it "should not include the document title from the AsciiDoc header" do
234
- adoc = <<-EOF.strip.gsub(/^ +/, "") # strip and unindent
235
- = Project Name
236
-
237
- Introduction.
238
-
239
- == Installation
240
-
241
- Installation instructions.
242
-
243
- == Usage
244
-
245
- Usage instructions.
246
- EOF
247
- html = htmlify(adoc, :asciidoc)
248
- expect(html).to_not match(/Project Name/)
249
- expect(html).to include(%(<h2 id="_installation">Installation</h2>))
250
- end
251
- end
252
-
253
- describe "#link_object" do
254
- let(:object) { CodeObjects::NamespaceObject.new(nil, :YARD) }
255
-
256
- it "returns the object path if there's no serializer and no title" do
257
- allow(self).to receive(:serializer).and_return(nil)
258
- expect(link_object(CodeObjects::NamespaceObject.new(nil, :YARD))).to eq "YARD"
259
- end
260
-
261
- it "returns the title if there's a title but no serializer" do
262
- allow(self).to receive(:serializer).and_return(nil)
263
- expect(link_object(CodeObjects::NamespaceObject.new(nil, :YARD), 'title')).to eq "title"
264
- end
265
-
266
- it "links objects from overload tag" do
267
- YARD.parse_string <<-'eof'
268
- module Foo
269
- class Bar; def a; end end
270
- class Baz
271
- # @overload a
272
- def a; end
273
- end
274
- end
275
- eof
276
- obj = Registry.at('Foo::Baz#a').tag(:overload)
277
- allow(self).to receive(:serializer).and_return(Serializers::FileSystemSerializer.new)
278
- allow(self).to receive(:object).and_return(obj)
279
- expect(link_object("Bar#a")).to match(/href="Bar.html#a-instance_method"/)
280
- end
281
-
282
- it "uses relative path in title" do
283
- CodeObjects::ModuleObject.new(:root, :YARD)
284
- CodeObjects::ClassObject.new(P('YARD'), :Bar)
285
- allow(self).to receive(:object).and_return(CodeObjects::ModuleObject.new(P('YARD'), :Foo))
286
- allow(self).to receive(:serializer).and_return(Serializers::FileSystemSerializer.new)
287
- expect(link_object("Bar")).to match %r{>Bar</a>}
288
- end
289
-
290
- it "uses #title if overridden" do
291
- CodeObjects::ModuleObject.new(:root, :YARD)
292
- CodeObjects::ClassObject.new(P('YARD'), :Bar)
293
- allow(Registry.at('YARD::Bar')).to receive(:title).and_return('TITLE!')
294
- allow(self).to receive(:object).and_return(Registry.at('YARD::Bar'))
295
- allow(self).to receive(:serializer).and_return(Serializers::FileSystemSerializer.new)
296
- expect(link_object("Bar")).to match %r{>TITLE!</a>}
297
- end
298
-
299
- it "uses relative path to parent class in title" do
300
- root = CodeObjects::ModuleObject.new(:root, :YARD)
301
- obj = CodeObjects::ModuleObject.new(root, :SubModule)
302
- allow(self).to receive(:object).and_return(obj)
303
- allow(self).to receive(:serializer).and_return(Serializers::FileSystemSerializer.new)
304
- expect(link_object("YARD")).to match %r{>YARD</a>}
305
- end
306
-
307
- it "uses Klass.foo when linking to class method in current namespace" do
308
- root = CodeObjects::ModuleObject.new(:root, :Klass)
309
- CodeObjects::MethodObject.new(root, :foo, :class)
310
- allow(self).to receive(:object).and_return(root)
311
- allow(self).to receive(:serializer).and_return(Serializers::FileSystemSerializer.new)
312
- expect(link_object("foo")).to match %r{>Klass.foo</a>}
313
- end
314
-
315
- it "escapes method name in title" do
316
- YARD.parse_string <<-'eof'
317
- class Array
318
- def &(other)
319
- end
320
- end
321
- eof
322
- obj = Registry.at('Array#&')
323
- allow(self).to receive(:serializer).and_return(Serializers::FileSystemSerializer.new)
324
- allow(self).to receive(:object).and_return(obj)
325
- expect(link_object("Array#&")).to match(/title="Array#&amp; \(method\)"/)
326
- end
327
- end
328
-
329
- describe "#url_for" do
330
- before { Registry.clear }
331
-
332
- it "returns nil if serializer is nil" do
333
- allow(self).to receive(:serializer).and_return nil
334
- allow(self).to receive(:object).and_return Registry.root
335
- expect(url_for(P("Mod::Class#meth"))).to be nil
336
- end
337
-
338
- it "returns nil if object is hidden" do
339
- yard = CodeObjects::ModuleObject.new(:root, :YARD)
340
-
341
- allow(self).to receive(:serializer).and_return(Serializers::FileSystemSerializer.new)
342
- allow(self).to receive(:object).and_return Registry.root
343
- allow(self).to receive(:options).and_return OpenStruct.new(:verifier => Verifier.new('false'))
344
-
345
- expect(url_for(yard)).to be nil
346
- end
347
-
348
- it "returns nil if serializer does not implement #serialized_path" do
349
- allow(self).to receive(:serializer).and_return Serializers::Base.new
350
- allow(self).to receive(:object).and_return Registry.root
351
- expect(url_for(P("Mod::Class#meth"))).to be nil
352
- end
353
-
354
- it "links to a path/file for a namespace object" do
355
- allow(self).to receive(:serializer).and_return Serializers::FileSystemSerializer.new
356
- allow(self).to receive(:object).and_return Registry.root
357
-
358
- yard = CodeObjects::ModuleObject.new(:root, :YARD)
359
- expect(url_for(yard)).to eq 'YARD.html'
360
- end
361
-
362
- it "links to the object's namespace path/file and use the object as the anchor" do
363
- allow(self).to receive(:serializer).and_return Serializers::FileSystemSerializer.new
364
- allow(self).to receive(:object).and_return Registry.root
365
-
366
- yard = CodeObjects::ModuleObject.new(:root, :YARD)
367
- meth = CodeObjects::MethodObject.new(yard, :meth)
368
- expect(url_for(meth)).to eq 'YARD.html#meth-instance_method'
369
- end
370
-
371
- it "properly urlencodes methods with punctuation in links" do
372
- obj = CodeObjects::MethodObject.new(nil, :/)
373
- serializer = double(:serializer, :serialized_path => "file.html")
374
- allow(self).to receive(:serializer).and_return serializer
375
- allow(self).to receive(:object).and_return obj
376
- expect(url_for(obj)).to eq "#%2F-instance_method"
377
- end
378
- end
379
-
380
- describe "#anchor_for" do
381
- it "does not urlencode data when called directly" do
382
- obj = CodeObjects::MethodObject.new(nil, :/)
383
- expect(anchor_for(obj)).to eq "/-instance_method"
384
- end
385
- end
386
-
387
- describe "#resolve_links" do
388
- def parse_link(link)
389
- results = {}
390
- link =~ %r{<a (.+?)>(.+?)</a>}m
391
- params = $1
392
- results[:inner_text] = $2
393
- params.scan(/\s*(\S+?)=['"](.+?)['"]\s*/).each do |key, value|
394
- results[key.to_sym] = value.gsub(/^["'](.+)["']$/, '\1')
395
- end
396
- results
397
- end
398
-
399
- it "escapes {} syntax with backslash (\\{foo bar})" do
400
- input = '\{foo bar} \{XYZ} \{file:FOO} $\{N-M}'
401
- output = '{foo bar} {XYZ} {file:FOO} ${N-M}'
402
- expect(resolve_links(input)).to eq output
403
- end
404
-
405
- it "escapes {} syntax with ! (!{foo bar})" do
406
- input = '!{foo bar} !{XYZ} !{file:FOO} $!{N-M}'
407
- output = '{foo bar} {XYZ} {file:FOO} ${N-M}'
408
- expect(resolve_links(input)).to eq output
409
- end
410
-
411
- it "links static files with file: prefix" do
412
- allow(self).to receive(:serializer).and_return Serializers::FileSystemSerializer.new
413
- allow(self).to receive(:object).and_return Registry.root
414
-
415
- expect(parse_link(resolve_links("{file:TEST.txt#abc}"))).to eq(
416
- :inner_text => "TEST",
417
- :title => "TEST",
418
- :href => "file.TEST.html#abc"
419
- )
420
- expect(parse_link(resolve_links("{file:TEST.txt title}"))).to eq(
421
- :inner_text => "title",
422
- :title => "title",
423
- :href => "file.TEST.html"
424
- )
425
- end
426
-
427
- it "creates regular links with http:// or https:// prefixes" do
428
- expect(parse_link(resolve_links("{http://example.com}"))).to eq(
429
- :inner_text => "http://example.com",
430
- :target => "_parent",
431
- :href => "http://example.com",
432
- :title => "http://example.com"
433
- )
434
- expect(parse_link(resolve_links("{http://example.com title}"))).to eq(
435
- :inner_text => "title",
436
- :target => "_parent",
437
- :href => "http://example.com",
438
- :title => "title"
439
- )
440
- end
441
-
442
- it "creates mailto links with mailto: prefixes" do
443
- expect(parse_link(resolve_links('{mailto:joanna@example.com}'))).to eq(
444
- :inner_text => 'mailto:joanna@example.com',
445
- :target => '_parent',
446
- :href => 'mailto:joanna@example.com',
447
- :title => 'mailto:joanna@example.com'
448
- )
449
- expect(parse_link(resolve_links('{mailto:steve@example.com Steve}'))).to eq(
450
- :inner_text => 'Steve',
451
- :target => '_parent',
452
- :href => 'mailto:steve@example.com',
453
- :title => 'Steve'
454
- )
455
- end
456
-
457
- it "ignores {links} that begin with |...|" do
458
- expect(resolve_links("{|x|x == 1}")).to eq "{|x|x == 1}"
459
- end
460
-
461
- it "gracefully ignores {} in links" do
462
- allow(self).to receive(:linkify).with('Foo', 'Foo').and_return('FOO')
463
- expect(resolve_links("{} {} {Foo Foo}")).to eq '{} {} FOO'
464
- end
465
-
466
- %w(tt code pre).each do |tag|
467
- it "ignores links in <#{tag}>" do
468
- text = "<#{tag}>{Foo}</#{tag}>"
469
- expect(resolve_links(text)).to eq text
470
- end
471
- end
472
-
473
- it "resolves {Name}" do
474
- expect(self).to receive(:link_file).with('TEST', nil, nil).and_return('')
475
- resolve_links("{file:TEST}")
476
- end
477
-
478
- it "resolves ({Name})" do
479
- expect(self).to receive(:link_file).with('TEST', nil, nil).and_return('')
480
- resolve_links("({file:TEST})")
481
- end
482
-
483
- it "resolves link with newline in title-part" do
484
- expect(parse_link(resolve_links("{http://example.com foo\nbar}"))).to eq(
485
- :inner_text => "foo bar",
486
- :target => "_parent",
487
- :href => "http://example.com",
488
- :title => "foo bar"
489
- )
490
- end
491
-
492
- it "resolves links to methods whose names have been escaped" do
493
- expect(self).to receive(:linkify).with('Object#<<', nil).and_return('')
494
- resolve_links("{Object#&lt;&lt;}")
495
- end
496
-
497
- it "warns about missing reference at right file location for object" do
498
- YARD.parse_string <<-eof
499
- # Comments here
500
- # And a reference to {InvalidObject}
501
- class MyObject; end
502
- eof
503
- logger = double(:log)
504
- expect(logger).to receive(:warn).ordered.with(
505
- "In file `(stdin)':2: Cannot resolve link to InvalidObject from text:\n\t...{InvalidObject}"
506
- )
507
- allow(self).to receive(:log).and_return(logger)
508
- allow(self).to receive(:object).and_return(Registry.at('MyObject'))
509
- resolve_links(object.docstring)
510
- end
511
-
512
- it "shows ellipsis on either side if there is more on the line in a reference warning" do
513
- YARD.parse_string <<-eof
514
- # {InvalidObject1} beginning of line
515
- # end of line {InvalidObject2}
516
- # Middle of {InvalidObject3} line
517
- # {InvalidObject4}
518
- class MyObject; end
519
- eof
520
- logger = double(:log)
521
- expect(logger).to receive(:warn).ordered.with("In file `(stdin)':1: Cannot resolve link to InvalidObject1 from text:\n\t{InvalidObject1}...")
522
- expect(logger).to receive(:warn).ordered.with("In file `(stdin)':2: Cannot resolve link to InvalidObject2 from text:\n\t...{InvalidObject2}")
523
- expect(logger).to receive(:warn).ordered.with("In file `(stdin)':3: Cannot resolve link to InvalidObject3 from text:\n\t...{InvalidObject3}...")
524
- expect(logger).to receive(:warn).ordered.with("In file `(stdin)':4: Cannot resolve link to InvalidObject4 from text:\n\t{InvalidObject4}")
525
- allow(self).to receive(:log).and_return(logger)
526
- allow(self).to receive(:object).and_return(Registry.at('MyObject'))
527
- resolve_links(object.docstring)
528
- end
529
-
530
- it "warns about missing reference for file template (no object)" do
531
- @file = CodeObjects::ExtraFileObject.new('myfile.txt', '')
532
- logger = double(:log)
533
- expect(logger).to receive(:warn).ordered.with("In file `myfile.txt':3: Cannot resolve link to InvalidObject from text:\n\t...{InvalidObject Some Title}")
534
- allow(self).to receive(:log).and_return(logger)
535
- allow(self).to receive(:object).and_return(Registry.root)
536
- resolve_links(<<-eof)
537
- Hello world
538
- This is a line
539
- And {InvalidObject Some Title}
540
- And more.
541
- eof
542
- end
543
- end
544
-
545
- describe "#signature" do
546
- before do
547
- arrow = "&#x21d2;"
548
- @results = {
549
- :regular => "#<strong>foo</strong> #{arrow} Object",
550
- :default_return => "#<strong>foo</strong> #{arrow} Hello",
551
- :no_default_return => "#<strong>foo</strong>",
552
- :private_class => ".<strong>foo</strong> #{arrow} Object <span class=\"extras\">(private)</span>",
553
- :single => "#<strong>foo</strong> #{arrow} String",
554
- :two_types => "#<strong>foo</strong> #{arrow} String, Symbol",
555
- :two_types_multitag => "#<strong>foo</strong> #{arrow} String, Symbol",
556
- :type_nil => "#<strong>foo</strong> #{arrow} Type<sup>?</sup>",
557
- :type_array => "#<strong>foo</strong> #{arrow} Type<sup>+</sup>",
558
- :multitype => "#<strong>foo</strong> #{arrow} Type, ...",
559
- :void => "#<strong>foo</strong> #{arrow} void",
560
- :hide_void => "#<strong>foo</strong>",
561
- :block => "#<strong>foo</strong> {|a, b, c| ... } #{arrow} Object",
562
- :empty_overload => "#<strong>foobar</strong> #{arrow} String"
563
- }
564
- end
565
-
566
- def format_types(types, _brackets = false) types.join(", ") end
567
- def signature(obj, link = false) super(obj, link).strip end
568
-
569
- it_should_behave_like "signature"
570
-
571
- it "links to regular method if overload name does not have the same method name" do
572
- YARD.parse_string <<-eof
573
- class Foo
574
- # @overload bar(a, b, c)
575
- def foo; end
576
- end
577
- eof
578
- serializer = double(:serializer)
579
- allow(serializer).to receive(:serialized_path).with(Registry.at('Foo')).and_return('')
580
- allow(self).to receive(:serializer).and_return(serializer)
581
- allow(self).to receive(:object).and_return(Registry.at('Foo'))
582
- expect(signature(Registry.at('Foo#foo').tag(:overload), true)).to eq(
583
- "<a href=\"#foo-instance_method\" title=\"#bar (instance method)\">#<strong>bar</strong>(a, b, c) </a>"
584
- )
585
- end
586
- end
587
-
588
- describe "#html_syntax_highlight" do
589
- subject do
590
- obj = OpenStruct.new
591
- obj.options = options
592
- obj.object = Registry.root
593
- obj.extend(Templates::Helpers::HtmlHelper)
594
- obj
595
- end
596
-
597
- it "returns empty string on nil input" do
598
- expect(subject.html_syntax_highlight(nil)).to eq ''
599
- end
600
-
601
- it "calls #html_syntax_highlight_ruby by default" do
602
- Registry.root.source_type = nil
603
- expect(subject).to receive(:html_syntax_highlight_ruby).with('def x; end')
604
- subject.html_syntax_highlight('def x; end')
605
- end
606
-
607
- it "calls #html_syntax_highlight_NAME if there's an object with a #source_type" do
608
- subject.object = OpenStruct.new(:source_type => :NAME)
609
- expect(subject).to receive(:html_markup_html) {|text| text }
610
- expect(subject).to receive(:html_syntax_highlight_NAME).and_return("foobar")
611
- expect(subject.htmlify('<pre><code>def x; end</code></pre>', :html)).to eq(
612
- '<pre class="code NAME"><code class="NAME">foobar</code></pre>'
613
- )
614
- end
615
-
616
- it "adds !!!LANG to className in outputted pre tag" do
617
- subject.object = OpenStruct.new(:source_type => :LANG)
618
- expect(subject).to receive(:html_markup_html) {|text| text }
619
- expect(subject).to receive(:html_syntax_highlight_LANG).and_return("foobar")
620
- expect(subject.htmlify("<pre><code>!!!LANG\ndef x; end</code></pre>", :html)).to eq(
621
- '<pre class="code LANG"><code class="LANG">foobar</code></pre>'
622
- )
623
- end
624
-
625
- it "calls html_syntax_highlight_NAME if source starts with !!!NAME" do
626
- expect(subject).to receive(:html_syntax_highlight_NAME).and_return("foobar")
627
- expect(subject.html_syntax_highlight(<<-eof
628
- !!!NAME
629
- def x; end
630
- eof
631
- )).to eq "foobar"
632
- end
633
-
634
- it "does not highlight if highlight option is false" do
635
- subject.options.highlight = false
636
- expect(subject).not_to receive(:html_syntax_highlight_ruby)
637
- expect(subject.html_syntax_highlight('def x; end')).to eq 'def x; end'
638
- end
639
-
640
- it "does not highlight if there is no highlight method specified by !!!NAME" do
641
- def subject.respond_to?(method, include_all = false)
642
- return false if method == 'html_syntax_highlight_NAME'
643
- super
644
- end
645
- expect(subject).not_to receive(:html_syntax_highlight_NAME)
646
- expect(subject.html_syntax_highlight("!!!NAME\ndef x; end")).to eq "def x; end"
647
- end
648
-
649
- it "highlights as ruby if htmlify(text, :ruby) is called" do
650
- expect(subject).to receive(:html_syntax_highlight_ruby).with('def x; end').and_return('x')
651
- expect(subject.htmlify('def x; end', :ruby)).to eq '<pre class="code ruby">x</pre>'
652
- end
653
-
654
- it "does not prioritize object source type when called directly" do
655
- expect(subject).to receive(:html_syntax_highlight_ruby).with('def x; end').and_return('x')
656
- subject.object = OpenStruct.new(:source_type => :c)
657
- expect(subject.html_syntax_highlight("def x; end")).to eq "x"
658
- end
659
-
660
- it "doesn't escape code snippets twice" do
661
- expect(subject.htmlify('<pre lang="foo"><code>{"foo" => 1}</code></pre>', :html)).to eq(
662
- '<pre class="code foo"><code class="foo">{&quot;foo&quot; =&gt; 1}</code></pre>'
663
- )
664
- end
665
-
666
- it "highlights source when matching a pre lang= tag" do
667
- expect(subject.htmlify('<pre lang="foo"><code>x = 1</code></pre>', :html)).to eq(
668
- '<pre class="code foo"><code class="foo">x = 1</code></pre>'
669
- )
670
- end
671
-
672
- it "highlights source when matching a code class= tag" do
673
- expect(subject.htmlify('<pre><code class="foo">x = 1</code></pre>', :html)).to eq(
674
- '<pre class="code foo"><code class="foo">x = 1</code></pre>'
675
- )
676
- end
677
- end
678
-
679
- describe "#link_url" do
680
- it "adds target if scheme is provided" do
681
- expect(link_url("http://url.com")).to include(" target=\"_parent\"")
682
- expect(link_url("https://url.com")).to include(" target=\"_parent\"")
683
- expect(link_url("irc://url.com")).to include(" target=\"_parent\"")
684
- expect(link_url("../not/scheme")).not_to include("target")
685
- end
686
- end
687
- end