minilab 1.1.0-x86-mswin32-60

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 (492) hide show
  1. data/CHANGES +8 -0
  2. data/LICENSE +19 -0
  3. data/README +105 -0
  4. data/Rakefile +83 -0
  5. data/config/environment.rb +23 -0
  6. data/config/objects.yml +23 -0
  7. data/lib/analog_io.rb +23 -0
  8. data/lib/connection_state.rb +13 -0
  9. data/lib/digital_auxport_io.rb +34 -0
  10. data/lib/digital_configuration.rb +53 -0
  11. data/lib/digital_port_io.rb +39 -0
  12. data/lib/library_translator.rb +46 -0
  13. data/lib/minilab.rb +130 -0
  14. data/lib/minilab_constants.rb +20 -0
  15. data/lib/minilab_context.rb +14 -0
  16. data/lib/minilab_hardware.rb +112 -0
  17. data/lib/minilab_wrapper.rb +12 -0
  18. data/test/system/analog_input.test +3 -0
  19. data/test/system/analog_output.test +37 -0
  20. data/test/system/digital_port_input.test +5 -0
  21. data/test/system/digital_port_output.test +39 -0
  22. data/test/system/digital_port_read_byte.test +26 -0
  23. data/test/system/digital_screw_terminals_input.test +2 -0
  24. data/test/system/digital_screw_terminals_output.test +11 -0
  25. data/test/system/minilab_driver.rb +83 -0
  26. data/test/test_helper.rb +15 -0
  27. data/test/unit/analog_io_test.rb +54 -0
  28. data/test/unit/connection_state_test.rb +18 -0
  29. data/test/unit/digital_auxport_io_test.rb +102 -0
  30. data/test/unit/digital_configuration_test.rb +100 -0
  31. data/test/unit/digital_port_io_test.rb +67 -0
  32. data/test/unit/library_translator_test.rb +98 -0
  33. data/test/unit/minilab_context_test.rb +23 -0
  34. data/test/unit/minilab_hardware_test.rb +33 -0
  35. data/test/unit/minilab_test.rb +115 -0
  36. data/test/unit/minilab_wrapper_test.rb +24 -0
  37. data/vendor/behaviors/lib/behaviors.rb +50 -0
  38. data/vendor/behaviors/tasks/behaviors_tasks.rake +140 -0
  39. data/vendor/behaviors/test/behaviors_tasks_test.rb +71 -0
  40. data/vendor/behaviors/test/behaviors_test.rb +50 -0
  41. data/vendor/behaviors/test/tasks_test/Rakefile +16 -0
  42. data/vendor/behaviors/test/tasks_test/doc/behaviors.html +55 -0
  43. data/vendor/behaviors/test/tasks_test/lib/user.rb +2 -0
  44. data/vendor/behaviors/test/tasks_test/test/user_test.rb +17 -0
  45. data/vendor/constructor-1.0.2/History.txt +11 -0
  46. data/vendor/constructor-1.0.2/Manifest.txt +6 -0
  47. data/vendor/constructor-1.0.2/README.txt +77 -0
  48. data/vendor/constructor-1.0.2/Rakefile +33 -0
  49. data/vendor/constructor-1.0.2/lib/constructor.rb +119 -0
  50. data/vendor/constructor-1.0.2/specs/constructor_spec.rb +345 -0
  51. data/vendor/diy-1.1.1/History.txt +23 -0
  52. data/vendor/diy-1.1.1/Manifest.txt +88 -0
  53. data/vendor/diy-1.1.1/README.txt +220 -0
  54. data/vendor/diy-1.1.1/Rakefile +29 -0
  55. data/vendor/diy-1.1.1/TODO.txt +9 -0
  56. data/vendor/diy-1.1.1/homepage/Notes.txt +27 -0
  57. data/vendor/diy-1.1.1/homepage/Rakefile +14 -0
  58. data/vendor/diy-1.1.1/homepage/diy_example.png +0 -0
  59. data/vendor/diy-1.1.1/homepage/index.erb +36 -0
  60. data/vendor/diy-1.1.1/homepage/index.html +45 -0
  61. data/vendor/diy-1.1.1/homepage/objects_yml.png +0 -0
  62. data/vendor/diy-1.1.1/homepage/page_header.graffle +0 -0
  63. data/vendor/diy-1.1.1/homepage/page_header.html +9 -0
  64. data/vendor/diy-1.1.1/homepage/page_header.png +0 -0
  65. data/vendor/diy-1.1.1/lib/diy.rb +365 -0
  66. data/vendor/diy-1.1.1/sample_code/car.rb +7 -0
  67. data/vendor/diy-1.1.1/sample_code/chassis.rb +5 -0
  68. data/vendor/diy-1.1.1/sample_code/diy_example.rb +26 -0
  69. data/vendor/diy-1.1.1/sample_code/engine.rb +5 -0
  70. data/vendor/diy-1.1.1/sample_code/objects.yml +10 -0
  71. data/vendor/diy-1.1.1/test/constructor.rb +119 -0
  72. data/vendor/diy-1.1.1/test/diy_test.rb +604 -0
  73. data/vendor/diy-1.1.1/test/files/broken_construction.yml +7 -0
  74. data/vendor/diy-1.1.1/test/files/cat/cat.rb +3 -0
  75. data/vendor/diy-1.1.1/test/files/cat/extra_conflict.yml +5 -0
  76. data/vendor/diy-1.1.1/test/files/cat/heritage.rb +2 -0
  77. data/vendor/diy-1.1.1/test/files/cat/needs_input.yml +3 -0
  78. data/vendor/diy-1.1.1/test/files/cat/the_cat_lineage.rb +1 -0
  79. data/vendor/diy-1.1.1/test/files/dog/dog_model.rb +3 -0
  80. data/vendor/diy-1.1.1/test/files/dog/dog_presenter.rb +3 -0
  81. data/vendor/diy-1.1.1/test/files/dog/dog_view.rb +2 -0
  82. data/vendor/diy-1.1.1/test/files/dog/file_resolver.rb +2 -0
  83. data/vendor/diy-1.1.1/test/files/dog/other_thing.rb +2 -0
  84. data/vendor/diy-1.1.1/test/files/dog/simple.yml +11 -0
  85. data/vendor/diy-1.1.1/test/files/donkey/foo.rb +8 -0
  86. data/vendor/diy-1.1.1/test/files/donkey/foo/bar/qux.rb +7 -0
  87. data/vendor/diy-1.1.1/test/files/fud/objects.yml +13 -0
  88. data/vendor/diy-1.1.1/test/files/fud/toy.rb +14 -0
  89. data/vendor/diy-1.1.1/test/files/functions/invalid_method.yml +5 -0
  90. data/vendor/diy-1.1.1/test/files/functions/method_extractor.rb +3 -0
  91. data/vendor/diy-1.1.1/test/files/functions/nonsingleton_objects.yml +6 -0
  92. data/vendor/diy-1.1.1/test/files/functions/objects.yml +11 -0
  93. data/vendor/diy-1.1.1/test/files/functions/thing.rb +3 -0
  94. data/vendor/diy-1.1.1/test/files/functions/thing_builder.rb +21 -0
  95. data/vendor/diy-1.1.1/test/files/functions/things_builder.rb +3 -0
  96. data/vendor/diy-1.1.1/test/files/gnu/objects.yml +14 -0
  97. data/vendor/diy-1.1.1/test/files/gnu/thinger.rb +7 -0
  98. data/vendor/diy-1.1.1/test/files/goat/base.rb +8 -0
  99. data/vendor/diy-1.1.1/test/files/goat/can.rb +6 -0
  100. data/vendor/diy-1.1.1/test/files/goat/goat.rb +6 -0
  101. data/vendor/diy-1.1.1/test/files/goat/objects.yml +12 -0
  102. data/vendor/diy-1.1.1/test/files/goat/paper.rb +6 -0
  103. data/vendor/diy-1.1.1/test/files/goat/plane.rb +7 -0
  104. data/vendor/diy-1.1.1/test/files/goat/shirt.rb +6 -0
  105. data/vendor/diy-1.1.1/test/files/goat/wings.rb +8 -0
  106. data/vendor/diy-1.1.1/test/files/horse/holder_thing.rb +3 -0
  107. data/vendor/diy-1.1.1/test/files/horse/objects.yml +7 -0
  108. data/vendor/diy-1.1.1/test/files/namespace/animal/bird.rb +5 -0
  109. data/vendor/diy-1.1.1/test/files/namespace/animal/cat.rb +5 -0
  110. data/vendor/diy-1.1.1/test/files/namespace/animal/reptile/hardshell/turtle.rb +8 -0
  111. data/vendor/diy-1.1.1/test/files/namespace/animal/reptile/lizard.rb +7 -0
  112. data/vendor/diy-1.1.1/test/files/namespace/bad_module_specified.yml +8 -0
  113. data/vendor/diy-1.1.1/test/files/namespace/class_name_combine.yml +8 -0
  114. data/vendor/diy-1.1.1/test/files/namespace/hello.txt +1 -0
  115. data/vendor/diy-1.1.1/test/files/namespace/no_module_specified.yml +8 -0
  116. data/vendor/diy-1.1.1/test/files/namespace/objects.yml +21 -0
  117. data/vendor/diy-1.1.1/test/files/namespace/road.rb +2 -0
  118. data/vendor/diy-1.1.1/test/files/namespace/sky.rb +2 -0
  119. data/vendor/diy-1.1.1/test/files/namespace/subcontext.yml +22 -0
  120. data/vendor/diy-1.1.1/test/files/non_singleton/air.rb +2 -0
  121. data/vendor/diy-1.1.1/test/files/non_singleton/fat_cat.rb +3 -0
  122. data/vendor/diy-1.1.1/test/files/non_singleton/objects.yml +19 -0
  123. data/vendor/diy-1.1.1/test/files/non_singleton/pig.rb +3 -0
  124. data/vendor/diy-1.1.1/test/files/non_singleton/thread_spinner.rb +3 -0
  125. data/vendor/diy-1.1.1/test/files/non_singleton/tick.rb +3 -0
  126. data/vendor/diy-1.1.1/test/files/non_singleton/yard.rb +2 -0
  127. data/vendor/diy-1.1.1/test/files/yak/core_model.rb +3 -0
  128. data/vendor/diy-1.1.1/test/files/yak/core_presenter.rb +3 -0
  129. data/vendor/diy-1.1.1/test/files/yak/core_view.rb +1 -0
  130. data/vendor/diy-1.1.1/test/files/yak/data_source.rb +1 -0
  131. data/vendor/diy-1.1.1/test/files/yak/fringe_model.rb +3 -0
  132. data/vendor/diy-1.1.1/test/files/yak/fringe_presenter.rb +3 -0
  133. data/vendor/diy-1.1.1/test/files/yak/fringe_view.rb +1 -0
  134. data/vendor/diy-1.1.1/test/files/yak/giant_squid.rb +3 -0
  135. data/vendor/diy-1.1.1/test/files/yak/krill.rb +2 -0
  136. data/vendor/diy-1.1.1/test/files/yak/my_objects.yml +21 -0
  137. data/vendor/diy-1.1.1/test/files/yak/sub_sub_context_test.yml +27 -0
  138. data/vendor/diy-1.1.1/test/test_helper.rb +39 -0
  139. data/vendor/ffi-0.4.0-x86-mswin32/LICENSE +51 -0
  140. data/vendor/ffi-0.4.0-x86-mswin32/Rakefile +142 -0
  141. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/AbstractMemory.c +412 -0
  142. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/AbstractMemory.h +68 -0
  143. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/AutoPointer.c +60 -0
  144. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/AutoPointer.h +18 -0
  145. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Buffer.c +171 -0
  146. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Callback.c +374 -0
  147. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Callback.h +47 -0
  148. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/DynamicLibrary.c +213 -0
  149. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/DynamicLibrary.h +22 -0
  150. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Invoker.c +962 -0
  151. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/LastError.c +135 -0
  152. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/LastError.h +18 -0
  153. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/MemoryPointer.c +156 -0
  154. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/MemoryPointer.h +20 -0
  155. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/NullPointer.c +143 -0
  156. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Platform.c +59 -0
  157. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Platform.h +16 -0
  158. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Pointer.c +164 -0
  159. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Pointer.h +25 -0
  160. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Struct.c +477 -0
  161. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Struct.h +26 -0
  162. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Type.c +230 -0
  163. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Type.h +28 -0
  164. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Types.c +118 -0
  165. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Types.h +54 -0
  166. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/compat.h +22 -0
  167. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/endian.h +40 -0
  168. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/extconf.rb +31 -0
  169. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/ffi.c +76 -0
  170. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi.bsd.mk +34 -0
  171. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi.darwin.mk +75 -0
  172. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi.gnu.mk +29 -0
  173. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi.mk +13 -0
  174. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/ChangeLog +3243 -0
  175. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/ChangeLog.libffi +347 -0
  176. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/ChangeLog.libgcj +40 -0
  177. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/ChangeLog.v1 +764 -0
  178. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/LICENSE +21 -0
  179. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/Makefile.am +177 -0
  180. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/Makefile.in +1640 -0
  181. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/README +328 -0
  182. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/TODO +1 -0
  183. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/acinclude.m4 +92 -0
  184. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/aclocal.m4 +7516 -0
  185. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/compile +142 -0
  186. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/config.guess +1516 -0
  187. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/config.sub +1626 -0
  188. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/configure +24414 -0
  189. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/configure.ac +365 -0
  190. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/configure.host +11 -0
  191. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/depcomp +584 -0
  192. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/doc/libffi.info +533 -0
  193. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/doc/libffi.texi +541 -0
  194. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/doc/stamp-vti +4 -0
  195. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/doc/version.texi +4 -0
  196. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/fficonfig.h.in +160 -0
  197. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/include/Makefile.am +9 -0
  198. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/include/Makefile.in +422 -0
  199. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/include/ffi.h.in +393 -0
  200. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/include/ffi_common.h +98 -0
  201. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/install-sh +323 -0
  202. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/libffi.pc.in +10 -0
  203. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/libtool-version +29 -0
  204. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/ltcf-c.sh +861 -0
  205. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/ltcf-cxx.sh +1069 -0
  206. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/ltcf-gcj.sh +700 -0
  207. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/ltconfig +2862 -0
  208. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/ltmain.sh +6930 -0
  209. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/man/Makefile.am +8 -0
  210. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/man/Makefile.in +395 -0
  211. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/man/ffi.3 +31 -0
  212. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/man/ffi_call.3 +103 -0
  213. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/man/ffi_prep_cif.3 +66 -0
  214. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/mdate-sh +201 -0
  215. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/missing +353 -0
  216. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/mkinstalldirs +158 -0
  217. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/alpha/ffi.c +284 -0
  218. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/alpha/ffitarget.h +48 -0
  219. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/alpha/osf.S +366 -0
  220. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/arm/ffi.c +309 -0
  221. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/arm/ffitarget.h +49 -0
  222. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/arm/sysv.S +299 -0
  223. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/closures.c +596 -0
  224. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/cris/ffi.c +383 -0
  225. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/cris/ffitarget.h +51 -0
  226. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/cris/sysv.S +215 -0
  227. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/debug.c +59 -0
  228. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/dlmalloc.c +5099 -0
  229. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/frv/eabi.S +128 -0
  230. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/frv/ffi.c +292 -0
  231. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/frv/ffitarget.h +61 -0
  232. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/ia64/ffi.c +580 -0
  233. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/ia64/ffitarget.h +50 -0
  234. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/ia64/ia64_flags.h +40 -0
  235. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/ia64/unix.S +560 -0
  236. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/java_raw_api.c +359 -0
  237. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/m32r/ffi.c +232 -0
  238. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/m32r/ffitarget.h +48 -0
  239. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/m32r/sysv.S +121 -0
  240. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/m68k/ffi.c +278 -0
  241. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/m68k/ffitarget.h +49 -0
  242. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/m68k/sysv.S +234 -0
  243. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/mips/ffi.c +926 -0
  244. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/mips/ffitarget.h +202 -0
  245. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/mips/n32.S +534 -0
  246. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/mips/o32.S +381 -0
  247. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/pa/ffi.c +709 -0
  248. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/pa/ffitarget.h +77 -0
  249. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/pa/hpux32.S +368 -0
  250. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/pa/linux.S +357 -0
  251. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/aix.S +225 -0
  252. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/aix_closure.S +247 -0
  253. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/asm.h +125 -0
  254. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/darwin.S +245 -0
  255. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +317 -0
  256. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/ffi.c +1429 -0
  257. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +800 -0
  258. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/ffitarget.h +118 -0
  259. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/linux64.S +187 -0
  260. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +236 -0
  261. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +327 -0
  262. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/sysv.S +230 -0
  263. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/prep_cif.c +174 -0
  264. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/raw_api.c +254 -0
  265. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/s390/ffi.c +780 -0
  266. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/s390/ffitarget.h +60 -0
  267. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/s390/sysv.S +434 -0
  268. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/sh/ffi.c +716 -0
  269. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/sh/ffitarget.h +49 -0
  270. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/sh/sysv.S +850 -0
  271. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/sh64/ffi.c +453 -0
  272. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/sh64/ffitarget.h +53 -0
  273. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/sh64/sysv.S +530 -0
  274. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/sparc/ffi.c +610 -0
  275. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/sparc/ffitarget.h +66 -0
  276. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/sparc/v8.S +272 -0
  277. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/sparc/v9.S +307 -0
  278. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/types.c +77 -0
  279. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/x86/darwin.S +443 -0
  280. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/x86/darwin64.S +416 -0
  281. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/x86/ffi.c +475 -0
  282. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/x86/ffi64.c +572 -0
  283. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/x86/ffitarget.h +90 -0
  284. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/x86/freebsd.S +458 -0
  285. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/x86/sysv.S +437 -0
  286. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/x86/unix64.S +418 -0
  287. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/x86/win32.S +391 -0
  288. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/Makefile.am +71 -0
  289. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/Makefile.in +447 -0
  290. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/config/default.exp +1 -0
  291. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +289 -0
  292. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +263 -0
  293. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +45 -0
  294. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +36 -0
  295. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn0.c +97 -0
  296. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn1.c +89 -0
  297. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn2.c +89 -0
  298. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn3.c +90 -0
  299. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn4.c +97 -0
  300. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn5.c +99 -0
  301. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn6.c +98 -0
  302. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/closure_stdcall.c +72 -0
  303. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +102 -0
  304. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +103 -0
  305. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +104 -0
  306. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +110 -0
  307. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +97 -0
  308. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +99 -0
  309. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +101 -0
  310. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +121 -0
  311. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +98 -0
  312. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +103 -0
  313. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +98 -0
  314. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +98 -0
  315. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +106 -0
  316. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +98 -0
  317. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +117 -0
  318. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +106 -0
  319. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +132 -0
  320. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +121 -0
  321. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +107 -0
  322. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +125 -0
  323. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +105 -0
  324. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +96 -0
  325. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +98 -0
  326. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +99 -0
  327. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +101 -0
  328. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +99 -0
  329. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +100 -0
  330. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +101 -0
  331. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +99 -0
  332. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +99 -0
  333. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +99 -0
  334. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +99 -0
  335. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +99 -0
  336. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +100 -0
  337. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_double.c +51 -0
  338. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_float.c +51 -0
  339. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_schar.c +82 -0
  340. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshort.c +82 -0
  341. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshortchar.c +94 -0
  342. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_uchar.c +99 -0
  343. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushort.c +82 -0
  344. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushortchar.c +94 -0
  345. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_schar.c +52 -0
  346. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_sint.c +50 -0
  347. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_sshort.c +50 -0
  348. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar.c +50 -0
  349. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint.c +51 -0
  350. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +54 -0
  351. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort.c +51 -0
  352. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +86 -0
  353. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/float.c +59 -0
  354. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +58 -0
  355. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +57 -0
  356. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +72 -0
  357. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +62 -0
  358. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/many.c +69 -0
  359. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +63 -0
  360. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +53 -0
  361. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +160 -0
  362. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +169 -0
  363. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +141 -0
  364. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +118 -0
  365. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +119 -0
  366. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +119 -0
  367. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +120 -0
  368. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +139 -0
  369. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +119 -0
  370. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +139 -0
  371. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +139 -0
  372. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/problem1.c +98 -0
  373. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +59 -0
  374. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc-tc.c +114 -0
  375. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +35 -0
  376. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +43 -0
  377. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +42 -0
  378. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +35 -0
  379. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +36 -0
  380. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +49 -0
  381. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +42 -0
  382. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +34 -0
  383. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +41 -0
  384. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +42 -0
  385. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +36 -0
  386. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +38 -0
  387. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +38 -0
  388. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +38 -0
  389. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +44 -0
  390. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +44 -0
  391. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +65 -0
  392. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +67 -0
  393. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +59 -0
  394. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +63 -0
  395. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +65 -0
  396. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +64 -0
  397. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +74 -0
  398. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +80 -0
  399. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +67 -0
  400. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +86 -0
  401. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.special/special.exp +38 -0
  402. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest.cc +123 -0
  403. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc +53 -0
  404. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/texinfo.tex +7482 -0
  405. data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/rbffi.h +23 -0
  406. data/vendor/ffi-0.4.0-x86-mswin32/gen/Rakefile +12 -0
  407. data/vendor/ffi-0.4.0-x86-mswin32/lib/1.8/ffi_c.so +0 -0
  408. data/vendor/ffi-0.4.0-x86-mswin32/lib/1.9/ffi_c.so +0 -0
  409. data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi.rb +11 -0
  410. data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/autopointer.rb +61 -0
  411. data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/buffer.rb +0 -0
  412. data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/callback.rb +10 -0
  413. data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/enum.rb +78 -0
  414. data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/errno.rb +8 -0
  415. data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/ffi.rb +96 -0
  416. data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/io.rb +21 -0
  417. data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/library.rb +243 -0
  418. data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/managedstruct.rb +55 -0
  419. data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/memorypointer.rb +73 -0
  420. data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/platform.rb +78 -0
  421. data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/pointer.rb +119 -0
  422. data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/struct.rb +354 -0
  423. data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/tools/const_generator.rb +177 -0
  424. data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/tools/generator.rb +58 -0
  425. data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/tools/generator_task.rb +35 -0
  426. data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/tools/struct_generator.rb +194 -0
  427. data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/tools/types_generator.rb +123 -0
  428. data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/types.rb +153 -0
  429. data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/union.rb +17 -0
  430. data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/variadic.rb +30 -0
  431. data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/bool_spec.rb +24 -0
  432. data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/buffer_spec.rb +196 -0
  433. data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/callback_spec.rb +560 -0
  434. data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/enum_spec.rb +164 -0
  435. data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/errno_spec.rb +13 -0
  436. data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/library_spec.rb +144 -0
  437. data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/managed_struct_spec.rb +56 -0
  438. data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/number_spec.rb +231 -0
  439. data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/pointer_spec.rb +195 -0
  440. data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/rbx/attach_function_spec.rb +27 -0
  441. data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/rbx/memory_pointer_spec.rb +102 -0
  442. data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/rbx/spec_helper.rb +1 -0
  443. data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/rbx/struct_spec.rb +13 -0
  444. data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/spec_helper.rb +17 -0
  445. data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/string_spec.rb +103 -0
  446. data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/struct_callback_spec.rb +41 -0
  447. data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/struct_initialize_spec.rb +30 -0
  448. data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/struct_spec.rb +476 -0
  449. data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/typedef_spec.rb +48 -0
  450. data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/union_spec.rb +60 -0
  451. data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/variadic_spec.rb +84 -0
  452. data/vendor/ffi-0.4.0-x86-mswin32/spec/spec.opts +4 -0
  453. data/vendor/hardmock-1.3.7/CHANGES +78 -0
  454. data/vendor/hardmock-1.3.7/LICENSE +7 -0
  455. data/vendor/hardmock-1.3.7/README +70 -0
  456. data/vendor/hardmock-1.3.7/Rakefile +8 -0
  457. data/vendor/hardmock-1.3.7/config/environment.rb +12 -0
  458. data/vendor/hardmock-1.3.7/lib/assert_error.rb +23 -0
  459. data/vendor/hardmock-1.3.7/lib/extend_test_unit.rb +14 -0
  460. data/vendor/hardmock-1.3.7/lib/hardmock.rb +86 -0
  461. data/vendor/hardmock-1.3.7/lib/hardmock/errors.rb +22 -0
  462. data/vendor/hardmock-1.3.7/lib/hardmock/expectation.rb +229 -0
  463. data/vendor/hardmock-1.3.7/lib/hardmock/expectation_builder.rb +9 -0
  464. data/vendor/hardmock-1.3.7/lib/hardmock/expector.rb +26 -0
  465. data/vendor/hardmock-1.3.7/lib/hardmock/method_cleanout.rb +33 -0
  466. data/vendor/hardmock-1.3.7/lib/hardmock/mock.rb +180 -0
  467. data/vendor/hardmock-1.3.7/lib/hardmock/mock_control.rb +53 -0
  468. data/vendor/hardmock-1.3.7/lib/hardmock/stubbing.rb +210 -0
  469. data/vendor/hardmock-1.3.7/lib/hardmock/trapper.rb +31 -0
  470. data/vendor/hardmock-1.3.7/lib/hardmock/utils.rb +9 -0
  471. data/vendor/hardmock-1.3.7/lib/test_unit_before_after.rb +169 -0
  472. data/vendor/hardmock-1.3.7/rake_tasks/test.rake +22 -0
  473. data/vendor/hardmock-1.3.7/test/functional/assert_error_test.rb +52 -0
  474. data/vendor/hardmock-1.3.7/test/functional/auto_verify_test.rb +178 -0
  475. data/vendor/hardmock-1.3.7/test/functional/direct_mock_usage_test.rb +396 -0
  476. data/vendor/hardmock-1.3.7/test/functional/hardmock_test.rb +434 -0
  477. data/vendor/hardmock-1.3.7/test/functional/stubbing_test.rb +479 -0
  478. data/vendor/hardmock-1.3.7/test/test_helper.rb +43 -0
  479. data/vendor/hardmock-1.3.7/test/unit/expectation_builder_test.rb +19 -0
  480. data/vendor/hardmock-1.3.7/test/unit/expectation_test.rb +372 -0
  481. data/vendor/hardmock-1.3.7/test/unit/expector_test.rb +57 -0
  482. data/vendor/hardmock-1.3.7/test/unit/method_cleanout_test.rb +36 -0
  483. data/vendor/hardmock-1.3.7/test/unit/mock_control_test.rb +175 -0
  484. data/vendor/hardmock-1.3.7/test/unit/mock_test.rb +279 -0
  485. data/vendor/hardmock-1.3.7/test/unit/test_unit_before_after_test.rb +452 -0
  486. data/vendor/hardmock-1.3.7/test/unit/trapper_test.rb +62 -0
  487. data/vendor/hardmock-1.3.7/test/unit/verify_error_test.rb +40 -0
  488. data/vendor/mcc/cbw32.dll +0 -0
  489. data/vendor/systir/systir.rb +403 -0
  490. data/vendor/systir/test/unit/ui/xml/testrunner.rb +192 -0
  491. data/vendor/systir/test/unit/ui/xml/xmltestrunner.xslt +109 -0
  492. metadata +561 -0
