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,804 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe YARD::CLI::Yardoc do
4
+ before do
5
+ @yardoc = YARD::CLI::Yardoc.new
6
+ @yardoc.statistics = false
7
+ @yardoc.use_document_file = false
8
+ @yardoc.use_yardopts_file = false
9
+ @yardoc.generate = false
10
+ Templates::Engine.stub!(:render)
11
+ Templates::Engine.stub!(:generate)
12
+ YARD.stub!(:parse)
13
+ Registry.stub!(:load)
14
+ Registry.stub!(:save)
15
+ end
16
+
17
+ describe 'Defaults' do
18
+ before do
19
+ @yardoc = CLI::Yardoc.new
20
+ @yardoc.stub!(:yardopts).and_return([])
21
+ @yardoc.stub!(:support_rdoc_document_file!).and_return([])
22
+ @yardoc.parse_arguments
23
+ end
24
+
25
+ it "should use cache by default" do
26
+ @yardoc.use_cache.should == false
27
+ end
28
+
29
+ it "print statistics by default" do
30
+ @yardoc.statistics.should == true
31
+ end
32
+
33
+ it "should generate output by default" do
34
+ @yardoc.generate.should == true
35
+ end
36
+
37
+ it "should read .yardopts by default" do
38
+ @yardoc.use_yardopts_file.should == true
39
+ end
40
+
41
+ it "should read .document by default" do
42
+ @yardoc.use_document_file.should == true
43
+ end
44
+
45
+ it "should use {lib,app}/**/*.rb and ext/**/*.c as default file glob" do
46
+ @yardoc.files.should == ['{lib,app}/**/*.rb', 'ext/**/*.c']
47
+ end
48
+
49
+ it "should use rdoc as default markup type (but falls back on none)" do
50
+ @yardoc.options.markup.should == :rdoc
51
+ end
52
+
53
+ it "should use default as default template" do
54
+ @yardoc.options.template.should == :default
55
+ end
56
+
57
+ it "should use HTML as default format" do
58
+ @yardoc.options.format.should == :html
59
+ end
60
+
61
+ it "should use 'Object' as default return type" do
62
+ @yardoc.options.default_return.should == 'Object'
63
+ end
64
+
65
+ it "should not hide void return types by default" do
66
+ @yardoc.options.hide_void_return.should == false
67
+ end
68
+
69
+ it "should only show public visibility by default" do
70
+ @yardoc.visibilities.should == [:public]
71
+ end
72
+
73
+ it "should not list objects by default" do
74
+ @yardoc.list.should == false
75
+ end
76
+
77
+ it "should not embed mixins by default" do
78
+ @yardoc.options.embed_mixins.should be_empty
79
+ end
80
+
81
+ it "should not set any locale by default" do
82
+ @yardoc.options.locale.should be_nil
83
+ end
84
+ end
85
+
86
+ describe 'General options' do
87
+ def self.should_accept(*args, &block)
88
+ @counter ||= 0
89
+ @counter += 1
90
+ counter = @counter
91
+ args.each do |arg|
92
+ define_method("test_options_#{@counter}", &block)
93
+ it("should accept #{arg}") { send("test_options_#{counter}", arg) }
94
+ end
95
+ end
96
+
97
+ should_accept('--single-db') do |arg|
98
+ @yardoc.parse_arguments(arg)
99
+ Registry.single_object_db.should == true
100
+ Registry.single_object_db = nil
101
+ end
102
+
103
+ should_accept('--no-single-db') do |arg|
104
+ @yardoc.parse_arguments(arg)
105
+ Registry.single_object_db.should == false
106
+ Registry.single_object_db = nil
107
+ end
108
+
109
+ should_accept('-c', '--use-cache') do |arg|
110
+ @yardoc.parse_arguments(arg)
111
+ @yardoc.use_cache.should == true
112
+ end
113
+
114
+ should_accept('--no-cache') do |arg|
115
+ @yardoc.parse_arguments(arg)
116
+ @yardoc.use_cache.should == false
117
+ end
118
+
119
+ should_accept('--yardopts') do |arg|
120
+ @yardoc = CLI::Yardoc.new
121
+ @yardoc.use_document_file = false
122
+ @yardoc.should_receive(:yardopts).at_least(1).times.and_return([])
123
+ @yardoc.parse_arguments(arg)
124
+ @yardoc.use_yardopts_file.should == true
125
+ @yardoc.parse_arguments('--no-yardopts', arg)
126
+ @yardoc.use_yardopts_file.should == true
127
+ end
128
+
129
+ should_accept('--yardopts with filename') do |arg|
130
+ @yardoc = CLI::Yardoc.new
131
+ File.should_receive(:read_binary).with('.foobar').and_return('')
132
+ @yardoc.use_document_file = false
133
+ @yardoc.parse_arguments('--yardopts', '.foobar')
134
+ @yardoc.use_yardopts_file.should == true
135
+ @yardoc.options_file.should == '.foobar'
136
+ end
137
+
138
+ should_accept('--no-yardopts') do |arg|
139
+ @yardoc = CLI::Yardoc.new
140
+ @yardoc.use_document_file = false
141
+ @yardoc.should_not_receive(:yardopts)
142
+ @yardoc.parse_arguments(arg)
143
+ @yardoc.use_yardopts_file.should == false
144
+ @yardoc.parse_arguments('--yardopts', arg)
145
+ @yardoc.use_yardopts_file.should == false
146
+ end
147
+
148
+ should_accept('--document') do |arg|
149
+ @yardoc = CLI::Yardoc.new
150
+ @yardoc.use_yardopts_file = false
151
+ @yardoc.should_receive(:support_rdoc_document_file!).and_return([])
152
+ @yardoc.parse_arguments('--no-document', arg)
153
+ @yardoc.use_document_file.should == true
154
+ end
155
+
156
+ should_accept('--no-document') do |arg|
157
+ @yardoc = CLI::Yardoc.new
158
+ @yardoc.use_yardopts_file = false
159
+ @yardoc.should_not_receive(:support_rdoc_document_file!)
160
+ @yardoc.parse_arguments('--document', arg)
161
+ @yardoc.use_document_file.should == false
162
+ end
163
+
164
+ should_accept('-b', '--db') do |arg|
165
+ @yardoc.parse_arguments(arg, 'test')
166
+ Registry.yardoc_file.should == 'test'
167
+ Registry.yardoc_file = '.yardoc'
168
+ end
169
+
170
+ should_accept('-n', '--no-output') do |arg|
171
+ Templates::Engine.should_not_receive(:generate)
172
+ @yardoc.run(arg)
173
+ end
174
+
175
+ should_accept('--exclude') do |arg|
176
+ YARD.should_receive(:parse).with(['a'], ['nota', 'b'])
177
+ @yardoc.run(arg, 'nota', arg, 'b', 'a')
178
+ end
179
+
180
+ should_accept('--no-save') do |arg|
181
+ YARD.should_receive(:parse)
182
+ Registry.should_not_receive(:save)
183
+ @yardoc.run(arg)
184
+ end
185
+ end
186
+
187
+ describe 'Output options' do
188
+ it "should accept --title" do
189
+ @yardoc.parse_arguments('--title', 'hello world')
190
+ @yardoc.options.title.should == 'hello world'
191
+ end
192
+
193
+ it "should allow --title to have multiple spaces in .yardopts" do
194
+ File.should_receive(:read_binary).with("test").and_return("--title \"Foo Bar\"")
195
+ @yardoc.options_file = "test"
196
+ @yardoc.use_yardopts_file = true
197
+ @yardoc.run
198
+ @yardoc.options.title.should == "Foo Bar"
199
+ end
200
+
201
+ it "should alias --main to the --readme flag" do
202
+ readme = File.join(File.dirname(__FILE__),'..','..','README.md')
203
+
204
+ @yardoc.parse_arguments('--main', readme)
205
+ @yardoc.options.readme.should == CodeObjects::ExtraFileObject.new(readme, '')
206
+ end
207
+
208
+ it "should select a markup provider when --markup-provider or -mp is set" do
209
+ @yardoc.parse_arguments("-M", "test")
210
+ @yardoc.options.markup_provider.should == :test
211
+ @yardoc.parse_arguments("--markup-provider", "test2")
212
+ @yardoc.options.markup_provider.should == :test2
213
+ end
214
+
215
+ it "should select a markup format when -m is set" do
216
+ @yardoc.should_receive(:verify_markup_options).and_return(true)
217
+ @yardoc.generate = true
218
+ @yardoc.parse_arguments('-m', 'markdown')
219
+ @yardoc.options.markup.should == :markdown
220
+ end
221
+
222
+ it "should accept --default-return" do
223
+ @yardoc.parse_arguments *%w( --default-return XYZ )
224
+ @yardoc.options.default_return.should == "XYZ"
225
+ end
226
+
227
+ it "should allow --hide-void-return to be set" do
228
+ @yardoc.parse_arguments *%w( --hide-void-return )
229
+ @yardoc.options.hide_void_return.should be_true
230
+ end
231
+
232
+ it "should accept --embed-mixins" do
233
+ @yardoc.parse_arguments *%w( --embed-mixins )
234
+ @yardoc.options.embed_mixins.should == ['*']
235
+ end
236
+
237
+ it "should accept --embed-mixin MODULE" do
238
+ @yardoc.parse_arguments *%w( --embed-mixin MyModule )
239
+ @yardoc.options.embed_mixins.should == ['MyModule']
240
+ end
241
+
242
+ it "should generate all objects with --use-cache" do
243
+ YARD.should_receive(:parse)
244
+ Registry.should_receive(:load)
245
+ Registry.should_receive(:load_all)
246
+ @yardoc.stub!(:generate).and_return(true)
247
+ @yardoc.run *%w( --use-cache )
248
+ end
249
+
250
+ it "should not print statistics with --no-stats" do
251
+ @yardoc.stub!(:statistics).and_return(false)
252
+ CLI::Stats.should_not_receive(:new)
253
+ @yardoc.run *%w( --no-stats )
254
+ end
255
+
256
+ describe '--asset' do
257
+ before do
258
+ @yardoc.generate = true
259
+ @yardoc.stub!(:run_generate)
260
+ end
261
+
262
+ it "should copy assets to output directory" do
263
+ FileUtils.should_receive(:cp_r).with('a', 'doc/a')
264
+ @yardoc.run *%w( --asset a )
265
+ @yardoc.assets.should == {'a' => 'a'}
266
+ end
267
+
268
+ it "should allow multiple --asset options" do
269
+ FileUtils.should_receive(:cp_r).with('a', 'doc/a')
270
+ FileUtils.should_receive(:cp_r).with('b', 'doc/b')
271
+ @yardoc.run *%w( --asset a --asset b )
272
+ @yardoc.assets.should == {'a' => 'a', 'b' => 'b'}
273
+ end
274
+
275
+ it "should not allow from or to to refer to a path above current path" do
276
+ log.should_receive(:warn).exactly(4).times.with(/invalid/i)
277
+ @yardoc.run *%w( --asset ../../../etc/passwd )
278
+ @yardoc.assets.should be_empty
279
+ @yardoc.run *%w( --asset a/b/c/d/../../../../../../etc/passwd )
280
+ @yardoc.assets.should be_empty
281
+ @yardoc.run *%w( --asset /etc/passwd )
282
+ @yardoc.assets.should be_empty
283
+ @yardoc.run *%w( --asset normal:/etc/passwd )
284
+ @yardoc.assets.should be_empty
285
+ end
286
+
287
+ it "should allow from:to syntax" do
288
+ FileUtils.should_receive(:cp_r).with('foo', 'doc/bar')
289
+ @yardoc.run *%w( --asset foo:bar )
290
+ @yardoc.assets.should == {'foo' => 'bar'}
291
+ end
292
+
293
+ it "should not put from inside of to/ if from is a directory" do
294
+ begin
295
+ from = 'tmp_foo'
296
+ to = 'tmp_bar'
297
+ full_to = File.join(File.dirname(__FILE__), to)
298
+ FileUtils.mkdir_p(from)
299
+ @yardoc.options.serializer.basepath = File.dirname(__FILE__)
300
+ @yardoc.run("--asset", "#{from}:#{to}")
301
+ @yardoc.run("--asset", "#{from}:#{to}")
302
+ File.directory?(full_to).should be_true
303
+ File.directory?(File.join(full_to, 'tmp_foo')).should be_false
304
+ ensure
305
+ FileUtils.rm_rf(from)
306
+ FileUtils.rm_rf(full_to)
307
+ end
308
+ end
309
+ end
310
+
311
+ describe '--locale' do
312
+ it 'should apply specified locale to all extra file objects' do
313
+ File.stub!(:read).with('extra_file1').and_return('')
314
+ File.stub!(:read).with('extra_file2').and_return('')
315
+
316
+ extra_file_object1 = CodeObjects::ExtraFileObject.new('extra_file1')
317
+ extra_file_object2 = CodeObjects::ExtraFileObject.new('extra_file2')
318
+ extra_file_object1.should_receive(:locale=).with('fr')
319
+ extra_file_object2.should_receive(:locale=).with('fr')
320
+
321
+ CodeObjects::ExtraFileObject.stub!(:new).with('extra_file1').and_return(extra_file_object1)
322
+ CodeObjects::ExtraFileObject.stub!(:new).with('extra_file2').and_return(extra_file_object2)
323
+ Dir.stub!(:glob).with('README*').and_return([])
324
+ File.stub!(:file?).with('extra_file1').and_return(true)
325
+ File.stub!(:file?).with('extra_file2').and_return(true)
326
+ @yardoc.run('--locale=fr', '-', 'extra_file1', 'extra_file2')
327
+ end
328
+ end
329
+
330
+ describe '--po-dir' do
331
+ it 'should set Registry.po_dir' do
332
+ Registry.should_receive(:po_dir=).with("locale")
333
+ @yardoc.run('--po-dir=locale')
334
+ end
335
+ end
336
+ end
337
+
338
+ describe '--[no-]api' do
339
+ before { Registry.clear }
340
+
341
+ it "should allow --api name" do
342
+ YARD.parse_string <<-eof
343
+ # @api private
344
+ class Foo; end
345
+ # @api public
346
+ class Bar; end
347
+ class Baz; end
348
+ eof
349
+ @yardoc.run('--api', 'private')
350
+ @yardoc.options.verifier.run(Registry.all).should == [P('Foo')]
351
+ end
352
+
353
+ it "should allow multiple --api's to all be shown" do
354
+ YARD.parse_string <<-eof
355
+ # @api private
356
+ class Foo; end
357
+ # @api public
358
+ class Bar; end
359
+ class Baz; end
360
+ eof
361
+ @yardoc.run('--api', 'private', '--api', 'public')
362
+ @yardoc.options.verifier.run(Registry.all).
363
+ sort_by {|o| o.path }.should == [P('Bar'), P('Foo')]
364
+ end
365
+
366
+ it "should allow --no-api to specify objects with no @api tag" do
367
+ YARD.parse_string <<-eof
368
+ # @api private
369
+ class Foo; end
370
+ # @api public
371
+ class Bar; end
372
+ class Baz; end
373
+ eof
374
+ @yardoc.run('--api', '')
375
+ @yardoc.options.verifier.run(Registry.all).should == [P('Baz')]
376
+ @yardoc.options.verifier = Verifier.new
377
+ @yardoc.run('--no-api')
378
+ @yardoc.options.verifier.run(Registry.all).should == [P('Baz')]
379
+ end
380
+
381
+ it "should allow --no-api to work with other --api switches" do
382
+ YARD.parse_string <<-eof
383
+ # @api private
384
+ class Foo; end
385
+ # @api public
386
+ class Bar; end
387
+ class Baz; end
388
+ eof
389
+ @yardoc.run('--no-api', '--api', 'public')
390
+ @yardoc.options.verifier.run(Registry.all).
391
+ sort_by {|o| o.path }.should == [P('Bar'), P('Baz')]
392
+ end
393
+
394
+ it "should ensure Ruby code cannot be used" do
395
+ [':symbol', '42', '"; exit'].each do |ruby|
396
+ @yardoc.options.verifier.expressions = []
397
+ @yardoc.run('--api', ruby)
398
+ @yardoc.options.verifier.expressions[1].should include(ruby.inspect)
399
+ end
400
+ end
401
+ end
402
+
403
+ describe '--hide-api option' do
404
+ it "should allow --hide-api to hide objects with api tags" do
405
+ YARD.parse_string <<-eof
406
+ # @api private
407
+ class Foo; end
408
+ class Bar; end
409
+ class Baz; end
410
+ eof
411
+ @yardoc.run('--hide-api', 'private')
412
+ @yardoc.options.verifier.run(Registry.all).
413
+ sort_by {|o| o.path }.should == [P('Bar'), P('Baz')]
414
+ end
415
+
416
+ it "should allow --hide-api to work with --api" do
417
+ YARD.parse_string <<-eof
418
+ # @api private
419
+ class Foo; end
420
+ # @api public
421
+ class Bar; end
422
+ class Baz; end
423
+ eof
424
+ @yardoc.run('--api', 'public', '--hide-api', 'private')
425
+ @yardoc.options.verifier.run(Registry.all).
426
+ sort_by {|o| o.path }.should == [P('Bar')]
427
+ end
428
+ end
429
+
430
+ describe '--no-private option' do
431
+ it "should accept --no-private" do
432
+ obj = mock(:object)
433
+ obj.should_receive(:tag).ordered.with(:private).and_return(true)
434
+ @yardoc.parse_arguments *%w( --no-private )
435
+ @yardoc.options.verifier.call(obj).should == false
436
+ end
437
+
438
+ it "should hide object if namespace is @private with --no-private" do
439
+ ns = mock(:namespace)
440
+ ns.stub!(:type).and_return(:module)
441
+ ns.should_receive(:tag).with(:private).and_return(true)
442
+ obj = mock(:object)
443
+ obj.stub!(:namespace).and_return(ns)
444
+ obj.should_receive(:tag).with(:private).and_return(false)
445
+ @yardoc.parse_arguments *%w( --no-private )
446
+ @yardoc.options.verifier.call(obj).should == false
447
+ end
448
+
449
+ it "should not call #tag on namespace if namespace is proxy with --no-private" do
450
+ ns = mock(:namespace)
451
+ ns.should_receive(:is_a?).with(CodeObjects::Proxy).and_return(true)
452
+ ns.should_not_receive(:tag)
453
+ obj = mock(:object)
454
+ obj.stub!(:type).and_return(:class)
455
+ obj.stub!(:namespace).and_return(ns)
456
+ obj.stub!(:visibility).and_return(:public)
457
+ obj.should_receive(:tag).ordered.with(:private).and_return(false)
458
+ @yardoc.parse_arguments *%w( --no-private )
459
+ @yardoc.options.verifier.call(obj).should == true
460
+ end
461
+
462
+ # @bug gh-197
463
+ it "should not call #tag on namespace if namespace is proxy with --no-private" do
464
+ Registry.clear
465
+ YARD.parse_string "module Qux; class Foo::Bar; end; end"
466
+ foobar = Registry.at('Foo::Bar')
467
+ foobar.namespace.type = :module
468
+ @yardoc.parse_arguments *%w( --no-private )
469
+ @yardoc.options.verifier.call(foobar).should == true
470
+ end
471
+
472
+ it "should not call #tag on proxy object" do # @bug gh-197
473
+ @yardoc.parse_arguments *%w( --no-private )
474
+ @yardoc.options.verifier.call(P('ProxyClass')).should == true
475
+ end
476
+
477
+ it "should hide methods inside a 'private' class/module with --no-private" do
478
+ Registry.clear
479
+ YARD.parse_string <<-eof
480
+ # @private
481
+ class ABC
482
+ def foo; end
483
+ end
484
+ eof
485
+ @yardoc.parse_arguments *%w( --no-private )
486
+ @yardoc.options.verifier.call(Registry.at('ABC')).should be_false
487
+ @yardoc.options.verifier.call(Registry.at('ABC#foo')).should be_false
488
+ end
489
+ end
490
+
491
+ describe '.yardopts and .document handling' do
492
+ before do
493
+ @yardoc.use_yardopts_file = true
494
+ end
495
+
496
+ it "should search for and use yardopts file specified by #options_file" do
497
+ File.should_receive(:read_binary).with("test").and_return("-o \n\nMYPATH\nFILE1 FILE2")
498
+ @yardoc.use_document_file = false
499
+ @yardoc.options_file = "test"
500
+ @yardoc.run
501
+ @yardoc.options.serializer.options[:basepath].should == "MYPATH"
502
+ @yardoc.files.should == ["FILE1", "FILE2"]
503
+ end
504
+
505
+ it "should use String#shell_split to split .yardopts tokens" do
506
+ optsdata = "foo bar"
507
+ optsdata.should_receive(:shell_split)
508
+ File.should_receive(:read_binary).with("test").and_return(optsdata)
509
+ @yardoc.options_file = "test"
510
+ @yardoc.run
511
+ end
512
+
513
+ it "should allow opts specified in command line to override yardopts file" do
514
+ File.should_receive(:read_binary).with(".yardopts").and_return("-o NOTMYPATH")
515
+ @yardoc.run("-o", "MYPATH", "FILE")
516
+ @yardoc.options.serializer.options[:basepath].should == "MYPATH"
517
+ @yardoc.files.should == ["FILE"]
518
+ end
519
+
520
+ it "should load the RDoc .document file if found" do
521
+ File.should_receive(:read_binary).with(".yardopts").and_return("-o NOTMYPATH")
522
+ @yardoc.use_document_file = true
523
+ @yardoc.stub!(:support_rdoc_document_file!).and_return(["FILE2", "FILE3"])
524
+ @yardoc.run("-o", "MYPATH", "FILE1")
525
+ @yardoc.options.serializer.options[:basepath].should == "MYPATH"
526
+ @yardoc.files.should == ["FILE2", "FILE3", "FILE1"]
527
+ end
528
+ end
529
+
530
+ describe 'Query options' do
531
+ after { Registry.clear }
532
+
533
+ it "should hide private constants in with default visibilities" do
534
+ classobj = CodeObjects::ClassObject.new(:root, :Foo) {|o| o.visibility = :private }
535
+ @yardoc.run
536
+ @yardoc.options.verifier.run([classobj]).should == []
537
+ end
538
+
539
+ it "should setup visibility rules as verifier" do
540
+ methobj = CodeObjects::MethodObject.new(:root, :test) {|o| o.visibility = :private }
541
+ File.should_receive(:read_binary).with("test").and_return("--private")
542
+ @yardoc.use_yardopts_file = true
543
+ @yardoc.options_file = "test"
544
+ @yardoc.run
545
+ @yardoc.options.verifier.call(methobj).should be_true
546
+ end
547
+
548
+ it "should accept a --query" do
549
+ @yardoc.parse_arguments *%w( --query @return )
550
+ @yardoc.options.verifier.should be_a(Verifier)
551
+ end
552
+
553
+ it "should accept multiple --query arguments" do
554
+ obj = mock(:object)
555
+ obj.should_receive(:tag).ordered.with('return').and_return(true)
556
+ obj.should_receive(:tag).ordered.with('tag').and_return(false)
557
+ @yardoc.parse_arguments *%w( --query @return --query @tag )
558
+ @yardoc.options.verifier.should be_a(Verifier)
559
+ @yardoc.options.verifier.call(obj).should == false
560
+ end
561
+ end
562
+
563
+ describe 'Extra file arguments' do
564
+ it "should accept extra files if specified after '-' with source files" do
565
+ Dir.should_receive(:glob).with('README*').and_return([])
566
+ File.should_receive(:file?).with('extra_file1').and_return(true)
567
+ File.should_receive(:file?).with('extra_file2').and_return(true)
568
+ File.should_receive(:read).with('extra_file1').and_return('')
569
+ File.should_receive(:read).with('extra_file2').and_return('')
570
+ @yardoc.parse_arguments *%w( file1 file2 - extra_file1 extra_file2 )
571
+ @yardoc.files.should == %w( file1 file2 )
572
+ @yardoc.options.files.should ==
573
+ [CodeObjects::ExtraFileObject.new('extra_file1', ''),
574
+ CodeObjects::ExtraFileObject.new('extra_file2', '')]
575
+ end
576
+
577
+ it "should accept files section only containing extra files" do
578
+ Dir.should_receive(:glob).with('README*').and_return([])
579
+ @yardoc.parse_arguments *%w( - LICENSE )
580
+ @yardoc.files.should == %w( {lib,app}/**/*.rb ext/**/*.c )
581
+ @yardoc.options.files.should == [CodeObjects::ExtraFileObject.new('LICENSE', '')]
582
+ end
583
+
584
+ it "should accept globs as extra files" do
585
+ Dir.should_receive(:glob).with('README*').and_return []
586
+ Dir.should_receive(:glob).with('*.txt').and_return ['a.txt', 'b.txt']
587
+ File.should_receive(:read).with('a.txt').and_return('')
588
+ File.should_receive(:read).with('b.txt').and_return('')
589
+ File.should_receive(:file?).with('a.txt').and_return(true)
590
+ File.should_receive(:file?).with('b.txt').and_return(true)
591
+ @yardoc.parse_arguments *%w( file1 file2 - *.txt )
592
+ @yardoc.files.should == %w( file1 file2 )
593
+ @yardoc.options.files.should ==
594
+ [CodeObjects::ExtraFileObject.new('a.txt', ''),
595
+ CodeObjects::ExtraFileObject.new('b.txt', '')]
596
+ end
597
+
598
+ it "should warn if extra file is not found" do
599
+ log.should_receive(:warn).with(/Could not find extra file: UNKNOWN/)
600
+ @yardoc.parse_arguments *%w( - UNKNOWN )
601
+ end
602
+
603
+ it "should warn if readme file is not found" do
604
+ log.should_receive(:warn).with(/Could not find readme file: UNKNOWN/)
605
+ @yardoc.parse_arguments *%w( -r UNKNOWN )
606
+ end
607
+
608
+ it "should use first file as readme if no readme is specified when using --one-file" do
609
+ Dir.should_receive(:glob).with('README*').and_return []
610
+ Dir.should_receive(:glob).with('lib/*.rb').and_return(['lib/foo.rb'])
611
+ File.should_receive(:read).with('lib/foo.rb').and_return('')
612
+ @yardoc.parse_arguments *%w( --one-file lib/*.rb )
613
+ @yardoc.options.readme.should == CodeObjects::ExtraFileObject.new('lib/foo.rb', '')
614
+ end
615
+
616
+ it "should use readme it exists when using --one-file" do
617
+ Dir.should_receive(:glob).with('README*').and_return ['README']
618
+ File.should_receive(:read).with('README').and_return('')
619
+ @yardoc.parse_arguments *%w( --one-file lib/*.rb )
620
+ @yardoc.options.readme.should == CodeObjects::ExtraFileObject.new('README', '')
621
+ end
622
+
623
+ it "should not allow US-ASCII charset when using --one-file" do
624
+ ienc = Encoding.default_internal
625
+ eenc = Encoding.default_external
626
+ log.should_receive(:warn).with(/not compatible with US-ASCII.*using ASCII-8BIT/)
627
+ @yardoc.parse_arguments *%w( --one-file --charset us-ascii )
628
+ Encoding.default_internal.name.should == 'ASCII-8BIT'
629
+ Encoding.default_external.name.should == 'ASCII-8BIT'
630
+ Encoding.default_internal = ienc
631
+ Encoding.default_external = eenc
632
+ end if defined?(::Encoding)
633
+ end
634
+
635
+ describe 'Source file arguments' do
636
+ it "should accept no params and parse {lib,app}/**/*.rb ext/**/*.c" do
637
+ @yardoc.parse_arguments
638
+ @yardoc.files.should == %w( {lib,app}/**/*.rb ext/**/*.c )
639
+ end
640
+ end
641
+
642
+ describe 'Tags options' do
643
+ def tag_created(switch, factory_method)
644
+ visible_tags = mock(:visible_tags)
645
+ visible_tags.should_receive(:|).ordered.with([:foo])
646
+ visible_tags.should_receive(:-).ordered.with([]).and_return(visible_tags)
647
+ Tags::Library.should_receive(:define_tag).with('Foo', :foo, factory_method)
648
+ Tags::Library.stub!(:visible_tags=)
649
+ Tags::Library.should_receive(:visible_tags).at_least(1).times.and_return(visible_tags)
650
+ @yardoc.parse_arguments("--#{switch}-tag", 'foo')
651
+ end
652
+
653
+ def tag_hidden(tag)
654
+ visible_tags = mock(:visible_tags)
655
+ visible_tags.should_receive(:|).ordered.with([tag])
656
+ visible_tags.should_receive(:-).ordered.with([tag]).and_return([])
657
+ Tags::Library.should_receive(:define_tag).with(tag.to_s.capitalize, tag, nil)
658
+ Tags::Library.stub!(:visible_tags=)
659
+ Tags::Library.should_receive(:visible_tags).at_least(1).times.and_return(visible_tags)
660
+ end
661
+
662
+ it "should accept --tag" do
663
+ Tags::Library.should_receive(:define_tag).with('Title of Foo', :foo, nil)
664
+ @yardoc.parse_arguments('--tag', 'foo:Title of Foo')
665
+ end
666
+
667
+ it "should accept --tag without title (and default to captialized tag name)" do
668
+ Tags::Library.should_receive(:define_tag).with('Foo', :foo, nil)
669
+ @yardoc.parse_arguments('--tag', 'foo')
670
+ end
671
+
672
+ it "should only list tag once if declared twice" do
673
+ visible_tags = []
674
+ Tags::Library.stub!(:define_tag)
675
+ Tags::Library.stub!(:visible_tags).and_return([:foo])
676
+ Tags::Library.stub!(:visible_tags=) {|value| visible_tags = value }
677
+ @yardoc.parse_arguments('--tag', 'foo', '--tag', 'foo')
678
+ visible_tags.should == [:foo]
679
+ end
680
+
681
+ it "should accept --type-tag" do
682
+ tag_created 'type', :with_types
683
+ end
684
+
685
+ it "should accept --type-name-tag" do
686
+ tag_created 'type-name', :with_types_and_name
687
+ end
688
+
689
+ it "should accept --name-tag" do
690
+ tag_created 'name', :with_name
691
+ end
692
+
693
+ it "should accept --title-tag" do
694
+ tag_created 'title', :with_title_and_text
695
+ end
696
+
697
+ it "should accept --hide-tag before tag is listed" do
698
+ tag_hidden(:anewfoo)
699
+ @yardoc.parse_arguments('--hide-tag', 'anewfoo', '--tag', 'anewfoo')
700
+ end
701
+
702
+ it "should accept --hide-tag after tag is listed" do
703
+ tag_hidden(:anewfoo2)
704
+ @yardoc.parse_arguments('--tag', 'anewfoo2', '--hide-tag', 'anewfoo2')
705
+ end
706
+
707
+ it "should accept --transitive-tag" do
708
+ @yardoc.parse_arguments('--transitive-tag', 'foo')
709
+ Tags::Library.transitive_tags.should include(:foo)
710
+ end
711
+
712
+ it "should accept --non-transitive-tag" do
713
+ Tags::Library.transitive_tags |= [:foo]
714
+ @yardoc.parse_arguments('--non-transitive-tag', 'foo')
715
+ Tags::Library.transitive_tags.should_not include(:foo)
716
+ end
717
+ end
718
+
719
+ describe 'Safe mode' do
720
+ before do
721
+ YARD::Config.stub!(:options).and_return(:safe_mode => true)
722
+ end
723
+
724
+ it "should not allow --load or -e in safe mode" do
725
+ @yardoc.should_not_receive(:require)
726
+ @yardoc.run('--load', 'foo')
727
+ @yardoc.run('-e', 'foo')
728
+ end
729
+
730
+ it "should not allow --query in safe mode" do
731
+ @yardoc.run('--query', 'foo')
732
+ @yardoc.options.verifier.expressions.should_not include("foo")
733
+ end
734
+
735
+ it "should not allow modifying the template paths" do
736
+ YARD::Templates::Engine.should_not_receive(:register_template_path)
737
+ @yardoc.run('-p', 'foo')
738
+ @yardoc.run('--template-path', 'foo')
739
+ end
740
+ end
741
+
742
+ describe 'Markup Loading' do
743
+ it "should load rdoc markup if no markup is provided" do
744
+ @yardoc.generate = true
745
+ @yardoc.run
746
+ @yardoc.options.markup.should == :rdoc
747
+ end
748
+
749
+ it "should load rdoc markup even when no output is specified" do
750
+ @yardoc.parse_arguments('--no-output')
751
+ @yardoc.options.markup.should == :rdoc
752
+ end
753
+
754
+ it "should warn if rdoc cannot be loaded and fallback to :none" do
755
+ mod = YARD::Templates::Helpers::MarkupHelper
756
+ mod.clear_markup_cache
757
+ mod.const_get(:MARKUP_PROVIDERS).should_receive(:[]).with(:rdoc).and_return([{:lib => 'INVALID'}])
758
+ log.should_receive(:warn).with(/Could not load default RDoc formatter/)
759
+ @yardoc.stub(:generate) { @yardoc.options.files = []; true }
760
+ @yardoc.run
761
+ @yardoc.options.markup.should == :none
762
+ mod.clear_markup_cache
763
+ end
764
+
765
+ it "should error immediately if markup for any files are missing" do
766
+ mod = YARD::Templates::Helpers::MarkupHelper
767
+ mod.clear_markup_cache
768
+ mod.const_get(:MARKUP_PROVIDERS).should_receive(:[]).with(:markdown).and_return([{:lib => 'INVALID'}])
769
+ log.should_receive(:error).with(/Missing 'INVALID' gem for Markdown formatting/)
770
+ files = [CodeObjects::ExtraFileObject.new('test.md', '')]
771
+ @yardoc.stub(:generate) { @yardoc.options.files = files; true }
772
+ @yardoc.run
773
+ mod.clear_markup_cache
774
+ end
775
+
776
+ it "should error immediately if markup for any files are missing (file markup specified in attributes)" do
777
+ mod = YARD::Templates::Helpers::MarkupHelper
778
+ mod.clear_markup_cache
779
+ mod.const_get(:MARKUP_PROVIDERS).should_receive(:[]).with(:markdown).and_return([{:lib => 'INVALID'}])
780
+ log.should_receive(:error).with(/Missing 'INVALID' gem for Markdown formatting/)
781
+ files = [CodeObjects::ExtraFileObject.new('test', '# @markup markdown')]
782
+ @yardoc.stub(:generate) { @yardoc.options.files = files; true }
783
+ @yardoc.run
784
+ mod.clear_markup_cache
785
+ end
786
+ end
787
+
788
+ describe '#run' do
789
+ it "should parse_arguments if run() is called" do
790
+ @yardoc.should_receive(:parse_arguments)
791
+ @yardoc.run
792
+ end
793
+
794
+ it "should parse_arguments if run(arg1, arg2, ...) is called" do
795
+ @yardoc.should_receive(:parse_arguments)
796
+ @yardoc.run('--private', '-p', 'foo')
797
+ end
798
+
799
+ it "should not parse_arguments if run(nil) is called" do
800
+ @yardoc.should_not_receive(:parse_arguments)
801
+ @yardoc.run(nil)
802
+ end
803
+ end
804
+ end