laser 0.7.0.pre1

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 (319) hide show
  1. data/.document +5 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +14 -0
  4. data/LICENSE +661 -0
  5. data/README.md +158 -0
  6. data/Rakefile +104 -0
  7. data/VERSION +1 -0
  8. data/bin/laser +7 -0
  9. data/design_docs/goals.md +57 -0
  10. data/design_docs/object_regex.md +426 -0
  11. data/design_docs/type_annotations.md +80 -0
  12. data/ext/laser/BasicBlock.cpp +572 -0
  13. data/ext/laser/BasicBlock.h +118 -0
  14. data/ext/laser/extconf.rb +3 -0
  15. data/features/laser.feature +25 -0
  16. data/features/step_definitions/laser_steps.rb +39 -0
  17. data/features/support/env.rb +14 -0
  18. data/features/support/testdata/1_input +1 -0
  19. data/features/support/testdata/1_output +1 -0
  20. data/features/support/testdata/2_input +4 -0
  21. data/features/support/testdata/2_output +4 -0
  22. data/features/support/testdata/3_input +8 -0
  23. data/features/support/testdata/3_output +11 -0
  24. data/features/support/testdata/4_input +5 -0
  25. data/features/support/testdata/4_output +5 -0
  26. data/features/support/testdata/5_input +13 -0
  27. data/laser.gemspec +382 -0
  28. data/lib/laser.rb +98 -0
  29. data/lib/laser/analysis/annotations.rb +95 -0
  30. data/lib/laser/analysis/annotations/annotation_config.yaml +3 -0
  31. data/lib/laser/analysis/annotations/comment_attachment_annotation.rb +66 -0
  32. data/lib/laser/analysis/annotations/node_pointers_annotation.rb +36 -0
  33. data/lib/laser/analysis/annotations/runtime_annotation.rb +55 -0
  34. data/lib/laser/analysis/argument_expansion.rb +132 -0
  35. data/lib/laser/analysis/arity.rb +34 -0
  36. data/lib/laser/analysis/bindings.rb +144 -0
  37. data/lib/laser/analysis/bootstrap/bootstrap.rb +298 -0
  38. data/lib/laser/analysis/bootstrap/laser_class.rb +106 -0
  39. data/lib/laser/analysis/bootstrap/laser_method.rb +255 -0
  40. data/lib/laser/analysis/bootstrap/laser_module.rb +403 -0
  41. data/lib/laser/analysis/bootstrap/laser_module_copy.rb +74 -0
  42. data/lib/laser/analysis/bootstrap/laser_object.rb +69 -0
  43. data/lib/laser/analysis/bootstrap/laser_proc.rb +150 -0
  44. data/lib/laser/analysis/bootstrap/laser_singleton_class.rb +44 -0
  45. data/lib/laser/analysis/comments.rb +35 -0
  46. data/lib/laser/analysis/control_flow.rb +28 -0
  47. data/lib/laser/analysis/control_flow/alias_analysis.rb +31 -0
  48. data/lib/laser/analysis/control_flow/basic_block.rb +105 -0
  49. data/lib/laser/analysis/control_flow/cfg_builder.rb +2505 -0
  50. data/lib/laser/analysis/control_flow/cfg_instruction.rb +190 -0
  51. data/lib/laser/analysis/control_flow/constant_propagation.rb +742 -0
  52. data/lib/laser/analysis/control_flow/control_flow_graph.rb +370 -0
  53. data/lib/laser/analysis/control_flow/lifetime_analysis.rb +91 -0
  54. data/lib/laser/analysis/control_flow/method_call_search.rb +26 -0
  55. data/lib/laser/analysis/control_flow/raise_properties.rb +25 -0
  56. data/lib/laser/analysis/control_flow/simulation.rb +385 -0
  57. data/lib/laser/analysis/control_flow/static_single_assignment.rb +185 -0
  58. data/lib/laser/analysis/control_flow/unreachability_analysis.rb +57 -0
  59. data/lib/laser/analysis/control_flow/unused_variables.rb +91 -0
  60. data/lib/laser/analysis/control_flow/yield_properties.rb +103 -0
  61. data/lib/laser/analysis/errors.rb +131 -0
  62. data/lib/laser/analysis/laser_utils.rb +18 -0
  63. data/lib/laser/analysis/lexical_analysis.rb +172 -0
  64. data/lib/laser/analysis/method_call.rb +68 -0
  65. data/lib/laser/analysis/protocol_registry.rb +30 -0
  66. data/lib/laser/analysis/scope.rb +118 -0
  67. data/lib/laser/analysis/sexp.rb +159 -0
  68. data/lib/laser/analysis/sexp_analysis.rb +40 -0
  69. data/lib/laser/analysis/sexp_extensions/constant_extraction.rb +115 -0
  70. data/lib/laser/analysis/sexp_extensions/source_location.rb +164 -0
  71. data/lib/laser/analysis/sexp_extensions/type_inference.rb +47 -0
  72. data/lib/laser/analysis/signature.rb +76 -0
  73. data/lib/laser/analysis/special_methods/send.rb +67 -0
  74. data/lib/laser/analysis/unused_methods.rb +21 -0
  75. data/lib/laser/analysis/visitor.rb +141 -0
  76. data/lib/laser/annotation_parser/annotations.treetop +126 -0
  77. data/lib/laser/annotation_parser/annotations_parser.rb +748 -0
  78. data/lib/laser/annotation_parser/class_annotations.treetop +82 -0
  79. data/lib/laser/annotation_parser/class_annotations_parser.rb +654 -0
  80. data/lib/laser/annotation_parser/overload.treetop +24 -0
  81. data/lib/laser/annotation_parser/overload_parser.rb +167 -0
  82. data/lib/laser/annotation_parser/parsers.rb +6 -0
  83. data/lib/laser/annotation_parser/structural.treetop +37 -0
  84. data/lib/laser/annotation_parser/structural_parser.rb +406 -0
  85. data/lib/laser/annotation_parser/useful_parsers.treetop +47 -0
  86. data/lib/laser/annotation_parser/useful_parsers_parser.rb +674 -0
  87. data/lib/laser/rake/task.rb +46 -0
  88. data/lib/laser/runner.rb +189 -0
  89. data/lib/laser/scanner.rb +169 -0
  90. data/lib/laser/standard_library/_thread.rb +110 -0
  91. data/lib/laser/standard_library/abbrev.rb +103 -0
  92. data/lib/laser/standard_library/array.rb +418 -0
  93. data/lib/laser/standard_library/base64.rb +91 -0
  94. data/lib/laser/standard_library/basic_object.rb +55 -0
  95. data/lib/laser/standard_library/benchmark.rb +556 -0
  96. data/lib/laser/standard_library/bignum.rb +185 -0
  97. data/lib/laser/standard_library/cgi.rb +275 -0
  98. data/lib/laser/standard_library/cgi/cookie.rb +147 -0
  99. data/lib/laser/standard_library/cgi/core.rb +791 -0
  100. data/lib/laser/standard_library/cgi/html.rb +1021 -0
  101. data/lib/laser/standard_library/cgi/session.rb +537 -0
  102. data/lib/laser/standard_library/cgi/session/pstore.rb +111 -0
  103. data/lib/laser/standard_library/cgi/util.rb +188 -0
  104. data/lib/laser/standard_library/class_definitions.rb +333 -0
  105. data/lib/laser/standard_library/comparable.rb +125 -0
  106. data/lib/laser/standard_library/complex.rb +162 -0
  107. data/lib/laser/standard_library/enumerable.rb +178 -0
  108. data/lib/laser/standard_library/exceptions.rb +135 -0
  109. data/lib/laser/standard_library/fixnum.rb +188 -0
  110. data/lib/laser/standard_library/float.rb +180 -0
  111. data/lib/laser/standard_library/hash.rb +237 -0
  112. data/lib/laser/standard_library/integer.rb +123 -0
  113. data/lib/laser/standard_library/laser_magic.rb +7 -0
  114. data/lib/laser/standard_library/nil_false_true.rb +113 -0
  115. data/lib/laser/standard_library/numbers.rb +192 -0
  116. data/lib/laser/standard_library/proc.rb +31 -0
  117. data/lib/laser/standard_library/set.rb +1348 -0
  118. data/lib/laser/standard_library/string.rb +666 -0
  119. data/lib/laser/standard_library/stringio.rb +2 -0
  120. data/lib/laser/standard_library/symbol.rb +125 -0
  121. data/lib/laser/standard_library/tsort.rb +242 -0
  122. data/lib/laser/support/acts_as_struct.rb +66 -0
  123. data/lib/laser/support/frequency.rb +55 -0
  124. data/lib/laser/support/inheritable_attributes.rb +145 -0
  125. data/lib/laser/support/module_extensions.rb +94 -0
  126. data/lib/laser/support/placeholder_object.rb +13 -0
  127. data/lib/laser/third_party/rgl/adjacency.rb +221 -0
  128. data/lib/laser/third_party/rgl/base.rb +228 -0
  129. data/lib/laser/third_party/rgl/bidirectional.rb +39 -0
  130. data/lib/laser/third_party/rgl/condensation.rb +47 -0
  131. data/lib/laser/third_party/rgl/connected_components.rb +138 -0
  132. data/lib/laser/third_party/rgl/control_flow.rb +170 -0
  133. data/lib/laser/third_party/rgl/depth_first_spanning_tree.rb +37 -0
  134. data/lib/laser/third_party/rgl/dominators.rb +124 -0
  135. data/lib/laser/third_party/rgl/dot.rb +93 -0
  136. data/lib/laser/third_party/rgl/graphxml.rb +51 -0
  137. data/lib/laser/third_party/rgl/implicit.rb +174 -0
  138. data/lib/laser/third_party/rgl/mutable.rb +117 -0
  139. data/lib/laser/third_party/rgl/rdot.rb +445 -0
  140. data/lib/laser/third_party/rgl/topsort.rb +72 -0
  141. data/lib/laser/third_party/rgl/transitivity.rb +180 -0
  142. data/lib/laser/third_party/rgl/traversal.rb +348 -0
  143. data/lib/laser/types/types.rb +433 -0
  144. data/lib/laser/version.rb +14 -0
  145. data/lib/laser/warning.rb +149 -0
  146. data/lib/laser/warning_sets/default.yml +13 -0
  147. data/lib/laser/warnings/assignment_in_condition.rb +20 -0
  148. data/lib/laser/warnings/comment_spacing.rb +31 -0
  149. data/lib/laser/warnings/extra_blank_lines.rb +30 -0
  150. data/lib/laser/warnings/extra_whitespace.rb +16 -0
  151. data/lib/laser/warnings/hash_symbol_18_warning.rb +63 -0
  152. data/lib/laser/warnings/hash_symbol_19_warning.rb +29 -0
  153. data/lib/laser/warnings/line_length.rb +115 -0
  154. data/lib/laser/warnings/misaligned_unindentation.rb +17 -0
  155. data/lib/laser/warnings/operator_spacing.rb +68 -0
  156. data/lib/laser/warnings/parens_on_declaration.rb +30 -0
  157. data/lib/laser/warnings/rescue_exception.rb +42 -0
  158. data/lib/laser/warnings/semicolon.rb +25 -0
  159. data/lib/laser/warnings/sexp_errors.rb +24 -0
  160. data/lib/laser/warnings/uncalled_method_warning.rb +7 -0
  161. data/lib/laser/warnings/useless_double_quotes.rb +38 -0
  162. data/spec/analysis_specs/annotations_spec.rb +47 -0
  163. data/spec/analysis_specs/annotations_specs/comment_attachment_spec.rb +68 -0
  164. data/spec/analysis_specs/annotations_specs/node_pointers_annotation_spec.rb +90 -0
  165. data/spec/analysis_specs/annotations_specs/runtime_annotation_spec.rb +135 -0
  166. data/spec/analysis_specs/annotations_specs/spec_helper.rb +33 -0
  167. data/spec/analysis_specs/argument_expansion_spec.rb +113 -0
  168. data/spec/analysis_specs/bindings_spec.rb +36 -0
  169. data/spec/analysis_specs/comment_spec.rb +93 -0
  170. data/spec/analysis_specs/control_flow_specs/cfg_instruction_spec.rb +111 -0
  171. data/spec/analysis_specs/control_flow_specs/constant_propagation_spec.rb +560 -0
  172. data/spec/analysis_specs/control_flow_specs/control_flow_graph_spec.rb +5 -0
  173. data/spec/analysis_specs/control_flow_specs/raise_properties_spec.rb +310 -0
  174. data/spec/analysis_specs/control_flow_specs/raise_type_inference_spec.rb +301 -0
  175. data/spec/analysis_specs/control_flow_specs/return_type_inference_spec.rb +431 -0
  176. data/spec/analysis_specs/control_flow_specs/simulation_spec.rb +158 -0
  177. data/spec/analysis_specs/control_flow_specs/spec_helper.rb +110 -0
  178. data/spec/analysis_specs/control_flow_specs/tuple_misuse_inference_spec.rb +125 -0
  179. data/spec/analysis_specs/control_flow_specs/unreachability_analysis_spec.rb +76 -0
  180. data/spec/analysis_specs/control_flow_specs/unused_variable_spec.rb +99 -0
  181. data/spec/analysis_specs/control_flow_specs/yield_properties_spec.rb +372 -0
  182. data/spec/analysis_specs/error_spec.rb +30 -0
  183. data/spec/analysis_specs/laser_class_spec.rb +322 -0
  184. data/spec/analysis_specs/lexical_analysis_spec.rb +184 -0
  185. data/spec/analysis_specs/protocol_registry_spec.rb +63 -0
  186. data/spec/analysis_specs/scope_annotation_spec.rb +1013 -0
  187. data/spec/analysis_specs/scope_spec.rb +126 -0
  188. data/spec/analysis_specs/sexp_analysis_spec.rb +30 -0
  189. data/spec/analysis_specs/sexp_extension_specs/constant_extraction_spec.rb +309 -0
  190. data/spec/analysis_specs/sexp_extension_specs/source_location_spec.rb +231 -0
  191. data/spec/analysis_specs/sexp_extension_specs/spec_helper.rb +1 -0
  192. data/spec/analysis_specs/sexp_extension_specs/type_inference_spec.rb +252 -0
  193. data/spec/analysis_specs/sexp_spec.rb +167 -0
  194. data/spec/analysis_specs/spec_helper.rb +27 -0
  195. data/spec/analysis_specs/unused_methods_spec.rb +65 -0
  196. data/spec/analysis_specs/visitor_spec.rb +64 -0
  197. data/spec/annotation_parser_specs/annotations_parser_spec.rb +89 -0
  198. data/spec/annotation_parser_specs/class_annotation_parser_spec.rb +120 -0
  199. data/spec/annotation_parser_specs/overload_parser_spec.rb +39 -0
  200. data/spec/annotation_parser_specs/parsers_spec.rb +14 -0
  201. data/spec/annotation_parser_specs/spec_helper.rb +1 -0
  202. data/spec/annotation_parser_specs/structural_parser_spec.rb +67 -0
  203. data/spec/laser_spec.rb +14 -0
  204. data/spec/rake_specs/spec_helper.rb +1 -0
  205. data/spec/rake_specs/task_spec.rb +67 -0
  206. data/spec/runner_spec.rb +207 -0
  207. data/spec/scanner_spec.rb +75 -0
  208. data/spec/spec_helper.rb +121 -0
  209. data/spec/standard_library/exceptions_spec.rb +19 -0
  210. data/spec/standard_library/globals_spec.rb +14 -0
  211. data/spec/standard_library/set_spec.rb +31 -0
  212. data/spec/standard_library/spec_helper.rb +1 -0
  213. data/spec/standard_library/standard_library_spec.rb +302 -0
  214. data/spec/support_specs/acts_as_struct_spec.rb +94 -0
  215. data/spec/support_specs/frequency_spec.rb +23 -0
  216. data/spec/support_specs/module_extensions_spec.rb +117 -0
  217. data/spec/support_specs/spec_helper.rb +1 -0
  218. data/spec/type_specs/spec_helper.rb +1 -0
  219. data/spec/type_specs/types_spec.rb +133 -0
  220. data/spec/warning_spec.rb +95 -0
  221. data/spec/warning_specs/assignment_in_condition_spec.rb +68 -0
  222. data/spec/warning_specs/comment_spacing_spec.rb +65 -0
  223. data/spec/warning_specs/extra_blank_lines_spec.rb +70 -0
  224. data/spec/warning_specs/extra_whitespace_spec.rb +33 -0
  225. data/spec/warning_specs/hash_symbol_18_warning_spec.rb +89 -0
  226. data/spec/warning_specs/hash_symbol_19_warning_spec.rb +63 -0
  227. data/spec/warning_specs/line_length_spec.rb +173 -0
  228. data/spec/warning_specs/misaligned_unindentation_spec.rb +35 -0
  229. data/spec/warning_specs/operator_spacing_spec.rb +104 -0
  230. data/spec/warning_specs/parens_on_declaration_spec.rb +57 -0
  231. data/spec/warning_specs/rescue_exception_spec.rb +105 -0
  232. data/spec/warning_specs/semicolon_spec.rb +58 -0
  233. data/spec/warning_specs/spec_helper.rb +1 -0
  234. data/spec/warning_specs/useless_double_quotes_spec.rb +74 -0
  235. data/status_reports/2010/12/2010-12-14.md +163 -0
  236. data/status_reports/2010/12/2010-12-23.md +298 -0
  237. data/status_reports/2010/12/2010-12-24.md +6 -0
  238. data/test/third_party_tests/rgl_tests/TestComponents.rb +65 -0
  239. data/test/third_party_tests/rgl_tests/TestCycles.rb +61 -0
  240. data/test/third_party_tests/rgl_tests/TestDirectedGraph.rb +125 -0
  241. data/test/third_party_tests/rgl_tests/TestDot.rb +18 -0
  242. data/test/third_party_tests/rgl_tests/TestEdge.rb +34 -0
  243. data/test/third_party_tests/rgl_tests/TestGraph.rb +71 -0
  244. data/test/third_party_tests/rgl_tests/TestGraphXML.rb +57 -0
  245. data/test/third_party_tests/rgl_tests/TestImplicit.rb +52 -0
  246. data/test/third_party_tests/rgl_tests/TestRdot.rb +863 -0
  247. data/test/third_party_tests/rgl_tests/TestTransitivity.rb +129 -0
  248. data/test/third_party_tests/rgl_tests/TestTraversal.rb +220 -0
  249. data/test/third_party_tests/rgl_tests/TestUnDirectedGraph.rb +102 -0
  250. data/test/third_party_tests/rgl_tests/examples/north/Graph.log +128 -0
  251. data/test/third_party_tests/rgl_tests/examples/north/g.10.0.graphml +28 -0
  252. data/test/third_party_tests/rgl_tests/examples/north/g.10.1.graphml +28 -0
  253. data/test/third_party_tests/rgl_tests/examples/north/g.10.11.graphml +31 -0
  254. data/test/third_party_tests/rgl_tests/examples/north/g.10.12.graphml +27 -0
  255. data/test/third_party_tests/rgl_tests/examples/north/g.10.13.graphml +27 -0
  256. data/test/third_party_tests/rgl_tests/examples/north/g.10.14.graphml +27 -0
  257. data/test/third_party_tests/rgl_tests/examples/north/g.10.15.graphml +26 -0
  258. data/test/third_party_tests/rgl_tests/examples/north/g.10.16.graphml +26 -0
  259. data/test/third_party_tests/rgl_tests/examples/north/g.10.17.graphml +26 -0
  260. data/test/third_party_tests/rgl_tests/examples/north/g.10.19.graphml +37 -0
  261. data/test/third_party_tests/rgl_tests/examples/north/g.10.2.graphml +28 -0
  262. data/test/third_party_tests/rgl_tests/examples/north/g.10.20.graphml +38 -0
  263. data/test/third_party_tests/rgl_tests/examples/north/g.10.22.graphml +43 -0
  264. data/test/third_party_tests/rgl_tests/examples/north/g.10.24.graphml +30 -0
  265. data/test/third_party_tests/rgl_tests/examples/north/g.10.25.graphml +45 -0
  266. data/test/third_party_tests/rgl_tests/examples/north/g.10.27.graphml +38 -0
  267. data/test/third_party_tests/rgl_tests/examples/north/g.10.28.graphml +30 -0
  268. data/test/third_party_tests/rgl_tests/examples/north/g.10.29.graphml +38 -0
  269. data/test/third_party_tests/rgl_tests/examples/north/g.10.3.graphml +26 -0
  270. data/test/third_party_tests/rgl_tests/examples/north/g.10.30.graphml +34 -0
  271. data/test/third_party_tests/rgl_tests/examples/north/g.10.31.graphml +42 -0
  272. data/test/third_party_tests/rgl_tests/examples/north/g.10.34.graphml +42 -0
  273. data/test/third_party_tests/rgl_tests/examples/north/g.10.37.graphml +28 -0
  274. data/test/third_party_tests/rgl_tests/examples/north/g.10.38.graphml +38 -0
  275. data/test/third_party_tests/rgl_tests/examples/north/g.10.39.graphml +36 -0
  276. data/test/third_party_tests/rgl_tests/examples/north/g.10.4.graphml +26 -0
  277. data/test/third_party_tests/rgl_tests/examples/north/g.10.40.graphml +37 -0
  278. data/test/third_party_tests/rgl_tests/examples/north/g.10.41.graphml +37 -0
  279. data/test/third_party_tests/rgl_tests/examples/north/g.10.42.graphml +26 -0
  280. data/test/third_party_tests/rgl_tests/examples/north/g.10.45.graphml +28 -0
  281. data/test/third_party_tests/rgl_tests/examples/north/g.10.46.graphml +32 -0
  282. data/test/third_party_tests/rgl_tests/examples/north/g.10.5.graphml +31 -0
  283. data/test/third_party_tests/rgl_tests/examples/north/g.10.50.graphml +30 -0
  284. data/test/third_party_tests/rgl_tests/examples/north/g.10.56.graphml +29 -0
  285. data/test/third_party_tests/rgl_tests/examples/north/g.10.57.graphml +32 -0
  286. data/test/third_party_tests/rgl_tests/examples/north/g.10.58.graphml +32 -0
  287. data/test/third_party_tests/rgl_tests/examples/north/g.10.6.graphml +26 -0
  288. data/test/third_party_tests/rgl_tests/examples/north/g.10.60.graphml +32 -0
  289. data/test/third_party_tests/rgl_tests/examples/north/g.10.61.graphml +34 -0
  290. data/test/third_party_tests/rgl_tests/examples/north/g.10.62.graphml +34 -0
  291. data/test/third_party_tests/rgl_tests/examples/north/g.10.68.graphml +30 -0
  292. data/test/third_party_tests/rgl_tests/examples/north/g.10.69.graphml +32 -0
  293. data/test/third_party_tests/rgl_tests/examples/north/g.10.7.graphml +29 -0
  294. data/test/third_party_tests/rgl_tests/examples/north/g.10.70.graphml +26 -0
  295. data/test/third_party_tests/rgl_tests/examples/north/g.10.71.graphml +27 -0
  296. data/test/third_party_tests/rgl_tests/examples/north/g.10.72.graphml +28 -0
  297. data/test/third_party_tests/rgl_tests/examples/north/g.10.74.graphml +29 -0
  298. data/test/third_party_tests/rgl_tests/examples/north/g.10.75.graphml +29 -0
  299. data/test/third_party_tests/rgl_tests/examples/north/g.10.78.graphml +27 -0
  300. data/test/third_party_tests/rgl_tests/examples/north/g.10.79.graphml +34 -0
  301. data/test/third_party_tests/rgl_tests/examples/north/g.10.8.graphml +29 -0
  302. data/test/third_party_tests/rgl_tests/examples/north/g.10.80.graphml +34 -0
  303. data/test/third_party_tests/rgl_tests/examples/north/g.10.82.graphml +35 -0
  304. data/test/third_party_tests/rgl_tests/examples/north/g.10.83.graphml +32 -0
  305. data/test/third_party_tests/rgl_tests/examples/north/g.10.85.graphml +34 -0
  306. data/test/third_party_tests/rgl_tests/examples/north/g.10.86.graphml +34 -0
  307. data/test/third_party_tests/rgl_tests/examples/north/g.10.88.graphml +37 -0
  308. data/test/third_party_tests/rgl_tests/examples/north/g.10.89.graphml +29 -0
  309. data/test/third_party_tests/rgl_tests/examples/north/g.10.9.graphml +26 -0
  310. data/test/third_party_tests/rgl_tests/examples/north/g.10.90.graphml +32 -0
  311. data/test/third_party_tests/rgl_tests/examples/north/g.10.91.graphml +31 -0
  312. data/test/third_party_tests/rgl_tests/examples/north/g.10.92.graphml +26 -0
  313. data/test/third_party_tests/rgl_tests/examples/north/g.10.93.graphml +32 -0
  314. data/test/third_party_tests/rgl_tests/examples/north/g.10.94.graphml +34 -0
  315. data/test/third_party_tests/rgl_tests/examples/north/g.12.8.graphml +40 -0
  316. data/test/third_party_tests/rgl_tests/examples/north/g.14.9.graphml +36 -0
  317. data/test/third_party_tests/rgl_tests/test_helper.rb +7 -0
  318. data/test/third_party_tests/test_inheritable_attributes.rb +187 -0
  319. metadata +470 -0