@@ -0,0 +1,434 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../test_helper")
2
+ require 'hardmock'
3
+ require 'assert_error'
4
+
5
+ class HardmockTest < Test::Unit::TestCase
6
+
7
+ #
8
+ # TESTS
9
+ #
10
+
11
+ it "conveniently creates mocks using create_mock and create_mocks" do
12
+
13
+ h = create_mock :donkey
14
+ assert_equal [ :donkey ], h.keys
15
+
16
+ assert_mock_exists :donkey
17
+ assert_same @donkey, h[:donkey]
18
+
19
+ assert_equal [ :donkey ], @all_mocks.keys, "Wrong keyset for @all_mocks"
20
+
21
+ h2 = create_mocks :cat, 'dog' # symbol/string indifference at this level
22
+ assert_equal [:cat,:dog].to_set, h2.keys.to_set, "Wrong keyset for second hash"
23
+ assert_equal [:cat,:dog,:donkey].to_set, @all_mocks.keys.to_set, "@all_mocks wrong"
24
+
25
+ assert_mock_exists :cat
26
+ assert_same @cat, h2[:cat]
27
+ assert_mock_exists :dog
28
+ assert_same @dog, h2[:dog]
29
+
30
+ assert_mock_exists :donkey
31
+ end
32
+
33
+ it "provides literal 'expects' syntax" do
34
+ assert_nil @order, "Should be no @order yet"
35
+ create_mock :order
36
+ assert_not_nil @order, "@order should be built"
37
+
38
+ # Setup an expectation
39
+ @order.expects.update_stuff :key1 => 'val1', :key2 => 'val2'
40
+
41
+ # Use the mock
42
+ @order.update_stuff :key1 => 'val1', :key2 => 'val2'
43
+
44
+ # Verify
45
+ verify_mocks
46
+
47
+ # See that it's ok to do it again
48
+ verify_mocks
49
+ end
50
+
51
+ it "supports 'with' for specifying argument expectations" do
52
+ create_mocks :car
53
+ @car.expects(:fill).with('gas','booze')
54
+ @car.fill('gas', 'booze')
55
+ verify_mocks
56
+ end
57
+
58
+ it "supports several mocks at once" do
59
+ create_mocks :order_builder, :order, :customer
60
+
61
+ @order_builder.expects.create_new_order.returns @order
62
+ @customer.expects.account_number.returns(1234)
63
+ @order.expects.account_no = 1234
64
+ @order.expects.save!
65
+
66
+ # Run "the code"
67
+ o = @order_builder.create_new_order
68
+ o.account_no = @customer.account_number
69
+ o.save!
70
+
71
+ verify_mocks
72
+ end
73
+
74
+ it "enforces inter-mock call ordering" do
75
+ create_mocks :order_builder, :order, :customer
76
+
77
+ @order_builder.expects.create_new_order.returns @order
78
+ @customer.expects.account_number.returns(1234)
79
+ @order.expects.account_no = 1234
80
+ @order.expects.save!
81
+
82
+ # Run "the code"
83
+ o = @order_builder.create_new_order
84
+ err = assert_raise ExpectationError do
85
+ o.save!
86
+ end
87
+ assert_match(/wrong object/i, err.message)
88
+ assert_match(/order.save!/i, err.message)
89
+ assert_match(/customer.account_number/i, err.message)
90
+
91
+ assert_error VerifyError, /unmet expectations/i do
92
+ verify_mocks
93
+ end
94
+ end
95
+
96
+ class UserPresenter
97
+ def initialize(args)
98
+ view = args[:view]
99
+ model = args[:model]
100
+ model.when :data_changes do
101
+ view.user_name = model.user_name
102
+ end
103
+ view.when :user_edited do
104
+ model.user_name = view.user_name
105
+ end
106
+ end
107
+ end
108
+
109
+ it "makes MVP testing simple" do
110
+ mox = create_mocks :model, :view
111
+
112
+ data_change = @model.expects.when(:data_changes) { |evt,block| block }
113
+ user_edit = @view.expects.when(:user_edited) { |evt,block| block }
114
+
115
+ UserPresenter.new mox
116
+
117
+ # Expect user name transfer from model to view
118
+ @model.expects.user_name.returns 'Da Croz'
119
+ @view.expects.user_name = 'Da Croz'
120
+ # Trigger data change event in model
121
+ data_change.block_value.call
122
+
123
+ # Expect user name transfer from view to model
124
+ @view.expects.user_name.returns '6:8'
125
+ @model.expects.user_name = '6:8'
126
+ # Trigger edit event in view
127
+ user_edit.block_value.call
128
+
129
+ verify_mocks
130
+ end
131
+
132
+ it "continues to function after verify, if verification error is controlled" do
133
+ mox = create_mocks :model, :view
134
+ data_change = @model.expects.when(:data_changes) { |evt,block| block }
135
+ user_edit = @view.expects.when(:user_edited) { |evt,block| block }
136
+ UserPresenter.new mox
137
+
138
+ # Expect user name transfer from model to view
139
+ @model.expects.user_name.returns 'Da Croz'
140
+ @view.expects.user_name = 'Da Croz'
141
+
142
+ assert_error ExpectationError, /model.monkey_wrench/i do
143
+ @model.monkey_wrench
144
+ end
145
+
146
+ # This should raise because of unmet expectations
147
+ assert_error VerifyError, /unmet expectations/i, /user_name/i do
148
+ verify_mocks
149
+ end
150
+
151
+ # See that the non-forced verification remains quiet
152
+ assert_nothing_raised VerifyError do
153
+ verify_mocks(false)
154
+ end
155
+
156
+ @model.expects.never_gonna_happen
157
+
158
+ assert_error VerifyError, /unmet expectations/i, /never_gonna_happen/i do
159
+ verify_mocks
160
+ end
161
+ end
162
+
163
+ class UserPresenterBroken
164
+ def initialize(args)
165
+ view = args[:view]
166
+ model = args[:model]
167
+ model.when :data_changes do
168
+ view.user_name = model.user_name
169
+ end
170
+ # no view stuff, will break appropriately
171
+ end
172
+ end
173
+
174
+ it "flunks for typical Presenter constructor wiring failure" do
175
+ mox = create_mocks :model, :view
176
+
177
+ data_change = @model.expects.when(:data_changes) { |evt,block| block }
178
+ user_edit = @view.expects.when(:user_edited) { |evt,block| block }
179
+
180
+ UserPresenterBroken.new mox
181
+
182
+ err = assert_raise VerifyError do
183
+ verify_mocks
184
+ end
185
+ assert_match(/unmet expectations/i, err.message)
186
+ assert_match(/view.when\(:user_edited\)/i, err.message)
187
+
188
+ end
189
+
190
+ it "provides convenient event-subscription trap syntax for MVP testing" do
191
+ mox = create_mocks :model, :view
192
+
193
+ data_change = @model.trap.when(:data_changes)
194
+ user_edit = @view.trap.when(:user_edited)
195
+
196
+ UserPresenter.new mox
197
+
198
+ # Expect user name transfer from model to view
199
+ @model.expects.user_name.returns 'Da Croz'
200
+ @view.expects.user_name = 'Da Croz'
201
+ # Trigger data change event in model
202
+ data_change.trigger
203
+
204
+ # Expect user name transfer from view to model
205
+ @view.expects.user_name.returns '6:8'
206
+ @model.expects.user_name = '6:8'
207
+ # Trigger edit event in view
208
+ user_edit.trigger
209
+
210
+ verify_mocks
211
+ end
212
+
213
+ it "raises if you try to pass an expectation block to 'trap'" do
214
+ create_mock :model
215
+ assert_error Hardmock::ExpectationError, /blocks/i, /trap/i do
216
+ @model.trap.when(:some_event) do raise "huh?" end
217
+ end
218
+ end
219
+
220
+ class Grinder
221
+ def initialize(objects)
222
+ @chute = objects[:chute]
223
+ @bucket = objects[:bucket]
224
+ @blade = objects[:blade]
225
+ end
226
+
227
+ def grind(slot)
228
+ @chute.each_bean(slot) do |bean|
229
+ @bucket << @blade.chop(bean)
230
+ end
231
+ end
232
+ end
233
+
234
+ it "lets you write clear iteration-oriented expectations" do
235
+ grinder = Grinder.new create_mocks(:blade, :chute, :bucket)
236
+
237
+ # Style 1: assertions on method args is done explicitly in block
238
+ @chute.expects.each_bean { |slot,block|
239
+ assert_equal :side_slot, slot, "Wrong slot"
240
+ block.call :bean1
241
+ block.call :bean2
242
+ }
243
+
244
+ @blade.expects.chop(:bean1).returns(:grounds1)
245
+ @bucket.expects('<<', :grounds1)
246
+
247
+ @blade.expects.chop(:bean2).returns(:grounds2)
248
+ @bucket.expects('<<', :grounds2)
249
+
250
+ # Run "the code"
251
+ grinder.grind(:side_slot)
252
+
253
+ verify_mocks
254
+
255
+ # Style 2: assertions on method arguments done implicitly in the expectation code
256
+ @chute.expects.each_bean(:main_slot) { |slot,block|
257
+ block.call :bean3
258
+ }
259
+ @blade.expects.chop(:bean3).returns(:grounds3)
260
+ @bucket.expects('<<', :grounds3)
261
+ grinder.grind :main_slot
262
+ verify_mocks
263
+ end
264
+
265
+ it "further supports iteration testing using 'yield'" do
266
+ grinder = Grinder.new create_mocks(:blade, :chute, :bucket)
267
+
268
+ @chute.expects.each_bean(:side_slot).yields :bean1, :bean2
269
+
270
+ @blade.expects.chop(:bean1).returns(:grounds1)
271
+ @bucket.expects('<<', :grounds1)
272
+
273
+ @blade.expects.chop(:bean2).returns(:grounds2)
274
+ @bucket.expects('<<', :grounds2)
275
+
276
+ grinder.grind :side_slot
277
+
278
+ verify_mocks
279
+ end
280
+
281
+ class HurtLocker
282
+ attr_reader :caught
283
+ def initialize(opts)
284
+ @locker = opts[:locker]
285
+ @store = opts[:store]
286
+ end
287
+
288
+ def do_the_thing(area,data)
289
+ @locker.with_lock(area) do
290
+ @store.eat(data)
291
+ end
292
+ rescue => oops
293
+ @caught = oops
294
+ end
295
+ end
296
+
297
+ it "makes mutex-style locking scenarios easy to test" do
298
+ hurt = HurtLocker.new create_mocks(:locker, :store)
299
+
300
+ @locker.expects.with_lock(:main).yields
301
+ @store.expects.eat("some info")
302
+
303
+ hurt.do_the_thing(:main, "some info")
304
+
305
+ verify_mocks
306
+ end
307
+
308
+ it "makes it easy to simulate error in mutex-style locking scenarios" do
309
+ hurt = HurtLocker.new create_mocks(:locker, :store)
310
+ err = StandardError.new('fmshooop')
311
+ @locker.expects.with_lock(:main).yields
312
+ @store.expects.eat("some info").raises(err)
313
+
314
+ hurt.do_the_thing(:main, "some info")
315
+
316
+ assert_same err, hurt.caught, "Expected that error to be handled internally"
317
+ verify_mocks
318
+ end
319
+
320
+ it "actually returns 'false' instead of nil when mocking boolean return values" do
321
+ create_mock :car
322
+ @car.expects.ignition_on?.returns(true)
323
+ assert_equal true, @car.ignition_on?, "Should be true"
324
+ @car.expects.ignition_on?.returns(false)
325
+ assert_equal false, @car.ignition_on?, "Should be false"
326
+ end
327
+
328
+ it "can mock most methods inherited from object using literal syntax" do
329
+ target_methods = %w|id clone display dup eql? ==|
330
+ create_mock :foo
331
+ target_methods.each do |m|
332
+ eval %{@foo.expects(m, "some stuff")}
333
+ eval %{@foo.#{m} "some stuff"}
334
+ end
335
+ end
336
+
337
+ it "provides 'expect' as an alias for 'expects'" do
338
+ create_mock :foo
339
+ @foo.expect.boomboom
340
+ @foo.boomboom
341
+ verify_mocks
342
+ end
343
+
344
+ it "provides 'should_receive' as an alias for 'expects'" do
345
+ create_mock :foo
346
+ @foo.should_receive.boomboom
347
+ @foo.boomboom
348
+ verify_mocks
349
+ end
350
+
351
+ it "provides 'and_return' as an alias for 'returns'" do
352
+ create_mock :foo
353
+ @foo.expects(:boomboom).and_return :brick
354
+ assert_equal :brick, @foo.boomboom
355
+ verify_mocks
356
+ end
357
+
358
+ it "does not interfere with a core subset of Object methods" do
359
+ create_mock :foo
360
+ @foo.method(:inspect)
361
+ @foo.inspect
362
+ @foo.to_s
363
+ @foo.instance_variables
364
+ @foo.instance_eval("")
365
+ verify_mocks
366
+ end
367
+
368
+ it "can raise errors from within an expectation block" do
369
+ create_mock :cat
370
+ @cat.expects.meow do |arg|
371
+ assert_equal "mix", arg
372
+ raise 'HAIRBALL'
373
+ end
374
+ assert_error RuntimeError, 'HAIRBALL' do
375
+ @cat.meow("mix")
376
+ end
377
+ end
378
+
379
+ it "can raise errors AFTER an expectation block" do
380
+ create_mock :cat
381
+ @cat.expects.meow do |arg|
382
+ assert_equal "mix", arg
383
+ end.raises('HAIRBALL')
384
+ assert_error RuntimeError, 'HAIRBALL' do
385
+ @cat.meow("mix")
386
+ end
387
+ end
388
+
389
+ it "raises an immediate error if a mock is created with a nil name (common mistake: create_mock @cat)" do
390
+ # I make this mistake all the time: Typing in an instance var name instead of a symbol in create_mocks.
391
+ # When you do that, you're effectively passing nil(s) in as mock names.
392
+ assert_error ArgumentError, /'nil' is not a valid name for a mock/ do
393
+ create_mocks @apples, @oranges
394
+ end
395
+ end
396
+
397
+ it "overrides 'inspect' to make nice output" do
398
+ create_mock :hay_bailer
399
+ assert_equal "<Mock hay_bailer>", @hay_bailer.inspect, "Wrong output from 'inspect'"
400
+ end
401
+
402
+ it "raises if prepare_hardmock_control is invoked after create_mocks, or more than once" do
403
+ create_mock :hi_there
404
+ create_mocks :another, :one
405
+ assert_error RuntimeError, /already setup/ do
406
+ prepare_hardmock_control
407
+ end
408
+ end
409
+
410
+ should "support alias verify_hardmocks" do
411
+ create_mock :tree
412
+ @tree.expects(:grow)
413
+ assert_error VerifyError, /unmet/i do
414
+ verify_hardmocks
415
+ end
416
+ end
417
+
418
+ #
419
+ # HELPERS
420
+ #
421
+
422
+ def assert_mock_exists(name)
423
+ assert_not_nil @all_mocks, "@all_mocks not here yet"
424
+ mo = @all_mocks[name]
425
+ assert_not_nil mo, "Mock '#{name}' not in @all_mocks"
426
+ assert_kind_of Mock, mo, "Wrong type of object, wanted a Mock"
427
+ assert_equal name.to_s, mo._name, "Mock '#{name}' had wrong name"
428
+ ivar = self.instance_variable_get("@#{name}")
429
+ assert_not_nil ivar, "Mock '#{name}' not set as ivar"
430
+ assert_same mo, ivar, "Mock '#{name}' ivar not same as instance in @all_mocks"
431
+ assert_same @main_mock_control, mo._control, "Mock '#{name}' doesn't share the main mock control"
432
+ end
433
+ end
434
+
@@ -0,0 +1,479 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../test_helper")
2
+ require 'hardmock'
3
+ require 'assert_error'
4
+
5
+ class StubbingTest < Test::Unit::TestCase
6
+
7
+ #
8
+ # TESTS
9
+ #
10
+
11
+ it "stubs a class method (and un-stubs after reset_stubs)" do
12
+ assert_equal "stones and gravel", Concrete.pour
13
+ assert_equal "glug glug", Jug.pour
14
+
15
+ Concrete.stubs!(:pour).returns("dust and plaster")
16
+
17
+ 3.times do
18
+ assert_equal "dust and plaster", Concrete.pour
19
+ end
20
+
21
+ assert_equal "glug glug", Jug.pour, "Jug's 'pour' method broken"
22
+ assert_equal "stones and gravel", Concrete._hardmock_original_pour, "Original 'pour' method not aliased"
23
+
24
+ assert_equal "For roads", Concrete.describe, "'describe' method broken"
25
+
26
+ reset_stubs
27
+
28
+ assert_equal "stones and gravel", Concrete.pour, "'pour' method not restored"
29
+ assert_equal "For roads", Concrete.describe, "'describe' method broken after verify"
30
+
31
+ end
32
+
33
+ it "stubs several class methods" do
34
+ Concrete.stubs!(:pour).returns("sludge")
35
+ Concrete.stubs!(:describe).returns("awful")
36
+ Jug.stubs!(:pour).returns("milk")
37
+
38
+ assert_equal "sludge", Concrete.pour
39
+ assert_equal "awful", Concrete.describe
40
+ assert_equal "milk", Jug.pour
41
+
42
+ reset_stubs
43
+
44
+ assert_equal "stones and gravel", Concrete.pour
45
+ assert_equal "For roads", Concrete.describe
46
+ assert_equal "glug glug", Jug.pour
47
+ end
48
+
49
+ it "stubs instance methods" do
50
+ slab = Concrete.new
51
+ assert_equal "bonk", slab.hit
52
+
53
+ slab.stubs!(:hit).returns("slap")
54
+ assert_equal "slap", slab.hit, "'hit' not stubbed"
55
+
56
+ reset_stubs
57
+
58
+ assert_equal "bonk", slab.hit, "'hit' not restored"
59
+ end
60
+
61
+ it "stubs instance methods without breaking class methods or other instances" do
62
+ slab = Concrete.new
63
+ scrape = Concrete.new
64
+ assert_equal "an instance", slab.describe
65
+ assert_equal "an instance", scrape.describe
66
+ assert_equal "For roads", Concrete.describe
67
+
68
+ slab.stubs!(:describe).returns("new instance describe")
69
+ assert_equal "new instance describe", slab.describe, "'describe' on instance not stubbed"
70
+ assert_equal "an instance", scrape.describe, "'describe' on 'scrape' instance broken"
71
+ assert_equal "For roads", Concrete.describe, "'describe' class method broken"
72
+
73
+ reset_stubs
74
+
75
+ assert_equal "an instance", slab.describe, "'describe' instance method not restored"
76
+ assert_equal "an instance", scrape.describe, "'describe' on 'scrape' instance broken after restore"
77
+ assert_equal "For roads", Concrete.describe, "'describe' class method broken after restore"
78
+ end
79
+
80
+ should "allow stubbing of nonexistant class methods" do
81
+ Concrete.stubs!(:funky).returns('juice')
82
+ assert_equal 'juice', Concrete.funky
83
+ end
84
+
85
+ should "allow stubbing of nonexistant instance methods" do
86
+ chunk = Concrete.new
87
+ chunk.stubs!(:shark).returns('bite')
88
+ assert_equal 'bite', chunk.shark
89
+ end
90
+
91
+ should "allow re-stubbing" do
92
+ Concrete.stubs!(:pour).returns("one")
93
+ assert_equal "one", Concrete.pour
94
+
95
+ Concrete.stubs!(:pour).raises("hell")
96
+ assert_error RuntimeError, /hell/ do
97
+ Concrete.pour
98
+ end
99
+
100
+ Concrete.stubs!(:pour).returns("two")
101
+ assert_equal "two", Concrete.pour
102
+
103
+ reset_stubs
104
+
105
+ assert_equal "stones and gravel", Concrete.pour
106
+ end
107
+
108
+ it "does nothing with a runtime block when simply stubbing" do
109
+ slab = Concrete.new
110
+ slab.stubs!(:hit) do |nothing|
111
+ raise "BOOOMM!"
112
+ end
113
+ slab.hit
114
+ reset_stubs
115
+ end
116
+
117
+ it "can raise errors from a stubbed method" do
118
+ Concrete.stubs!(:pour).raises(StandardError.new("no!"))
119
+ assert_error StandardError, /no!/ do
120
+ Concrete.pour
121
+ end
122
+ end
123
+
124
+ it "provides string syntax for convenient raising of RuntimeErrors" do
125
+ Concrete.stubs!(:pour).raises("never!")
126
+ assert_error RuntimeError, /never!/ do
127
+ Concrete.pour
128
+ end
129
+ end
130
+
131
+
132
+ #
133
+ # Per-method mocking on classes or instances
134
+ #
135
+
136
+ it "mocks specific methods on existing classes, and returns the class method to normal after verification" do
137
+
138
+ assert_equal "stones and gravel", Concrete.pour, "Concrete.pour is already messed up"
139
+
140
+ Concrete.expects!(:pour).returns("ALIGATORS")
141
+ assert_equal "ALIGATORS", Concrete.pour
142
+
143
+ verify_mocks
144
+ assert_equal "stones and gravel", Concrete.pour, "Concrete.pour not restored"
145
+ end
146
+
147
+ it "flunks if expected class method is not invoked" do
148
+
149
+ Concrete.expects!(:pour).returns("ALIGATORS")
150
+ assert_error(Hardmock::VerifyError, /Concrete.pour/, /unmet expectations/i) do
151
+ verify_mocks
152
+ end
153
+ clear_expectations
154
+ end
155
+
156
+ it "supports all normal mock functionality for class methods" do
157
+
158
+ Concrete.expects!(:pour, "two tons").returns("mice")
159
+ Concrete.expects!(:pour, "three tons").returns("cats")
160
+ Concrete.expects!(:pour, "four tons").raises("Can't do it")
161
+ Concrete.expects!(:pour) do |some, args|
162
+ "==#{some}+#{args}=="
163
+ end
164
+
165
+ assert_equal "mice", Concrete.pour("two tons")
166
+ assert_equal "cats", Concrete.pour("three tons")
167
+ assert_error(RuntimeError, /Can't do it/) do
168
+ Concrete.pour("four tons")
169
+ end
170
+ assert_equal "==first+second==", Concrete.pour("first","second")
171
+ end
172
+
173
+
174
+ it "enforces inter-mock ordering when mocking class methods" do
175
+ create_mocks :truck, :foreman
176
+
177
+ @truck.expects.backup
178
+ Concrete.expects!(:pour, "something")
179
+ @foreman.expects.shout
180
+
181
+ @truck.backup
182
+ assert_error Hardmock::ExpectationError, /wrong/i, /expected call/i, /Concrete.pour/ do
183
+ @foreman.shout
184
+ end
185
+ assert_error Hardmock::VerifyError, /unmet expectations/i, /foreman.shout/ do
186
+ verify_mocks
187
+ end
188
+ clear_expectations
189
+ end
190
+
191
+ should "allow mocking non-existant class methods" do
192
+ Concrete.expects!(:something).returns("else")
193
+ assert_equal "else", Concrete.something
194
+ end
195
+
196
+ it "mocks specific methods on existing instances, then restore them after verify" do
197
+
198
+ slab = Concrete.new
199
+ assert_equal "bonk", slab.hit
200
+
201
+ slab.expects!(:hit).returns("slap")
202
+ assert_equal "slap", slab.hit, "'hit' not stubbed"
203
+
204
+ verify_mocks
205
+ assert_equal "bonk", slab.hit, "'hit' not restored"
206
+ end
207
+
208
+ it "flunks if expected instance method is not invoked" do
209
+
210
+ slab = Concrete.new
211
+ slab.expects!(:hit)
212
+
213
+ assert_error Hardmock::VerifyError, /unmet expectations/i, /Concrete.hit/ do
214
+ verify_mocks
215
+ end
216
+ clear_expectations
217
+ end
218
+
219
+ it "supports all normal mock functionality for instance methods" do
220
+
221
+ slab = Concrete.new
222
+
223
+ slab.expects!(:hit, "soft").returns("hey")
224
+ slab.expects!(:hit, "hard").returns("OOF")
225
+ slab.expects!(:hit).raises("stoppit")
226
+ slab.expects!(:hit) do |some, args|
227
+ "==#{some}+#{args}=="
228
+ end
229
+
230
+ assert_equal "hey", slab.hit("soft")
231
+ assert_equal "OOF", slab.hit("hard")
232
+ assert_error(RuntimeError, /stoppit/) do
233
+ slab.hit
234
+ end
235
+ assert_equal "==first+second==", slab.hit("first","second")
236
+
237
+ end
238
+
239
+ it "enforces inter-mock ordering when mocking instance methods" do
240
+ create_mocks :truck, :foreman
241
+ slab1 = Concrete.new
242
+ slab2 = Concrete.new
243
+
244
+ @truck.expects.backup
245
+ slab1.expects!(:hit)
246
+ @foreman.expects.shout
247
+ slab2.expects!(:hit)
248
+ @foreman.expects.whatever
249
+
250
+ @truck.backup
251
+ slab1.hit
252
+ @foreman.shout
253
+ assert_error Hardmock::ExpectationError, /wrong/i, /expected call/i, /Concrete.hit/ do
254
+ @foreman.whatever
255
+ end
256
+ assert_error Hardmock::VerifyError, /unmet expectations/i, /foreman.whatever/ do
257
+ verify_mocks
258
+ end
259
+ clear_expectations
260
+ end
261
+
262
+ should "allow mocking non-existant instance methods" do
263
+ slab = Concrete.new
264
+ slab.expects!(:wholly).returns('happy')
265
+ assert_equal 'happy', slab.wholly
266
+ end
267
+
268
+ should "support concrete expectations that deal with runtime blocks" do
269
+
270
+ Concrete.expects!(:pour, "a lot") do |how_much, block|
271
+ assert_equal "a lot", how_much, "Wrong how_much arg"
272
+ assert_not_nil block, "nil runtime block"
273
+ assert_equal "the block value", block.call, "Wrong runtime block value"
274
+ end
275
+
276
+ Concrete.pour("a lot") do
277
+ "the block value"
278
+ end
279
+
280
+ end
281
+
282
+ it "can stub methods on mock objects" do
283
+ create_mock :horse
284
+ @horse.stubs!(:speak).returns("silence")
285
+ @horse.stubs!(:hello).returns("nothing")
286
+ @horse.expects(:canter).returns("clip clop")
287
+
288
+ assert_equal "silence", @horse.speak
289
+ assert_equal "clip clop", @horse.canter
290
+ assert_equal "silence", @horse.speak
291
+ assert_equal "silence", @horse.speak
292
+ assert_equal "nothing", @horse.hello
293
+ assert_equal "nothing", @horse.hello
294
+
295
+ verify_mocks
296
+ reset_stubs
297
+ end
298
+
299
+ it "can stub the new method and return values" do
300
+ Concrete.stubs!(:new).returns("this value")
301
+ assert_equal "this value", Concrete.new, "did not properly stub new class method"
302
+ reset_stubs
303
+ end
304
+
305
+ it "can mock the new method and return values" do
306
+ Concrete.expects!(:new).with("foo").returns("hello")
307
+ Concrete.expects!(:new).with("bar").returns("world")
308
+
309
+ assert_equal "hello", Concrete.new("foo"), "did not properly mock out new class method"
310
+ assert_equal "world", Concrete.new("bar"), "did not properly mock out new class method"
311
+
312
+ verify_mocks
313
+ reset_stubs
314
+ end
315
+
316
+ it "can mock several different class methods at once" do
317
+ sim_code = lambda do |input|
318
+ record = Multitool.find_record(input)
319
+ report = Multitool.generate_report(record)
320
+ Multitool.format_output(report)
321
+ end
322
+
323
+ @identifier = "the id"
324
+ @record = "the record"
325
+ @report = "the report"
326
+ @output = "the output"
327
+
328
+ Multitool.expects!(:find_record).with(@identifier).returns(@record)
329
+ Multitool.expects!(:generate_report).with(@record).returns(@report)
330
+ Multitool.expects!(:format_output).with(@report).returns(@output)
331
+
332
+ result = sim_code.call(@identifier)
333
+ assert_equal @output, result, "Wrong output"
334
+ end
335
+
336
+ it "can handle a mix of different and repeat class method mock calls" do
337
+ prep = lambda {
338
+ Multitool.expects!(:find_record).with("A").returns("1")
339
+ Multitool.expects!(:generate_report).with("1")
340
+ Multitool.expects!(:find_record).with("B").returns("2")
341
+ Multitool.expects!(:generate_report).with("2")
342
+ }
343
+
344
+ prep[]
345
+ Multitool.generate_report(Multitool.find_record("A"))
346
+ Multitool.generate_report(Multitool.find_record("B"))
347
+
348
+ prep[]
349
+ Multitool.generate_report(Multitool.find_record("A"))
350
+ assert_error Hardmock::ExpectationError, /Wrong arguments/, /find_record\("B"\)/, /find_record\("C"\)/ do
351
+ Multitool.generate_report(Multitool.find_record("C"))
352
+ end
353
+ clear_expectations
354
+ end
355
+
356
+ it "can mock several concrete instance methods at once" do
357
+ inst = OtherMultitool.new
358
+ sim_code = lambda do |input|
359
+ record = inst.find_record(input)
360
+ report = inst.generate_report(record)
361
+ inst.format_output(report)
362
+ end
363
+
364
+ @identifier = "the id"
365
+ @record = "the record"
366
+ @report = "the report"
367
+ @output = "the output"
368
+
369
+ inst.expects!(:find_record).with(@identifier).returns(@record)
370
+ inst.expects!(:generate_report).with(@record).returns(@report)
371
+ inst.expects!(:format_output).with(@report).returns(@output)
372
+
373
+ result = sim_code.call(@identifier)
374
+ assert_equal @output, result, "Wrong output"
375
+ end
376
+
377
+ it "verifies all concrete expects! from several different expectations" do
378
+ Multitool.expects!(:find_record)
379
+ Multitool.expects!(:generate_report)
380
+ Multitool.expects!(:format_output)
381
+
382
+ Multitool.find_record
383
+ Multitool.generate_report
384
+
385
+ assert_error Hardmock::VerifyError, /unmet expectations/i, /format_output/i do
386
+ verify_mocks
387
+ end
388
+ end
389
+
390
+ it "will not allow expects! to be used on a mock object" do
391
+ create_mock :cow
392
+ assert_error Hardmock::StubbingError, /expects!/, /mock/i, /something/ do
393
+ @cow.expects!(:something)
394
+ end
395
+ end
396
+
397
+ it "does not allow stubbing on nil objects" do
398
+ [ nil, @this_is_nil ].each do |nil_obj|
399
+ assert_error Hardmock::StubbingError, /cannot/i, /nil/i, /intentionally/ do
400
+ nil_obj.stubs!(:wont_work)
401
+ end
402
+ end
403
+ end
404
+
405
+ it "does not allow concrete method mocking on nil objects" do
406
+ [ nil, @this_is_nil ].each do |nil_obj|
407
+ assert_error Hardmock::StubbingError, /cannot/i, /nil/i, /intentionally/ do
408
+ nil_obj.expects!(:wont_work)
409
+ end
410
+ end
411
+ end
412
+
413
+ it "provides an alternate method for stubbing on nil objects" do
414
+ @this_is_nil.intentionally_stubs!(:bogus).returns('output')
415
+ assert_equal 'output', @this_is_nil.bogus
416
+ end
417
+
418
+ it "provides an alternate method for mocking concreate methods on nil objects" do
419
+ @this_is_nil.intentionally_expects!(:bogus).returns('output')
420
+ assert_error Hardmock::VerifyError, /unmet expectations/i, /NilClass.bogus/ do
421
+ verify_mocks
422
+ end
423
+ end
424
+
425
+ #
426
+ # HELPERS
427
+ #
428
+
429
+ class Concrete
430
+ def initialize; end
431
+ def self.pour
432
+ "stones and gravel"
433
+ end
434
+
435
+ def self.describe
436
+ "For roads"
437
+ end
438
+
439
+ def hit
440
+ "bonk"
441
+ end
442
+
443
+ def describe
444
+ "an instance"
445
+ end
446
+ end
447
+
448
+ class Jug
449
+ def self.pour
450
+ "glug glug"
451
+ end
452
+ end
453
+
454
+ class Multitool
455
+ def self.find_record(*a)
456
+ raise "The real Multitool.find_record was called with #{a.inspect}"
457
+ end
458
+ def self.generate_report(*a)
459
+ raise "The real Multitool.generate_report was called with #{a.inspect}"
460
+ end
461
+ def self.format_output(*a)
462
+ raise "The real Multitool.format_output was called with #{a.inspect}"
463
+ end
464
+ end
465
+
466
+ class OtherMultitool
467
+ def find_record(*a)
468
+ raise "The real OtherMultitool#find_record was called with #{a.inspect}"
469
+ end
470
+ def generate_report(*a)
471
+ raise "The real OtherMultitool#generate_report was called with #{a.inspect}"
472
+ end
473
+ def format_output(*a)
474
+ raise "The real OtherMultitool#format_output was called with #{a.inspect}"
475
+ end
476
+ end
477
+
478
+ end
479
+