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,206 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+ require 'ostruct'
3
+
4
+ include Parser
5
+
6
+ describe YARD::Handlers::Base do
7
+ describe "#handles and inheritance" do
8
+ before do
9
+ Handlers::Base.stub!(:inherited)
10
+ end
11
+
12
+ it "should keep track of subclasses" do
13
+ Handlers::Base.should_receive(:inherited).once
14
+ class TestHandler < Handlers::Base; end
15
+ end
16
+
17
+ it "should raise NotImplementedError if process is called on a class with no #process" do
18
+ class TestNotImplementedHandler < Handlers::Base
19
+ end
20
+
21
+ lambda { TestNotImplementedHandler.new(0, 0).process }.should raise_error(NotImplementedError)
22
+ end
23
+
24
+ it "should allow multiple handles arguments" do
25
+ Handlers::Base.should_receive(:inherited).once
26
+ class TestHandler1 < Handlers::Base
27
+ handles :a, :b, :c
28
+ end
29
+ TestHandler1.handlers.should == [:a, :b, :c]
30
+ end
31
+
32
+ it "should allow multiple handles calls" do
33
+ Handlers::Base.should_receive(:inherited).once
34
+ class TestHandler2 < Handlers::Base
35
+ handles :a
36
+ handles :b
37
+ handles :c
38
+ end
39
+ TestHandler2.handlers.should == [:a, :b, :c]
40
+ end
41
+ end
42
+
43
+ describe '#abort! (and HandlerAborted)' do
44
+ it 'should allow HandlerAborted to be raised' do
45
+ class AbortHandler1 < Handlers::Ruby::Base
46
+ process { abort! }
47
+ end
48
+ lambda { AbortHandler1.new(nil, nil).process }.should raise_error(HandlerAborted)
49
+ end
50
+ end
51
+
52
+ describe 'transitive tags' do
53
+ it "should add transitive tags to children" do
54
+ Registry.clear
55
+ YARD.parse_string <<-eof
56
+ # @since 1.0
57
+ # @author Foo
58
+ class A
59
+ def foo; end
60
+ # @since 1.1
61
+ def bar; end
62
+ end
63
+ eof
64
+ Registry.at('A').tag(:since).text.should == "1.0"
65
+ Registry.at('A#foo').tag(:since).text.should == "1.0"
66
+ Registry.at('A#bar').tag(:since).text.should == "1.1"
67
+ Registry.at('A#bar').tag(:author).should be_nil
68
+ end
69
+ end
70
+
71
+ describe 'sharing global state' do
72
+ it "should allow globals to share global state among handlers" do
73
+ class GlobalStateHandler1 < Handlers::Ruby::Base
74
+ class << self; attr_accessor :state end
75
+ handles :class
76
+ process { self.class.state = globals.foo; globals.foo = :bar }
77
+ end
78
+
79
+ class GlobalStateHandler2 < Handlers::Ruby::Base
80
+ class << self; attr_accessor :state end
81
+ handles :def
82
+ process { self.class.state = globals.foo }
83
+ end
84
+
85
+ 2.times do
86
+ YARD.parse_string 'class Foo; end; def foo; end'
87
+ GlobalStateHandler1.state.should == nil
88
+ GlobalStateHandler2.state.should == :bar
89
+ end
90
+ end
91
+ end if HAVE_RIPPER
92
+
93
+ describe '#push_state' do
94
+ def process(klass)
95
+ state = OpenStruct.new(:namespace => "ROOT", :scope => :instance, :owner => "ROOT")
96
+ klass.new(state, nil).process
97
+ end
98
+
99
+ it "should push and return all old state info after block" do
100
+ class PushStateHandler1 < Handlers::Base
101
+ def process
102
+ push_state(:namespace => "FOO", :scope => :class, :owner => "BAR") do
103
+ namespace.should == "FOO"
104
+ scope.should == :class
105
+ owner.should == "BAR"
106
+ end
107
+ namespace.should == "ROOT"
108
+ owner.should == "ROOT"
109
+ scope.should == :instance
110
+ end
111
+ end
112
+ process PushStateHandler1
113
+ end
114
+
115
+ it "should allow owner to be pushed individually" do
116
+ class PushStateHandler2 < Handlers::Base
117
+ def process
118
+ push_state(:owner => "BAR") do
119
+ namespace.should == "ROOT"
120
+ scope.should == :instance
121
+ owner.should == "BAR"
122
+ end
123
+ owner.should == "ROOT"
124
+ end
125
+ end
126
+ process PushStateHandler2
127
+ end
128
+
129
+ it "should allow scope to be pushed individually" do
130
+ class PushStateHandler3 < Handlers::Base
131
+ def process
132
+ push_state(:scope => :foo) do
133
+ namespace.should == "ROOT"
134
+ scope.should == :foo
135
+ owner.should == "ROOT"
136
+ end
137
+ scope.should == :instance
138
+ end
139
+ end
140
+ process PushStateHandler3
141
+ end
142
+ end
143
+
144
+ describe '.in_file' do
145
+ def parse(filename, parser_type, src = "class A; end")
146
+ parser = Parser::SourceParser.new(parser_type)
147
+ parser.instance_variable_set("@file", filename)
148
+ parser.parse(StringIO.new(src))
149
+ end
150
+
151
+ def create_handler(stmts, parser_type)
152
+ $handler_counter ||= 0
153
+ sklass = parser_type == :ruby ? "Base" : "Legacy::Base"
154
+ instance_eval(<<-eof)
155
+ class ::InFileHandler#{$handler_counter += 1} < Handlers::Ruby::#{sklass}
156
+ handles /^class/
157
+ #{stmts}
158
+ def process; MethodObject.new(:root, :FOO) end
159
+ end
160
+ eof
161
+ end
162
+
163
+ def test_handler(file, stmts, creates = true, parser_type = :ruby)
164
+ Registry.clear
165
+ Registry.at('#FOO').should be_nil
166
+ create_handler(stmts, parser_type)
167
+ parse(file, parser_type)
168
+ Registry.at('#FOO').send(creates ? :should_not : :should, be_nil)
169
+ Handlers::Base.subclasses.delete_if {|k,v| k.to_s =~ /^InFileHandler/ }
170
+ end
171
+
172
+ [:ruby, :ruby18].each do |parser_type|
173
+ next if parser_type == :ruby && LEGACY_PARSER
174
+ describe "Parser type = #{parser_type.inspect}" do
175
+ it "should allow handler to be specific to a file" do
176
+ test_handler 'file_a.rb', 'in_file "file_a.rb"', true, parser_type
177
+ end
178
+
179
+ it "should ignore handler if filename does not match" do
180
+ test_handler 'file_b.rb', 'in_file "file_a.rb"', false, parser_type
181
+ end
182
+
183
+ it "should only test filename part when given a String" do
184
+ test_handler '/path/to/file_a.rb', 'in_file "/to/file_a.rb"', false, parser_type
185
+ end
186
+
187
+ it "should test exact match for entire String" do
188
+ test_handler 'file_a.rb', 'in_file "file"', false, parser_type
189
+ end
190
+
191
+ it "should allow a Regexp as argument and test against full path" do
192
+ test_handler 'file_a.rbx', 'in_file /\.rbx$/', true, parser_type
193
+ test_handler '/path/to/file_a.rbx', 'in_file /\/to\/file_/', true, parser_type
194
+ test_handler '/path/to/file_a.rbx', 'in_file /^\/path/', true, parser_type
195
+ end
196
+
197
+ it "should allow multiple in_file declarations" do
198
+ stmts = 'in_file "x"; in_file /y/; in_file "foo.rb"'
199
+ test_handler 'foo.rb', stmts, true, parser_type
200
+ test_handler 'xyzzy.rb', stmts, true, parser_type
201
+ test_handler 'x', stmts, true, parser_type
202
+ end
203
+ end
204
+ end
205
+ end
206
+ end
@@ -0,0 +1,33 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe YARD::Handlers::C::AliasHandler do
4
+ it "should allow defining of aliases (rb_define_alias)" do
5
+ parse <<-eof
6
+ /* FOO */
7
+ VALUE foo(VALUE x) { int value = x; }
8
+ void Init_Foo() {
9
+ rb_cFoo = rb_define_class("Foo", rb_cObject);
10
+ rb_define_method(rb_cFoo, "foo", foo, 1);
11
+ rb_define_alias(rb_cFoo, "bar", "foo");
12
+ }
13
+ eof
14
+
15
+ Registry.at('Foo#bar').should be_is_alias
16
+ Registry.at('Foo#bar').docstring.should == 'FOO'
17
+ end
18
+
19
+ it "should allow defining of aliases (rb_define_alias) of attributes" do
20
+ parse <<-eof
21
+ /* FOO */
22
+ VALUE foo(VALUE x) { int value = x; }
23
+ void Init_Foo() {
24
+ rb_cFoo = rb_define_class("Foo", rb_cObject);
25
+ rb_define_attr(rb_cFoo, "foo", 1, 0);
26
+ rb_define_alias(rb_cFoo, "foo?", "foo");
27
+ }
28
+ eof
29
+
30
+ Registry.at('Foo#foo').should be_reader
31
+ Registry.at('Foo#foo?').should be_is_alias
32
+ end
33
+ end
@@ -0,0 +1,40 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe YARD::Handlers::C::AttributeHandler do
4
+ def run(read, write, commented = nil)
5
+ parse <<-eof
6
+ /* FOO */
7
+ VALUE foo(VALUE x) { int value = x; }
8
+ void Init_Foo() {
9
+ rb_cFoo = rb_define_class("Foo", rb_cObject);
10
+ #{commented ? '/*' : ''}
11
+ rb_define_attr(rb_cFoo, "foo", #{read}, #{write});
12
+ #{commented ? '*/' : ''}
13
+ }
14
+ eof
15
+ end
16
+
17
+ it "should handle readonly attribute (rb_define_attr)" do
18
+ run(1, 0)
19
+ Registry.at('Foo#foo').should be_reader
20
+ Registry.at('Foo#foo=').should be_nil
21
+ end
22
+
23
+ it "should handle writeonly attribute (rb_define_attr)" do
24
+ run(0, 1)
25
+ Registry.at('Foo#foo').should be_nil
26
+ Registry.at('Foo#foo=').should be_writer
27
+ end
28
+
29
+ it "should handle readwrite attribute (rb_define_attr)" do
30
+ run(1, 1)
31
+ Registry.at('Foo#foo').should be_reader
32
+ Registry.at('Foo#foo=').should be_writer
33
+ end
34
+
35
+ it "should handle commented writeonly attribute (/* rb_define_attr */)" do
36
+ run(1, 1, true)
37
+ Registry.at('Foo#foo').should be_reader
38
+ Registry.at('Foo#foo=').should be_writer
39
+ end
40
+ end
@@ -0,0 +1,63 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe YARD::Handlers::C::ClassHandler do
4
+ it "should register classes" do
5
+ parse_init 'cFoo = rb_define_class("Foo", rb_cObject);'
6
+ Registry.at('Foo').type.should == :class
7
+ end
8
+
9
+ it "should register classes under namespaces" do
10
+ parse_init 'cFoo = rb_define_class_under(cBar, "Foo", rb_cObject);'
11
+ Registry.at('Bar::Foo').type.should == :class
12
+ end
13
+
14
+ it "should remember symbol defined with class" do
15
+ parse_init(<<-eof)
16
+ cXYZ = rb_define_class("Foo", rb_cObject);
17
+ rb_define_method(cXYZ, "bar", bar, 0);
18
+ eof
19
+ Registry.at('Foo').type.should == :class
20
+ Registry.at('Foo#bar').should_not be_nil
21
+ end
22
+
23
+ it "should lookup superclass symbol name" do
24
+ parse_init(<<-eof)
25
+ cXYZ = rb_define_class("Foo", rb_cObject);
26
+ cBar = rb_define_class("Bar", cXYZ);
27
+ eof
28
+ Registry.at('Bar').superclass.should == Registry.at('Foo')
29
+ end
30
+
31
+ it "should user superclass symbol name as proxy if not found" do
32
+ parse_init(<<-eof)
33
+ // cXYZ = rb_define_class("Foo", rb_cObject);
34
+ cBar = rb_define_class("Bar", cXYZ);
35
+ eof
36
+ Registry.at('Bar').superclass.should == P('XYZ')
37
+ end
38
+
39
+ it "should not associate declaration comments as class docstring" do
40
+ parse_init(<<-eof)
41
+ /* Docstring! */
42
+ cFoo = rb_define_class("Foo", cObject);
43
+ eof
44
+ Registry.at('Foo').docstring.should be_blank
45
+ end
46
+
47
+ it "should associate a file with the declaration" do
48
+ parse_init(<<-eof)
49
+ cFoo = rb_define_class("Foo", cObject);
50
+ eof
51
+ Registry.at('Foo').file.should == '(stdin)'
52
+ Registry.at('Foo').line.should == 2
53
+ end
54
+
55
+ it "should properly handle Proxy superclasses" do
56
+ parse_init <<-eof
57
+ cFoo = rb_define_class_under(mFoo, "Bar", rb_cBar);
58
+ eof
59
+ Registry.at('Foo::Bar').type.should == :class
60
+ Registry.at('Foo::Bar').superclass.should == P('Bar')
61
+ Registry.at('Foo::Bar').superclass.type.should == :class
62
+ end
63
+ end
@@ -0,0 +1,68 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe YARD::Handlers::C::ConstantHandler do
4
+ it "should register constants" do
5
+ parse_init <<-eof
6
+ mFoo = rb_define_module("Foo");
7
+ rb_define_const(mFoo, "FOO", ID2SYM(100));
8
+ eof
9
+ Registry.at('Foo::FOO').type.should == :constant
10
+ end
11
+
12
+ it "should look for override comments" do
13
+ parse <<-eof
14
+ /* Document-const: FOO
15
+ * Document-const: Foo::BAR
16
+ * Foo bar!
17
+ */
18
+
19
+ void Init_Foo() {
20
+ mFoo = rb_define_module("Foo");
21
+ rb_define_const(mFoo, "FOO", ID2SYM(100));
22
+ rb_define_const(mFoo, "BAR", ID2SYM(101));
23
+ }
24
+ eof
25
+ foo = Registry.at('Foo::FOO')
26
+ foo.type.should == :constant
27
+ foo.docstring.should == 'Foo bar!'
28
+ foo.value.should == 'ID2SYM(100)'
29
+ foo.file.should == '(stdin)'
30
+ foo.line.should == 8
31
+ bar = Registry.at('Foo::BAR')
32
+ bar.type.should == :constant
33
+ bar.docstring.should == 'Foo bar!'
34
+ bar.file.should == '(stdin)'
35
+ bar.line.should == 9
36
+ bar.value.should == 'ID2SYM(101)'
37
+ end
38
+
39
+ it "should use comment attached to declaration as fallback" do
40
+ parse_init <<-eof
41
+ mFoo = rb_define_module("Foo");
42
+ rb_define_const(mFoo, "FOO", ID2SYM(100)); // foobar!
43
+ eof
44
+ foo = Registry.at('Foo::FOO')
45
+ foo.value.should == 'ID2SYM(100)'
46
+ foo.docstring.should == 'foobar!'
47
+ end
48
+
49
+ it "should allow the form VALUE: DOCSTRING to document value" do
50
+ parse_init <<-eof
51
+ mFoo = rb_define_module("Foo");
52
+ rb_define_const(mFoo, "FOO", ID2SYM(100)); // 100: foobar!
53
+ eof
54
+ foo = Registry.at('Foo::FOO')
55
+ foo.value.should == '100'
56
+ foo.docstring.should == 'foobar!'
57
+ end
58
+
59
+ it "should allow escaping of backslashes in VALUE: DOCSTRING syntax" do
60
+ parse_init <<-eof
61
+ mFoo = rb_define_module("Foo");
62
+ rb_define_const(mFoo, "FOO", ID2SYM(100)); // 100\\:x\\:y: foobar:x!
63
+ eof
64
+ foo = Registry.at('Foo::FOO')
65
+ foo.value.should == '100:x:y'
66
+ foo.docstring.should == 'foobar:x!'
67
+ end
68
+ end
@@ -0,0 +1,47 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe YARD::Handlers::C::InitHandler do
4
+ it "should add documentation in Init_ClassName() to ClassName" do
5
+ parse(<<-eof)
6
+ // Bar!
7
+ void Init_A() {
8
+ rb_cA = rb_define_class("A", rb_cObject);
9
+ }
10
+ eof
11
+ Registry.at('A').docstring.should == 'Bar!'
12
+ end
13
+
14
+ it "should not add documentation if ClassName is not created in Init" do
15
+ parse(<<-eof)
16
+ // Bar!
17
+ void Init_A() {
18
+ }
19
+ eof
20
+ Registry.at('A').should be_nil
21
+ end
22
+
23
+ it "should not overwrite override comment" do
24
+ parse(<<-eof)
25
+ /* Document-class: A
26
+ * Foo!
27
+ */
28
+
29
+ // Bar!
30
+ void Init_A() {
31
+ rb_cA = rb_define_class("A", rb_cObject);
32
+ }
33
+ eof
34
+ Registry.at('A').docstring.should == 'Foo!'
35
+ end
36
+
37
+ it "should check non-Init methods for declarations too" do
38
+ parse(<<-eof)
39
+ void foo(int x, int y, char *name) {
40
+ rb_cB = rb_define_class("B", rb_cObject);
41
+ rb_define_method(rb_cB, "foo", foo_impl, 0);
42
+ }
43
+ eof
44
+ Registry.at('B').should be_a(CodeObjects::ClassObject)
45
+ Registry.at('B#foo').should be_a(CodeObjects::MethodObject)
46
+ end
47
+ end
@@ -0,0 +1,229 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe YARD::Handlers::C::MethodHandler do
4
+ it "should register methods" do
5
+ parse_init <<-eof
6
+ mFoo = rb_define_module("Foo");
7
+ rb_define_method(mFoo, "bar", bar, 0);
8
+ eof
9
+ Registry.at('Foo#bar').should_not be_nil
10
+ Registry.at('Foo#bar').visibility.should == :public
11
+ end
12
+
13
+ it "should register private methods" do
14
+ parse_init <<-eof
15
+ mFoo = rb_define_module("Foo");
16
+ rb_define_private_method(mFoo, "bar", bar, 0);
17
+ eof
18
+ Registry.at('Foo#bar').should_not be_nil
19
+ Registry.at('Foo#bar').visibility.should == :private
20
+ end
21
+
22
+ it "should register singleton methods" do
23
+ parse_init <<-eof
24
+ mFoo = rb_define_module("Foo");
25
+ rb_define_singleton_method(mFoo, "bar", bar, 0);
26
+ eof
27
+ Registry.at('Foo.bar').should_not be_nil
28
+ Registry.at('Foo.bar').visibility.should == :public
29
+ end
30
+
31
+ it "should register module functions" do
32
+ parse <<-eof
33
+ /* DOCSTRING
34
+ * @return [String] foo!
35
+ */
36
+ static VALUE bar(VALUE self) { x(); y(); z(); }
37
+
38
+ void Init_Foo() {
39
+ mFoo = rb_define_module("Foo");
40
+ rb_define_module_function(mFoo, "bar", bar, 0);
41
+ }
42
+ eof
43
+ bar_c = Registry.at('Foo.bar')
44
+ bar_i = Registry.at('Foo#bar')
45
+ bar_c.should be_module_function
46
+ bar_c.visibility.should == :public
47
+ bar_c.docstring.should == "DOCSTRING"
48
+ bar_c.tag(:return).object.should == bar_c
49
+ bar_c.source.should == "static VALUE bar(VALUE self) { x(); y(); z(); }"
50
+ bar_i.should_not be_module_function
51
+ bar_i.visibility.should == :private
52
+ bar_i.docstring.should == "DOCSTRING"
53
+ bar_i.tag(:return).object.should == bar_i
54
+ bar_i.source.should == bar_c.source
55
+ end
56
+
57
+ it "should register global functions into Kernel" do
58
+ parse_init 'rb_define_global_function("bar", bar, 0);'
59
+ Registry.at('Kernel#bar').should_not be_nil
60
+ end
61
+
62
+ it "should look for symbol containing method source" do
63
+ parse <<-eof
64
+ static VALUE foo(VALUE self) { x(); y(); z(); }
65
+ VALUE bar() { a(); b(); c(); }
66
+ void Init_Foo() {
67
+ mFoo = rb_define_module("Foo");
68
+ rb_define_method(mFoo, "foo", foo, 0);
69
+ rb_define_method(mFoo, "bar", bar, 0);
70
+ }
71
+ eof
72
+ foo = Registry.at('Foo#foo')
73
+ bar = Registry.at('Foo#bar')
74
+ foo.source.should == "static VALUE foo(VALUE self) { x(); y(); z(); }"
75
+ foo.file.should == '(stdin)'
76
+ foo.line.should == 1
77
+ bar.source.should == "VALUE bar() { a(); b(); c(); }"
78
+ bar.file.should == '(stdin)'
79
+ bar.line.should == 2
80
+ end
81
+
82
+ it "should find docstrings attached to method symbols" do
83
+ parse <<-eof
84
+ /* DOCSTRING */
85
+ static VALUE foo(VALUE self) { x(); y(); z(); }
86
+ void Init_Foo() {
87
+ mFoo = rb_define_module("Foo");
88
+ rb_define_method(mFoo, "foo", foo, 0);
89
+ }
90
+ eof
91
+ foo = Registry.at('Foo#foo')
92
+ foo.docstring.should == 'DOCSTRING'
93
+ end
94
+
95
+ it "should use declaration comments as docstring if there are no others" do
96
+ parse <<-eof
97
+ static VALUE foo(VALUE self) { x(); y(); z(); }
98
+ void Init_Foo() {
99
+ mFoo = rb_define_module("Foo");
100
+ /* DOCSTRING */
101
+ rb_define_method(mFoo, "foo", foo, 0);
102
+ // DOCSTRING!
103
+ rb_define_method(mFoo, "bar", bar, 0);
104
+ }
105
+ eof
106
+ foo = Registry.at('Foo#foo')
107
+ foo.docstring.should == 'DOCSTRING'
108
+ bar = Registry.at('Foo#bar')
109
+ bar.docstring.should == 'DOCSTRING!'
110
+ end
111
+
112
+ it "should look for symbols in other file" do
113
+ other = <<-eof
114
+ /* DOCSTRING! */
115
+ static VALUE foo() { x(); }
116
+ eof
117
+ File.should_receive(:read).with('other.c').and_return(other)
118
+ parse <<-eof
119
+ void Init_Foo() {
120
+ mFoo = rb_define_module("Foo");
121
+ rb_define_method(mFoo, "foo", foo, 0); // in other.c
122
+ }
123
+ eof
124
+ foo = Registry.at('Foo#foo')
125
+ foo.docstring.should == 'DOCSTRING!'
126
+ foo.file.should == 'other.c'
127
+ foo.line.should == 2
128
+ foo.source.should == 'static VALUE foo() { x(); }'
129
+ end
130
+
131
+ it "should allow extra file to include /'s and other filename characters" do
132
+ File.should_receive(:read).at_least(1).times.with('ext/a-file.c').and_return(<<-eof)
133
+ /* FOO */
134
+ VALUE foo(VALUE x) { int value = x; }
135
+
136
+ /* BAR */
137
+ VALUE bar(VALUE x) { int value = x; }
138
+ eof
139
+ parse_init <<-eof
140
+ rb_define_method(rb_cFoo, "foo", foo, 1); /* in ext/a-file.c */
141
+ rb_define_global_function("bar", bar, 1); /* in ext/a-file.c */
142
+ eof
143
+ Registry.at('Foo#foo').docstring.should == 'FOO'
144
+ Registry.at('Kernel#bar').docstring.should == 'BAR'
145
+ end
146
+
147
+ it "should warn if other file can't be found" do
148
+ log.should_receive(:warn).with(/Missing source file `other.c' when parsing Foo#foo/)
149
+ parse <<-eof
150
+ void Init_Foo() {
151
+ mFoo = rb_define_module("Foo");
152
+ rb_define_method(mFoo, "foo", foo, 0); // in other.c
153
+ }
154
+ eof
155
+ end
156
+
157
+ it "should look at override comments for docstring" do
158
+ parse <<-eof
159
+ /* Document-method: Foo::foo
160
+ * Document-method: new
161
+ * Document-method: Foo::Bar#baz
162
+ * Foo bar!
163
+ */
164
+
165
+ // init comments
166
+ void Init_Foo() {
167
+ mFoo = rb_define_module("Foo");
168
+ rb_define_method(mFoo, "foo", foo, 0);
169
+ rb_define_method(mFoo, "initialize", foo, 0);
170
+ mBar = rb_define_module_under(mFoo, "Bar");
171
+ rb_define_method(mBar, "baz", foo, 0);
172
+ }
173
+ eof
174
+ Registry.at('Foo#foo').docstring.should == 'Foo bar!'
175
+ Registry.at('Foo#initialize').docstring.should == 'Foo bar!'
176
+ Registry.at('Foo::Bar#baz').docstring.should == 'Foo bar!'
177
+ end
178
+
179
+ it "should look at overrides in other files" do
180
+ other = <<-eof
181
+ /* Document-method: Foo::foo
182
+ * Document-method: new
183
+ * Document-method: Foo::Bar#baz
184
+ * Foo bar!
185
+ */
186
+ eof
187
+ File.should_receive(:read).with('foo/bar/other.c').and_return(other)
188
+ src = <<-eof
189
+ void Init_Foo() {
190
+ mFoo = rb_define_module("Foo");
191
+ rb_define_method(mFoo, "foo", foo, 0); // in foo/bar/other.c
192
+ rb_define_method(mFoo, "initialize", foo, 0); // in foo/bar/other.c
193
+ mBar = rb_define_module_under(mFoo, "Bar"); // in foo/bar/other.c
194
+ rb_define_method(mBar, "baz", foo, 0); // in foo/bar/other.c
195
+ }
196
+ eof
197
+ parse(src, 'foo/bar/baz/init.c')
198
+ Registry.at('Foo#foo').docstring.should == 'Foo bar!'
199
+ Registry.at('Foo#initialize').docstring.should == 'Foo bar!'
200
+ Registry.at('Foo::Bar#baz').docstring.should == 'Foo bar!'
201
+ end
202
+
203
+ it "should add return tag on methods ending in '?'" do
204
+ parse <<-eof
205
+ /* DOCSTRING */
206
+ static VALUE foo(VALUE self) { x(); y(); z(); }
207
+ void Init_Foo() {
208
+ mFoo = rb_define_module("Foo");
209
+ rb_define_method(mFoo, "foo?", foo, 0);
210
+ }
211
+ eof
212
+ foo = Registry.at('Foo#foo?')
213
+ foo.docstring.should == 'DOCSTRING'
214
+ foo.tag(:return).types.should == ['Boolean']
215
+ end
216
+
217
+ it "should not add return tag if return tags exist" do
218
+ parse <<-eof
219
+ // @return [String] foo
220
+ static VALUE foo(VALUE self) { x(); y(); z(); }
221
+ void Init_Foo() {
222
+ mFoo = rb_define_module("Foo");
223
+ rb_define_method(mFoo, "foo?", foo, 0);
224
+ }
225
+ eof
226
+ foo = Registry.at('Foo#foo?')
227
+ foo.tag(:return).types.should == ['String']
228
+ end
229
+ end