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,175 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe YARD::CodeObjects::MethodObject do
4
+ before do
5
+ Registry.clear
6
+ @yard = ModuleObject.new(:root, :YARD)
7
+ end
8
+
9
+ it "should have a path of testing for an instance method in the root" do
10
+ meth = MethodObject.new(:root, :testing)
11
+ meth.path.should == "#testing"
12
+ end
13
+
14
+ it "should have a path of YARD#testing for an instance method in YARD" do
15
+ meth = MethodObject.new(@yard, :testing)
16
+ meth.path.should == "YARD#testing"
17
+ end
18
+
19
+ it "should have a path of YARD.testing for a class method in YARD" do
20
+ meth = MethodObject.new(@yard, :testing, :class)
21
+ meth.path.should == "YARD.testing"
22
+ end
23
+
24
+ it "should have a path of ::testing (note the ::) for a class method added to root namespace" do
25
+ meth = MethodObject.new(:root, :testing, :class)
26
+ meth.path.should == "::testing"
27
+ end
28
+
29
+ it "should exist in the registry after successful creation" do
30
+ obj = MethodObject.new(@yard, :something, :class)
31
+ Registry.at("YARD.something").should_not be_nil
32
+ Registry.at("YARD#something").should be_nil
33
+ Registry.at("YARD::something").should be_nil
34
+ obj = MethodObject.new(@yard, :somethingelse)
35
+ Registry.at("YARD#somethingelse").should_not be_nil
36
+ end
37
+
38
+ it "should allow #scope to be changed after creation" do
39
+ obj = MethodObject.new(@yard, :something, :class)
40
+ Registry.at("YARD.something").should_not be_nil
41
+ obj.scope = :instance
42
+ Registry.at("YARD.something").should be_nil
43
+ Registry.at("YARD#something").should_not be_nil
44
+ end
45
+
46
+ it "should create object in :class scope if scope is :module" do
47
+ obj = MethodObject.new(@yard, :module_func, :module)
48
+ obj.scope.should == :class
49
+ obj.visibility.should == :public
50
+ Registry.at('YARD.module_func').should_not be_nil
51
+ end
52
+
53
+ it "should create second private instance method if scope is :module" do
54
+ MethodObject.new(@yard, :module_func, :module)
55
+ obj = Registry.at('YARD#module_func')
56
+ obj.should_not be_nil
57
+ obj.visibility.should == :private
58
+ obj.scope.should == :instance
59
+ end
60
+
61
+ it "should yield block to second method if scope is :module" do
62
+ MethodObject.new(@yard, :module_func, :module) do |o|
63
+ o.docstring = 'foo'
64
+ end
65
+ Registry.at('YARD.module_func').docstring.should == 'foo'
66
+ Registry.at('YARD#module_func').docstring.should == 'foo'
67
+ end
68
+
69
+ describe '#name' do
70
+ it "should show a prefix for an instance method when prefix=true" do
71
+ obj = MethodObject.new(nil, :something)
72
+ obj.name(true).should == "#something"
73
+ end
74
+
75
+ it "should never show a prefix for a class method" do
76
+ obj = MethodObject.new(nil, :something, :class)
77
+ obj.name.should == :"something"
78
+ obj.name(true).should == "something"
79
+ end
80
+ end
81
+
82
+ describe '#is_attribute?' do
83
+ it "should only return true if attribute is set in namespace for read/write" do
84
+ obj = MethodObject.new(@yard, :foo)
85
+ @yard.attributes[:instance][:foo] = {:read => obj, :write => nil}
86
+ obj.is_attribute?.should be_true
87
+ MethodObject.new(@yard, :foo=).is_attribute?.should be_false
88
+ end
89
+ end
90
+
91
+ describe '#attr_info' do
92
+ it "should return attribute info if namespace is available" do
93
+ obj = MethodObject.new(@yard, :foo)
94
+ @yard.attributes[:instance][:foo] = {:read => obj, :write => nil}
95
+ obj.attr_info.should == @yard.attributes[:instance][:foo]
96
+ end
97
+
98
+ it "should return nil if namespace is proxy" do
99
+ obj = MethodObject.new(P(:ProxyClass), :foo)
100
+ MethodObject.new(@yard, :foo).attr_info.should == nil
101
+ end
102
+
103
+ it "should return nil if meth is not an attribute" do
104
+ MethodObject.new(@yard, :notanattribute).attr_info.should == nil
105
+ end
106
+ end
107
+
108
+ describe '#writer?' do
109
+ it "should return true if method is a writer attribute" do
110
+ obj = MethodObject.new(@yard, :foo=)
111
+ @yard.attributes[:instance][:foo] = {:read => nil, :write => obj}
112
+ obj.writer?.should == true
113
+ MethodObject.new(@yard, :NOTfoo=).writer?.should == false
114
+ end
115
+ end
116
+
117
+ describe '#reader?' do
118
+ it "should return true if method is a reader attribute" do
119
+ obj = MethodObject.new(@yard, :foo)
120
+ @yard.attributes[:instance][:foo] = {:read => obj, :write => nil}
121
+ obj.reader?.should == true
122
+ MethodObject.new(@yard, :NOTfoo).reader?.should == false
123
+ end
124
+ end
125
+
126
+ describe '#constructor?' do
127
+ before { @class = ClassObject.new(:root, :MyClass) }
128
+
129
+ it "should mark the #initialize method as constructor" do
130
+ MethodObject.new(@class, :initialize)
131
+ end
132
+
133
+ it "should not mark Klass.initialize as constructor" do
134
+ MethodObject.new(@class, :initialize, :class).constructor?.should be_false
135
+ end
136
+
137
+ it "should not mark module method #initialize as constructor" do
138
+ MethodObject.new(@yard, :initialize).constructor?.should be_false
139
+ end
140
+ end
141
+
142
+ describe '#overridden_method' do
143
+ before { Registry.clear }
144
+
145
+ it "should return overridden method from mixin first" do
146
+ YARD.parse_string(<<-eof)
147
+ module C; def foo; end end
148
+ class A; def foo; end end
149
+ class B < A; include C; def foo; end end
150
+ eof
151
+ Registry.at('B#foo').overridden_method.should == Registry.at('C#foo')
152
+ end
153
+
154
+ it "should return overridden method from superclass" do
155
+ YARD.parse_string(<<-eof)
156
+ class A; def foo; end end
157
+ class B < A; def foo; end end
158
+ eof
159
+ Registry.at('B#foo').overridden_method.should == Registry.at('A#foo')
160
+ end
161
+
162
+ it "should return nil if none is found" do
163
+ YARD.parse_string(<<-eof)
164
+ class A; end
165
+ class B < A; def foo; end end
166
+ eof
167
+ Registry.at('B#foo').overridden_method.should be_nil
168
+ end
169
+
170
+ it "should return nil if namespace is a proxy" do
171
+ YARD.parse_string "def ARGV.foo; end"
172
+ Registry.at('ARGV.foo').overridden_method.should be_nil
173
+ end
174
+ end
175
+ end
@@ -0,0 +1,141 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe YARD::CodeObjects::ModuleObject do
4
+ describe "#meths" do
5
+ before do
6
+ Registry.clear
7
+
8
+ # setup the object space:
9
+ #
10
+ # YARD:module
11
+ # YARD#foo:method
12
+ # YARD#foo2:method
13
+ # YARD#xyz:method
14
+ # YARD.bar:method
15
+ # SomeMod#mixmethod
16
+ # SomeMod#xyz:method
17
+ #
18
+ @yard = ModuleObject.new(:root, :YARD)
19
+ MethodObject.new(@yard, :foo)
20
+ MethodObject.new(@yard, :xyz)
21
+ MethodObject.new(@yard, :foo2) do |o|
22
+ o.visibility = :protected
23
+ end
24
+ MethodObject.new(@yard, :bar, :class) do |o|
25
+ o.visibility = :private
26
+ end
27
+ @other = ModuleObject.new(:root, :SomeMod)
28
+ MethodObject.new(@other, :mixmethod)
29
+ MethodObject.new(@other, :xyz)
30
+ MethodObject.new(@other, :baz, :class)
31
+ @another = ModuleObject.new(:root, :AnotherMod)
32
+ MethodObject.new(@another, :fizz)
33
+ MethodObject.new(@another, :bar)
34
+ MethodObject.new(@another, :fazz, :class)
35
+
36
+ @yard.instance_mixins << @other
37
+ @yard.class_mixins << @another
38
+ end
39
+
40
+ it "should list all methods (including mixin methods) via #meths" do
41
+ meths = @yard.meths
42
+ meths.should include(P("YARD#foo"))
43
+ meths.should include(P("YARD#foo2"))
44
+ meths.should include(P("YARD.bar"))
45
+ meths.should include(P("SomeMod#mixmethod"))
46
+ meths.should include(P("AnotherMod#fizz"))
47
+ end
48
+
49
+ it "should allow :visibility to be set" do
50
+ meths = @yard.meths(:visibility => :public)
51
+ meths.should_not include(P("YARD.bar"))
52
+ meths = @yard.meths(:visibility => [:public, :private])
53
+ meths.should include(P("YARD#foo"))
54
+ meths.should include(P("YARD.bar"))
55
+ meths.should_not include(P("YARD#foo2"))
56
+ end
57
+
58
+ it "should only display class methods for :scope => :class" do
59
+ meths = @yard.meths(:scope => :class)
60
+ meths.should_not include(P("YARD#foo"))
61
+ meths.should_not include(P("YARD#foo2"))
62
+ meths.should_not include(P("SomeMod#mixmethod"))
63
+ meths.should_not include(P("SomeMod.baz"))
64
+ meths.should_not include(P("AnotherMod#fazz"))
65
+ meths.should include(P("YARD.bar"))
66
+ meths.should include(P("AnotherMod#fizz"))
67
+ end
68
+
69
+ it "should only display instance methods for :scope => :class" do
70
+ meths = @yard.meths(:scope => :instance)
71
+ meths.should include(P("YARD#foo"))
72
+ meths.should include(P("YARD#foo2"))
73
+ meths.should include(P("SomeMod#mixmethod"))
74
+ meths.should_not include(P("YARD.bar"))
75
+ meths.should_not include(P("AnotherMod#fizz"))
76
+ end
77
+
78
+ it "should allow :included to be set" do
79
+ meths = @yard.meths(:included => false)
80
+ meths.should_not include(P("SomeMod#mixmethod"))
81
+ meths.should_not include(P("AnotherMod#fizz"))
82
+ meths.should include(P("YARD#foo"))
83
+ meths.should include(P("YARD#foo2"))
84
+ meths.should include(P("YARD.bar"))
85
+ end
86
+
87
+ it "should choose the method defined in the class over an included module" do
88
+ meths = @yard.meths
89
+ meths.should_not include(P("SomeMod#xyz"))
90
+ meths.should include(P("YARD#xyz"))
91
+ meths.should_not include(P("AnotherMod#bar"))
92
+ meths.should include(P("YARD.bar"))
93
+
94
+ meths = @other.meths
95
+ meths.should include(P("SomeMod#xyz"))
96
+
97
+ meths = @another.meths
98
+ meths.should include(P("AnotherMod#bar"))
99
+ end
100
+ end
101
+
102
+ describe "#inheritance_tree" do
103
+ before do
104
+ Registry.clear
105
+
106
+ @mod1 = ModuleObject.new(:root, :Mod1)
107
+ @mod2 = ModuleObject.new(:root, :Mod2)
108
+ @mod3 = ModuleObject.new(:root, :Mod3)
109
+ @mod4 = ModuleObject.new(:root, :Mod4)
110
+ @mod5 = ModuleObject.new(:root, :Mod5)
111
+
112
+ @mod1.instance_mixins << @mod2
113
+ @mod2.instance_mixins << @mod3
114
+ @mod3.instance_mixins << @mod4
115
+ @mod1.instance_mixins << @mod4
116
+
117
+ @proxy = P(:SomeProxyClass)
118
+ @mod5.instance_mixins << @proxy
119
+ end
120
+
121
+ it "should show only itself for an inheritance tree without included modules" do
122
+ @mod1.inheritance_tree.should == [@mod1]
123
+ end
124
+
125
+ it "should show proper inheritance three when modules are included" do
126
+ @mod1.inheritance_tree(true).should == [@mod1, @mod2, @mod3, @mod4]
127
+ end
128
+
129
+ it "should not list inheritance tree of proxy objects in inheritance tree" do
130
+ @proxy.should_not_receive(:inheritance_tree)
131
+ @mod5.instance_mixins.should == [@proxy]
132
+ end
133
+
134
+ it "should list class mixins in inheritance tree" do
135
+ mod = ModuleObject.new(:root, :ClassMethods)
136
+ recvmod = ModuleObject.new(:root, :ReceivingModule)
137
+ recvmod.class_mixins << mod
138
+ recvmod.inheritance_tree(true).should == [recvmod, mod]
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,170 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe YARD::CodeObjects::NamespaceObject do
4
+ before { Registry.clear }
5
+
6
+ describe '#child' do
7
+ it "should return the object matching the name passed in if argument is a Symbol" do
8
+ obj = NamespaceObject.new(nil, :YARD)
9
+ other = NamespaceObject.new(obj, :Other)
10
+ obj.child(:Other).should == other
11
+ obj.child('Other').should == other
12
+ end
13
+
14
+ it "should look for attributes matching the object if the argument is a Hash" do
15
+ obj = NamespaceObject.new(nil, :YARD)
16
+ NamespaceObject.new(obj, :NotOther)
17
+ other = NamespaceObject.new(obj, :Other)
18
+ other.somevalue = 2
19
+ obj.child(:somevalue => 2).should == other
20
+ end
21
+ end
22
+
23
+ describe '#meths' do
24
+ it "should return #meths even if parent is a Proxy" do
25
+ obj = NamespaceObject.new(P(:String), :YARD)
26
+ obj.meths.should be_empty
27
+ end
28
+
29
+ it "should not list included methods that are already defined in the namespace using #meths" do
30
+ a = ModuleObject.new(nil, :Mod1)
31
+ ameth = MethodObject.new(a, :testing)
32
+ b = ModuleObject.new(nil, :Mod2)
33
+ bmeth = MethodObject.new(b, :foo)
34
+ c = NamespaceObject.new(nil, :YARD)
35
+ cmeth = MethodObject.new(c, :testing)
36
+ cmeth2 = MethodObject.new(c, :foo)
37
+ c.instance_mixins << a
38
+ c.class_mixins << b
39
+
40
+ meths = c.meths
41
+ meths.should include(bmeth)
42
+ meths.should include(cmeth)
43
+ meths.should include(cmeth2)
44
+ meths.should_not include(ameth)
45
+
46
+ meths = c.included_meths
47
+ meths.should include(bmeth)
48
+ meths.should_not include(ameth)
49
+ meths.should_not include(cmeth)
50
+ meths.should_not include(cmeth2)
51
+ end
52
+ end
53
+
54
+ describe '#included_meths' do
55
+ it "should list methods mixed into the class scope as class methods" do
56
+ b = ModuleObject.new(nil, :Mod2)
57
+ bmeth = MethodObject.new(b, :foo)
58
+ bmeth2 = MethodObject.new(b, :foo2)
59
+ c = NamespaceObject.new(nil, :YARD)
60
+ c.class_mixins << b
61
+
62
+ [bmeth, bmeth2].each {|o| o.scope.should == :instance }
63
+ meths = c.included_meths(:scope => :class)
64
+ meths.each {|o| o.scope.should == :class }
65
+ end
66
+
67
+ it "should not list methods overridden by another included module" do
68
+ a = ModuleObject.new(nil, :Mod)
69
+ ameth = MethodObject.new(a, :testing)
70
+ b = ModuleObject.new(nil, :Mod2)
71
+ bmeth = MethodObject.new(b, :testing)
72
+ c = NamespaceObject.new(nil, :YARD)
73
+ c.instance_mixins.unshift a
74
+ c.instance_mixins.unshift b
75
+ c.class_mixins.unshift b
76
+ c.class_mixins.unshift a
77
+
78
+ meths = c.included_meths(:scope => :instance)
79
+ meths.should_not include(ameth)
80
+ meths.should include(bmeth)
81
+
82
+ meths = c.included_meths(:scope => :class)
83
+ meths.should include(ameth)
84
+ meths.should_not include(bmeth)
85
+ end
86
+ end
87
+
88
+ describe '#class_attributes' do
89
+ it "should list class attributes" do
90
+ a = NamespaceObject.new(nil, :Mod)
91
+ a.attributes[:instance][:a] = { :read => MethodObject.new(a, :a), :write => nil }
92
+ a.attributes[:instance][:b] = { :read => MethodObject.new(a, :b), :write => nil }
93
+ a.attributes[:class][:a] = { :read => MethodObject.new(a, :a, :class), :write => nil }
94
+ a.class_attributes.keys.should include(:a)
95
+ a.class_attributes.keys.should_not include(:b)
96
+ end
97
+ end
98
+
99
+ describe '#instance_attributes' do
100
+ it "should list instance attributes" do
101
+ a = NamespaceObject.new(nil, :Mod)
102
+ a.attributes[:instance][:a] = { :read => MethodObject.new(a, :a), :write => nil }
103
+ a.attributes[:instance][:b] = { :read => MethodObject.new(a, :b), :write => nil }
104
+ a.attributes[:class][:a] = { :read => MethodObject.new(a, :a, :class), :write => nil }
105
+ a.instance_attributes.keys.should include(:a)
106
+ a.instance_attributes.keys.should include(:b)
107
+ end
108
+ end
109
+
110
+ describe '#constants/#included_constants' do
111
+ before do
112
+ Registry.clear
113
+
114
+ YARD.parse_string <<-eof
115
+ module A
116
+ CONST1 = 1
117
+ CONST2 = 2
118
+ end
119
+
120
+ module B
121
+ CONST2 = -2
122
+ CONST3 = -3
123
+ end
124
+
125
+ class C
126
+ CONST3 = 3
127
+ CONST4 = 4
128
+
129
+ include A
130
+ include B
131
+ end
132
+ eof
133
+ end
134
+
135
+ it "should list all included constants by default" do
136
+ consts = P(:C).constants
137
+ consts.should include(P('A::CONST1'))
138
+ consts.should include(P('C::CONST4'))
139
+ end
140
+
141
+ it "should allow :included to be set to false to ignore included constants" do
142
+ consts = P(:C).constants(:included => false)
143
+ consts.should_not include(P('A::CONST1'))
144
+ consts.should include(P('C::CONST4'))
145
+ end
146
+
147
+ it "should not list an included constant if it is defined in the object" do
148
+ consts = P(:C).constants
149
+ consts.should include(P('C::CONST3'))
150
+ consts.should_not include(P('B::CONST3'))
151
+ end
152
+
153
+ it "should not list an included constant if it is shadowed by another included constant" do
154
+ consts = P(:C).included_constants
155
+ consts.should include(P('B::CONST2'))
156
+ consts.should_not include(P('A::CONST2'))
157
+ end
158
+ end
159
+
160
+ describe '#included_meths' do
161
+ it "should return all included methods with :all = true" do
162
+ YARD.parse_string <<-eof
163
+ module B; def foo; end end
164
+ module C; def bar; end end
165
+ class A; include B; include C; def foo; end; def bar; end end
166
+ eof
167
+ Registry.at('A').included_meths(:all => true).should == [P('C#bar'), P('B#foo')]
168
+ end
169
+ end
170
+ end
@@ -0,0 +1,140 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe YARD::CodeObjects::Proxy do
4
+ before { Registry.clear }
5
+
6
+ it "should return the object if it's in the Registry" do
7
+ pathobj = ModuleObject.new(:root, :YARD)
8
+ proxyobj = P(:root, :YARD)
9
+ proxyobj.type.should == :module
10
+ Proxy.should_not === proxyobj
11
+ end
12
+
13
+ it "should handle complex string namespaces" do
14
+ ModuleObject.new(:root, :A)
15
+ pathobj = ModuleObject.new(P(nil, :A), :B)
16
+ P(:root, "A::B").should be_instance_of(ModuleObject)
17
+ end
18
+
19
+ it "should not return true to Proxy === obj if obj is a Proxy class holding a resolved object" do
20
+ Proxy.should === P(:root, 'a')
21
+ Proxy.should_not === P(:root)
22
+ MethodObject.new(:root, 'a')
23
+ Proxy.should_not === P(:root, 'a')
24
+ x = Proxy.new(:root, 'a')
25
+ Proxy.should_not === x
26
+ end
27
+
28
+ it "should return the object if it's an included Module" do
29
+ yardobj = ModuleObject.new(:root, :YARD)
30
+ pathobj = ClassObject.new(:root, :TestClass)
31
+ pathobj.instance_mixins << yardobj
32
+ P(P(nil, :TestClass), :YARD).should be_instance_of(ModuleObject)
33
+ end
34
+
35
+ it "should respond_to respond_to?" do
36
+ obj = ClassObject.new(:root, :Object)
37
+ yardobj = ModuleObject.new(:root, :YARD)
38
+ P(:YARD).respond_to?(:children).should == true
39
+ P(:NOTYARD).respond_to?(:children).should == false
40
+
41
+ P(:YARD).respond_to?(:initialize).should == false
42
+ P(:YARD).respond_to?(:initialize, true).should == true
43
+ P(:NOTYARD).respond_to?(:initialize).should == false
44
+ P(:NOTYARD).respond_to?(:initialize, true).should == true
45
+ end
46
+
47
+ it "should make itself obvious that it's a proxy" do
48
+ pathobj = P(:root, :YARD)
49
+ pathobj.class.should == Proxy
50
+ (Proxy === pathobj).should == true
51
+ end
52
+
53
+ it "should pretend it's the object's type if it can resolve" do
54
+ pathobj = ModuleObject.new(:root, :YARD)
55
+ proxyobj = P(:root, :YARD)
56
+ proxyobj.should be_instance_of(ModuleObject)
57
+ end
58
+
59
+ it "should handle instance method names" do
60
+ obj = P(nil, '#test')
61
+ obj.name.should == :test
62
+ obj.path.should == "#test"
63
+ obj.namespace.should == Registry.root
64
+ end
65
+
66
+ it "should handle instance method names under a namespace" do
67
+ pathobj = ModuleObject.new(:root, :YARD)
68
+ obj = P(pathobj, "A::B#test")
69
+ obj.name.should == :test
70
+ obj.path.should == "A::B#test"
71
+ end
72
+
73
+ it "should allow type to be changed" do
74
+ obj = P("InvalidClass")
75
+ obj.type.should == :proxy
76
+ Proxy.should === obj
77
+ obj.type = :class
78
+ obj.type.should == :class
79
+ end
80
+
81
+ it "should NOT retain a type change between Proxy objects" do
82
+ P("InvalidClass").type = :class
83
+ P("InvalidClass").type.should == :proxy
84
+ end
85
+
86
+ it "should use type to ensure resolved object is of intended type" do
87
+ YARD.parse_string <<-eof
88
+ module Foo
89
+ class Bar; end
90
+ def self.Bar; end
91
+ end
92
+ eof
93
+ proxy = Proxy.new(P('Foo'), 'Bar')
94
+ proxy.type = :method
95
+ proxy.path.should == 'Foo.Bar'
96
+ end
97
+
98
+ it "should allow type in initializer" do
99
+ Proxy.new(Registry.root, 'Foo', :method).type.should == :method
100
+ P(Registry.root, 'Foo', :method).type.should == :method
101
+ end
102
+
103
+ it "should never equal Registry.root" do
104
+ P("MYPROXY").should_not == Registry.root
105
+ P("X::A").should_not == Registry.root
106
+ end
107
+
108
+ it "should reset namespace and name when object is resolved" do
109
+ obj1 = ModuleObject.new(:root, :YARD)
110
+ obj2 = ModuleObject.new(:root, :NOTYARD)
111
+ resolved = Proxy.new(obj2, :YARD)
112
+ resolved.should == obj1
113
+ resolved.namespace.should == Registry.root
114
+ resolved.name.should == :YARD
115
+ end
116
+
117
+ it "should ensure that the correct object was resolved" do
118
+ foo = ModuleObject.new(:root, :Foo)
119
+ foobar = ModuleObject.new(foo, :Bar)
120
+ foobaz = ClassObject.new(foo, :Baz)
121
+
122
+ # Remember, we're looking for Qux::Bar, not just 'Bar'
123
+ proxy = Proxy.new(foobar, 'Foo::Qux::Bar')
124
+ proxy.type.should == :proxy
125
+
126
+ qux = ModuleObject.new(foo, :Qux)
127
+ quxbar = ModuleObject.new(qux, :Bar)
128
+
129
+ # Now it should resolve
130
+ proxy.type.should == :module
131
+ end
132
+
133
+ it "should handle constant names in namespaces" do
134
+ YARD.parse_string <<-eof
135
+ module A; end; B = A
136
+ module B::C; def foo; end end
137
+ eof
138
+ Proxy.new(:root, 'B::C').should == Registry.at('A::C')
139
+ end
140
+ end
@@ -0,0 +1,3 @@
1
+ require File.join(File.dirname(__FILE__), "..", "spec_helper")
2
+
3
+ include CodeObjects