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,176 @@
1
+ require File.join(File.dirname(__FILE__), "spec_helper")
2
+
3
+ require 'yaml'
4
+
5
+ describe YARD::Config do
6
+ describe '.load' do
7
+ before do
8
+ File.should_receive(:file?).twice.with(CLI::Yardoc::DEFAULT_YARDOPTS_FILE).and_return(false)
9
+ end
10
+
11
+ it "should use default options if no ~/.yard/config is found" do
12
+ File.should_receive(:file?).with(YARD::Config::IGNORED_PLUGINS).and_return(false)
13
+ File.should_receive(:file?).with(YARD::Config::CONFIG_FILE).and_return(false)
14
+ YARD::Config.load
15
+ YARD::Config.options.should == YARD::Config::DEFAULT_CONFIG_OPTIONS
16
+ end
17
+
18
+ it "should overwrite options with data in ~/.yard/config" do
19
+ File.should_receive(:file?).with(YARD::Config::CONFIG_FILE).and_return(true)
20
+ File.should_receive(:file?).with(YARD::Config::IGNORED_PLUGINS).and_return(false)
21
+ YAML.should_receive(:load_file).with(YARD::Config::CONFIG_FILE).and_return({'test' => true})
22
+ YARD::Config.load
23
+ YARD::Config.options[:test].should be_true
24
+ end
25
+
26
+ it "should ignore any plugins specified in '~/.yard/ignored_plugins'" do
27
+ File.should_receive(:file?).with(YARD::Config::CONFIG_FILE).and_return(false)
28
+ File.should_receive(:file?).with(YARD::Config::IGNORED_PLUGINS).and_return(true)
29
+ File.should_receive(:read).with(YARD::Config::IGNORED_PLUGINS).and_return('yard-plugin plugin2')
30
+ YARD::Config.load
31
+ YARD::Config.options[:ignored_plugins].should == ['yard-plugin', 'yard-plugin2']
32
+ YARD::Config.should_not_receive(:require).with('yard-plugin2')
33
+ YARD::Config.load_plugin('yard-plugin2').should == false
34
+ end
35
+
36
+ it "should load safe_mode setting from --safe command line option" do
37
+ File.should_receive(:file?).with(YARD::Config::IGNORED_PLUGINS).and_return(false)
38
+ File.should_receive(:file?).with(YARD::Config::CONFIG_FILE).and_return(false)
39
+ ARGV.replace(['--safe'])
40
+ YARD::Config.load
41
+ YARD::Config.options[:safe_mode].should be_true
42
+ ARGV.replace([''])
43
+ end
44
+ end
45
+
46
+ describe '.save' do
47
+ it "should save options to config file" do
48
+ YARD::Config.stub!(:options).and_return(:a => 1, :b => %w(a b c))
49
+ file = mock(:file)
50
+ File.should_receive(:open).with(YARD::Config::CONFIG_FILE, 'w').and_yield(file)
51
+ file.should_receive(:write).with(YAML.dump(:a => 1, :b => %w(a b c)))
52
+ YARD::Config.save
53
+ end
54
+ end
55
+
56
+ describe '.load_plugin' do
57
+ it "should load a plugin by 'name' as 'yard-name'" do
58
+ YARD::Config.should_receive(:require).with('yard-foo')
59
+ log.should_receive(:debug).with(/Loading plugin 'yard-foo'/).once
60
+ YARD::Config.load_plugin('foo').should == true
61
+ end
62
+
63
+ it "should not load plugins like 'doc-*'" do
64
+ YARD::Config.should_not_receive(:require).with('yard-doc-core')
65
+ YARD::Config.load_plugin('doc-core')
66
+ YARD::Config.load_plugin('yard-doc-core')
67
+ end
68
+
69
+ it "should load plugin by 'yard-name' as 'yard-name'" do
70
+ YARD::Config.should_receive(:require).with('yard-foo')
71
+ log.should_receive(:debug).with(/Loading plugin 'yard-foo'/).once
72
+ YARD::Config.load_plugin('yard-foo').should == true
73
+ end
74
+
75
+ it "should load plugin by 'yard_name' as 'yard_name'" do
76
+ YARD::Config.should_receive(:require).with('yard_foo')
77
+ log.should_receive(:debug).with(/Loading plugin 'yard_foo'/).once
78
+ log.show_backtraces = false
79
+ YARD::Config.load_plugin('yard_foo').should == true
80
+ end
81
+
82
+ it "should log error if plugin is not found" do
83
+ YARD::Config.should_receive(:require).with('yard-foo').and_raise(LoadError)
84
+ log.should_receive(:warn).with(/Error loading plugin 'yard-foo'/).once
85
+ YARD::Config.load_plugin('yard-foo').should == false
86
+ end
87
+
88
+ it "should sanitize plugin name (remove /'s)" do
89
+ YARD::Config.should_receive(:require).with('yard-foofoo')
90
+ YARD::Config.load_plugin('foo/foo').should == true
91
+ end
92
+
93
+ it "should ignore plugins in :ignore_plugins" do
94
+ YARD::Config.stub!(:options).and_return(:ignored_plugins => ['yard-foo', 'yard-bar'])
95
+ YARD::Config.load_plugin('foo').should == false
96
+ YARD::Config.load_plugin('bar').should == false
97
+ end
98
+ end
99
+
100
+ describe '.load_plugins' do
101
+ it "should load gem plugins if :load_plugins is true" do
102
+ YARD::Config.stub!(:options).and_return(:load_plugins => true, :ignored_plugins => [], :autoload_plugins => [])
103
+ YARD::Config.stub!(:load_plugin)
104
+ YARD::Config.should_receive(:require).with('rubygems')
105
+ YARD::Config.load_plugins
106
+ end
107
+
108
+ it "should ignore gem loading if RubyGems cannot load" do
109
+ YARD::Config.stub!(:options).and_return(:load_plugins => true, :ignored_plugins => [], :autoload_plugins => [])
110
+ YARD::Config.should_receive(:require).with('rubygems').and_raise(LoadError)
111
+ YARD::Config.load_plugins.should == false
112
+ end
113
+
114
+ it "should load certain plugins automatically when specified in :autoload_plugins" do
115
+ File.should_receive(:file?).with(CLI::Yardoc::DEFAULT_YARDOPTS_FILE).and_return(false)
116
+ YARD::Config.stub!(:options).and_return(:load_plugins => false, :ignored_plugins => [], :autoload_plugins => ['yard-plugin'])
117
+ YARD::Config.should_receive(:require).with('yard-plugin').and_return(true)
118
+ YARD::Config.load_plugins.should == true
119
+ end
120
+
121
+ it "should parse --plugin from command line arguments" do
122
+ YARD::Config.should_receive(:arguments).at_least(1).times.and_return(%w(--plugin foo --plugin bar a b c))
123
+ YARD::Config.should_receive(:load_plugin).with('foo').and_return(true)
124
+ YARD::Config.should_receive(:load_plugin).with('bar').and_return(true)
125
+ YARD::Config.load_plugins.should == true
126
+ end
127
+
128
+ it "should load --plugin arguments from .yardopts" do
129
+ File.should_receive(:file?).with(CLI::Yardoc::DEFAULT_YARDOPTS_FILE).twice.and_return(true)
130
+ File.should_receive(:file?).with(YARD::Config::CONFIG_FILE).and_return(false)
131
+ File.should_receive(:file?).with(YARD::Config::IGNORED_PLUGINS).and_return(false)
132
+ File.should_receive(:read_binary).with(CLI::Yardoc::DEFAULT_YARDOPTS_FILE).twice.and_return('--plugin foo')
133
+ YARD::Config.should_receive(:load_plugin).with('foo')
134
+ YARD::Config.load
135
+ end
136
+
137
+ it "should load any gem plugins starting with 'yard_' or 'yard-'" do
138
+ File.should_receive(:file?).with(CLI::Yardoc::DEFAULT_YARDOPTS_FILE).and_return(false)
139
+ YARD::Config.stub!(:options).and_return(:load_plugins => true, :ignored_plugins => ['yard_plugin'], :autoload_plugins => [])
140
+ plugins = {
141
+ 'yard' => mock('yard'),
142
+ 'yard_plugin' => mock('yard_plugin'),
143
+ 'yard-plugin' => mock('yard-plugin'),
144
+ 'my-yard-plugin' => mock('yard-plugin'),
145
+ 'rspec' => mock('rspec'),
146
+ }
147
+ plugins.each do |k, v|
148
+ v.should_receive(:name).at_least(1).times.and_return(k)
149
+ end
150
+
151
+ source_mock = mock(:source_index)
152
+ source_mock.should_receive(:find_name).with('').and_return(plugins.values)
153
+ Gem.should_receive(:source_index).and_return(source_mock)
154
+ YARD::Config.should_receive(:load_plugin).with('yard_plugin').and_return(false)
155
+ YARD::Config.should_receive(:load_plugin).with('yard-plugin').and_return(true)
156
+ YARD::Config.load_plugins.should == true
157
+ end
158
+
159
+ it "should log an error if a gem raises an error" do
160
+ YARD::Config.stub!(:options).and_return(:load_plugins => true, :ignored_plugins => [], :autoload_plugins => [])
161
+ plugins = {
162
+ 'yard-plugin' => mock('yard-plugin')
163
+ }
164
+ plugins.each do |k, v|
165
+ v.should_receive(:name).at_least(1).times.and_return(k)
166
+ end
167
+
168
+ source_mock = mock(:source_index)
169
+ source_mock.should_receive(:find_name).with('').and_return(plugins.values)
170
+ Gem.should_receive(:source_index).and_return(source_mock)
171
+ YARD::Config.should_receive(:load_plugin).with('yard-plugin').and_raise(Gem::LoadError)
172
+ log.should_receive(:warn).with(/Error loading plugin 'yard-plugin'/)
173
+ YARD::Config.load_plugins.should == false
174
+ end
175
+ end
176
+ end
@@ -0,0 +1,14 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Array do
4
+ describe '#place' do
5
+ it "should create an Insertion object" do
6
+ [].place('x').should be_kind_of(Insertion)
7
+ end
8
+
9
+ it "should allow multiple objects to be placed" do
10
+ [1, 2].place('x', 'y', 'z').before(2).should == [1, 'x', 'y', 'z', 2]
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,68 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe File do
4
+ describe ".relative_path" do
5
+ it "should return the relative path between two files" do
6
+ File.relative_path('a/b/c/d.html', 'a/b/d/q.html').should == '../d/q.html'
7
+ end
8
+
9
+ it "should return the relative path between two directories" do
10
+ File.relative_path('a/b/c/d/', 'a/b/d/').should == '../d'
11
+ end
12
+
13
+ it "should return only the to file if from file is in the same directory as the to file" do
14
+ File.relative_path('a/b/c/d', 'a/b/c/e').should == 'e'
15
+ end
16
+
17
+ it "should handle non-normalized paths" do
18
+ File.relative_path('Hello/./I/Am/Fred', 'Hello/Fred').should == '../../Fred'
19
+ File.relative_path('A//B/C', 'Q/X').should == '../../Q/X'
20
+ end
21
+ end
22
+
23
+ describe '.cleanpath' do
24
+ it "should clean double brackets" do
25
+ File.cleanpath('A//B/C').should == "A/B/C"
26
+ end
27
+
28
+ it "should clean a path with ." do
29
+ File.cleanpath('Hello/./I/.Am/Fred').should == "Hello/I/.Am/Fred"
30
+ end
31
+
32
+ it "should clean a path with .." do
33
+ File.cleanpath('Hello/../World').should == "World"
34
+ end
35
+
36
+ it "should clean a path with multiple .." do
37
+ File.cleanpath('A/B/C/../../D').should == "A/D"
38
+ end
39
+
40
+ it "should clean a path ending in .." do
41
+ File.cleanpath('A/B/C/D/..').should == "A/B/C"
42
+ end
43
+
44
+ it "should pass the initial directory" do
45
+ File.cleanpath('C/../../D').should == "../D"
46
+ end
47
+
48
+ it "should not remove multiple '../' at the beginning" do
49
+ File.cleanpath('../../A/B').should == '../../A/B'
50
+ end
51
+ end
52
+
53
+ describe '.open!' do
54
+ it "should create the path before opening" do
55
+ File.should_receive(:directory?).with('/path/to').and_return(false)
56
+ FileUtils.should_receive(:mkdir_p).with('/path/to')
57
+ File.should_receive(:open).with('/path/to/file', 'w')
58
+ File.open!('/path/to/file', 'w')
59
+ end
60
+
61
+ it "should just open the file if the path exists" do
62
+ File.should_receive(:directory?).with('/path/to').and_return(true)
63
+ FileUtils.should_not_receive(:mkdir_p)
64
+ File.should_receive(:open).with('/path/to/file', 'w')
65
+ File.open!('/path/to/file', 'w')
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,14 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Hash do
4
+ describe '.[]' do
5
+ it "should accept an Array argument (Ruby 1.8.6 and older)" do
6
+ list = [['foo', 'bar'], ['foo2', 'bar2']]
7
+ Hash[list].should == {'foo' => 'bar', 'foo2' => 'bar2'}
8
+ end
9
+
10
+ it "should accept an array as a key" do
11
+ Hash[['a', 'b'], 1].should == {['a', 'b'] => 1}
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,37 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Insertion do
4
+ describe '#before' do
5
+ it "should place an object before another" do
6
+ [1, 2].place(3).before(2).should == [1, 3, 2]
7
+ [1, 2].place(3).before(1).should == [3, 1, 2]
8
+ [1, [4], 2].place(3).before(2).should == [1, [4], 3, 2]
9
+ end
10
+ end
11
+
12
+ describe '#after' do
13
+ it "should place an object after another" do
14
+ [1, 2].place(3).after(2).should == [1, 2, 3]
15
+ end
16
+
17
+ it "should no longer place an object after another and its subsections (0.6)" do
18
+ [1, [2]].place(3).after(1).should == [1, 3, [2]]
19
+ end
20
+
21
+ it "should place an array after an object" do
22
+ [1, 2, 3].place([4]).after(1).should == [1, [4], 2, 3]
23
+ end
24
+ end
25
+
26
+ describe '#before_any' do
27
+ it "should place an object before another anywhere inside list (including sublists)" do
28
+ [1, 2, [3]].place(4).before_any(3).should == [1, 2, [4, 3]]
29
+ end
30
+ end
31
+
32
+ describe '#after_any' do
33
+ it "should place an object after another anywhere inside list (including sublists)" do
34
+ [1, 2, [3]].place(4).after_any(3).should == [1, 2, [3, 4]]
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,15 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Module do
4
+ describe '#class_name' do
5
+ it "should return just the name of the class/module" do
6
+ YARD::CodeObjects::Base.class_name.should == "Base"
7
+ end
8
+ end
9
+
10
+ describe '#namespace' do
11
+ it "should return everything before the class name" do
12
+ YARD::CodeObjects::Base.namespace_name.should == "YARD::CodeObjects"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,42 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ #described_in_docs String, '#camelcase'
4
+ #described_in_docs String, '#underscore'
5
+
6
+ describe String do
7
+ describe '#shell_split' do
8
+ it "should split simple non-quoted text" do
9
+ "a b c".shell_split.should == %w(a b c)
10
+ end
11
+
12
+ it "should split double quoted text into single token" do
13
+ 'a "b c d" e'.shell_split.should == ["a", "b c d", "e"]
14
+ end
15
+
16
+ it "should split single quoted text into single token" do
17
+ "a 'b c d' e".shell_split.should == ["a", "b c d", "e"]
18
+ end
19
+
20
+ it "should handle escaped quotations in quotes" do
21
+ "'a \\' b'".shell_split.should == ["a ' b"]
22
+ end
23
+
24
+ it "should handle escaped quotations outside quotes" do
25
+ "\\'a 'b'".shell_split.should == %w('a b)
26
+ end
27
+
28
+ it "should handle escaped backslash" do
29
+ "\\\\'a b c'".shell_split.should == ['\a b c']
30
+ end
31
+
32
+ it "should handle any whitespace as space" do
33
+ text = "foo\tbar\nbaz\r\nfoo2 bar2"
34
+ text.shell_split.should == %w(foo bar baz foo2 bar2)
35
+ end
36
+
37
+ it "should handle complex input" do
38
+ text = "hello \\\"world \"1 2\\\" 3\" a 'b \"\\\\\\'' c"
39
+ text.shell_split.should == ["hello", "\"world", "1 2\" 3", "a", "b \"\\'", "c"]
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,86 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
+
3
+ describe SymbolHash do
4
+
5
+ it "should allow access to keys as String or Symbol" do
6
+ h = SymbolHash.new(false)
7
+ h['test'] = true
8
+ h[:test].should == true
9
+ h['test'].should == true
10
+ end
11
+
12
+ it "should #delete by key as String or Symbol" do
13
+ h = SymbolHash.new
14
+ h.keys.length.should == 0
15
+
16
+ h['test'] = true
17
+ h.keys.length.should == 1
18
+
19
+ h.delete(:test)
20
+ h.keys.length.should == 0
21
+
22
+ h[:test] = true
23
+ h.keys.length.should == 1
24
+
25
+ h.delete('test')
26
+ h.keys.length.should == 0
27
+ end
28
+
29
+ it "should return same #has_key? for key as String or Symbol" do
30
+ h = SymbolHash.new
31
+ h[:test] = 1
32
+ h.has_key?(:test).should == true
33
+ h.has_key?('test').should == true
34
+ end
35
+
36
+ it "should symbolize value if it is a String (and only a string)" do
37
+ class Substring < String; end
38
+
39
+ h = SymbolHash.new
40
+ h['test1'] = "hello"
41
+ h['test2'] = Substring.new("hello")
42
+ h['test1'].should == :hello
43
+ h['test2'].should == "hello"
44
+ end
45
+
46
+ it "should not symbolize value if SymbolHash.new(false) is created" do
47
+ h = SymbolHash.new(false)
48
+ h['test'] = "hello"
49
+ h[:test].should == "hello"
50
+ end
51
+
52
+ it "should not symbolize value if it is not a String" do
53
+ h = SymbolHash.new
54
+ h['test'] = [1,2,3]
55
+ h['test'].should == [1,2,3]
56
+ end
57
+
58
+ it "should support symbolization using #update or #merge!" do
59
+ h = SymbolHash.new
60
+ h.update('test' => 'value')
61
+ h[:test].should == :value
62
+ h.merge!('test' => 'value2')
63
+ h[:test].should == :value2
64
+ end
65
+
66
+ it "should support symbolization non-destructively using #merge" do
67
+ h = SymbolHash.new
68
+ h.merge('test' => 'value')[:test].should == :value
69
+ h.should == SymbolHash.new
70
+ end
71
+
72
+ it "should support #initializing of a hash" do
73
+ h = SymbolHash[:test => 1]
74
+ h[:test].should == 1
75
+ h[:somethingelse].should be_nil
76
+ end
77
+
78
+ it "should support reverse merge syntax" do
79
+ opts = {}
80
+ opts = SymbolHash[
81
+ 'default' => 1
82
+ ].update(opts)
83
+ opts.keys.should == [:default]
84
+ opts[:default].should == 1
85
+ end
86
+ end
@@ -0,0 +1,228 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe YARD::DocstringParser do
4
+ after(:all) do
5
+ YARD::Registry.clear
6
+ end
7
+
8
+ def parse(content, object = nil, handler = nil)
9
+ @library ||= Tags::Library.instance
10
+ @parser = DocstringParser.new(@library)
11
+ @parser.parse(content, object, handler)
12
+ @parser
13
+ end
14
+
15
+ def docstring(content, object = nil, handler = nil)
16
+ parse(content, object, handler).to_docstring
17
+ end
18
+
19
+ describe '#parse' do
20
+ it "should parse comments into tags" do
21
+ doc = docstring(<<-eof)
22
+ @param name Hello world
23
+ how are you?
24
+ @param name2
25
+ this is a new line
26
+ @param name3 and this
27
+ is a new paragraph:
28
+
29
+ right here.
30
+ eof
31
+ tags = doc.tags(:param)
32
+ tags[0].name.should == "name"
33
+ tags[0].text.should == "Hello world\nhow are you?"
34
+ tags[1].name.should == "name2"
35
+ tags[1].text.should == "this is a new line"
36
+ tags[2].name.should == "name3"
37
+ tags[2].text.should == "and this\nis a new paragraph:\n\nright here."
38
+ end
39
+
40
+ it "should end parsing a tag on de-dent" do
41
+ doc = docstring(<<-eof)
42
+ @note test
43
+ one two three
44
+ rest of docstring
45
+ eof
46
+ doc.tag(:note).text.should == "test\none two three"
47
+ doc.should == "rest of docstring"
48
+ end
49
+
50
+ it "should parse examples embedded in doc" do
51
+ doc = docstring(<<-eof)
52
+ test string here
53
+ @example code
54
+
55
+ def foo(x, y, z)
56
+ end
57
+
58
+ class A; end
59
+
60
+ more stuff
61
+ eof
62
+ doc.should == "test string here\nmore stuff"
63
+ doc.tag(:example).text.should == "\ndef foo(x, y, z)\nend\n\nclass A; end"
64
+ end
65
+
66
+ it "should remove only original indentation from beginning of line in tags" do
67
+ doc = docstring(<<-eof)
68
+ @param name
69
+ some value
70
+ foo bar
71
+ baz
72
+ eof
73
+ doc.tag(:param).text.should == "some value\nfoo bar\n baz"
74
+ end
75
+
76
+ it "should allow numbers in tags" do
77
+ Tags::Library.define_tag(nil, :foo1)
78
+ Tags::Library.define_tag(nil, :foo2)
79
+ Tags::Library.define_tag(nil, :foo3)
80
+ doc = docstring(<<-eof)
81
+ @foo1 bar1
82
+ @foo2 bar2
83
+ @foo3 bar3
84
+ eof
85
+ doc.tag(:foo1).text.should == "bar1"
86
+ doc.tag(:foo2).text.should == "bar2"
87
+ end
88
+
89
+ it "should end tag on newline if next line is not indented" do
90
+ doc = docstring(<<-eof)
91
+ @author bar1
92
+ @api bar2
93
+ Hello world
94
+ eof
95
+ doc.tag(:author).text.should == "bar1"
96
+ doc.tag(:api).text.should == "bar2"
97
+ end
98
+
99
+ it "should warn about unknown tag" do
100
+ log.should_receive(:warn).with(/Unknown tag @hello$/)
101
+ docstring("@hello world")
102
+ end
103
+
104
+ it "should not add trailing whitespace to freeform tags" do
105
+ doc = docstring("@api private \t ")
106
+ doc.tag(:api).text.should == "private"
107
+ end
108
+ end
109
+
110
+ describe '#parse with custom tag library' do
111
+ class TestLibrary < Tags::Library; end
112
+
113
+ before { @library = TestLibrary.new }
114
+
115
+ it "should accept valid tags" do
116
+ valid = %w( testing valid is_a is_A __ )
117
+ valid.each do |tag|
118
+ TestLibrary.define_tag("Tag", tag)
119
+ doc = docstring('@' + tag + ' foo bar')
120
+ doc.tag(tag).text.should == 'foo bar'
121
+ end
122
+ end
123
+
124
+ it "should not parse invalid tag names" do
125
+ invalid = %w( @ @return@ @param, @x-y @.x.y.z )
126
+ invalid.each do |tag|
127
+ docstring(tag + ' foo bar').should == tag + ' foo bar'
128
+ end
129
+ end
130
+
131
+ it "should allow namespaced tags in the form @x.y.z" do
132
+ TestLibrary.define_tag("Tag", 'x.y.z')
133
+ doc = docstring("@x.y.z foo bar")
134
+ doc.tag('x.y.z').text.should == 'foo bar'
135
+ end
136
+
137
+ it "should ignore new directives without @! prefix syntax" do
138
+ TestLibrary.define_directive('dir1', Tags::ScopeDirective)
139
+ log.should_receive(:warn).with(/@dir1/)
140
+ docstring("@dir1")
141
+ end
142
+
143
+ %w(attribute endgroup group macro method scope visibility).each do |tag|
144
+ it "should handle non prefixed @#{tag} syntax as directive, not tag" do
145
+ TestLibrary.define_directive(tag, Tags::ScopeDirective)
146
+ parse("@#{tag}")
147
+ @parser.directives.first.should be_a(Tags::ScopeDirective)
148
+ end
149
+ end
150
+
151
+ it "should handle directives with @! prefix syntax" do
152
+ TestLibrary.define_directive('dir1', Tags::ScopeDirective)
153
+ docstring("@!dir1 class")
154
+ @parser.state.scope.should == :class
155
+ end
156
+ end
157
+
158
+ describe '#text' do
159
+ it "should only return text data" do
160
+ parse("Foo\n@param foo x y z\nBar")
161
+ @parser.text.should == "Foo\nBar"
162
+ end
163
+ end
164
+
165
+ describe '#raw_text' do
166
+ it "should return the entire original data" do
167
+ data = "Foo\n@param foo x y z\nBar"
168
+ parse(data)
169
+ @parser.raw_text.should == data
170
+ end
171
+ end
172
+
173
+ describe '#tags' do
174
+ it "should return the parsed tags" do
175
+ data = "Foo\n@param foo x y z\nBar"
176
+ parse(data)
177
+ @parser.tags.size.should == 1
178
+ @parser.tags.first.tag_name.should == 'param'
179
+ end
180
+ end
181
+
182
+ describe '#directives' do
183
+ it "should group all processed directives" do
184
+ data = "Foo\n@!scope class\n@!visibility private\nBar"
185
+ parse(data)
186
+ dirs = @parser.directives
187
+ dirs.size == 2
188
+ dirs[0].should be_a(Tags::ScopeDirective)
189
+ dirs[0].tag.text.should == 'class'
190
+ dirs[1].should be_a(Tags::VisibilityDirective)
191
+ dirs[1].tag.text.should == 'private'
192
+ end
193
+ end
194
+
195
+ describe '#state' do
196
+ it "should handle modified state" do
197
+ parse("@!scope class")
198
+ @parser.state.scope.should == :class
199
+ end
200
+ end
201
+
202
+ describe 'after_parse' do
203
+ it "should allow specifying of callbacks" do
204
+ parser = DocstringParser.new
205
+ the_yielded_obj = nil
206
+ DocstringParser.after_parse {|obj| the_yielded_obj = obj }
207
+ parser.parse("Some text")
208
+ the_yielded_obj.should == parser
209
+ end
210
+
211
+ it "should warn about invalid named parameters" do
212
+ log.should_receive(:warn).with(/@param tag has unknown parameter name: notaparam/)
213
+ YARD.parse_string <<-eof
214
+ # @param notaparam foo
215
+ def foo(a) end
216
+ eof
217
+ end
218
+
219
+ it "should warn about duplicate named parameters" do
220
+ log.should_receive(:warn).with(/@param tag has duplicate parameter name: a/)
221
+ YARD.parse_string <<-eof
222
+ # @param a foo
223
+ # @param a foo
224
+ def foo(a) end
225
+ eof
226
+ end
227
+ end
228
+ end