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.
- data/CHANGES +8 -0
- data/LICENSE +19 -0
- data/README +105 -0
- data/Rakefile +83 -0
- data/config/environment.rb +23 -0
- data/config/objects.yml +23 -0
- data/lib/analog_io.rb +23 -0
- data/lib/connection_state.rb +13 -0
- data/lib/digital_auxport_io.rb +34 -0
- data/lib/digital_configuration.rb +53 -0
- data/lib/digital_port_io.rb +39 -0
- data/lib/library_translator.rb +46 -0
- data/lib/minilab.rb +130 -0
- data/lib/minilab_constants.rb +20 -0
- data/lib/minilab_context.rb +14 -0
- data/lib/minilab_hardware.rb +112 -0
- data/lib/minilab_wrapper.rb +12 -0
- data/test/system/analog_input.test +3 -0
- data/test/system/analog_output.test +37 -0
- data/test/system/digital_port_input.test +5 -0
- data/test/system/digital_port_output.test +39 -0
- data/test/system/digital_port_read_byte.test +26 -0
- data/test/system/digital_screw_terminals_input.test +2 -0
- data/test/system/digital_screw_terminals_output.test +11 -0
- data/test/system/minilab_driver.rb +83 -0
- data/test/test_helper.rb +15 -0
- data/test/unit/analog_io_test.rb +54 -0
- data/test/unit/connection_state_test.rb +18 -0
- data/test/unit/digital_auxport_io_test.rb +102 -0
- data/test/unit/digital_configuration_test.rb +100 -0
- data/test/unit/digital_port_io_test.rb +67 -0
- data/test/unit/library_translator_test.rb +98 -0
- data/test/unit/minilab_context_test.rb +23 -0
- data/test/unit/minilab_hardware_test.rb +33 -0
- data/test/unit/minilab_test.rb +115 -0
- data/test/unit/minilab_wrapper_test.rb +24 -0
- data/vendor/behaviors/lib/behaviors.rb +50 -0
- data/vendor/behaviors/tasks/behaviors_tasks.rake +140 -0
- data/vendor/behaviors/test/behaviors_tasks_test.rb +71 -0
- data/vendor/behaviors/test/behaviors_test.rb +50 -0
- data/vendor/behaviors/test/tasks_test/Rakefile +16 -0
- data/vendor/behaviors/test/tasks_test/doc/behaviors.html +55 -0
- data/vendor/behaviors/test/tasks_test/lib/user.rb +2 -0
- data/vendor/behaviors/test/tasks_test/test/user_test.rb +17 -0
- data/vendor/constructor-1.0.2/History.txt +11 -0
- data/vendor/constructor-1.0.2/Manifest.txt +6 -0
- data/vendor/constructor-1.0.2/README.txt +77 -0
- data/vendor/constructor-1.0.2/Rakefile +33 -0
- data/vendor/constructor-1.0.2/lib/constructor.rb +119 -0
- data/vendor/constructor-1.0.2/specs/constructor_spec.rb +345 -0
- data/vendor/diy-1.1.1/History.txt +23 -0
- data/vendor/diy-1.1.1/Manifest.txt +88 -0
- data/vendor/diy-1.1.1/README.txt +220 -0
- data/vendor/diy-1.1.1/Rakefile +29 -0
- data/vendor/diy-1.1.1/TODO.txt +9 -0
- data/vendor/diy-1.1.1/homepage/Notes.txt +27 -0
- data/vendor/diy-1.1.1/homepage/Rakefile +14 -0
- data/vendor/diy-1.1.1/homepage/diy_example.png +0 -0
- data/vendor/diy-1.1.1/homepage/index.erb +36 -0
- data/vendor/diy-1.1.1/homepage/index.html +45 -0
- data/vendor/diy-1.1.1/homepage/objects_yml.png +0 -0
- data/vendor/diy-1.1.1/homepage/page_header.graffle +0 -0
- data/vendor/diy-1.1.1/homepage/page_header.html +9 -0
- data/vendor/diy-1.1.1/homepage/page_header.png +0 -0
- data/vendor/diy-1.1.1/lib/diy.rb +365 -0
- data/vendor/diy-1.1.1/sample_code/car.rb +7 -0
- data/vendor/diy-1.1.1/sample_code/chassis.rb +5 -0
- data/vendor/diy-1.1.1/sample_code/diy_example.rb +26 -0
- data/vendor/diy-1.1.1/sample_code/engine.rb +5 -0
- data/vendor/diy-1.1.1/sample_code/objects.yml +10 -0
- data/vendor/diy-1.1.1/test/constructor.rb +119 -0
- data/vendor/diy-1.1.1/test/diy_test.rb +604 -0
- data/vendor/diy-1.1.1/test/files/broken_construction.yml +7 -0
- data/vendor/diy-1.1.1/test/files/cat/cat.rb +3 -0
- data/vendor/diy-1.1.1/test/files/cat/extra_conflict.yml +5 -0
- data/vendor/diy-1.1.1/test/files/cat/heritage.rb +2 -0
- data/vendor/diy-1.1.1/test/files/cat/needs_input.yml +3 -0
- data/vendor/diy-1.1.1/test/files/cat/the_cat_lineage.rb +1 -0
- data/vendor/diy-1.1.1/test/files/dog/dog_model.rb +3 -0
- data/vendor/diy-1.1.1/test/files/dog/dog_presenter.rb +3 -0
- data/vendor/diy-1.1.1/test/files/dog/dog_view.rb +2 -0
- data/vendor/diy-1.1.1/test/files/dog/file_resolver.rb +2 -0
- data/vendor/diy-1.1.1/test/files/dog/other_thing.rb +2 -0
- data/vendor/diy-1.1.1/test/files/dog/simple.yml +11 -0
- data/vendor/diy-1.1.1/test/files/donkey/foo.rb +8 -0
- data/vendor/diy-1.1.1/test/files/donkey/foo/bar/qux.rb +7 -0
- data/vendor/diy-1.1.1/test/files/fud/objects.yml +13 -0
- data/vendor/diy-1.1.1/test/files/fud/toy.rb +14 -0
- data/vendor/diy-1.1.1/test/files/functions/invalid_method.yml +5 -0
- data/vendor/diy-1.1.1/test/files/functions/method_extractor.rb +3 -0
- data/vendor/diy-1.1.1/test/files/functions/nonsingleton_objects.yml +6 -0
- data/vendor/diy-1.1.1/test/files/functions/objects.yml +11 -0
- data/vendor/diy-1.1.1/test/files/functions/thing.rb +3 -0
- data/vendor/diy-1.1.1/test/files/functions/thing_builder.rb +21 -0
- data/vendor/diy-1.1.1/test/files/functions/things_builder.rb +3 -0
- data/vendor/diy-1.1.1/test/files/gnu/objects.yml +14 -0
- data/vendor/diy-1.1.1/test/files/gnu/thinger.rb +7 -0
- data/vendor/diy-1.1.1/test/files/goat/base.rb +8 -0
- data/vendor/diy-1.1.1/test/files/goat/can.rb +6 -0
- data/vendor/diy-1.1.1/test/files/goat/goat.rb +6 -0
- data/vendor/diy-1.1.1/test/files/goat/objects.yml +12 -0
- data/vendor/diy-1.1.1/test/files/goat/paper.rb +6 -0
- data/vendor/diy-1.1.1/test/files/goat/plane.rb +7 -0
- data/vendor/diy-1.1.1/test/files/goat/shirt.rb +6 -0
- data/vendor/diy-1.1.1/test/files/goat/wings.rb +8 -0
- data/vendor/diy-1.1.1/test/files/horse/holder_thing.rb +3 -0
- data/vendor/diy-1.1.1/test/files/horse/objects.yml +7 -0
- data/vendor/diy-1.1.1/test/files/namespace/animal/bird.rb +5 -0
- data/vendor/diy-1.1.1/test/files/namespace/animal/cat.rb +5 -0
- data/vendor/diy-1.1.1/test/files/namespace/animal/reptile/hardshell/turtle.rb +8 -0
- data/vendor/diy-1.1.1/test/files/namespace/animal/reptile/lizard.rb +7 -0
- data/vendor/diy-1.1.1/test/files/namespace/bad_module_specified.yml +8 -0
- data/vendor/diy-1.1.1/test/files/namespace/class_name_combine.yml +8 -0
- data/vendor/diy-1.1.1/test/files/namespace/hello.txt +1 -0
- data/vendor/diy-1.1.1/test/files/namespace/no_module_specified.yml +8 -0
- data/vendor/diy-1.1.1/test/files/namespace/objects.yml +21 -0
- data/vendor/diy-1.1.1/test/files/namespace/road.rb +2 -0
- data/vendor/diy-1.1.1/test/files/namespace/sky.rb +2 -0
- data/vendor/diy-1.1.1/test/files/namespace/subcontext.yml +22 -0
- data/vendor/diy-1.1.1/test/files/non_singleton/air.rb +2 -0
- data/vendor/diy-1.1.1/test/files/non_singleton/fat_cat.rb +3 -0
- data/vendor/diy-1.1.1/test/files/non_singleton/objects.yml +19 -0
- data/vendor/diy-1.1.1/test/files/non_singleton/pig.rb +3 -0
- data/vendor/diy-1.1.1/test/files/non_singleton/thread_spinner.rb +3 -0
- data/vendor/diy-1.1.1/test/files/non_singleton/tick.rb +3 -0
- data/vendor/diy-1.1.1/test/files/non_singleton/yard.rb +2 -0
- data/vendor/diy-1.1.1/test/files/yak/core_model.rb +3 -0
- data/vendor/diy-1.1.1/test/files/yak/core_presenter.rb +3 -0
- data/vendor/diy-1.1.1/test/files/yak/core_view.rb +1 -0
- data/vendor/diy-1.1.1/test/files/yak/data_source.rb +1 -0
- data/vendor/diy-1.1.1/test/files/yak/fringe_model.rb +3 -0
- data/vendor/diy-1.1.1/test/files/yak/fringe_presenter.rb +3 -0
- data/vendor/diy-1.1.1/test/files/yak/fringe_view.rb +1 -0
- data/vendor/diy-1.1.1/test/files/yak/giant_squid.rb +3 -0
- data/vendor/diy-1.1.1/test/files/yak/krill.rb +2 -0
- data/vendor/diy-1.1.1/test/files/yak/my_objects.yml +21 -0
- data/vendor/diy-1.1.1/test/files/yak/sub_sub_context_test.yml +27 -0
- data/vendor/diy-1.1.1/test/test_helper.rb +39 -0
- data/vendor/ffi-0.4.0-x86-mswin32/LICENSE +51 -0
- data/vendor/ffi-0.4.0-x86-mswin32/Rakefile +142 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/AbstractMemory.c +412 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/AbstractMemory.h +68 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/AutoPointer.c +60 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/AutoPointer.h +18 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Buffer.c +171 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Callback.c +374 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Callback.h +47 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/DynamicLibrary.c +213 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/DynamicLibrary.h +22 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Invoker.c +962 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/LastError.c +135 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/LastError.h +18 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/MemoryPointer.c +156 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/MemoryPointer.h +20 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/NullPointer.c +143 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Platform.c +59 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Platform.h +16 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Pointer.c +164 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Pointer.h +25 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Struct.c +477 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Struct.h +26 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Type.c +230 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Type.h +28 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Types.c +118 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Types.h +54 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/compat.h +22 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/endian.h +40 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/extconf.rb +31 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/ffi.c +76 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi.bsd.mk +34 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi.darwin.mk +75 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi.gnu.mk +29 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi.mk +13 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/ChangeLog +3243 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/ChangeLog.libffi +347 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/ChangeLog.libgcj +40 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/ChangeLog.v1 +764 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/LICENSE +21 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/Makefile.am +177 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/Makefile.in +1640 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/README +328 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/TODO +1 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/acinclude.m4 +92 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/aclocal.m4 +7516 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/compile +142 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/config.guess +1516 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/config.sub +1626 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/configure +24414 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/configure.ac +365 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/configure.host +11 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/depcomp +584 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/doc/libffi.info +533 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/doc/libffi.texi +541 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/doc/stamp-vti +4 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/doc/version.texi +4 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/fficonfig.h.in +160 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/include/Makefile.am +9 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/include/Makefile.in +422 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/include/ffi.h.in +393 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/include/ffi_common.h +98 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/install-sh +323 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/libffi.pc.in +10 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/libtool-version +29 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/ltcf-c.sh +861 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/ltcf-cxx.sh +1069 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/ltcf-gcj.sh +700 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/ltconfig +2862 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/ltmain.sh +6930 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/man/Makefile.am +8 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/man/Makefile.in +395 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/man/ffi.3 +31 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/man/ffi_call.3 +103 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/man/ffi_prep_cif.3 +66 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/mdate-sh +201 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/missing +353 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/mkinstalldirs +158 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/alpha/ffi.c +284 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/alpha/ffitarget.h +48 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/alpha/osf.S +366 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/arm/ffi.c +309 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/arm/ffitarget.h +49 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/arm/sysv.S +299 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/closures.c +596 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/cris/ffi.c +383 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/cris/ffitarget.h +51 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/cris/sysv.S +215 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/debug.c +59 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/dlmalloc.c +5099 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/frv/eabi.S +128 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/frv/ffi.c +292 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/frv/ffitarget.h +61 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/ia64/ffi.c +580 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/ia64/ffitarget.h +50 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/ia64/ia64_flags.h +40 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/ia64/unix.S +560 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/java_raw_api.c +359 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/m32r/ffi.c +232 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/m32r/ffitarget.h +48 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/m32r/sysv.S +121 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/m68k/ffi.c +278 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/m68k/ffitarget.h +49 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/m68k/sysv.S +234 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/mips/ffi.c +926 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/mips/ffitarget.h +202 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/mips/n32.S +534 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/mips/o32.S +381 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/pa/ffi.c +709 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/pa/ffitarget.h +77 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/pa/hpux32.S +368 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/pa/linux.S +357 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/aix.S +225 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/aix_closure.S +247 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/asm.h +125 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/darwin.S +245 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +317 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/ffi.c +1429 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +800 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/ffitarget.h +118 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/linux64.S +187 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +236 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +327 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/powerpc/sysv.S +230 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/prep_cif.c +174 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/raw_api.c +254 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/s390/ffi.c +780 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/s390/ffitarget.h +60 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/s390/sysv.S +434 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/sh/ffi.c +716 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/sh/ffitarget.h +49 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/sh/sysv.S +850 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/sh64/ffi.c +453 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/sh64/ffitarget.h +53 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/sh64/sysv.S +530 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/sparc/ffi.c +610 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/sparc/ffitarget.h +66 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/sparc/v8.S +272 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/sparc/v9.S +307 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/types.c +77 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/x86/darwin.S +443 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/x86/darwin64.S +416 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/x86/ffi.c +475 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/x86/ffi64.c +572 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/x86/ffitarget.h +90 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/x86/freebsd.S +458 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/x86/sysv.S +437 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/x86/unix64.S +418 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/src/x86/win32.S +391 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/Makefile.am +71 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/Makefile.in +447 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/config/default.exp +1 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +289 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +263 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +45 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +36 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn0.c +97 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn1.c +89 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn2.c +89 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn3.c +90 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn4.c +97 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn5.c +99 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn6.c +98 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/closure_stdcall.c +72 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +102 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +103 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +104 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +110 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +97 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +99 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +101 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +121 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +98 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +103 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +98 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +98 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +106 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +98 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +117 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +106 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +132 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +121 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +107 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +125 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +105 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +96 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +98 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +99 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +101 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +99 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +100 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +101 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +99 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +99 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +99 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +99 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +99 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +100 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_double.c +51 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_float.c +51 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_schar.c +82 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshort.c +82 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshortchar.c +94 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_uchar.c +99 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushort.c +82 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushortchar.c +94 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_schar.c +52 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_sint.c +50 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_sshort.c +50 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar.c +50 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint.c +51 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +54 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort.c +51 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +86 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/float.c +59 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +58 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +57 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +72 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +62 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/many.c +69 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +63 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +53 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +160 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +169 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +141 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +118 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +119 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +119 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +120 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +139 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +119 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +139 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +139 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/problem1.c +98 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +59 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc-tc.c +114 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +35 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +43 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +42 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +35 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +36 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +49 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +42 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +34 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +41 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +42 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +36 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +38 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +38 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +38 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +44 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +44 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +65 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +67 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +59 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +63 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +65 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +64 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +74 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +80 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +67 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +86 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.special/special.exp +38 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest.cc +123 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc +53 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/libffi/texinfo.tex +7482 -0
- data/vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/rbffi.h +23 -0
- data/vendor/ffi-0.4.0-x86-mswin32/gen/Rakefile +12 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/1.8/ffi_c.so +0 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/1.9/ffi_c.so +0 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi.rb +11 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/autopointer.rb +61 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/buffer.rb +0 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/callback.rb +10 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/enum.rb +78 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/errno.rb +8 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/ffi.rb +96 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/io.rb +21 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/library.rb +243 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/managedstruct.rb +55 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/memorypointer.rb +73 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/platform.rb +78 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/pointer.rb +119 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/struct.rb +354 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/tools/const_generator.rb +177 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/tools/generator.rb +58 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/tools/generator_task.rb +35 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/tools/struct_generator.rb +194 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/tools/types_generator.rb +123 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/types.rb +153 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/union.rb +17 -0
- data/vendor/ffi-0.4.0-x86-mswin32/lib/ffi/variadic.rb +30 -0
- data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/bool_spec.rb +24 -0
- data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/buffer_spec.rb +196 -0
- data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/callback_spec.rb +560 -0
- data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/enum_spec.rb +164 -0
- data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/errno_spec.rb +13 -0
- data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/library_spec.rb +144 -0
- data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/managed_struct_spec.rb +56 -0
- data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/number_spec.rb +231 -0
- data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/pointer_spec.rb +195 -0
- data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/rbx/attach_function_spec.rb +27 -0
- data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/rbx/memory_pointer_spec.rb +102 -0
- data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/rbx/spec_helper.rb +1 -0
- data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/rbx/struct_spec.rb +13 -0
- data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/spec_helper.rb +17 -0
- data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/string_spec.rb +103 -0
- data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/struct_callback_spec.rb +41 -0
- data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/struct_initialize_spec.rb +30 -0
- data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/struct_spec.rb +476 -0
- data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/typedef_spec.rb +48 -0
- data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/union_spec.rb +60 -0
- data/vendor/ffi-0.4.0-x86-mswin32/spec/ffi/variadic_spec.rb +84 -0
- data/vendor/ffi-0.4.0-x86-mswin32/spec/spec.opts +4 -0
- data/vendor/hardmock-1.3.7/CHANGES +78 -0
- data/vendor/hardmock-1.3.7/LICENSE +7 -0
- data/vendor/hardmock-1.3.7/README +70 -0
- data/vendor/hardmock-1.3.7/Rakefile +8 -0
- data/vendor/hardmock-1.3.7/config/environment.rb +12 -0
- data/vendor/hardmock-1.3.7/lib/assert_error.rb +23 -0
- data/vendor/hardmock-1.3.7/lib/extend_test_unit.rb +14 -0
- data/vendor/hardmock-1.3.7/lib/hardmock.rb +86 -0
- data/vendor/hardmock-1.3.7/lib/hardmock/errors.rb +22 -0
- data/vendor/hardmock-1.3.7/lib/hardmock/expectation.rb +229 -0
- data/vendor/hardmock-1.3.7/lib/hardmock/expectation_builder.rb +9 -0
- data/vendor/hardmock-1.3.7/lib/hardmock/expector.rb +26 -0
- data/vendor/hardmock-1.3.7/lib/hardmock/method_cleanout.rb +33 -0
- data/vendor/hardmock-1.3.7/lib/hardmock/mock.rb +180 -0
- data/vendor/hardmock-1.3.7/lib/hardmock/mock_control.rb +53 -0
- data/vendor/hardmock-1.3.7/lib/hardmock/stubbing.rb +210 -0
- data/vendor/hardmock-1.3.7/lib/hardmock/trapper.rb +31 -0
- data/vendor/hardmock-1.3.7/lib/hardmock/utils.rb +9 -0
- data/vendor/hardmock-1.3.7/lib/test_unit_before_after.rb +169 -0
- data/vendor/hardmock-1.3.7/rake_tasks/test.rake +22 -0
- data/vendor/hardmock-1.3.7/test/functional/assert_error_test.rb +52 -0
- data/vendor/hardmock-1.3.7/test/functional/auto_verify_test.rb +178 -0
- data/vendor/hardmock-1.3.7/test/functional/direct_mock_usage_test.rb +396 -0
- data/vendor/hardmock-1.3.7/test/functional/hardmock_test.rb +434 -0
- data/vendor/hardmock-1.3.7/test/functional/stubbing_test.rb +479 -0
- data/vendor/hardmock-1.3.7/test/test_helper.rb +43 -0
- data/vendor/hardmock-1.3.7/test/unit/expectation_builder_test.rb +19 -0
- data/vendor/hardmock-1.3.7/test/unit/expectation_test.rb +372 -0
- data/vendor/hardmock-1.3.7/test/unit/expector_test.rb +57 -0
- data/vendor/hardmock-1.3.7/test/unit/method_cleanout_test.rb +36 -0
- data/vendor/hardmock-1.3.7/test/unit/mock_control_test.rb +175 -0
- data/vendor/hardmock-1.3.7/test/unit/mock_test.rb +279 -0
- data/vendor/hardmock-1.3.7/test/unit/test_unit_before_after_test.rb +452 -0
- data/vendor/hardmock-1.3.7/test/unit/trapper_test.rb +62 -0
- data/vendor/hardmock-1.3.7/test/unit/verify_error_test.rb +40 -0
- data/vendor/mcc/cbw32.dll +0 -0
- data/vendor/systir/systir.rb +403 -0
- data/vendor/systir/test/unit/ui/xml/testrunner.rb +192 -0
- data/vendor/systir/test/unit/ui/xml/xmltestrunner.xslt +109 -0
- 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
|
+
|