@@ -0,0 +1,121 @@
1
+ %x(rake build_parsers)
2
+
3
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+
6
+ require 'laser'
7
+ require 'rspec'
8
+ require 'rspec/autorun'
9
+ require 'stringio'
10
+
11
+ include Laser
12
+ module Laser
13
+ remove_const(:TESTS_ACTIVATED)
14
+ const_set(:TESTS_ACTIVATED, true)
15
+ end
16
+
17
+ include Laser::Analysis
18
+ # Turn off method-is-used- checking until we explicitly test
19
+ # it - it just muddies up stuff
20
+ LaserMethod.default_dispatched = true
21
+
22
+ RSpec::Matchers.define :equal_type do |type|
23
+ match do |orig|
24
+ Types::subtype?(orig, type) || begin
25
+ orig.possible_classes.all? { |klass|
26
+ type.possible_classes.any? { |potential_super|
27
+ klass <= potential_super
28
+ }
29
+ }
30
+ end
31
+ end
32
+ end
33
+
34
+ RSpec::Matchers.define :see_var do |name|
35
+ match do |node|
36
+ node.scope.sees_var?(name)
37
+ end
38
+
39
+ failure_message_for_should do |node|
40
+ "scope #{node.scope.inspect} should have had variable #{name}, but it didn't."
41
+ end
42
+
43
+ failure_message_for_should_not do |node|
44
+ "scope #{node.scope.inspect} should have not been able to see variable #{name}, but it can."
45
+ end
46
+ end
47
+
48
+ RSpec::Matchers.define :parse_to do |output|
49
+ match do |actual|
50
+ @result = Parsers::AnnotationParser.new.parse(actual, root: :type)
51
+ @result && (@result.type == output)
52
+ end
53
+
54
+ failure_message_for_should do |actual|
55
+ "expected '#{actual}' to parse to #{output.inspect}, not #{@result.type.inspect}"
56
+ end
57
+
58
+ failure_message_for_should_not do |actual|
59
+ "expected '#{actual}' to not parse to #{output.inspect}"
60
+ end
61
+ end
62
+
63
+ RSpec::Matchers.define :correct_to do |input, output, *args|
64
+ match do |actual|
65
+ actual.new('(stdin)', input, *args).fix == output
66
+ end
67
+
68
+ failure_message_for_should do |actual|
69
+ "expected '#{input}' to correct to #{output.inspect}"
70
+ end
71
+
72
+ failure_message_for_should_not do |actual|
73
+ "expected '#{input}' to not correct to #{output.inspect}"
74
+ end
75
+ end
76
+
77
+ RSpec::Matchers.define :warn do |input, *args|
78
+ match do |actual|
79
+ result = actual.new('(stdin)', input, *args).match?
80
+ result && result != [] # empty list is also failure to find any warnings
81
+ end
82
+
83
+ failure_message_for_should do |actual|
84
+ "expected '#{actual}' to match #{input.inspect}"
85
+ end
86
+
87
+ failure_message_for_should_not do |actual|
88
+ "expected '#{actual}' to not match #{input.inspect}"
89
+ end
90
+ end
91
+
92
+ RSpec.configure do |config|
93
+ config.filter_run focus: true
94
+ config.run_all_when_everything_filtered = true
95
+ end
96
+
97
+ def many_mocks(n)
98
+ ([nil] * n).fill { mock }
99
+ end
100
+
101
+ def with_examples(*args)
102
+ args.each do |arg|
103
+ yield arg
104
+ end
105
+ end
106
+
107
+ def swizzling_io
108
+ old_stdout, $stdout = $stdout, StringIO.new
109
+ yield
110
+ return $stdout.string
111
+ ensure
112
+ $stdout = old_stdout
113
+ end
114
+
115
+ def swizzling_stdin
116
+ old_stdin, $stdin = $stdin, StringIO.new
117
+ yield $stdin
118
+ return $stdin.string
119
+ ensure
120
+ $stdin = old_stdin
121
+ end
@@ -0,0 +1,19 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe 'standard library exceptions' do
4
+ %w(Exception StandardError IOError TypeError ScriptError SystemExit
5
+ SignalException Interrupt ArgumentError IndexError KeyError
6
+ RangeError SyntaxError LoadError NotImplementedError NameError
7
+ NoMethodError RuntimeError SecurityError NoMemoryError EncodingError
8
+ SystemCallError ZeroDivisionError FloatDomainError RegexpError EOFError
9
+ LocalJumpError SystemStackError).each do |error|
10
+ it "should define a constant named #{error} at the top level" do
11
+ ClassRegistry['Object'].const_get(error).should be_a(LaserClass)
12
+ end
13
+
14
+ it "should define #{error} as a class with Exception in its superset" do
15
+ klass = ClassRegistry['Object'].const_get(error)
16
+ klass.superset.should include(ClassRegistry['Exception'])
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,14 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Scope::GlobalScope do
4
+ describe '$:' do
5
+ it 'should be an array' do
6
+ Scope::GlobalScope.lookup('$:').value.should be_a(Array)
7
+ end
8
+
9
+ it 'should contain the path to standard_library' do
10
+ Scope::GlobalScope.lookup('$:').value.should include(
11
+ File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'lib', 'laser', 'standard_library')))
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,31 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe 'the Set module' do
4
+ before(:all) do
5
+ @tree = annotate_all('require "set"')
6
+ end
7
+
8
+ it 'should have no errors from the inclusion' do
9
+ @tree.all_errors.should be_empty
10
+ end
11
+
12
+ it 'should load fine' do
13
+ ClassRegistry['Set'].should_not be_nil
14
+ end
15
+
16
+ it 'should have a class method .[]' do
17
+ method = ClassRegistry['Set'].singleton_class.instance_method(:[])
18
+ method.should_not be_nil
19
+ method.arity.should == Arity::ANY
20
+ method.arguments.size.should == 1
21
+ end
22
+
23
+ %w(& + - << == ^ add add? classify clear collect! delete delete? delete_if difference divide
24
+ each empty? flatten flatten! flatten_merge include? initialize_copy inspect intersection
25
+ length map! member? merge proper_subset? proper_superset? reject! replace size
26
+ subset? subtract superset? to_a union |).each do |method|
27
+ it "should have an instance method named #{method}" do
28
+ ClassRegistry['Set'].instance_method(method).should_not be_nil
29
+ end
30
+ end
31
+ end
@@ -0,0 +1 @@
1
+ require_relative '../spec_helper'
@@ -0,0 +1,302 @@
1
+ require_relative 'spec_helper'
2
+
3
+ describe 'the automatically analyzed Ruby Standard Library' do
4
+ shared_examples_for 'a module' do
5
+ it 'should be a module' do
6
+ @module.class.should == LaserModule
7
+ end
8
+ end
9
+
10
+ shared_examples_for 'a class' do
11
+ it 'should be a class' do
12
+ @class.class.should == LaserClass
13
+ end
14
+ end
15
+
16
+ shared_examples_for 'a singleton class' do
17
+ it 'should be a singleton class' do
18
+ @class.class.should == LaserSingletonClass
19
+ end
20
+
21
+ it 'should have a single object with an equal singleton class' do
22
+ @class.get_instance.singleton_class.should be @class
23
+ end
24
+
25
+ it 'should have a single object whose class equals the singleton class' do
26
+ @class.get_instance.klass.should be @class
27
+ end
28
+ end
29
+
30
+ describe 'RUBY_VERSION' do
31
+ it 'should be 1.9.2' do
32
+ ClassRegistry['Object'].const_get('RUBY_VERSION').should == "1.9.2"
33
+ end
34
+ end
35
+
36
+ describe 'Kernel' do
37
+ before do
38
+ @module = ClassRegistry['Kernel']
39
+ end
40
+
41
+ it_should_behave_like 'a module'
42
+ end
43
+
44
+ describe 'BasicObject' do
45
+ before do
46
+ @class = ClassRegistry['BasicObject']
47
+ end
48
+
49
+ it 'should have no superclass' do
50
+ @class.superclass.should == nil
51
+ end
52
+
53
+ %w(! == != equal? __send__ instance_eval instance_exec).each do |method|
54
+ sym = method.to_sym
55
+ it "should define the instance method #{method}" do
56
+ @class.instance_method(sym).should_not be_nil
57
+ end
58
+ it "should define the instance method #{method} as public" do
59
+ @class.visibility_table[sym].should be :public
60
+ end
61
+ end
62
+
63
+ %w(initialize method_missing singleton_method_added singleton_method_removed
64
+ singleton_method_undefined).each do |method|
65
+ sym = method.to_sym
66
+ it "should define the instance method #{method}" do
67
+ @class.instance_method(sym).should_not be_nil
68
+ end
69
+ it "should define the instance method #{method} as private" do
70
+ @class.visibility_table[sym].should be :private
71
+ end
72
+ end
73
+
74
+ it_should_behave_like 'a class'
75
+ end
76
+
77
+ describe 'Object' do
78
+ before do
79
+ @class = ClassRegistry['Object']
80
+ end
81
+
82
+ it 'should be a subclass of BasicObject' do
83
+ @class.superclass.should == ClassRegistry['BasicObject']
84
+ end
85
+
86
+ it 'should include the Kernel module' do
87
+ @class.included_modules.should include(ClassRegistry['Kernel'])
88
+ end
89
+
90
+ it_should_behave_like 'a class'
91
+ end
92
+
93
+ describe 'NilClass' do
94
+ before do
95
+ @class = ClassRegistry['NilClass']
96
+ end
97
+
98
+ it 'should be a subclass of Object' do
99
+ @class.superclass.should == ClassRegistry['Object']
100
+ end
101
+
102
+ it 'should have an instance named nil' do
103
+ @class.get_instance.name.should == 'nil'
104
+ end
105
+
106
+ it_should_behave_like 'a singleton class'
107
+ end
108
+
109
+ describe 'TrueClass' do
110
+ before do
111
+ @class = ClassRegistry['TrueClass']
112
+ end
113
+
114
+ it 'should be a subclass of Object' do
115
+ @class.superclass.should == ClassRegistry['Object']
116
+ end
117
+
118
+ it 'should have an instance named true' do
119
+ @class.get_instance.name.should == 'true'
120
+ end
121
+
122
+ it_should_behave_like 'a singleton class'
123
+ end
124
+
125
+ describe 'FalseClass' do
126
+ before do
127
+ @class = ClassRegistry['FalseClass']
128
+ end
129
+
130
+ it 'should be a subclass of Object' do
131
+ @class.superclass.should == ClassRegistry['Object']
132
+ end
133
+
134
+ it 'should have an instance named false' do
135
+ @class.get_instance.name.should == 'false'
136
+ end
137
+
138
+ it_should_behave_like 'a singleton class'
139
+ end
140
+
141
+ describe 'Hash' do
142
+ before do
143
+ @class = ClassRegistry['Hash']
144
+ end
145
+
146
+ it 'should be a subclass of Object' do
147
+ @class.superclass.should == ClassRegistry['Object']
148
+ end
149
+
150
+ it_should_behave_like 'a class'
151
+ end
152
+
153
+ describe 'Array' do
154
+ before do
155
+ @class = ClassRegistry['Array']
156
+ end
157
+
158
+ it 'should be a subclass of Object' do
159
+ @class.superclass.should == ClassRegistry['Object']
160
+ end
161
+
162
+ it_should_behave_like 'a class'
163
+ end
164
+
165
+ describe 'Range' do
166
+ before do
167
+ @class = ClassRegistry['Range']
168
+ end
169
+
170
+ it 'should be a subclass of Object' do
171
+ @class.superclass.should == ClassRegistry['Object']
172
+ end
173
+
174
+ it_should_behave_like 'a class'
175
+ end
176
+
177
+ describe 'Proc' do
178
+ before do
179
+ @class = ClassRegistry['Proc']
180
+ end
181
+
182
+ it 'should be a subclass of Object' do
183
+ @class.superclass.should == ClassRegistry['Object']
184
+ end
185
+
186
+ it_should_behave_like 'a class'
187
+ end
188
+
189
+ describe 'String' do
190
+ before do
191
+ @class = ClassRegistry['String']
192
+ end
193
+
194
+ it 'should be a subclass of Object' do
195
+ @class.superclass.should == ClassRegistry['Object']
196
+ end
197
+
198
+ it_should_behave_like 'a class'
199
+ end
200
+
201
+ describe 'Symbol' do
202
+ before do
203
+ @class = ClassRegistry['Symbol']
204
+ end
205
+
206
+ it 'should be a subclass of Object' do
207
+ @class.superclass.should == ClassRegistry['Object']
208
+ end
209
+
210
+ it_should_behave_like 'a class'
211
+ end
212
+
213
+ describe 'Regexp' do
214
+ before do
215
+ @class = ClassRegistry['Regexp']
216
+ end
217
+
218
+ it 'should be a subclass of Object' do
219
+ @class.superclass.should == ClassRegistry['Object']
220
+ end
221
+
222
+ it_should_behave_like 'a class'
223
+ end
224
+
225
+ describe 'Encoding' do
226
+ before do
227
+ @class = ClassRegistry['Encoding']
228
+ end
229
+
230
+ it 'should be a subclass of Object' do
231
+ @class.superclass.should == ClassRegistry['Object']
232
+ end
233
+
234
+ it_should_behave_like 'a class'
235
+ end
236
+
237
+ describe 'Numeric' do
238
+ before do
239
+ @class = ClassRegistry['Numeric']
240
+ end
241
+
242
+ it 'should be a subclass of Object' do
243
+ @class.superclass.should == ClassRegistry['Object']
244
+ end
245
+
246
+ it_should_behave_like 'a class'
247
+ end
248
+
249
+ describe 'Integer' do
250
+ before do
251
+ @class = ClassRegistry['Integer']
252
+ end
253
+
254
+ it 'should be a subclass of Numeric' do
255
+ @class.superclass.should == ClassRegistry['Numeric']
256
+ end
257
+
258
+ it_should_behave_like 'a class'
259
+ end
260
+
261
+ describe 'Fixnum' do
262
+ before do
263
+ @class = ClassRegistry['Fixnum']
264
+ end
265
+
266
+ it 'should be a subclass of Integer' do
267
+ @class.superclass.should == ClassRegistry['Integer']
268
+ end
269
+
270
+ describe '#==' do
271
+ it 'should be pure' do
272
+ @class.instance_method(:==).pure.should be true
273
+ end
274
+ end
275
+
276
+ it_should_behave_like 'a class'
277
+ end
278
+
279
+ describe 'Bignum' do
280
+ before do
281
+ @class = ClassRegistry['Bignum']
282
+ end
283
+
284
+ it 'should be a subclass of Integer' do
285
+ @class.superclass.should == ClassRegistry['Integer']
286
+ end
287
+
288
+ it_should_behave_like 'a class'
289
+ end
290
+
291
+ describe 'Float' do
292
+ before do
293
+ @class = ClassRegistry['Float']
294
+ end
295
+
296
+ it 'should be a subclass of Numeric' do
297
+ @class.superclass.should == ClassRegistry['Numeric']
298
+ end
299
+
300
+ it_should_behave_like 'a class'
301
+ end
302
+ end