deg-yard 0.8.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (558) hide show
  1. data/.travis.yml +39 -0
  2. data/.yardopts +25 -0
  3. data/.yardopts_guide +19 -0
  4. data/.yardopts_i18n +22 -0
  5. data/Gemfile +35 -0
  6. data/LEGAL +66 -0
  7. data/LICENSE +22 -0
  8. data/README.md +609 -0
  9. data/Rakefile +66 -0
  10. data/benchmarks/builtins_vs_eval.rb +23 -0
  11. data/benchmarks/concat_vs_join.rb +12 -0
  12. data/benchmarks/erb_vs_erubis.rb +53 -0
  13. data/benchmarks/format_args.rb +46 -0
  14. data/benchmarks/generation.rb +37 -0
  15. data/benchmarks/marshal_vs_dbm.rb +63 -0
  16. data/benchmarks/parsing.rb +46 -0
  17. data/benchmarks/pathname_vs_string.rb +50 -0
  18. data/benchmarks/rdoc_vs_yardoc.rb +10 -0
  19. data/benchmarks/registry_store_types.rb +48 -0
  20. data/benchmarks/ri_vs_yri.rb +18 -0
  21. data/benchmarks/ripper_parser.rb +12 -0
  22. data/benchmarks/splat_vs_flatten.rb +12 -0
  23. data/benchmarks/template_erb.rb +22 -0
  24. data/benchmarks/template_format.rb +6 -0
  25. data/benchmarks/template_profile.rb +17 -0
  26. data/benchmarks/yri_cache.rb +19 -0
  27. data/bin/yard +12 -0
  28. data/bin/yardoc +12 -0
  29. data/bin/yri +12 -0
  30. data/docs/CodeObjects.md +115 -0
  31. data/docs/GettingStarted.md +592 -0
  32. data/docs/Handlers.md +152 -0
  33. data/docs/Overview.md +61 -0
  34. data/docs/Parser.md +191 -0
  35. data/docs/Tags.md +282 -0
  36. data/docs/TagsArch.md +123 -0
  37. data/docs/Templates.md +496 -0
  38. data/docs/WhatsNew.md +1244 -0
  39. data/docs/images/code-objects-class-diagram.png +0 -0
  40. data/docs/images/handlers-class-diagram.png +0 -0
  41. data/docs/images/overview-class-diagram.png +0 -0
  42. data/docs/images/parser-class-diagram.png +0 -0
  43. data/docs/images/tags-class-diagram.png +0 -0
  44. data/docs/templates/default/fulldoc/html/full_list_tag.erb +7 -0
  45. data/docs/templates/default/fulldoc/html/setup.rb +6 -0
  46. data/docs/templates/default/layout/html/setup.rb +8 -0
  47. data/docs/templates/default/layout/html/tag_list.erb +11 -0
  48. data/docs/templates/default/yard_tags/html/list.erb +18 -0
  49. data/docs/templates/default/yard_tags/html/setup.rb +27 -0
  50. data/docs/templates/plugin.rb +65 -0
  51. data/lib/rubygems_plugin.rb +4 -0
  52. data/lib/yard/autoload.rb +290 -0
  53. data/lib/yard/cli/command.rb +84 -0
  54. data/lib/yard/cli/command_parser.rb +92 -0
  55. data/lib/yard/cli/config.rb +136 -0
  56. data/lib/yard/cli/diff.rb +270 -0
  57. data/lib/yard/cli/display.rb +68 -0
  58. data/lib/yard/cli/gems.rb +83 -0
  59. data/lib/yard/cli/graph.rb +126 -0
  60. data/lib/yard/cli/help.rb +18 -0
  61. data/lib/yard/cli/i18n.rb +69 -0
  62. data/lib/yard/cli/list.rb +22 -0
  63. data/lib/yard/cli/markup_types.rb +33 -0
  64. data/lib/yard/cli/server.rb +253 -0
  65. data/lib/yard/cli/stats.rb +213 -0
  66. data/lib/yard/cli/yardoc.rb +752 -0
  67. data/lib/yard/cli/yardopts_command.rb +109 -0
  68. data/lib/yard/cli/yri.rb +214 -0
  69. data/lib/yard/code_objects/base.rb +585 -0
  70. data/lib/yard/code_objects/class_object.rb +143 -0
  71. data/lib/yard/code_objects/class_variable_object.rb +8 -0
  72. data/lib/yard/code_objects/constant_object.rb +13 -0
  73. data/lib/yard/code_objects/extended_method_object.rb +23 -0
  74. data/lib/yard/code_objects/extra_file_object.rb +128 -0
  75. data/lib/yard/code_objects/macro_object.rb +172 -0
  76. data/lib/yard/code_objects/method_object.rb +191 -0
  77. data/lib/yard/code_objects/module_object.rb +18 -0
  78. data/lib/yard/code_objects/namespace_object.rb +200 -0
  79. data/lib/yard/code_objects/proxy.rb +258 -0
  80. data/lib/yard/code_objects/root_object.rb +17 -0
  81. data/lib/yard/config.rb +269 -0
  82. data/lib/yard/core_ext/array.rb +15 -0
  83. data/lib/yard/core_ext/file.rb +65 -0
  84. data/lib/yard/core_ext/hash.rb +15 -0
  85. data/lib/yard/core_ext/insertion.rb +60 -0
  86. data/lib/yard/core_ext/module.rb +19 -0
  87. data/lib/yard/core_ext/string.rb +67 -0
  88. data/lib/yard/core_ext/symbol_hash.rb +73 -0
  89. data/lib/yard/docstring.rb +362 -0
  90. data/lib/yard/docstring_parser.rb +321 -0
  91. data/lib/yard/globals.rb +18 -0
  92. data/lib/yard/handlers/base.rb +597 -0
  93. data/lib/yard/handlers/c/alias_handler.rb +15 -0
  94. data/lib/yard/handlers/c/attribute_handler.rb +13 -0
  95. data/lib/yard/handlers/c/base.rb +110 -0
  96. data/lib/yard/handlers/c/class_handler.rb +26 -0
  97. data/lib/yard/handlers/c/constant_handler.rb +12 -0
  98. data/lib/yard/handlers/c/handler_methods.rb +166 -0
  99. data/lib/yard/handlers/c/init_handler.rb +18 -0
  100. data/lib/yard/handlers/c/method_handler.rb +35 -0
  101. data/lib/yard/handlers/c/mixin_handler.rb +13 -0
  102. data/lib/yard/handlers/c/module_handler.rb +16 -0
  103. data/lib/yard/handlers/c/override_comment_handler.rb +30 -0
  104. data/lib/yard/handlers/c/path_handler.rb +10 -0
  105. data/lib/yard/handlers/c/struct_handler.rb +12 -0
  106. data/lib/yard/handlers/c/symbol_handler.rb +7 -0
  107. data/lib/yard/handlers/processor.rb +201 -0
  108. data/lib/yard/handlers/ruby/alias_handler.rb +41 -0
  109. data/lib/yard/handlers/ruby/attribute_handler.rb +82 -0
  110. data/lib/yard/handlers/ruby/base.rb +164 -0
  111. data/lib/yard/handlers/ruby/class_condition_handler.rb +86 -0
  112. data/lib/yard/handlers/ruby/class_handler.rb +121 -0
  113. data/lib/yard/handlers/ruby/class_variable_handler.rb +16 -0
  114. data/lib/yard/handlers/ruby/comment_handler.rb +9 -0
  115. data/lib/yard/handlers/ruby/constant_handler.rb +45 -0
  116. data/lib/yard/handlers/ruby/dsl_handler.rb +14 -0
  117. data/lib/yard/handlers/ruby/dsl_handler_methods.rb +77 -0
  118. data/lib/yard/handlers/ruby/exception_handler.rb +26 -0
  119. data/lib/yard/handlers/ruby/extend_handler.rb +21 -0
  120. data/lib/yard/handlers/ruby/legacy/alias_handler.rb +34 -0
  121. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +60 -0
  122. data/lib/yard/handlers/ruby/legacy/base.rb +250 -0
  123. data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -0
  124. data/lib/yard/handlers/ruby/legacy/class_handler.rb +111 -0
  125. data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +14 -0
  126. data/lib/yard/handlers/ruby/legacy/comment_handler.rb +9 -0
  127. data/lib/yard/handlers/ruby/legacy/constant_handler.rb +28 -0
  128. data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +16 -0
  129. data/lib/yard/handlers/ruby/legacy/exception_handler.rb +12 -0
  130. data/lib/yard/handlers/ruby/legacy/extend_handler.rb +20 -0
  131. data/lib/yard/handlers/ruby/legacy/method_handler.rb +85 -0
  132. data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -0
  133. data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +18 -0
  134. data/lib/yard/handlers/ruby/legacy/module_handler.rb +11 -0
  135. data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +21 -0
  136. data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +16 -0
  137. data/lib/yard/handlers/ruby/legacy/yield_handler.rb +28 -0
  138. data/lib/yard/handlers/ruby/method_condition_handler.rb +8 -0
  139. data/lib/yard/handlers/ruby/method_handler.rb +92 -0
  140. data/lib/yard/handlers/ruby/mixin_handler.rb +36 -0
  141. data/lib/yard/handlers/ruby/module_function_handler.rb +26 -0
  142. data/lib/yard/handlers/ruby/module_handler.rb +11 -0
  143. data/lib/yard/handlers/ruby/private_constant_handler.rb +36 -0
  144. data/lib/yard/handlers/ruby/struct_handler_methods.rb +141 -0
  145. data/lib/yard/handlers/ruby/visibility_handler.rb +24 -0
  146. data/lib/yard/handlers/ruby/yield_handler.rb +30 -0
  147. data/lib/yard/i18n/locale.rb +74 -0
  148. data/lib/yard/i18n/message.rb +56 -0
  149. data/lib/yard/i18n/messages.rb +55 -0
  150. data/lib/yard/i18n/pot_generator.rb +280 -0
  151. data/lib/yard/i18n/text.rb +173 -0
  152. data/lib/yard/logging.rb +190 -0
  153. data/lib/yard/options.rb +216 -0
  154. data/lib/yard/parser/base.rb +56 -0
  155. data/lib/yard/parser/c/c_parser.rb +231 -0
  156. data/lib/yard/parser/c/comment_parser.rb +131 -0
  157. data/lib/yard/parser/c/statement.rb +63 -0
  158. data/lib/yard/parser/ruby/ast_node.rb +496 -0
  159. data/lib/yard/parser/ruby/legacy/ruby_lex.rb +1378 -0
  160. data/lib/yard/parser/ruby/legacy/ruby_parser.rb +31 -0
  161. data/lib/yard/parser/ruby/legacy/statement.rb +65 -0
  162. data/lib/yard/parser/ruby/legacy/statement_list.rb +384 -0
  163. data/lib/yard/parser/ruby/legacy/token_list.rb +71 -0
  164. data/lib/yard/parser/ruby/ruby_parser.rb +625 -0
  165. data/lib/yard/parser/source_parser.rb +517 -0
  166. data/lib/yard/rake/yardoc_task.rb +74 -0
  167. data/lib/yard/registry.rb +438 -0
  168. data/lib/yard/registry_store.rb +319 -0
  169. data/lib/yard/rubygems/backports/LICENSE.txt +57 -0
  170. data/lib/yard/rubygems/backports/MIT.txt +20 -0
  171. data/lib/yard/rubygems/backports/gem.rb +9 -0
  172. data/lib/yard/rubygems/backports/source_index.rb +370 -0
  173. data/lib/yard/rubygems/backports.rb +8 -0
  174. data/lib/yard/rubygems/doc_manager.rb +88 -0
  175. data/lib/yard/rubygems/specification.rb +41 -0
  176. data/lib/yard/serializers/base.rb +80 -0
  177. data/lib/yard/serializers/file_system_serializer.rb +90 -0
  178. data/lib/yard/serializers/process_serializer.rb +24 -0
  179. data/lib/yard/serializers/stdout_serializer.rb +32 -0
  180. data/lib/yard/serializers/yardoc_serializer.rb +124 -0
  181. data/lib/yard/server/adapter.rb +100 -0
  182. data/lib/yard/server/commands/base.rb +192 -0
  183. data/lib/yard/server/commands/display_file_command.rb +24 -0
  184. data/lib/yard/server/commands/display_object_command.rb +58 -0
  185. data/lib/yard/server/commands/frames_command.rb +15 -0
  186. data/lib/yard/server/commands/library_command.rb +148 -0
  187. data/lib/yard/server/commands/library_index_command.rb +24 -0
  188. data/lib/yard/server/commands/list_command.rb +24 -0
  189. data/lib/yard/server/commands/search_command.rb +78 -0
  190. data/lib/yard/server/commands/static_file_command.rb +57 -0
  191. data/lib/yard/server/doc_server_helper.rb +76 -0
  192. data/lib/yard/server/doc_server_serializer.rb +33 -0
  193. data/lib/yard/server/library_version.rb +227 -0
  194. data/lib/yard/server/rack_adapter.rb +88 -0
  195. data/lib/yard/server/router.rb +176 -0
  196. data/lib/yard/server/static_caching.rb +45 -0
  197. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +78 -0
  198. data/lib/yard/server/templates/default/fulldoc/html/images/processing.gif +0 -0
  199. data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +12 -0
  200. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +46 -0
  201. data/lib/yard/server/templates/default/layout/html/script_setup.erb +8 -0
  202. data/lib/yard/server/templates/default/layout/html/setup.rb +7 -0
  203. data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -0
  204. data/lib/yard/server/templates/default/method_details/html/setup.rb +4 -0
  205. data/lib/yard/server/templates/doc_server/library_list/html/contents.erb +13 -0
  206. data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +26 -0
  207. data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +12 -0
  208. data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +3 -0
  209. data/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -0
  210. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +51 -0
  211. data/lib/yard/server/templates/doc_server/processing/html/setup.rb +3 -0
  212. data/lib/yard/server/templates/doc_server/search/html/search.erb +18 -0
  213. data/lib/yard/server/templates/doc_server/search/html/setup.rb +8 -0
  214. data/lib/yard/server/webrick_adapter.rb +43 -0
  215. data/lib/yard/server.rb +11 -0
  216. data/lib/yard/tags/default_factory.rb +176 -0
  217. data/lib/yard/tags/default_tag.rb +12 -0
  218. data/lib/yard/tags/directives.rb +599 -0
  219. data/lib/yard/tags/library.rb +630 -0
  220. data/lib/yard/tags/option_tag.rb +12 -0
  221. data/lib/yard/tags/overload_tag.rb +66 -0
  222. data/lib/yard/tags/ref_tag.rb +7 -0
  223. data/lib/yard/tags/ref_tag_list.rb +27 -0
  224. data/lib/yard/tags/tag.rb +57 -0
  225. data/lib/yard/tags/tag_format_error.rb +6 -0
  226. data/lib/yard/templates/engine.rb +185 -0
  227. data/lib/yard/templates/erb_cache.rb +22 -0
  228. data/lib/yard/templates/helpers/base_helper.rb +212 -0
  229. data/lib/yard/templates/helpers/filter_helper.rb +26 -0
  230. data/lib/yard/templates/helpers/html_helper.rb +599 -0
  231. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +59 -0
  232. data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +22 -0
  233. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +106 -0
  234. data/lib/yard/templates/helpers/markup_helper.rb +169 -0
  235. data/lib/yard/templates/helpers/method_helper.rb +74 -0
  236. data/lib/yard/templates/helpers/module_helper.rb +19 -0
  237. data/lib/yard/templates/helpers/text_helper.rb +95 -0
  238. data/lib/yard/templates/helpers/uml_helper.rb +46 -0
  239. data/lib/yard/templates/section.rb +106 -0
  240. data/lib/yard/templates/template.rb +407 -0
  241. data/lib/yard/templates/template_options.rb +88 -0
  242. data/lib/yard/verifier.rb +148 -0
  243. data/lib/yard/version.rb +3 -0
  244. data/lib/yard.rb +71 -0
  245. data/po/ja.po +31118 -0
  246. data/spec/cli/command_parser_spec.rb +43 -0
  247. data/spec/cli/command_spec.rb +36 -0
  248. data/spec/cli/config_spec.rb +92 -0
  249. data/spec/cli/diff_spec.rb +260 -0
  250. data/spec/cli/display_spec.rb +30 -0
  251. data/spec/cli/gems_spec.rb +81 -0
  252. data/spec/cli/graph_spec.rb +17 -0
  253. data/spec/cli/help_spec.rb +22 -0
  254. data/spec/cli/i18n_spec.rb +111 -0
  255. data/spec/cli/list_spec.rb +8 -0
  256. data/spec/cli/markup_types_spec.rb +22 -0
  257. data/spec/cli/server_spec.rb +327 -0
  258. data/spec/cli/stats_spec.rb +90 -0
  259. data/spec/cli/yardoc_spec.rb +804 -0
  260. data/spec/cli/yri_spec.rb +99 -0
  261. data/spec/code_objects/base_spec.rb +438 -0
  262. data/spec/code_objects/class_object_spec.rb +225 -0
  263. data/spec/code_objects/code_object_list_spec.rb +33 -0
  264. data/spec/code_objects/constants_spec.rb +82 -0
  265. data/spec/code_objects/extra_file_object_spec.rb +147 -0
  266. data/spec/code_objects/macro_object_spec.rb +148 -0
  267. data/spec/code_objects/method_object_spec.rb +175 -0
  268. data/spec/code_objects/module_object_spec.rb +141 -0
  269. data/spec/code_objects/namespace_object_spec.rb +170 -0
  270. data/spec/code_objects/proxy_spec.rb +140 -0
  271. data/spec/code_objects/spec_helper.rb +3 -0
  272. data/spec/config_spec.rb +176 -0
  273. data/spec/core_ext/array_spec.rb +14 -0
  274. data/spec/core_ext/file_spec.rb +68 -0
  275. data/spec/core_ext/hash_spec.rb +14 -0
  276. data/spec/core_ext/insertion_spec.rb +37 -0
  277. data/spec/core_ext/module_spec.rb +15 -0
  278. data/spec/core_ext/string_spec.rb +42 -0
  279. data/spec/core_ext/symbol_hash_spec.rb +86 -0
  280. data/spec/docstring_parser_spec.rb +228 -0
  281. data/spec/docstring_spec.rb +335 -0
  282. data/spec/handlers/alias_handler_spec.rb +80 -0
  283. data/spec/handlers/attribute_handler_spec.rb +94 -0
  284. data/spec/handlers/base_spec.rb +206 -0
  285. data/spec/handlers/c/alias_handler_spec.rb +33 -0
  286. data/spec/handlers/c/attribute_handler_spec.rb +40 -0
  287. data/spec/handlers/c/class_handler_spec.rb +63 -0
  288. data/spec/handlers/c/constant_handler_spec.rb +68 -0
  289. data/spec/handlers/c/init_handler_spec.rb +47 -0
  290. data/spec/handlers/c/method_handler_spec.rb +229 -0
  291. data/spec/handlers/c/mixin_handler_spec.rb +27 -0
  292. data/spec/handlers/c/module_handler_spec.rb +38 -0
  293. data/spec/handlers/c/override_comment_handler_spec.rb +46 -0
  294. data/spec/handlers/c/path_handler_spec.rb +35 -0
  295. data/spec/handlers/c/spec_helper.rb +13 -0
  296. data/spec/handlers/c/struct_handler_spec.rb +15 -0
  297. data/spec/handlers/class_condition_handler_spec.rb +67 -0
  298. data/spec/handlers/class_handler_spec.rb +246 -0
  299. data/spec/handlers/class_variable_handler_spec.rb +11 -0
  300. data/spec/handlers/constant_handler_spec.rb +64 -0
  301. data/spec/handlers/dsl_handler_spec.rb +197 -0
  302. data/spec/handlers/examples/alias_handler_001.rb.txt +44 -0
  303. data/spec/handlers/examples/attribute_handler_001.rb.txt +32 -0
  304. data/spec/handlers/examples/class_condition_handler_001.rb.txt +69 -0
  305. data/spec/handlers/examples/class_handler_001.rb.txt +120 -0
  306. data/spec/handlers/examples/class_variable_handler_001.rb.txt +10 -0
  307. data/spec/handlers/examples/constant_handler_001.rb.txt +25 -0
  308. data/spec/handlers/examples/dsl_handler_001.rb.txt +125 -0
  309. data/spec/handlers/examples/exception_handler_001.rb.txt +59 -0
  310. data/spec/handlers/examples/extend_handler_001.rb.txt +16 -0
  311. data/spec/handlers/examples/method_condition_handler_001.rb.txt +10 -0
  312. data/spec/handlers/examples/method_handler_001.rb.txt +126 -0
  313. data/spec/handlers/examples/mixin_handler_001.rb.txt +37 -0
  314. data/spec/handlers/examples/module_handler_001.rb.txt +29 -0
  315. data/spec/handlers/examples/private_constant_handler_001.rb.txt +8 -0
  316. data/spec/handlers/examples/process_handler_001.rb.txt +11 -0
  317. data/spec/handlers/examples/visibility_handler_001.rb.txt +32 -0
  318. data/spec/handlers/examples/yield_handler_001.rb.txt +54 -0
  319. data/spec/handlers/exception_handler_spec.rb +48 -0
  320. data/spec/handlers/extend_handler_spec.rb +23 -0
  321. data/spec/handlers/legacy_base_spec.rb +128 -0
  322. data/spec/handlers/method_condition_handler_spec.rb +14 -0
  323. data/spec/handlers/method_handler_spec.rb +184 -0
  324. data/spec/handlers/mixin_handler_spec.rb +55 -0
  325. data/spec/handlers/module_function_handler_spec.rb +105 -0
  326. data/spec/handlers/module_handler_spec.rb +34 -0
  327. data/spec/handlers/private_constant_handler_spec.rb +24 -0
  328. data/spec/handlers/processor_spec.rb +34 -0
  329. data/spec/handlers/ruby/base_spec.rb +94 -0
  330. data/spec/handlers/ruby/legacy/base_spec.rb +82 -0
  331. data/spec/handlers/spec_helper.rb +33 -0
  332. data/spec/handlers/visibility_handler_spec.rb +39 -0
  333. data/spec/handlers/yield_handler_spec.rb +51 -0
  334. data/spec/i18n/locale_spec.rb +68 -0
  335. data/spec/i18n/message_spec.rb +52 -0
  336. data/spec/i18n/messages_spec.rb +67 -0
  337. data/spec/i18n/pot_generator_spec.rb +262 -0
  338. data/spec/i18n/text_spec.rb +180 -0
  339. data/spec/logging_spec.rb +35 -0
  340. data/spec/options_spec.rb +171 -0
  341. data/spec/parser/base_spec.rb +24 -0
  342. data/spec/parser/c_parser_spec.rb +171 -0
  343. data/spec/parser/examples/array.c.txt +3887 -0
  344. data/spec/parser/examples/example1.rb.txt +8 -0
  345. data/spec/parser/examples/extrafile.c.txt +8 -0
  346. data/spec/parser/examples/multifile.c.txt +22 -0
  347. data/spec/parser/examples/override.c.txt +424 -0
  348. data/spec/parser/examples/parse_in_order_001.rb.txt +2 -0
  349. data/spec/parser/examples/parse_in_order_002.rb.txt +2 -0
  350. data/spec/parser/examples/tag_handler_001.rb.txt +8 -0
  351. data/spec/parser/ruby/ast_node_spec.rb +33 -0
  352. data/spec/parser/ruby/legacy/statement_list_spec.rb +299 -0
  353. data/spec/parser/ruby/legacy/token_list_spec.rb +77 -0
  354. data/spec/parser/ruby/ruby_parser_spec.rb +334 -0
  355. data/spec/parser/source_parser_spec.rb +717 -0
  356. data/spec/parser/tag_parsing_spec.rb +18 -0
  357. data/spec/rake/yardoc_task_spec.rb +101 -0
  358. data/spec/registry_spec.rb +393 -0
  359. data/spec/registry_store_spec.rb +315 -0
  360. data/spec/rubygems/doc_manager_spec.rb +112 -0
  361. data/spec/serializers/data/serialized_yardoc/checksums +1 -0
  362. data/spec/serializers/data/serialized_yardoc/objects/Foo/bar_i.dat +0 -0
  363. data/spec/serializers/data/serialized_yardoc/objects/Foo/baz_i.dat +0 -0
  364. data/spec/serializers/data/serialized_yardoc/objects/Foo.dat +0 -0
  365. data/spec/serializers/data/serialized_yardoc/objects/root.dat +0 -0
  366. data/spec/serializers/data/serialized_yardoc/proxy_types +2 -0
  367. data/spec/serializers/file_system_serializer_spec.rb +124 -0
  368. data/spec/serializers/spec_helper.rb +2 -0
  369. data/spec/serializers/yardoc_serializer_spec.rb +46 -0
  370. data/spec/server/adapter_spec.rb +38 -0
  371. data/spec/server/commands/base_spec.rb +87 -0
  372. data/spec/server/commands/library_command_spec.rb +39 -0
  373. data/spec/server/commands/static_file_command_spec.rb +84 -0
  374. data/spec/server/doc_server_helper_spec.rb +53 -0
  375. data/spec/server/doc_server_serializer_spec.rb +45 -0
  376. data/spec/server/rack_adapter_spec.rb +20 -0
  377. data/spec/server/router_spec.rb +122 -0
  378. data/spec/server/spec_helper.rb +17 -0
  379. data/spec/server/static_caching_spec.rb +39 -0
  380. data/spec/server/webrick_servlet_spec.rb +20 -0
  381. data/spec/server_spec.rb +10 -0
  382. data/spec/spec_helper.rb +128 -0
  383. data/spec/tags/default_factory_spec.rb +152 -0
  384. data/spec/tags/default_tag_spec.rb +11 -0
  385. data/spec/tags/directives_spec.rb +453 -0
  386. data/spec/tags/library_spec.rb +34 -0
  387. data/spec/tags/overload_tag_spec.rb +53 -0
  388. data/spec/tags/ref_tag_list_spec.rb +53 -0
  389. data/spec/templates/class_spec.rb +44 -0
  390. data/spec/templates/constant_spec.rb +40 -0
  391. data/spec/templates/engine_spec.rb +121 -0
  392. data/spec/templates/examples/class001.html +280 -0
  393. data/spec/templates/examples/class001.txt +36 -0
  394. data/spec/templates/examples/class002.html +35 -0
  395. data/spec/templates/examples/constant001.txt +25 -0
  396. data/spec/templates/examples/constant002.txt +7 -0
  397. data/spec/templates/examples/constant003.txt +11 -0
  398. data/spec/templates/examples/method001.html +130 -0
  399. data/spec/templates/examples/method001.txt +35 -0
  400. data/spec/templates/examples/method002.html +86 -0
  401. data/spec/templates/examples/method002.txt +20 -0
  402. data/spec/templates/examples/method003.html +159 -0
  403. data/spec/templates/examples/method003.txt +45 -0
  404. data/spec/templates/examples/method004.html +44 -0
  405. data/spec/templates/examples/method004.txt +10 -0
  406. data/spec/templates/examples/method005.html +99 -0
  407. data/spec/templates/examples/method005.txt +33 -0
  408. data/spec/templates/examples/module001.dot +33 -0
  409. data/spec/templates/examples/module001.html +825 -0
  410. data/spec/templates/examples/module001.txt +33 -0
  411. data/spec/templates/examples/module002.html +318 -0
  412. data/spec/templates/examples/module003.html +185 -0
  413. data/spec/templates/examples/module004.html +387 -0
  414. data/spec/templates/examples/tag001.txt +82 -0
  415. data/spec/templates/helpers/base_helper_spec.rb +175 -0
  416. data/spec/templates/helpers/html_helper_spec.rb +612 -0
  417. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +48 -0
  418. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +93 -0
  419. data/spec/templates/helpers/markup_helper_spec.rb +135 -0
  420. data/spec/templates/helpers/method_helper_spec.rb +82 -0
  421. data/spec/templates/helpers/shared_signature_examples.rb +123 -0
  422. data/spec/templates/helpers/text_helper_spec.rb +44 -0
  423. data/spec/templates/method_spec.rb +102 -0
  424. data/spec/templates/module_spec.rb +181 -0
  425. data/spec/templates/onefile_spec.rb +64 -0
  426. data/spec/templates/section_spec.rb +146 -0
  427. data/spec/templates/spec_helper.rb +73 -0
  428. data/spec/templates/tag_spec.rb +51 -0
  429. data/spec/templates/template_spec.rb +409 -0
  430. data/spec/verifier_spec.rb +106 -0
  431. data/templates/default/class/dot/setup.rb +6 -0
  432. data/templates/default/class/dot/superklass.erb +3 -0
  433. data/templates/default/class/html/constructor_details.erb +8 -0
  434. data/templates/default/class/html/setup.rb +1 -0
  435. data/templates/default/class/html/subclasses.erb +4 -0
  436. data/templates/default/class/setup.rb +36 -0
  437. data/templates/default/class/text/setup.rb +11 -0
  438. data/templates/default/class/text/subclasses.erb +5 -0
  439. data/templates/default/constant/text/header.erb +11 -0
  440. data/templates/default/constant/text/setup.rb +3 -0
  441. data/templates/default/docstring/html/abstract.erb +4 -0
  442. data/templates/default/docstring/html/deprecated.erb +1 -0
  443. data/templates/default/docstring/html/index.erb +5 -0
  444. data/templates/default/docstring/html/note.erb +6 -0
  445. data/templates/default/docstring/html/private.erb +4 -0
  446. data/templates/default/docstring/html/returns_void.erb +1 -0
  447. data/templates/default/docstring/html/text.erb +1 -0
  448. data/templates/default/docstring/html/todo.erb +6 -0
  449. data/templates/default/docstring/setup.rb +51 -0
  450. data/templates/default/docstring/text/abstract.erb +2 -0
  451. data/templates/default/docstring/text/deprecated.erb +2 -0
  452. data/templates/default/docstring/text/index.erb +2 -0
  453. data/templates/default/docstring/text/note.erb +4 -0
  454. data/templates/default/docstring/text/private.erb +2 -0
  455. data/templates/default/docstring/text/returns_void.erb +1 -0
  456. data/templates/default/docstring/text/text.erb +1 -0
  457. data/templates/default/docstring/text/todo.erb +4 -0
  458. data/templates/default/fulldoc/html/css/common.css +1 -0
  459. data/templates/default/fulldoc/html/css/full_list.css +57 -0
  460. data/templates/default/fulldoc/html/css/style.css +338 -0
  461. data/templates/default/fulldoc/html/frames.erb +28 -0
  462. data/templates/default/fulldoc/html/full_list.erb +40 -0
  463. data/templates/default/fulldoc/html/full_list_class.erb +2 -0
  464. data/templates/default/fulldoc/html/full_list_file.erb +5 -0
  465. data/templates/default/fulldoc/html/full_list_method.erb +8 -0
  466. data/templates/default/fulldoc/html/js/app.js +214 -0
  467. data/templates/default/fulldoc/html/js/full_list.js +178 -0
  468. data/templates/default/fulldoc/html/js/jquery.js +4 -0
  469. data/templates/default/fulldoc/html/setup.rb +199 -0
  470. data/templates/default/layout/dot/header.erb +6 -0
  471. data/templates/default/layout/dot/setup.rb +14 -0
  472. data/templates/default/layout/html/breadcrumb.erb +13 -0
  473. data/templates/default/layout/html/files.erb +11 -0
  474. data/templates/default/layout/html/footer.erb +5 -0
  475. data/templates/default/layout/html/headers.erb +14 -0
  476. data/templates/default/layout/html/index.erb +2 -0
  477. data/templates/default/layout/html/layout.erb +20 -0
  478. data/templates/default/layout/html/listing.erb +4 -0
  479. data/templates/default/layout/html/objects.erb +32 -0
  480. data/templates/default/layout/html/script_setup.erb +5 -0
  481. data/templates/default/layout/html/search.erb +8 -0
  482. data/templates/default/layout/html/setup.rb +71 -0
  483. data/templates/default/method/html/header.erb +16 -0
  484. data/templates/default/method/setup.rb +3 -0
  485. data/templates/default/method/text/header.erb +1 -0
  486. data/templates/default/method_details/html/header.erb +3 -0
  487. data/templates/default/method_details/html/method_signature.erb +25 -0
  488. data/templates/default/method_details/html/source.erb +10 -0
  489. data/templates/default/method_details/setup.rb +10 -0
  490. data/templates/default/method_details/text/header.erb +10 -0
  491. data/templates/default/method_details/text/method_signature.erb +12 -0
  492. data/templates/default/method_details/text/setup.rb +10 -0
  493. data/templates/default/module/dot/child.erb +1 -0
  494. data/templates/default/module/dot/dependencies.erb +3 -0
  495. data/templates/default/module/dot/header.erb +6 -0
  496. data/templates/default/module/dot/info.erb +14 -0
  497. data/templates/default/module/dot/setup.rb +14 -0
  498. data/templates/default/module/html/attribute_details.erb +10 -0
  499. data/templates/default/module/html/attribute_summary.erb +8 -0
  500. data/templates/default/module/html/box_info.erb +37 -0
  501. data/templates/default/module/html/children.erb +8 -0
  502. data/templates/default/module/html/constant_summary.erb +13 -0
  503. data/templates/default/module/html/defines.erb +3 -0
  504. data/templates/default/module/html/header.erb +5 -0
  505. data/templates/default/module/html/inherited_attributes.erb +14 -0
  506. data/templates/default/module/html/inherited_constants.erb +8 -0
  507. data/templates/default/module/html/inherited_methods.erb +19 -0
  508. data/templates/default/module/html/item_summary.erb +40 -0
  509. data/templates/default/module/html/method_details_list.erb +9 -0
  510. data/templates/default/module/html/method_summary.erb +14 -0
  511. data/templates/default/module/html/methodmissing.erb +12 -0
  512. data/templates/default/module/html/pre_docstring.erb +1 -0
  513. data/templates/default/module/setup.rb +164 -0
  514. data/templates/default/module/text/children.erb +10 -0
  515. data/templates/default/module/text/class_meths_list.erb +8 -0
  516. data/templates/default/module/text/extends.erb +8 -0
  517. data/templates/default/module/text/header.erb +7 -0
  518. data/templates/default/module/text/includes.erb +8 -0
  519. data/templates/default/module/text/instance_meths_list.erb +8 -0
  520. data/templates/default/module/text/setup.rb +12 -0
  521. data/templates/default/onefile/html/files.erb +5 -0
  522. data/templates/default/onefile/html/headers.erb +6 -0
  523. data/templates/default/onefile/html/layout.erb +17 -0
  524. data/templates/default/onefile/html/readme.erb +3 -0
  525. data/templates/default/onefile/html/setup.rb +61 -0
  526. data/templates/default/root/dot/child.erb +3 -0
  527. data/templates/default/root/dot/setup.rb +5 -0
  528. data/templates/default/root/html/setup.rb +1 -0
  529. data/templates/default/tags/html/example.erb +11 -0
  530. data/templates/default/tags/html/index.erb +3 -0
  531. data/templates/default/tags/html/option.erb +24 -0
  532. data/templates/default/tags/html/overload.erb +14 -0
  533. data/templates/default/tags/html/see.erb +8 -0
  534. data/templates/default/tags/html/tag.erb +20 -0
  535. data/templates/default/tags/setup.rb +55 -0
  536. data/templates/default/tags/text/example.erb +12 -0
  537. data/templates/default/tags/text/index.erb +1 -0
  538. data/templates/default/tags/text/option.erb +20 -0
  539. data/templates/default/tags/text/overload.erb +19 -0
  540. data/templates/default/tags/text/see.erb +11 -0
  541. data/templates/default/tags/text/tag.erb +13 -0
  542. data/templates/guide/class/html/setup.rb +1 -0
  543. data/templates/guide/docstring/html/setup.rb +1 -0
  544. data/templates/guide/fulldoc/html/css/style.css +108 -0
  545. data/templates/guide/fulldoc/html/js/app.js +33 -0
  546. data/templates/guide/fulldoc/html/setup.rb +73 -0
  547. data/templates/guide/layout/html/layout.erb +81 -0
  548. data/templates/guide/layout/html/setup.rb +28 -0
  549. data/templates/guide/method/html/header.erb +18 -0
  550. data/templates/guide/method/html/setup.rb +21 -0
  551. data/templates/guide/module/html/header.erb +7 -0
  552. data/templates/guide/module/html/method_list.erb +5 -0
  553. data/templates/guide/module/html/setup.rb +26 -0
  554. data/templates/guide/onefile/html/files.erb +4 -0
  555. data/templates/guide/onefile/html/setup.rb +5 -0
  556. data/templates/guide/onefile/html/toc.erb +3 -0
  557. data/templates/guide/tags/html/setup.rb +8 -0
  558. metadata +689 -0
