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,27 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe YARD::Handlers::C::MixinHandler do
4
+ it "should add includes to modules or classes" do
5
+ parse_init <<-eof
6
+ mFoo = rb_define_module("Foo");
7
+ cBar = rb_define_class("Bar", rb_cObject);
8
+ mBaz = rb_define_module("Baz");
9
+ rb_include_module(cBar, mFoo);
10
+ rb_include_module(mBaz, mFoo);
11
+ eof
12
+ foo = Registry.at('Foo')
13
+ bar = Registry.at('Bar')
14
+ baz = Registry.at('Baz')
15
+ bar.mixins(:instance).should == [foo]
16
+ baz.mixins(:instance).should == [foo]
17
+ end
18
+
19
+ it "should add include as proxy if symbol lookup fails" do
20
+ parse_init <<-eof
21
+ mFoo = rb_define_module("Foo");
22
+ rb_include_module(mFoo, mXYZ);
23
+ eof
24
+ foo = Registry.at('Foo')
25
+ foo.mixins(:instance).should == [P('XYZ')]
26
+ end
27
+ end
@@ -0,0 +1,38 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe YARD::Handlers::C::ClassHandler do
4
+ it "should register modules" do
5
+ parse_init 'mFoo = rb_define_module("Foo");'
6
+ Registry.at('Foo').type.should == :module
7
+ end
8
+
9
+ it "should register classes under namespaces" do
10
+ parse_init 'mFoo = rb_define_module_under(mBar, "Foo");'
11
+ Registry.at('Bar::Foo').type.should == :module
12
+ end
13
+
14
+ it "should remember symbol defined with class" do
15
+ parse_init(<<-eof)
16
+ cXYZ = rb_define_module("Foo");
17
+ rb_define_method(cXYZ, "bar", bar, 0);
18
+ eof
19
+ Registry.at('Foo').type.should == :module
20
+ Registry.at('Foo#bar').should_not be_nil
21
+ end
22
+
23
+ it "should not associate declaration comments as module docstring" do
24
+ parse_init(<<-eof)
25
+ /* Docstring! */
26
+ mFoo = rb_define_module("Foo");
27
+ eof
28
+ Registry.at('Foo').docstring.should be_blank
29
+ end
30
+
31
+ it "should associate a file with the declaration" do
32
+ parse_init(<<-eof)
33
+ mFoo = rb_define_module("Foo");
34
+ eof
35
+ Registry.at('Foo').file.should == '(stdin)'
36
+ Registry.at('Foo').line.should == 2
37
+ end
38
+ end
@@ -0,0 +1,46 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe YARD::Handlers::C::OverrideCommentHandler do
4
+ [:class, :module].each do |type|
5
+ it "should handle Document-#{type}" do
6
+ parse(<<-eof)
7
+ void something;
8
+ /* Document-#{type}: A
9
+ * Foo bar baz
10
+ */
11
+ void
12
+ eof
13
+ Registry.at('A').type.should == type
14
+ Registry.at('A').docstring.should == 'Foo bar baz'
15
+ Registry.at('A').file.should == '(stdin)'
16
+ Registry.at('A').line.should == 2
17
+ end
18
+ end
19
+
20
+ it "should handle multiple class/module combinations" do
21
+ parse(<<-eof)
22
+ /* Document-class: A
23
+ * Document-class: B
24
+ * Document-module: C
25
+ * Foo bar baz
26
+ */
27
+ eof
28
+ Registry.at('A').docstring.should == 'Foo bar baz'
29
+ Registry.at('B').docstring.should == 'Foo bar baz'
30
+ Registry.at('C').docstring.should == 'Foo bar baz'
31
+ Registry.at('C').type == :module
32
+ end
33
+
34
+ it "should handle Document-class with inheritance" do
35
+ parse(<<-eof)
36
+ /* Document-class: A < B
37
+ * Foo bar baz
38
+ */
39
+ void
40
+ eof
41
+ obj = Registry.at('A')
42
+ obj.type.should == :class
43
+ obj.docstring.should == 'Foo bar baz'
44
+ obj.superclass.should == P('B')
45
+ end
46
+ end
@@ -0,0 +1,35 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe YARD::Handlers::C::PathHandler do
4
+ it 'should track variable names defined under namespaces' do
5
+ parse_init <<-eof
6
+ mFoo = rb_define_module("Foo");
7
+ cBar = rb_define_class_under(mFoo, "Bar", rb_cObject);
8
+ rb_define_method(cBar, "foo", foo, 1);
9
+ eof
10
+ Registry.at('Foo::Bar').should_not be_nil
11
+ Registry.at('Foo::Bar#foo').should_not be_nil
12
+ end
13
+
14
+ it 'should track variable names defined under namespaces' do
15
+ parse_init <<-eof
16
+ mFoo = rb_define_module("Foo");
17
+ cBar = rb_define_class_under(mFoo, "Bar", rb_cObject);
18
+ mBaz = rb_define_module_under(cBar, "Baz");
19
+ rb_define_method(mBaz, "foo", foo, 1);
20
+ eof
21
+ Registry.at('Foo::Bar::Baz').should_not be_nil
22
+ Registry.at('Foo::Bar::Baz#foo').should_not be_nil
23
+ end
24
+
25
+ it "should handle rb_path2class() calls" do
26
+ parse_init <<-eof
27
+ somePath = rb_path2class("Foo::Bar::Baz")
28
+ mFoo = rb_define_module("Foo");
29
+ cBar = rb_define_class_under(mFoo, "Bar", rb_cObject);
30
+ mBaz = rb_define_module_under(cBar, "Baz");
31
+ rb_define_method(somePath, "foo", foo, 1);
32
+ eof
33
+ Registry.at('Foo::Bar::Baz#foo').should_not be_nil
34
+ end
35
+ end
@@ -0,0 +1,13 @@
1
+ require File.dirname(__FILE__) + "/../spec_helper"
2
+
3
+ def parse(src, file = '(stdin)')
4
+ YARD::Registry.clear
5
+ parser = YARD::Parser::SourceParser.new(:c)
6
+ parser.file = file
7
+ parser.parse(StringIO.new(src))
8
+ end
9
+
10
+ def parse_init(src)
11
+ YARD::Registry.clear
12
+ YARD.parse_string("void Init_Foo() {\n#{src}\n}", :c)
13
+ end
@@ -0,0 +1,15 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe YARD::Handlers::C::StructHandler do
4
+ after { Registry.clear }
5
+
6
+ it "should handle Struct class definitions" do
7
+ parse_init <<-eof
8
+ rb_cRange = rb_struct_define_without_accessor(
9
+ "Range", rb_cFoo, range_alloc,
10
+ "begin", "end", "excl", NULL);
11
+ eof
12
+ Registry.at('Range').type.should == :class
13
+ Registry.at('Range').superclass.should == P(:Foo)
14
+ end
15
+ end
@@ -0,0 +1,67 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}ClassConditionHandler" do
4
+ before(:all) { parse_file :class_condition_handler_001, __FILE__ }
5
+
6
+ def verify_method(*names)
7
+ names.each {|name| Registry.at("A##{name}").should_not be_nil }
8
+ names.each {|name| Registry.at("A##{name}not").should be_nil }
9
+ end
10
+
11
+ def no_undoc_error(code)
12
+ lambda { StubbedSourceParser.parse_string(code) }.should_not raise_error
13
+ end
14
+
15
+ it "should parse all unless blocks for complex conditions" do
16
+ verify_method :g
17
+ end
18
+
19
+ it "should not parse conditionals inside methods" do
20
+ verify_method :h
21
+ end
22
+
23
+ it "should only parse then block if condition is literal value `true`" do
24
+ verify_method :p
25
+ end
26
+
27
+ it "should only parse then block if condition is literal integer != 0" do
28
+ verify_method :o
29
+ end
30
+
31
+ it "should invert block to parse for literal condition if it's an unless block" do
32
+ verify_method :e
33
+ end
34
+
35
+ it "should handle conditions such as 'defined? VALUE'" do
36
+ verify_method :j, :k
37
+ end
38
+
39
+ it "should parse all if/elsif blocks for complex conditions" do
40
+ verify_method :a, :b, :c, :d
41
+ end
42
+
43
+ it "should only parse else block if condition is literal value `false`" do
44
+ verify_method :q
45
+ end
46
+
47
+ it "should only parse else block if condition is literal integer == 0" do
48
+ verify_method :n
49
+ end
50
+
51
+ it "should maintain visibility and scope state inside condition" do
52
+ Registry.at('A#m').visibility.should == :private
53
+ Registry.at('A#mnot').visibility.should == :private
54
+ end
55
+
56
+ it "should not fail on complex conditions" do
57
+ log.should_not_receive(:warn)
58
+ log.should_not_receive(:error)
59
+ no_undoc_error "if defined?(A) && defined?(B); puts 'hi' end"
60
+ no_undoc_error(<<-eof)
61
+ (<<-TEST) unless defined?(ABCD_MODEL_TEST)
62
+ 'String'
63
+ TEST
64
+ eof
65
+ no_undoc_error "if caller.none? { |l| l =~ %r{lib/rails/generators\\.rb:(\\d+):in `lookup!'$} }; end"
66
+ end
67
+ end
@@ -0,0 +1,246 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}ClassHandler" do
4
+ before(:all) { parse_file :class_handler_001, __FILE__ }
5
+
6
+ it "should parse a class block with docstring" do
7
+ P("A").docstring.should == "Docstring"
8
+ end
9
+
10
+ it "should handle complex class names" do
11
+ P("A::B::C").should_not == nil
12
+ end
13
+
14
+ it "should handle the subclassing syntax" do
15
+ P("A::B::C").superclass.should == P(:String)
16
+ P("A::X").superclass.should == Registry.at("A::B::C")
17
+ end
18
+
19
+ it "should interpret class << self as a class level block" do
20
+ P("A.classmethod1").should_not == nil
21
+ end
22
+
23
+ it "should interpret class << ClassName as a class level block in ClassName's namespace" do
24
+ P("A::B::C.Hello").should be_instance_of(CodeObjects::MethodObject)
25
+ end
26
+
27
+ it "should make visibility public when parsing a block" do
28
+ P("A::B::C#method1").visibility.should == :public
29
+ end
30
+
31
+ it "should set superclass type to :class if it is a Proxy" do
32
+ P("A::B::C").superclass.type.should == :class
33
+ end
34
+
35
+ it "should look for a superclass before creating the class if it shares the same name" do
36
+ P('B::A').superclass.should == P('A')
37
+ end
38
+
39
+ it "should handle class definitions in the form ::ClassName" do
40
+ Registry.at("MyRootClass").should_not be_nil
41
+ end
42
+
43
+ it "should handle superclass as a constant-style method (camping style < R /path/)" do
44
+ P('Test1').superclass.should == P(:R)
45
+ P('Test2').superclass.should == P(:R)
46
+ P('Test6').superclass.should == P(:NotDelegateClass)
47
+ end
48
+
49
+ it "should handle superclass with OStruct.new or Struct.new syntax (superclass should be OStruct/Struct)" do
50
+ P('Test3').superclass.should == P(:Struct)
51
+ P('Test4').superclass.should == P(:OStruct)
52
+ end
53
+
54
+ it "should handle DelegateClass(CLASSNAME) superclass syntax" do
55
+ P('Test5').superclass.should == P(:Array)
56
+ end
57
+
58
+ it "should handle a superclass of the same name in the form ::ClassName" do
59
+ P('Q::Logger').superclass.should == P(:Logger)
60
+ P('Q::Foo').superclass.should_not == P('Q::Logger')
61
+ end
62
+
63
+ ["CallMethod('test')", "VSD^#}}", 'not.aclass', 'self'].each do |klass|
64
+ it "should raise an UndocumentableError for invalid class '#{klass}'" do
65
+ with_parser(:ruby18) { undoc_error "class #{klass}; end" }
66
+ end
67
+ end
68
+
69
+ ['@@INVALID', 'hi', '$MYCLASS', 'AnotherClass.new'].each do |klass|
70
+ it "should raise an UndocumentableError for invalid superclass '#{klass}' but it should create the class." do
71
+ YARD::CodeObjects::ClassObject.should_receive(:new).with(Registry.root, 'A')
72
+ with_parser(:ruby18) { undoc_error "class A < #{klass}; end" }
73
+ Registry.at('A').superclass.should == P(:Object)
74
+ end
75
+ end
76
+
77
+ ['not.aclass', 'self', 'AnotherClass.new'].each do |klass|
78
+ it "should raise an UndocumentableError if the constant class reference 'class << SomeConstant' does not point to a valid class name" do
79
+ with_parser(:ruby18) do
80
+ undoc_error <<-eof
81
+ CONST = #{klass}
82
+ class << CONST; end
83
+ eof
84
+ end
85
+ Registry.at(klass).should be_nil
86
+ end
87
+ end
88
+
89
+ it "should document 'class << SomeConstant' by using SomeConstant's value as a reference to the real class name" do
90
+ Registry.at('String.classmethod').should_not be_nil
91
+ end
92
+
93
+ it "should allow class << SomeRubyClass to create the class if it does not exist" do
94
+ Registry.at('Symbol.toString').should_not be_nil
95
+ end
96
+
97
+ it "should document 'class Exception' without running into superclass issues" do
98
+ Parser::SourceParser.parse_string <<-eof
99
+ class Exception
100
+ end
101
+ eof
102
+ Registry.at(:Exception).should_not be_nil
103
+ end
104
+
105
+ it "should document 'class RT < XX::RT' with proper superclass even if XX::RT is a proxy" do
106
+ Registry.at(:RT).should_not be_nil
107
+ Registry.at(:RT).superclass.should == P('XX::RT')
108
+ end
109
+
110
+ it "should not overwrite docstring with an empty one" do
111
+ Registry.at(:Zebra).docstring.should == "Docstring 2"
112
+ end
113
+
114
+ it "should turn 'class Const < Struct.new(:sym)' into class Const with attr :sym" do
115
+ obj = Registry.at("Point")
116
+ obj.should be_kind_of(CodeObjects::ClassObject)
117
+ attrs = obj.attributes[:instance]
118
+ [:x, :y, :z].each do |key|
119
+ attrs.should have_key(key)
120
+ attrs[key][:read].should_not be_nil
121
+ attrs[key][:write].should_not be_nil
122
+ end
123
+ end
124
+
125
+ it "should turn 'class Const < Struct.new('Name', :sym)' into class Const with attr :sym" do
126
+ obj = Registry.at("AnotherPoint")
127
+ obj.should be_kind_of(CodeObjects::ClassObject)
128
+ attrs = obj.attributes[:instance]
129
+ [:a, :b, :c].each do |key|
130
+ attrs.should have_key(key)
131
+ attrs[key][:read].should_not be_nil
132
+ attrs[key][:write].should_not be_nil
133
+ end
134
+
135
+ Registry.at("XPoint").should be_nil
136
+ end
137
+
138
+ it "should create a Struct::Name class when class Const < Struct.new('Name', :sym) is found" do
139
+ obj = Registry.at("Struct::XPoint")
140
+ obj.should_not be_nil
141
+ end
142
+
143
+ it "should attach attribtues to the generated Struct::Name class when Struct.new('Name') is used" do
144
+ obj = Registry.at("Struct::XPoint")
145
+ attrs = obj.attributes[:instance]
146
+ [:a, :b, :c].each do |key|
147
+ attrs.should have_key(key)
148
+ attrs[key][:read].should_not be_nil
149
+ attrs[key][:write].should_not be_nil
150
+ end
151
+ end
152
+
153
+ it "should use @attr to set attribute descriptions on Struct subclasses" do
154
+ obj = Registry.at("DoccedStruct#input")
155
+ obj.docstring.should == "the input stream"
156
+ end
157
+
158
+ it "should use @attr to set attribute types on Struct subclasses" do
159
+ obj = Registry.at("DoccedStruct#someproc")
160
+ obj.should_not be_nil
161
+ obj.tag(:return).should_not be_nil
162
+ obj.tag(:return).types.should == ["Proc", "#call"]
163
+ end
164
+
165
+ it "should default types unspecified by @attr to Object on Struct subclasses" do
166
+ obj = Registry.at("DoccedStruct#mode")
167
+ obj.should_not be_nil
168
+ obj.tag(:return).should_not be_nil
169
+ obj.tag(:return).types.should == ["Object"]
170
+ end
171
+
172
+ it "should create parameters for writers of Struct subclass's attributes" do
173
+ obj = Registry.at("DoccedStruct#input=")
174
+ obj.tags(:param).size.should == 1
175
+ obj.tag(:param).types.should == ["IO"]
176
+ end
177
+
178
+ ["SemiDoccedStruct", "NotAStruct"].each do |struct|
179
+ describe("Attributes on a " + (struct == "NotAStruct" ? "class" : "struct")) do
180
+ it "defines both readers and writers when @attr is used on Structs" do
181
+ obj = Registry.at(struct)
182
+ attrs = obj.attributes[:instance]
183
+ attrs[:first][:read].should_not be_nil
184
+ attrs[:first][:write].should_not be_nil
185
+ end
186
+
187
+ it "defines only a reader when only @attr_reader is used on Structs" do
188
+ obj = Registry.at(struct)
189
+ attrs = obj.attributes[:instance]
190
+ attrs[:second][:read].should_not be_nil
191
+ attrs[:second][:write].should be_nil
192
+ end
193
+
194
+ it "defines only a writer when only @attr_writer is used on Structs" do
195
+ obj = Registry.at(struct)
196
+ attrs = obj.attributes[:instance]
197
+ attrs[:third][:read].should be_nil
198
+ attrs[:third][:write].should_not be_nil
199
+ end
200
+
201
+ it "defines a reader with correct return types when @attr_reader is used on Structs" do
202
+ obj = Registry.at("#{struct}#second")
203
+ obj.tag(:return).types.should == ["Fixnum"]
204
+ end
205
+
206
+ it "defines a writer with correct parameter types when @attr_writer is used on Structs" do
207
+ obj = Registry.at("#{struct}#third=")
208
+ obj.tag(:param).types.should == ["Array"]
209
+ end
210
+
211
+ it "defines a reader and a writer when both @attr_reader and @attr_writer are used" do
212
+ obj = Registry.at(struct)
213
+ attrs = obj.attributes[:instance]
214
+ attrs[:fourth][:read].should_not be_nil
215
+ attrs[:fourth][:write].should_not be_nil
216
+ end
217
+
218
+ it "uses @attr_reader for the getter when both @attr_reader and @attr_writer are given" do
219
+ obj = Registry.at("#{struct}#fourth")
220
+ obj.tag(:return).types.should == ["#read"]
221
+ end
222
+
223
+ it "uses @attr_writer for the setter when both @attr_reader and @attr_writer are given" do
224
+ obj = Registry.at("#{struct}#fourth=")
225
+ obj.tag(:param).types.should == ["IO"]
226
+ end
227
+
228
+ it "extracts text from @attr_reader" do
229
+ Registry.at("#{struct}#fourth").docstring.should == "returns a proc that reads"
230
+ end
231
+
232
+ it "extracts text from @attr_writer" do
233
+ Registry.at("#{struct}#fourth=").docstring.should == "sets the proc that writes stuff"
234
+ end
235
+ end
236
+ end
237
+
238
+ it "should inherit from a regular struct" do
239
+ Registry.at('RegularStruct').superclass.should == P(:Struct)
240
+ Registry.at('RegularStruct2').superclass.should == P(:Struct)
241
+ end
242
+
243
+ it "should handle inheritance from 'self'" do
244
+ Registry.at('Outer1::Inner1').superclass.should == Registry.at('Outer1')
245
+ end
246
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}ClassVariableHandler" do
4
+ before(:all) { parse_file :class_variable_handler_001, __FILE__ }
5
+
6
+ it "should not parse class variables inside methods" do
7
+ obj = Registry.at("A::B::@@somevar")
8
+ obj.source.should == "@@somevar = \"hello\""
9
+ obj.value.should == '"hello"'
10
+ end
11
+ end
@@ -0,0 +1,64 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}ConstantHandler" do
4
+ before(:all) { parse_file :constant_handler_001, __FILE__ }
5
+
6
+ it "should not parse constants inside methods" do
7
+ Registry.at("A::B::SOMECONSTANT").source.should == "SOMECONSTANT= \"hello\""
8
+ end
9
+
10
+ it "should only parse valid constants" do
11
+ Registry.at("A::B::notaconstant").should be_nil
12
+ end
13
+
14
+ it "should maintain newlines" do
15
+ Registry.at("A::B::MYCONSTANT").value.gsub("\r", "").should == "A +\nB +\nC +\nD"
16
+ end
17
+
18
+ it "should turn Const = Struct.new(:sym) into class Const with attr :sym" do
19
+ obj = Registry.at("MyClass")
20
+ obj.should be_kind_of(CodeObjects::ClassObject)
21
+ attrs = obj.attributes[:instance]
22
+ [:a, :b, :c].each do |key|
23
+ attrs.should have_key(key)
24
+ attrs[key][:read].should_not be_nil
25
+ attrs[key][:write].should_not be_nil
26
+ end
27
+ end
28
+
29
+ it "should turn Const = Struct.new('Name', :sym) into class Const with attr :sym" do
30
+ obj = Registry.at("NotMyClass")
31
+ obj.should be_kind_of(CodeObjects::ClassObject)
32
+ attrs = obj.attributes[:instance]
33
+ [:b, :c].each do |key|
34
+ attrs.should have_key(key)
35
+ attrs[key][:read].should_not be_nil
36
+ attrs[key][:write].should_not be_nil
37
+ end
38
+
39
+ Registry.at("NotMyClass2").should be_nil
40
+ end
41
+
42
+ it "should turn Const = Struct.new into empty struct" do
43
+ obj = Registry.at("MyEmptyStruct")
44
+ obj.should_not be_nil
45
+ obj.attributes[:instance].should be_empty
46
+ end
47
+
48
+ it "should maintain docstrings on structs defined via constants" do
49
+ obj = Registry.at("DocstringStruct")
50
+ obj.should_not be_nil
51
+ obj.docstring.should == "A crazy struct."
52
+ obj.attributes[:instance].should_not be_empty
53
+ a1 = Registry.at("DocstringStruct#bar")
54
+ a2 = Registry.at("DocstringStruct#baz")
55
+ a1.docstring.should == "An attr"
56
+ a1.tag(:return).types.should == ["String"]
57
+ a2.docstring.should == "Another attr"
58
+ a2.tag(:return).types.should == ["Number"]
59
+ end
60
+
61
+ it "should raise undocumentable error in 1.9 parser for Struct.new assignment to non-const" do
62
+ undoc_error "nonconst = Struct.new"
63
+ end unless LEGACY_PARSER
64
+ end