@@ -0,0 +1,612 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+ require File.dirname(__FILE__) + "/shared_signature_examples"
3
+ require 'ostruct'
4
+
5
+ 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 "should use #h to escape HTML" do
19
+ h('Usage: foo "bar" <baz>').should == "Usage: foo &quot;bar&quot; &lt;baz&gt;"
20
+ end
21
+ end
22
+
23
+ describe '#charset' do
24
+ it "should return foo if LANG=foo" do
25
+ ENV.should_receive(:[]).with('LANG').and_return('shift_jis') if YARD.ruby18?
26
+ Encoding.default_external.should_receive(:name).and_return('shift_jis') if defined?(Encoding)
27
+ charset.should == 'shift_jis'
28
+ end
29
+
30
+ ['US-ASCII', 'ASCII-7BIT', 'ASCII-8BIT'].each do |type|
31
+ it "should convert #{type} to iso-8859-1" do
32
+ ENV.should_receive(:[]).with('LANG').and_return(type) if YARD.ruby18?
33
+ Encoding.default_external.should_receive(:name).and_return(type) if defined?(Encoding)
34
+ charset.should == 'iso-8859-1'
35
+ end
36
+ end
37
+
38
+ it "should support utf8 as an encoding value for utf-8" do
39
+ type = 'utf8'
40
+ ENV.should_receive(:[]).with('LANG').and_return(type) if YARD.ruby18?
41
+ Encoding.default_external.should_receive(:name).and_return(type) if defined?(Encoding)
42
+ charset.should == 'utf-8'
43
+ end
44
+
45
+ it "should take file encoding if there is a file" do
46
+ @file = OpenStruct.new(:contents => 'foo'.force_encoding('sjis'))
47
+ # not the correct charset name, but good enough
48
+ ['Shift_JIS', 'Windows-31J'].should include(charset)
49
+ end if YARD.ruby19?
50
+
51
+ it "should take file encoding if there is a file" do
52
+ ENV.stub!(:[]).with('LANG').and_return('utf-8') if YARD.ruby18?
53
+ @file = OpenStruct.new(:contents => 'foo')
54
+ charset.should == 'utf-8'
55
+ end if YARD.ruby18?
56
+
57
+ if YARD.ruby18?
58
+ it "should return utf-8 if no LANG env is set" do
59
+ ENV.should_receive(:[]).with('LANG').and_return(nil)
60
+ charset.should == 'utf-8'
61
+ end
62
+
63
+ it "should only return charset part of lang" do
64
+ ENV.should_receive(:[]).with('LANG').and_return('en_US.UTF-8')
65
+ charset.should == 'utf-8'
66
+ end
67
+ end
68
+ end
69
+
70
+ describe '#format_types' do
71
+ it "should include brackets by default" do
72
+ text = ["String"]
73
+ should_receive(:linkify).at_least(1).times.with("String", "String").and_return("String")
74
+ format_types(text).should == format_types(text, true)
75
+ format_types(text).should == "(<tt>String</tt>)"
76
+ end
77
+
78
+ it "should avoid brackets if brackets=false" do
79
+ should_receive(:linkify).with("String", "String").and_return("String")
80
+ should_receive(:linkify).with("Symbol", "Symbol").and_return("Symbol")
81
+ format_types(["String", "Symbol"], false).should == "<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>"]
95
+ }.each do |text, values|
96
+ it "should link all classes in #{text}" do
97
+ should_receive(:h).with('<').at_least(text.count('<')).times.and_return("&lt;")
98
+ should_receive(:h).with('>').at_least(text.count('>')).times.and_return("&gt;")
99
+ values[0].each {|v| should_receive(:linkify).with(v, v).and_return("<a href=''>#{v}</a>") }
100
+ format_types([text], false).should == values[1]
101
+ end
102
+ end
103
+ end
104
+
105
+ describe '#htmlify' do
106
+ it "should not use hard breaks for textile markup (RedCloth specific)" do
107
+ begin; require 'redcloth'; rescue LoadError; pending 'test requires redcloth gem' end
108
+ htmlify("A\nB", :textile).should_not include("<br")
109
+ end
110
+
111
+ it "should use hard breaks for textile_strict markup (RedCloth specific)" do
112
+ begin; require 'redcloth'; rescue LoadError; pending 'test requires redcloth gem' end
113
+ htmlify("A\nB", :textile_strict).should include("<br")
114
+ end
115
+
116
+ it "should handle various encodings" do
117
+ stub!(:object).and_return(Registry.root)
118
+ text = "\xB0\xB1"
119
+ if defined?(Encoding)
120
+ Encoding.default_internal = 'utf-8'
121
+ text = text.force_encoding('binary')
122
+ end
123
+ htmlify(text, :text)
124
+ # TODO: add more encoding tests
125
+ end
126
+
127
+ it "should return pre-formatted text with :pre markup" do
128
+ htmlify("fo\no\n\nbar<>", :pre).should == "<pre>fo\no\n\nbar&lt;&gt;</pre>"
129
+ end
130
+
131
+ it "should return regular text with :text markup" do
132
+ htmlify("fo\no\n\nbar<>", :text).should == "fo<br/>o<br/><br/>bar&lt;&gt;"
133
+ end
134
+
135
+ it "should return unmodified text with :none markup" do
136
+ htmlify("fo\no\n\nbar<>", :none).should == "fo\no\n\nbar&lt;&gt;"
137
+ end
138
+
139
+ it "should highlight ruby if markup is :ruby" do
140
+ htmlify("class Foo; end", :ruby).should =~ /\A<pre class="code ruby"><span/
141
+ end
142
+
143
+ it "should include file and htmlify it" do
144
+ load_markup_provider(:rdoc)
145
+ File.should_receive(:file?).with('foo.rdoc').and_return(true)
146
+ File.should_receive(:read).with('foo.rdoc').and_return('HI')
147
+ htmlify("{include:file:foo.rdoc}", :rdoc).gsub(/\s+/, '').should == "<p><p>HI</p></p>"
148
+ end
149
+
150
+ it "should autolink URLs (markdown specific)" do
151
+ log.enter_level(Logger::FATAL) do
152
+ unless markup_class(:markdown).to_s == "RedcarpetCompat"
153
+ pending 'This test depends on a markdown engine that supports autolinking'
154
+ end
155
+ end
156
+ htmlify('http://example.com', :markdown).chomp.gsub('&#47;', '/').should ==
157
+ '<p><a href="http://example.com">http://example.com</a></p>'
158
+ end
159
+
160
+ it "should not autolink URLs inside of {} (markdown specific)" do
161
+ log.enter_level(Logger::FATAL) do
162
+ pending 'This test depends on markdown' unless markup_class(:markdown)
163
+ end
164
+ htmlify('{http://example.com Title}', :markdown).chomp.should =~
165
+ %r{<p><a href="http://example.com".*>Title</a></p>}
166
+ htmlify('{http://example.com}', :markdown).chomp.should =~
167
+ %r{<p><a href="http://example.com".*>http://example.com</a></p>}
168
+ end
169
+ end
170
+
171
+ describe "#link_object" do
172
+ before do
173
+ stub!(:object).and_return(CodeObjects::NamespaceObject.new(nil, :YARD))
174
+ end
175
+
176
+ it "should return the object path if there's no serializer and no title" do
177
+ stub!(:serializer).and_return nil
178
+ link_object(CodeObjects::NamespaceObject.new(nil, :YARD)).should == "YARD"
179
+ end
180
+
181
+ it "should return the title if there's a title but no serializer" do
182
+ stub!(:serializer).and_return nil
183
+ link_object(CodeObjects::NamespaceObject.new(nil, :YARD), 'title').should == "title"
184
+ end
185
+
186
+ it "should link objects from overload tag" do
187
+ YARD.parse_string <<-'eof'
188
+ module Foo
189
+ class Bar; def a; end end
190
+ class Baz
191
+ # @overload a
192
+ def a; end
193
+ end
194
+ end
195
+ eof
196
+ obj = Registry.at('Foo::Baz#a').tag(:overload)
197
+ foobar = Registry.at('Foo::Bar')
198
+ foobaz = Registry.at('Foo::Baz')
199
+ serializer = Serializers::FileSystemSerializer.new
200
+ stub!(:serializer).and_return(serializer)
201
+ stub!(:object).and_return(obj)
202
+ link_object("Bar#a").should =~ %r{href="Bar.html#a-instance_method"}
203
+ end
204
+
205
+ it "should use relative path in title" do
206
+ CodeObjects::ModuleObject.new(:root, :YARD)
207
+ CodeObjects::ClassObject.new(P('YARD'), :Bar)
208
+ stub!(:object).and_return(CodeObjects::ModuleObject.new(P('YARD'), :Foo))
209
+ serializer = Serializers::FileSystemSerializer.new
210
+ stub!(:serializer).and_return(serializer)
211
+ link_object("Bar").should =~ %r{>Bar</a>}
212
+ end
213
+
214
+ it "should use #title if overridden" do
215
+ CodeObjects::ModuleObject.new(:root, :YARD)
216
+ CodeObjects::ClassObject.new(P('YARD'), :Bar)
217
+ Registry.at('YARD::Bar').stub(:title).and_return('TITLE!')
218
+ stub!(:object).and_return(Registry.at('YARD::Bar'))
219
+ serializer = Serializers::FileSystemSerializer.new
220
+ stub!(:serializer).and_return(serializer)
221
+ link_object("Bar").should =~ %r{>TITLE!</a>}
222
+ end
223
+
224
+ it "should use relative path to parent class in title" do
225
+ root = CodeObjects::ModuleObject.new(:root, :YARD)
226
+ obj = CodeObjects::ModuleObject.new(root, :SubModule)
227
+ stub!(:object).and_return(obj)
228
+ serializer = Serializers::FileSystemSerializer.new
229
+ stub!(:serializer).and_return(serializer)
230
+ link_object("YARD").should =~ %r{>YARD</a>}
231
+ end
232
+
233
+ it "should use Klass.foo when linking to class method in current namespace" do
234
+ root = CodeObjects::ModuleObject.new(:root, :Klass)
235
+ obj = CodeObjects::MethodObject.new(root, :foo, :class)
236
+ stub!(:object).and_return(root)
237
+ serializer = Serializers::FileSystemSerializer.new
238
+ stub!(:serializer).and_return(serializer)
239
+ link_object("foo").should =~ %r{>Klass.foo</a>}
240
+ end
241
+
242
+ it "should escape method name in title" do
243
+ YARD.parse_string <<-'eof'
244
+ class Array
245
+ def &(other)
246
+ end
247
+ end
248
+ eof
249
+ obj = Registry.at('Array#&')
250
+ serializer = Serializers::FileSystemSerializer.new
251
+ stub!(:serializer).and_return(serializer)
252
+ stub!(:object).and_return(obj)
253
+ link_object("Array#&").should =~ %r{title="Array#&amp; \(method\)"}
254
+ end
255
+ end
256
+
257
+ describe '#url_for' do
258
+ before { Registry.clear }
259
+
260
+ it "should return nil if serializer is nil" do
261
+ stub!(:serializer).and_return nil
262
+ stub!(:object).and_return Registry.root
263
+ url_for(P("Mod::Class#meth")).should be_nil
264
+ end
265
+
266
+ it "should return nil if object is hidden" do
267
+ yard = CodeObjects::ModuleObject.new(:root, :YARD)
268
+
269
+ stub!(:serializer).and_return Serializers::FileSystemSerializer.new
270
+ stub!(:object).and_return Registry.root
271
+ stub!(:options).and_return OpenStruct.new(:verifier => Verifier.new('false'))
272
+
273
+ url_for(yard).should be_nil
274
+ end
275
+
276
+ it "should return nil if serializer does not implement #serialized_path" do
277
+ stub!(:serializer).and_return Serializers::Base.new
278
+ stub!(:object).and_return Registry.root
279
+ url_for(P("Mod::Class#meth")).should be_nil
280
+ end
281
+
282
+ it "should link to a path/file for a namespace object" do
283
+ stub!(:serializer).and_return Serializers::FileSystemSerializer.new
284
+ stub!(:object).and_return Registry.root
285
+
286
+ yard = CodeObjects::ModuleObject.new(:root, :YARD)
287
+ url_for(yard).should == 'YARD.html'
288
+ end
289
+
290
+ it "should link to the object's namespace path/file and use the object as the anchor" do
291
+ stub!(:serializer).and_return Serializers::FileSystemSerializer.new
292
+ stub!(:object).and_return Registry.root
293
+
294
+ yard = CodeObjects::ModuleObject.new(:root, :YARD)
295
+ meth = CodeObjects::MethodObject.new(yard, :meth)
296
+ url_for(meth).should == 'YARD.html#meth-instance_method'
297
+ end
298
+
299
+ it "should properly urlencode methods with punctuation in links" do
300
+ obj = CodeObjects::MethodObject.new(nil, :/)
301
+ serializer = mock(:serializer)
302
+ serializer.stub!(:serialized_path).and_return("file.html")
303
+ stub!(:serializer).and_return(serializer)
304
+ stub!(:object).and_return(obj)
305
+ url_for(obj).should == "#%2F-instance_method"
306
+ end
307
+ end
308
+
309
+ describe '#anchor_for' do
310
+ it "should not urlencode data when called directly" do
311
+ obj = CodeObjects::MethodObject.new(nil, :/)
312
+ anchor_for(obj).should == "/-instance_method"
313
+ end
314
+ end
315
+
316
+ describe '#resolve_links' do
317
+ def parse_link(link)
318
+ results = {}
319
+ link =~ /<a (.+?)>(.+?)<\/a>/m
320
+ params, results[:inner_text] = $1, $2
321
+ params.scan(/\s*(\S+?)=['"](.+?)['"]\s*/).each do |key, value|
322
+ results[key.to_sym] = value.gsub(/^["'](.+)["']$/, '\1')
323
+ end
324
+ results
325
+ end
326
+
327
+ it "should escape {} syntax with backslash (\\{foo bar})" do
328
+ input = '\{foo bar} \{XYZ} \{file:FOO} $\{N-M}'
329
+ output = '{foo bar} {XYZ} {file:FOO} ${N-M}'
330
+ resolve_links(input).should == output
331
+ end
332
+
333
+ it "should escape {} syntax with ! (!{foo bar})" do
334
+ input = '!{foo bar} !{XYZ} !{file:FOO} $!{N-M}'
335
+ output = '{foo bar} {XYZ} {file:FOO} ${N-M}'
336
+ resolve_links(input).should == output
337
+ end
338
+
339
+ it "should link static files with file: prefix" do
340
+ stub!(:serializer).and_return Serializers::FileSystemSerializer.new
341
+ stub!(:object).and_return Registry.root
342
+
343
+ parse_link(resolve_links("{file:TEST.txt#abc}")).should == {
344
+ :inner_text => "TEST",
345
+ :title => "TEST",
346
+ :href => "file.TEST.html#abc"
347
+ }
348
+ parse_link(resolve_links("{file:TEST.txt title}")).should == {
349
+ :inner_text => "title",
350
+ :title => "title",
351
+ :href => "file.TEST.html"
352
+ }
353
+ end
354
+
355
+ it "should create regular links with http:// or https:// prefixes" do
356
+ parse_link(resolve_links("{http://example.com}")).should == {
357
+ :inner_text => "http://example.com",
358
+ :target => "_parent",
359
+ :href => "http://example.com",
360
+ :title => "http://example.com"
361
+ }
362
+ parse_link(resolve_links("{http://example.com title}")).should == {
363
+ :inner_text => "title",
364
+ :target => "_parent",
365
+ :href => "http://example.com",
366
+ :title => "title"
367
+ }
368
+ end
369
+
370
+ it "should create mailto links with mailto: prefixes" do
371
+ parse_link(resolve_links('{mailto:joanna@example.com}')).should == {
372
+ :inner_text => 'mailto:joanna@example.com',
373
+ :target => '_parent',
374
+ :href => 'mailto:joanna@example.com',
375
+ :title => 'mailto:joanna@example.com'
376
+ }
377
+ parse_link(resolve_links('{mailto:steve@example.com Steve}')).should == {
378
+ :inner_text => 'Steve',
379
+ :target => '_parent',
380
+ :href => 'mailto:steve@example.com',
381
+ :title => 'Steve'
382
+ }
383
+ end
384
+
385
+ it "should ignore {links} that begin with |...|" do
386
+ resolve_links("{|x|x == 1}").should == "{|x|x == 1}"
387
+ end
388
+
389
+ it "should gracefully ignore {} in links" do
390
+ should_receive(:linkify).with('Foo', 'Foo').and_return('FOO')
391
+ resolve_links("{} {} {Foo Foo}").should == '{} {} FOO'
392
+ end
393
+
394
+ %w(tt code pre).each do |tag|
395
+ it "should ignore links in <#{tag}>" do
396
+ text = "<#{tag}>{Foo}</#{tag}>"
397
+ resolve_links(text).should == text
398
+ end
399
+ end
400
+
401
+ it "should resolve {Name}" do
402
+ should_receive(:link_file).with('TEST', nil, nil).and_return('')
403
+ resolve_links("{file:TEST}")
404
+ end
405
+
406
+ it "should resolve ({Name})" do
407
+ should_receive(:link_file).with('TEST', nil, nil).and_return('')
408
+ resolve_links("({file:TEST})")
409
+ end
410
+
411
+ it "should resolve link with newline in title-part" do
412
+ parse_link(resolve_links("{http://example.com foo\nbar}")).should == {
413
+ :inner_text => "foo bar",
414
+ :target => "_parent",
415
+ :href => "http://example.com",
416
+ :title => "foo bar"
417
+ }
418
+ end
419
+
420
+ it "should resolve links to methods whose names have been escaped" do
421
+ should_receive(:linkify).with('Object#<<', nil).and_return('')
422
+ resolve_links("{Object#&lt;&lt;}")
423
+ end
424
+
425
+ it "should warn about missing reference at right file location for object" do
426
+ YARD.parse_string <<-eof
427
+ # Comments here
428
+ # And a reference to {InvalidObject}
429
+ class MyObject; end
430
+ eof
431
+ logger = mock(:log)
432
+ logger.should_receive(:warn).ordered.with("In file `(stdin)':2: Cannot resolve link to InvalidObject from text:")
433
+ logger.should_receive(:warn).ordered.with("...{InvalidObject}")
434
+ stub!(:log).and_return(logger)
435
+ stub!(:object).and_return(Registry.at('MyObject'))
436
+ resolve_links(object.docstring)
437
+ end
438
+
439
+ it "should show ellipsis on either side if there is more on the line in a reference warning" do
440
+ YARD.parse_string <<-eof
441
+ # {InvalidObject1} beginning of line
442
+ # end of line {InvalidObject2}
443
+ # Middle of {InvalidObject3} line
444
+ # {InvalidObject4}
445
+ class MyObject; end
446
+ eof
447
+ logger = mock(:log)
448
+ logger.should_receive(:warn).ordered.with("In file `(stdin)':1: Cannot resolve link to InvalidObject1 from text:")
449
+ logger.should_receive(:warn).ordered.with("{InvalidObject1}...")
450
+ logger.should_receive(:warn).ordered.with("In file `(stdin)':2: Cannot resolve link to InvalidObject2 from text:")
451
+ logger.should_receive(:warn).ordered.with("...{InvalidObject2}")
452
+ logger.should_receive(:warn).ordered.with("In file `(stdin)':3: Cannot resolve link to InvalidObject3 from text:")
453
+ logger.should_receive(:warn).ordered.with("...{InvalidObject3}...")
454
+ logger.should_receive(:warn).ordered.with("In file `(stdin)':4: Cannot resolve link to InvalidObject4 from text:")
455
+ logger.should_receive(:warn).ordered.with("{InvalidObject4}")
456
+ stub!(:log).and_return(logger)
457
+ stub!(:object).and_return(Registry.at('MyObject'))
458
+ resolve_links(object.docstring)
459
+ end
460
+
461
+ it "should warn about missing reference for file template (no object)" do
462
+ @file = CodeObjects::ExtraFileObject.new('myfile.txt', '')
463
+ logger = mock(:log)
464
+ logger.should_receive(:warn).ordered.with("In file `myfile.txt':3: Cannot resolve link to InvalidObject from text:")
465
+ logger.should_receive(:warn).ordered.with("...{InvalidObject Some Title}")
466
+ stub!(:log).and_return(logger)
467
+ stub!(:object).and_return(Registry.root)
468
+ resolve_links(<<-eof)
469
+ Hello world
470
+ This is a line
471
+ And {InvalidObject Some Title}
472
+ And more.
473
+ eof
474
+ end
475
+ end
476
+
477
+ describe '#signature' do
478
+ before do
479
+ @results = {
480
+ :regular => "- (Object) <strong>foo</strong>",
481
+ :default_return => "- (Hello) <strong>foo</strong>",
482
+ :no_default_return => "- <strong>foo</strong>",
483
+ :private_class => "+ (Object) <strong>foo</strong> <span class=\"extras\">(private)</span>",
484
+ :single => "- (String) <strong>foo</strong>",
485
+ :two_types => "- (String, Symbol) <strong>foo</strong>",
486
+ :two_types_multitag => "- (String, Symbol) <strong>foo</strong>",
487
+ :type_nil => "- (Type<sup>?</sup>) <strong>foo</strong>",
488
+ :type_array => "- (Type<sup>+</sup>) <strong>foo</strong>",
489
+ :multitype => "- (Type, ...) <strong>foo</strong>",
490
+ :void => "- (void) <strong>foo</strong>",
491
+ :hide_void => "- <strong>foo</strong>",
492
+ :block => "- (Object) <strong>foo</strong> {|a, b, c| ... }",
493
+ :empty_overload => '- (String) <strong>foobar</strong>'
494
+ }
495
+ end
496
+
497
+ def format_types(types, brackets = false) types.join(", ") end
498
+ def signature(obj, link = false) super(obj, link).strip end
499
+
500
+ it_should_behave_like "signature"
501
+
502
+ it "should link to regular method if overload name does not have the same method name" do
503
+ YARD.parse_string <<-eof
504
+ class Foo
505
+ # @overload bar(a, b, c)
506
+ def foo; end
507
+ end
508
+ eof
509
+ serializer = mock(:serializer)
510
+ serializer.stub!(:serialized_path).with(Registry.at('Foo')).and_return('')
511
+ stub!(:serializer).and_return(serializer)
512
+ stub!(:object).and_return(Registry.at('Foo'))
513
+ signature(Registry.at('Foo#foo').tag(:overload), true).should ==
514
+ "<a href=\"#foo-instance_method\" title=\"#bar (instance method)\">- <strong>bar</strong>(a, b, c) </a>"
515
+ end
516
+ end
517
+
518
+ describe '#html_syntax_highlight' do
519
+ subject do
520
+ obj = OpenStruct.new
521
+ obj.options = options
522
+ obj.object = Registry.root
523
+ obj.extend(Templates::Helpers::HtmlHelper)
524
+ obj
525
+ end
526
+
527
+ it "should return empty string on nil input" do
528
+ subject.html_syntax_highlight(nil).should == ''
529
+ end
530
+
531
+ it "should call #html_syntax_highlight_ruby by default" do
532
+ Registry.root.source_type = nil
533
+ subject.should_receive(:html_syntax_highlight_ruby).with('def x; end')
534
+ subject.html_syntax_highlight('def x; end')
535
+ end
536
+
537
+ it "should call #html_syntax_highlight_NAME if there's an object with a #source_type" do
538
+ subject.object = OpenStruct.new(:source_type => :NAME)
539
+ subject.should_receive(:respond_to?).with('html_markup_html').and_return(true)
540
+ subject.should_receive(:respond_to?).with('html_syntax_highlight_NAME').and_return(true)
541
+ subject.should_receive(:html_syntax_highlight_NAME).and_return("foobar")
542
+ subject.htmlify('<pre><code>def x; end</code></pre>', :html).should ==
543
+ '<pre class="code NAME"><code class="NAME">foobar</code></pre>'
544
+ end
545
+
546
+ it "should add !!!LANG to className in outputted pre tag" do
547
+ subject.object = OpenStruct.new(:source_type => :LANG)
548
+ subject.should_receive(:respond_to?).with('html_markup_html').and_return(true)
549
+ subject.should_receive(:respond_to?).with('html_syntax_highlight_LANG').and_return(true)
550
+ subject.should_receive(:html_syntax_highlight_LANG).and_return("foobar")
551
+ subject.htmlify("<pre><code>!!!LANG\ndef x; end</code></pre>", :html).should ==
552
+ '<pre class="code LANG"><code class="LANG">foobar</code></pre>'
553
+ end
554
+
555
+ it "should call html_syntax_highlight_NAME if source starts with !!!NAME" do
556
+ subject.should_receive(:respond_to?).with('html_syntax_highlight_NAME').and_return(true)
557
+ subject.should_receive(:html_syntax_highlight_NAME).and_return("foobar")
558
+ subject.html_syntax_highlight(<<-eof
559
+ !!!NAME
560
+ def x; end
561
+ eof
562
+ ).should == "foobar"
563
+ end
564
+
565
+ it "should not highlight if highlight option is false" do
566
+ subject.options.highlight = false
567
+ subject.should_not_receive(:html_syntax_highlight_ruby)
568
+ subject.html_syntax_highlight('def x; end').should == 'def x; end'
569
+ end
570
+
571
+ it "should not highlight if there is no highlight method specified by !!!NAME" do
572
+ subject.should_receive(:respond_to?).with('html_syntax_highlight_NAME').and_return(false)
573
+ subject.should_not_receive(:html_syntax_highlight_NAME)
574
+ subject.html_syntax_highlight("!!!NAME\ndef x; end").should == "def x; end"
575
+ end
576
+
577
+ it "should highlight as ruby if htmlify(text, :ruby) is called" do
578
+ subject.should_receive(:html_syntax_highlight_ruby).with('def x; end').and_return('x')
579
+ subject.htmlify('def x; end', :ruby).should == '<pre class="code ruby">x</pre>'
580
+ end
581
+
582
+ it "should not prioritize object source type when called directly" do
583
+ subject.should_receive(:html_syntax_highlight_ruby).with('def x; end').and_return('x')
584
+ subject.object = OpenStruct.new(:source_type => :c)
585
+ subject.html_syntax_highlight("def x; end").should == "x"
586
+ end
587
+
588
+ it "shouldn't escape code snippets twice" do
589
+ subject.htmlify('<pre lang="foo"><code>{"foo" => 1}</code></pre>', :html).should ==
590
+ '<pre class="code foo"><code class="foo">{&quot;foo&quot; =&gt; 1}</code></pre>'
591
+ end
592
+
593
+ it "should highlight source when matching a pre lang= tag" do
594
+ subject.htmlify('<pre lang="foo"><code>x = 1</code></pre>', :html).should ==
595
+ '<pre class="code foo"><code class="foo">x = 1</code></pre>'
596
+ end
597
+
598
+ it "should highlight source when matching a code class= tag" do
599
+ subject.htmlify('<pre><code class="foo">x = 1</code></pre>', :html).should ==
600
+ '<pre class="code foo"><code class="foo">x = 1</code></pre>'
601
+ end
602
+ end
603
+
604
+ describe '#link_url' do
605
+ it "should add target if scheme is provided" do
606
+ link_url("http://url.com").should include(" target=\"_parent\"")
607
+ link_url("https://url.com").should include(" target=\"_parent\"")
608
+ link_url("irc://url.com").should include(" target=\"_parent\"")
609
+ link_url("../not/scheme").should_not include("target")
610
+ end
611
+ end
612
+ end
@@ -0,0 +1,48 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe YARD::Templates::Helpers::HtmlSyntaxHighlightHelper do
4
+ include YARD::Templates::Helpers::HtmlHelper
5
+ include YARD::Templates::Helpers::HtmlSyntaxHighlightHelper
6
+
7
+ describe '#html_syntax_highlight' do
8
+ before do
9
+ stub!(:object).and_return Registry.root
10
+ Registry.root.source_type = :ruby
11
+ end
12
+
13
+ it "should not highlight source if options.highlight is false" do
14
+ should_receive(:options).and_return(Options.new.update(:highlight => false))
15
+ html_syntax_highlight("def x\nend").should == "def x\nend"
16
+ end
17
+
18
+ it "should highlight source (legacy)" do
19
+ type = Parser::SourceParser.parser_type
20
+ Parser::SourceParser.parser_type = :ruby18
21
+ should_receive(:options).and_return(Options.new.update(:highlight => true))
22
+ expect = "<span class='rubyid_def def kw'>def</span><span class='rubyid_x identifier id'>x</span>
23
+ <span class='string val'>'x'</span><span class='plus op'>+</span>
24
+ <span class='regexp val'>/x/i</span><span class='rubyid_end end kw'>end</span>"
25
+ result = html_syntax_highlight("def x\n 'x' + /x/i\nend")
26
+ html_equals_string(result, expect)
27
+ Parser::SourceParser.parser_type = type
28
+ end
29
+
30
+ it "should highlight source (ripper)" do
31
+ should_receive(:options).and_return(Options.new.update(:highlight => true))
32
+ Parser::SourceParser.parser_type = :ruby
33
+ expect = "<span class='kw'>def</span> <span class='id identifier rubyid_x'>x</span>
34
+ <span class='tstring'><span class='tstring_beg'>'</span>
35
+ <span class='tstring_content'>x</span><span class='tstring_end'>'</span>
36
+ </span> <span class='op'>+</span> <span class='tstring'>
37
+ <span class='regexp_beg'>/</span><span class='tstring_content'>x</span>
38
+ <span class='regexp_end'>/i</span></span>\n<span class='kw'>end</span>"
39
+ result = html_syntax_highlight("def x\n 'x' + /x/i\nend")
40
+ html_equals_string(result, expect)
41
+ end if HAVE_RIPPER
42
+
43
+ it "should return escaped unhighlighted source if a syntax error is found (ripper)" do
44
+ should_receive(:options).and_return(Options.new.update(:highlight => true))
45
+ html_syntax_highlight("def &x; ... end").should == "def &amp;x; ... end"
46
+ end if HAVE_RIPPER
47
+ end
48
+ end