echonet_lite 0.1.0
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.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +21 -0
- data/README.md +43 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/echonet_lite.gemspec +37 -0
- data/lib/echonet_lite.rb +149 -0
- data/lib/echonet_lite/version.rb +3 -0
- data/vendor/bundle/bin/htmldiff +29 -0
- data/vendor/bundle/bin/htmldiff.bat +6 -0
- data/vendor/bundle/bin/ldiff +29 -0
- data/vendor/bundle/bin/ldiff.bat +6 -0
- data/vendor/bundle/bin/rspec +27 -0
- data/vendor/bundle/bin/rspec.bat +6 -0
- data/vendor/bundle/cache/diff-lcs-1.3.gem +0 -0
- data/vendor/bundle/cache/echonet_lite-0.1.0.gem +0 -0
- data/vendor/bundle/cache/ipaddr-1.0.0.gem +0 -0
- data/vendor/bundle/cache/ipaddress-0.8.3.gem +0 -0
- data/vendor/bundle/cache/rspec-3.6.0.gem +0 -0
- data/vendor/bundle/cache/rspec-core-3.6.0.gem +0 -0
- data/vendor/bundle/cache/rspec-expectations-3.6.0.gem +0 -0
- data/vendor/bundle/cache/rspec-mocks-3.6.0.gem +0 -0
- data/vendor/bundle/cache/rspec-support-3.6.0.gem +0 -0
- data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/GSET-c.ri +0 -0
- data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/Hexadecimal_str-c.ri +0 -0
- data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/Receive-c.ri +0 -0
- data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/ReceivePrint-c.ri +0 -0
- data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/SETC-c.ri +0 -0
- data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/SETI-c.ri +0 -0
- data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/cdesc-EL.ri +0 -0
- data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/pattern-c.ri +0 -0
- data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/search-c.ri +0 -0
- data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/sendOPC1-c.ri +0 -0
- data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/sendString-c.ri +0 -0
- data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EL/udp_send-c.ri +0 -0
- data/vendor/bundle/doc/echonet_lite-0.1.0/ri/EchonetLite/cdesc-EchonetLite.ri +0 -0
- data/vendor/bundle/doc/echonet_lite-0.1.0/ri/cache.ri +0 -0
- data/vendor/bundle/gems/diff-lcs-1.3/.rspec +1 -0
- data/vendor/bundle/gems/diff-lcs-1.3/Code-of-Conduct.md +74 -0
- data/vendor/bundle/gems/diff-lcs-1.3/Contributing.md +83 -0
- data/vendor/bundle/gems/diff-lcs-1.3/History.md +220 -0
- data/vendor/bundle/gems/diff-lcs-1.3/License.md +39 -0
- data/vendor/bundle/gems/diff-lcs-1.3/Manifest.txt +37 -0
- data/vendor/bundle/gems/diff-lcs-1.3/README.rdoc +84 -0
- data/vendor/bundle/gems/diff-lcs-1.3/Rakefile +57 -0
- data/vendor/bundle/gems/diff-lcs-1.3/autotest/discover.rb +1 -0
- data/vendor/bundle/gems/diff-lcs-1.3/bin/htmldiff +32 -0
- data/vendor/bundle/gems/diff-lcs-1.3/bin/ldiff +6 -0
- data/vendor/bundle/gems/diff-lcs-1.3/docs/COPYING.txt +339 -0
- data/vendor/bundle/gems/diff-lcs-1.3/docs/artistic.txt +127 -0
- data/vendor/bundle/gems/diff-lcs-1.3/lib/diff-lcs.rb +3 -0
- data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs.rb +725 -0
- data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/array.rb +7 -0
- data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/block.rb +37 -0
- data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/callbacks.rb +322 -0
- data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/change.rb +181 -0
- data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/htmldiff.rb +149 -0
- data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/hunk.rb +276 -0
- data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/internals.rb +307 -0
- data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/ldiff.rb +167 -0
- data/vendor/bundle/gems/diff-lcs-1.3/lib/diff/lcs/string.rb +5 -0
- data/vendor/bundle/gems/diff-lcs-1.3/spec/change_spec.rb +65 -0
- data/vendor/bundle/gems/diff-lcs-1.3/spec/diff_spec.rb +47 -0
- data/vendor/bundle/gems/diff-lcs-1.3/spec/fixtures/ds1.csv +50 -0
- data/vendor/bundle/gems/diff-lcs-1.3/spec/fixtures/ds2.csv +51 -0
- data/vendor/bundle/gems/diff-lcs-1.3/spec/hunk_spec.rb +72 -0
- data/vendor/bundle/gems/diff-lcs-1.3/spec/issues_spec.rb +49 -0
- data/vendor/bundle/gems/diff-lcs-1.3/spec/lcs_spec.rb +56 -0
- data/vendor/bundle/gems/diff-lcs-1.3/spec/ldiff_spec.rb +47 -0
- data/vendor/bundle/gems/diff-lcs-1.3/spec/patch_spec.rb +422 -0
- data/vendor/bundle/gems/diff-lcs-1.3/spec/sdiff_spec.rb +214 -0
- data/vendor/bundle/gems/diff-lcs-1.3/spec/spec_helper.rb +321 -0
- data/vendor/bundle/gems/diff-lcs-1.3/spec/traverse_balanced_spec.rb +310 -0
- data/vendor/bundle/gems/diff-lcs-1.3/spec/traverse_sequences_spec.rb +139 -0
- data/vendor/bundle/gems/echonet_lite-0.1.0/.gitignore +12 -0
- data/vendor/bundle/gems/echonet_lite-0.1.0/.rspec +2 -0
- data/vendor/bundle/gems/echonet_lite-0.1.0/.travis.yml +5 -0
- data/vendor/bundle/gems/echonet_lite-0.1.0/CODE_OF_CONDUCT.md +74 -0
- data/vendor/bundle/gems/echonet_lite-0.1.0/Gemfile +6 -0
- data/vendor/bundle/gems/echonet_lite-0.1.0/LICENSE.txt +21 -0
- data/vendor/bundle/gems/echonet_lite-0.1.0/README.md +43 -0
- data/vendor/bundle/gems/echonet_lite-0.1.0/Rakefile +6 -0
- data/vendor/bundle/gems/echonet_lite-0.1.0/bin/console +14 -0
- data/vendor/bundle/gems/echonet_lite-0.1.0/bin/setup +8 -0
- data/vendor/bundle/gems/echonet_lite-0.1.0/echonet_lite.gemspec +37 -0
- data/vendor/bundle/gems/echonet_lite-0.1.0/lib/echonet_lite.rb +149 -0
- data/vendor/bundle/gems/echonet_lite-0.1.0/lib/echonet_lite/version.rb +3 -0
- data/vendor/bundle/gems/ipaddr-1.0.0/.gitignore +9 -0
- data/vendor/bundle/gems/ipaddr-1.0.0/.travis.yml +6 -0
- data/vendor/bundle/gems/ipaddr-1.0.0/Gemfile +4 -0
- data/vendor/bundle/gems/ipaddr-1.0.0/LICENSE.txt +23 -0
- data/vendor/bundle/gems/ipaddr-1.0.0/README.md +54 -0
- data/vendor/bundle/gems/ipaddr-1.0.0/Rakefile +10 -0
- data/vendor/bundle/gems/ipaddr-1.0.0/bin/console +14 -0
- data/vendor/bundle/gems/ipaddr-1.0.0/bin/setup +8 -0
- data/vendor/bundle/gems/ipaddr-1.0.0/ipaddr.gemspec +28 -0
- data/vendor/bundle/gems/ipaddr-1.0.0/lib/ipaddr.rb +662 -0
- data/vendor/bundle/gems/ipaddress-0.8.3/.document +5 -0
- data/vendor/bundle/gems/ipaddress-0.8.3/.gitignore +18 -0
- data/vendor/bundle/gems/ipaddress-0.8.3/.rock.yml +5 -0
- data/vendor/bundle/gems/ipaddress-0.8.3/CHANGELOG.rdoc +115 -0
- data/vendor/bundle/gems/ipaddress-0.8.3/Gemfile +3 -0
- data/vendor/bundle/gems/ipaddress-0.8.3/LICENSE.txt +20 -0
- data/vendor/bundle/gems/ipaddress-0.8.3/README.rdoc +998 -0
- data/vendor/bundle/gems/ipaddress-0.8.3/Rakefile +66 -0
- data/vendor/bundle/gems/ipaddress-0.8.3/ipaddress.gemspec +26 -0
- data/vendor/bundle/gems/ipaddress-0.8.3/lib/ipaddress.rb +227 -0
- data/vendor/bundle/gems/ipaddress-0.8.3/lib/ipaddress/ipv4.rb +1114 -0
- data/vendor/bundle/gems/ipaddress-0.8.3/lib/ipaddress/ipv6.rb +895 -0
- data/vendor/bundle/gems/ipaddress-0.8.3/lib/ipaddress/mongoid.rb +75 -0
- data/vendor/bundle/gems/ipaddress-0.8.3/lib/ipaddress/prefix.rb +265 -0
- data/vendor/bundle/gems/ipaddress-0.8.3/lib/ipaddress/version.rb +3 -0
- data/vendor/bundle/gems/ipaddress-0.8.3/test/ipaddress/ipv4_test.rb +600 -0
- data/vendor/bundle/gems/ipaddress-0.8.3/test/ipaddress/ipv6_test.rb +426 -0
- data/vendor/bundle/gems/ipaddress-0.8.3/test/ipaddress/mongoid_test.rb +70 -0
- data/vendor/bundle/gems/ipaddress-0.8.3/test/ipaddress/prefix_test.rb +153 -0
- data/vendor/bundle/gems/ipaddress-0.8.3/test/ipaddress_test.rb +82 -0
- data/vendor/bundle/gems/ipaddress-0.8.3/test/test_helper.rb +35 -0
- data/vendor/bundle/gems/rspec-3.6.0/LICENSE.md +27 -0
- data/vendor/bundle/gems/rspec-3.6.0/README.md +39 -0
- data/vendor/bundle/gems/rspec-3.6.0/lib/rspec.rb +3 -0
- data/vendor/bundle/gems/rspec-3.6.0/lib/rspec/version.rb +5 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/.document +5 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/.yardopts +8 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/Changelog.md +2167 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/LICENSE.md +26 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/README.md +384 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/exe/rspec +4 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/autorun.rb +3 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core.rb +185 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/backtrace_formatter.rb +65 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/bisect/coordinator.rb +66 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/bisect/example_minimizer.rb +169 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/bisect/runner.rb +169 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/bisect/server.rb +70 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/configuration.rb +2177 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/configuration_options.rb +196 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/drb.rb +113 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/dsl.rb +98 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/example.rb +653 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/example_group.rb +883 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/example_status_persister.rb +235 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/filter_manager.rb +231 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/flat_map.rb +20 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters.rb +265 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/base_formatter.rb +70 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/base_text_formatter.rb +75 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/bisect_formatter.rb +69 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/bisect_progress_formatter.rb +144 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/console_codes.rb +68 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/deprecation_formatter.rb +223 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/documentation_formatter.rb +70 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/exception_presenter.rb +496 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/fallback_message_formatter.rb +28 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/helpers.rb +110 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/html_formatter.rb +153 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/html_printer.rb +414 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/html_snippet_extractor.rb +118 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/json_formatter.rb +101 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/profile_formatter.rb +68 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/progress_formatter.rb +29 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/protocol.rb +182 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/snippet_extractor.rb +134 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/formatters/syntax_highlighter.rb +91 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/hooks.rb +624 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/invocations.rb +85 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/memoized_helpers.rb +535 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/metadata.rb +499 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/metadata_filter.rb +255 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/minitest_assertions_adapter.rb +31 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/mocking_adapters/flexmock.rb +31 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/mocking_adapters/mocha.rb +57 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/mocking_adapters/null.rb +14 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/mocking_adapters/rr.rb +31 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/mocking_adapters/rspec.rb +32 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/notifications.rb +514 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/option_parser.rb +309 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/ordering.rb +158 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/output_wrapper.rb +29 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/pending.rb +165 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/profiler.rb +32 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/project_initializer.rb +48 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/project_initializer/.rspec +1 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/project_initializer/spec/spec_helper.rb +100 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/rake_task.rb +168 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/reporter.rb +260 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/ruby_project.rb +53 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/runner.rb +193 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/sandbox.rb +37 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/set.rb +54 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/shared_context.rb +55 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/shared_example_group.rb +271 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/shell_escape.rb +49 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/test_unit_assertions_adapter.rb +30 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/version.rb +9 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/warnings.rb +40 -0
- data/vendor/bundle/gems/rspec-core-3.6.0/lib/rspec/core/world.rb +264 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/.document +5 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/.yardopts +6 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/Changelog.md +1072 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/LICENSE.md +25 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/README.md +305 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/expectations.rb +82 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/expectations/block_snippet_extractor.rb +253 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/expectations/configuration.rb +201 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/expectations/expectation_target.rb +127 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/expectations/fail_with.rb +39 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/expectations/failure_aggregator.rb +194 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/expectations/handler.rb +170 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/expectations/minitest_integration.rb +58 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/expectations/syntax.rb +132 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/expectations/version.rb +8 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers.rb +1025 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/aliased_matcher.rb +116 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in.rb +52 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/all.rb +85 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/base_matcher.rb +193 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/be.rb +288 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/be_between.rb +77 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/be_instance_of.rb +22 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/be_kind_of.rb +16 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/be_within.rb +72 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/change.rb +387 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/compound.rb +272 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/contain_exactly.rb +301 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/cover.rb +24 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/eq.rb +40 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/eql.rb +34 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/equal.rb +81 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/exist.rb +90 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/has.rb +103 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/have_attributes.rb +114 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/include.rb +143 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/match.rb +106 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/operators.rb +128 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/output.rb +200 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/raise_error.rb +230 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/respond_to.rb +165 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/satisfy.rb +60 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/start_or_end_with.rb +94 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/throw_symbol.rb +132 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/built_in/yield.rb +432 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/composable.rb +169 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/dsl.rb +527 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/english_phrasing.rb +58 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/expecteds_for_multiple_diffs.rb +73 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/fail_matchers.rb +42 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/generated_descriptions.rb +42 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/matcher_delegator.rb +35 -0
- data/vendor/bundle/gems/rspec-expectations-3.6.0/lib/rspec/matchers/matcher_protocol.rb +99 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/.document +5 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/.yardopts +6 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/Changelog.md +1073 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/LICENSE.md +25 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/README.md +460 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks.rb +130 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance.rb +11 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/chain.rb +110 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/error_generator.rb +31 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/expect_chain_chain.rb +31 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/expectation_chain.rb +50 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/message_chains.rb +83 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/proxy.rb +116 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/recorder.rb +289 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/stub_chain.rb +51 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/any_instance/stub_chain_chain.rb +23 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/argument_list_matcher.rb +100 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/argument_matchers.rb +320 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/configuration.rb +212 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/error_generator.rb +369 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/example_methods.rb +434 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/instance_method_stasher.rb +146 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/marshal_extension.rb +41 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/matchers/expectation_customization.rb +20 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/matchers/have_received.rb +130 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/matchers/receive.rb +132 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/matchers/receive_message_chain.rb +82 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/matchers/receive_messages.rb +77 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/message_chain.rb +87 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/message_expectation.rb +740 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/method_double.rb +287 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/method_reference.rb +202 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/minitest_integration.rb +68 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/mutate_const.rb +339 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/object_reference.rb +149 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/order_group.rb +81 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/proxy.rb +484 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/space.rb +238 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/standalone.rb +3 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/syntax.rb +325 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/targets.rb +124 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/test_double.rb +171 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/verifying_double.rb +129 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/verifying_message_expectation.rb +54 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/verifying_proxy.rb +220 -0
- data/vendor/bundle/gems/rspec-mocks-3.6.0/lib/rspec/mocks/version.rb +9 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/Changelog.md +211 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/LICENSE.md +23 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/README.md +40 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support.rb +139 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/caller_filter.rb +83 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/comparable_version.rb +46 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/differ.rb +215 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/directory_maker.rb +63 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/encoded_string.rb +165 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/fuzzy_matcher.rb +48 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/hunk_generator.rb +47 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/matcher_definition.rb +42 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/method_signature_verifier.rb +392 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/mutex.rb +73 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/object_formatter.rb +268 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/recursive_const_methods.rb +76 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/reentrant_mutex.rb +53 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/ruby_features.rb +162 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/source.rb +75 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/source/location.rb +21 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/source/node.rb +107 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/source/token.rb +87 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/spec.rb +81 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/spec/deprecation_helpers.rb +64 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/spec/formatting_support.rb +9 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/spec/in_sub_process.rb +69 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/spec/library_wide_checks.rb +150 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/spec/shell_out.rb +84 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/spec/stderr_splitter.rb +63 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/spec/string_matcher.rb +46 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/spec/with_isolated_directory.rb +13 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/spec/with_isolated_stderr.rb +13 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/version.rb +7 -0
- data/vendor/bundle/gems/rspec-support-3.6.0/lib/rspec/support/warnings.rb +39 -0
- data/vendor/bundle/specifications/diff-lcs-1.3.gemspec +61 -0
- data/vendor/bundle/specifications/echonet_lite-0.1.0.gemspec +43 -0
- data/vendor/bundle/specifications/ipaddr-1.0.0.gemspec +38 -0
- data/vendor/bundle/specifications/ipaddress-0.8.3.gemspec +35 -0
- data/vendor/bundle/specifications/rspec-3.6.0.gemspec +42 -0
- data/vendor/bundle/specifications/rspec-core-3.6.0.gemspec +62 -0
- data/vendor/bundle/specifications/rspec-expectations-3.6.0.gemspec +50 -0
- data/vendor/bundle/specifications/rspec-mocks-3.6.0.gemspec +50 -0
- data/vendor/bundle/specifications/rspec-support-3.6.0.gemspec +41 -0
- metadata +444 -0
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
module RSpec
|
|
2
|
+
module Matchers
|
|
3
|
+
module BuiltIn
|
|
4
|
+
# @api private
|
|
5
|
+
# Provides the implementation for `change`.
|
|
6
|
+
# Not intended to be instantiated directly.
|
|
7
|
+
class Change < BaseMatcher
|
|
8
|
+
# @api public
|
|
9
|
+
# Specifies the delta of the expected change.
|
|
10
|
+
def by(expected_delta)
|
|
11
|
+
ChangeRelatively.new(change_details, expected_delta, :by) do |actual_delta|
|
|
12
|
+
values_match?(expected_delta, actual_delta)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# @api public
|
|
17
|
+
# Specifies a minimum delta of the expected change.
|
|
18
|
+
def by_at_least(minimum)
|
|
19
|
+
ChangeRelatively.new(change_details, minimum, :by_at_least) do |actual_delta|
|
|
20
|
+
actual_delta >= minimum
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# @api public
|
|
25
|
+
# Specifies a maximum delta of the expected change.
|
|
26
|
+
def by_at_most(maximum)
|
|
27
|
+
ChangeRelatively.new(change_details, maximum, :by_at_most) do |actual_delta|
|
|
28
|
+
actual_delta <= maximum
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# @api public
|
|
33
|
+
# Specifies the new value you expect.
|
|
34
|
+
def to(value)
|
|
35
|
+
ChangeToValue.new(change_details, value)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# @api public
|
|
39
|
+
# Specifies the original value.
|
|
40
|
+
def from(value)
|
|
41
|
+
ChangeFromValue.new(change_details, value)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# @private
|
|
45
|
+
def matches?(event_proc)
|
|
46
|
+
@event_proc = event_proc
|
|
47
|
+
return false unless Proc === event_proc
|
|
48
|
+
raise_block_syntax_error if block_given?
|
|
49
|
+
change_details.perform_change(event_proc)
|
|
50
|
+
change_details.changed?
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def does_not_match?(event_proc)
|
|
54
|
+
raise_block_syntax_error if block_given?
|
|
55
|
+
!matches?(event_proc) && Proc === event_proc
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# @api private
|
|
59
|
+
# @return [String]
|
|
60
|
+
def failure_message
|
|
61
|
+
"expected #{change_details.value_representation} to have changed, " \
|
|
62
|
+
"but #{positive_failure_reason}"
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# @api private
|
|
66
|
+
# @return [String]
|
|
67
|
+
def failure_message_when_negated
|
|
68
|
+
"expected #{change_details.value_representation} not to have changed, " \
|
|
69
|
+
"but #{negative_failure_reason}"
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# @api private
|
|
73
|
+
# @return [String]
|
|
74
|
+
def description
|
|
75
|
+
"change #{change_details.value_representation}"
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# @private
|
|
79
|
+
def supports_block_expectations?
|
|
80
|
+
true
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
private
|
|
84
|
+
|
|
85
|
+
def initialize(receiver=nil, message=nil, &block)
|
|
86
|
+
@receiver = receiver
|
|
87
|
+
@message = message
|
|
88
|
+
@block = block
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def change_details
|
|
92
|
+
@change_details ||= ChangeDetails.new(matcher_name, @receiver, @message, &@block)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def raise_block_syntax_error
|
|
96
|
+
raise SyntaxError, "Block not received by the `change` matcher. " \
|
|
97
|
+
"Perhaps you want to use `{ ... }` instead of do/end?"
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def positive_failure_reason
|
|
101
|
+
return "was not given a block" unless Proc === @event_proc
|
|
102
|
+
"is still #{description_of change_details.actual_before}"
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def negative_failure_reason
|
|
106
|
+
return "was not given a block" unless Proc === @event_proc
|
|
107
|
+
"did change from #{description_of change_details.actual_before} " \
|
|
108
|
+
"to #{description_of change_details.actual_after}"
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# Used to specify a relative change.
|
|
113
|
+
# @api private
|
|
114
|
+
class ChangeRelatively < BaseMatcher
|
|
115
|
+
def initialize(change_details, expected_delta, relativity, &comparer)
|
|
116
|
+
@change_details = change_details
|
|
117
|
+
@expected_delta = expected_delta
|
|
118
|
+
@relativity = relativity
|
|
119
|
+
@comparer = comparer
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# @private
|
|
123
|
+
def failure_message
|
|
124
|
+
"expected #{@change_details.value_representation} to have changed " \
|
|
125
|
+
"#{@relativity.to_s.tr('_', ' ')} " \
|
|
126
|
+
"#{description_of @expected_delta}, but #{failure_reason}"
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# @private
|
|
130
|
+
def matches?(event_proc)
|
|
131
|
+
@event_proc = event_proc
|
|
132
|
+
return false unless Proc === event_proc
|
|
133
|
+
@change_details.perform_change(event_proc)
|
|
134
|
+
@comparer.call(@change_details.actual_delta)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# @private
|
|
138
|
+
def does_not_match?(_event_proc)
|
|
139
|
+
raise NotImplementedError, "`expect { }.not_to change " \
|
|
140
|
+
"{ }.#{@relativity}()` is not supported"
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# @private
|
|
144
|
+
def description
|
|
145
|
+
"change #{@change_details.value_representation} " \
|
|
146
|
+
"#{@relativity.to_s.tr('_', ' ')} #{description_of @expected_delta}"
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# @private
|
|
150
|
+
def supports_block_expectations?
|
|
151
|
+
true
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
private
|
|
155
|
+
|
|
156
|
+
def failure_reason
|
|
157
|
+
return "was not given a block" unless Proc === @event_proc
|
|
158
|
+
"was changed by #{description_of @change_details.actual_delta}"
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# @api private
|
|
163
|
+
# Base class for specifying a change from and/or to specific values.
|
|
164
|
+
class SpecificValuesChange < BaseMatcher
|
|
165
|
+
# @private
|
|
166
|
+
MATCH_ANYTHING = ::Object.ancestors.last
|
|
167
|
+
|
|
168
|
+
def initialize(change_details, from, to)
|
|
169
|
+
@change_details = change_details
|
|
170
|
+
@expected_before = from
|
|
171
|
+
@expected_after = to
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
# @private
|
|
175
|
+
def matches?(event_proc)
|
|
176
|
+
@event_proc = event_proc
|
|
177
|
+
return false unless Proc === event_proc
|
|
178
|
+
@change_details.perform_change(event_proc)
|
|
179
|
+
@change_details.changed? && matches_before? && matches_after?
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# @private
|
|
183
|
+
def description
|
|
184
|
+
"change #{@change_details.value_representation} #{change_description}"
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# @private
|
|
188
|
+
def failure_message
|
|
189
|
+
return not_given_a_block_failure unless Proc === @event_proc
|
|
190
|
+
return before_value_failure unless matches_before?
|
|
191
|
+
return did_not_change_failure unless @change_details.changed?
|
|
192
|
+
after_value_failure
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
# @private
|
|
196
|
+
def supports_block_expectations?
|
|
197
|
+
true
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
private
|
|
201
|
+
|
|
202
|
+
def matches_before?
|
|
203
|
+
values_match?(@expected_before, @change_details.actual_before)
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
def matches_after?
|
|
207
|
+
values_match?(@expected_after, @change_details.actual_after)
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
def before_value_failure
|
|
211
|
+
"expected #{@change_details.value_representation} " \
|
|
212
|
+
"to have initially been #{description_of @expected_before}, " \
|
|
213
|
+
"but was #{description_of @change_details.actual_before}"
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
def after_value_failure
|
|
217
|
+
"expected #{@change_details.value_representation} " \
|
|
218
|
+
"to have changed to #{description_of @expected_after}, " \
|
|
219
|
+
"but is now #{description_of @change_details.actual_after}"
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
def did_not_change_failure
|
|
223
|
+
"expected #{@change_details.value_representation} " \
|
|
224
|
+
"to have changed #{change_description}, but did not change"
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
def did_change_failure
|
|
228
|
+
"expected #{@change_details.value_representation} not to have changed, but " \
|
|
229
|
+
"did change from #{description_of @change_details.actual_before} " \
|
|
230
|
+
"to #{description_of @change_details.actual_after}"
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
def not_given_a_block_failure
|
|
234
|
+
"expected #{@change_details.value_representation} to have changed " \
|
|
235
|
+
"#{change_description}, but was not given a block"
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
# @api private
|
|
240
|
+
# Used to specify a change from a specific value
|
|
241
|
+
# (and, optionally, to a specific value).
|
|
242
|
+
class ChangeFromValue < SpecificValuesChange
|
|
243
|
+
def initialize(change_details, expected_before)
|
|
244
|
+
@description_suffix = nil
|
|
245
|
+
super(change_details, expected_before, MATCH_ANYTHING)
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
# @api public
|
|
249
|
+
# Specifies the new value you expect.
|
|
250
|
+
def to(value)
|
|
251
|
+
@expected_after = value
|
|
252
|
+
@description_suffix = " to #{description_of value}"
|
|
253
|
+
self
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
# @private
|
|
257
|
+
def does_not_match?(event_proc)
|
|
258
|
+
if @description_suffix
|
|
259
|
+
raise NotImplementedError, "`expect { }.not_to change { }.to()` " \
|
|
260
|
+
"is not supported"
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
@event_proc = event_proc
|
|
264
|
+
return false unless Proc === event_proc
|
|
265
|
+
@change_details.perform_change(event_proc)
|
|
266
|
+
!@change_details.changed? && matches_before?
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
# @private
|
|
270
|
+
def failure_message_when_negated
|
|
271
|
+
return not_given_a_block_failure unless Proc === @event_proc
|
|
272
|
+
return before_value_failure unless matches_before?
|
|
273
|
+
did_change_failure
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
private
|
|
277
|
+
|
|
278
|
+
def change_description
|
|
279
|
+
"from #{description_of @expected_before}#{@description_suffix}"
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
# @api private
|
|
284
|
+
# Used to specify a change to a specific value
|
|
285
|
+
# (and, optionally, from a specific value).
|
|
286
|
+
class ChangeToValue < SpecificValuesChange
|
|
287
|
+
def initialize(change_details, expected_after)
|
|
288
|
+
@description_suffix = nil
|
|
289
|
+
super(change_details, MATCH_ANYTHING, expected_after)
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
# @api public
|
|
293
|
+
# Specifies the original value.
|
|
294
|
+
def from(value)
|
|
295
|
+
@expected_before = value
|
|
296
|
+
@description_suffix = " from #{description_of value}"
|
|
297
|
+
self
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
# @private
|
|
301
|
+
def does_not_match?(_event_proc)
|
|
302
|
+
raise NotImplementedError, "`expect { }.not_to change { }.to()` " \
|
|
303
|
+
"is not supported"
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
private
|
|
307
|
+
|
|
308
|
+
def change_description
|
|
309
|
+
"to #{description_of @expected_after}#{@description_suffix}"
|
|
310
|
+
end
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
# @private
|
|
314
|
+
# Encapsulates the details of the before/after values.
|
|
315
|
+
class ChangeDetails
|
|
316
|
+
attr_reader :actual_before, :actual_after
|
|
317
|
+
|
|
318
|
+
def initialize(matcher_name, receiver=nil, message=nil, &block)
|
|
319
|
+
if receiver && !message
|
|
320
|
+
raise(
|
|
321
|
+
ArgumentError,
|
|
322
|
+
"`change` requires either an object and message " \
|
|
323
|
+
"(`change(obj, :msg)`) or a block (`change { }`). " \
|
|
324
|
+
"You passed an object but no message."
|
|
325
|
+
)
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
@matcher_name = matcher_name
|
|
329
|
+
@receiver = receiver
|
|
330
|
+
@message = message
|
|
331
|
+
@value_proc = block
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
def value_representation
|
|
335
|
+
@value_representation ||=
|
|
336
|
+
if @message
|
|
337
|
+
"##{@message}"
|
|
338
|
+
elsif (value_block_snippet = extract_value_block_snippet)
|
|
339
|
+
"`#{value_block_snippet}`"
|
|
340
|
+
else
|
|
341
|
+
'result'
|
|
342
|
+
end
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
def perform_change(event_proc)
|
|
346
|
+
@actual_before = evaluate_value_proc
|
|
347
|
+
event_proc.call
|
|
348
|
+
@actual_after = evaluate_value_proc
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
def changed?
|
|
352
|
+
@actual_before != @actual_after
|
|
353
|
+
end
|
|
354
|
+
|
|
355
|
+
def actual_delta
|
|
356
|
+
@actual_after - @actual_before
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
private
|
|
360
|
+
|
|
361
|
+
def evaluate_value_proc
|
|
362
|
+
value_proc = @value_proc || lambda { @receiver.__send__(@message) }
|
|
363
|
+
|
|
364
|
+
case val = value_proc.call
|
|
365
|
+
when IO # enumerable, but we don't want to dup it.
|
|
366
|
+
val
|
|
367
|
+
when Enumerable, String
|
|
368
|
+
val.dup
|
|
369
|
+
else
|
|
370
|
+
val
|
|
371
|
+
end
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
if RSpec::Support::RubyFeatures.ripper_supported?
|
|
375
|
+
def extract_value_block_snippet
|
|
376
|
+
return nil unless @value_proc
|
|
377
|
+
Expectations::BlockSnippetExtractor.try_extracting_single_line_body_of(@value_proc, @matcher_name)
|
|
378
|
+
end
|
|
379
|
+
else
|
|
380
|
+
def extract_value_block_snippet
|
|
381
|
+
nil
|
|
382
|
+
end
|
|
383
|
+
end
|
|
384
|
+
end
|
|
385
|
+
end
|
|
386
|
+
end
|
|
387
|
+
end
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
module RSpec
|
|
2
|
+
module Matchers
|
|
3
|
+
module BuiltIn
|
|
4
|
+
# @api private
|
|
5
|
+
# Base class for `and` and `or` compound matchers.
|
|
6
|
+
# rubocop:disable ClassLength
|
|
7
|
+
class Compound < BaseMatcher
|
|
8
|
+
# @private
|
|
9
|
+
attr_reader :matcher_1, :matcher_2, :evaluator
|
|
10
|
+
|
|
11
|
+
def initialize(matcher_1, matcher_2)
|
|
12
|
+
@matcher_1 = matcher_1
|
|
13
|
+
@matcher_2 = matcher_2
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# @private
|
|
17
|
+
def does_not_match?(_actual)
|
|
18
|
+
raise NotImplementedError, "`expect(...).not_to matcher.#{conjunction} matcher` " \
|
|
19
|
+
"is not supported, since it creates a bit of an ambiguity. Instead, define negated versions " \
|
|
20
|
+
"of whatever matchers you wish to negate with `RSpec::Matchers.define_negated_matcher` and " \
|
|
21
|
+
"use `expect(...).to matcher.#{conjunction} matcher`."
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# @api private
|
|
25
|
+
# @return [String]
|
|
26
|
+
def description
|
|
27
|
+
"#{matcher_1.description} #{conjunction} #{matcher_2.description}"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def supports_block_expectations?
|
|
31
|
+
matcher_supports_block_expectations?(matcher_1) &&
|
|
32
|
+
matcher_supports_block_expectations?(matcher_2)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def expects_call_stack_jump?
|
|
36
|
+
NestedEvaluator.matcher_expects_call_stack_jump?(matcher_1) ||
|
|
37
|
+
NestedEvaluator.matcher_expects_call_stack_jump?(matcher_2)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# @api private
|
|
41
|
+
# @return [Boolean]
|
|
42
|
+
def diffable?
|
|
43
|
+
matcher_is_diffable?(matcher_1) || matcher_is_diffable?(matcher_2)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# @api private
|
|
47
|
+
# @return [RSpec::Matchers::ExpectedsForMultipleDiffs]
|
|
48
|
+
def expected
|
|
49
|
+
return nil unless evaluator
|
|
50
|
+
::RSpec::Matchers::ExpectedsForMultipleDiffs.for_many_matchers(diffable_matcher_list)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
protected
|
|
54
|
+
|
|
55
|
+
def diffable_matcher_list
|
|
56
|
+
list = []
|
|
57
|
+
list.concat(diffable_matcher_list_for(matcher_1)) unless matcher_1_matches?
|
|
58
|
+
list.concat(diffable_matcher_list_for(matcher_2)) unless matcher_2_matches?
|
|
59
|
+
list
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
private
|
|
63
|
+
|
|
64
|
+
def initialize_copy(other)
|
|
65
|
+
@matcher_1 = @matcher_1.clone
|
|
66
|
+
@matcher_2 = @matcher_2.clone
|
|
67
|
+
super
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def match(_expected, actual)
|
|
71
|
+
evaluator_klass = if supports_block_expectations? && Proc === actual
|
|
72
|
+
NestedEvaluator
|
|
73
|
+
else
|
|
74
|
+
SequentialEvaluator
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
@evaluator = evaluator_klass.new(actual, matcher_1, matcher_2)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def indent_multiline_message(message)
|
|
81
|
+
message.lines.map do |line|
|
|
82
|
+
line =~ /\S/ ? ' ' + line : line
|
|
83
|
+
end.join
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def compound_failure_message
|
|
87
|
+
"#{indent_multiline_message(matcher_1.failure_message.sub(/\n+\z/, ''))}" \
|
|
88
|
+
"\n\n...#{conjunction}:" \
|
|
89
|
+
"\n\n#{indent_multiline_message(matcher_2.failure_message.sub(/\A\n+/, ''))}"
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def matcher_1_matches?
|
|
93
|
+
evaluator.matcher_matches?(matcher_1)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def matcher_2_matches?
|
|
97
|
+
evaluator.matcher_matches?(matcher_2)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def matcher_supports_block_expectations?(matcher)
|
|
101
|
+
matcher.supports_block_expectations?
|
|
102
|
+
rescue NoMethodError
|
|
103
|
+
false
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def matcher_is_diffable?(matcher)
|
|
107
|
+
matcher.diffable?
|
|
108
|
+
rescue NoMethodError
|
|
109
|
+
false
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def diffable_matcher_list_for(matcher)
|
|
113
|
+
return [] unless matcher_is_diffable?(matcher)
|
|
114
|
+
return matcher.diffable_matcher_list if Compound === matcher
|
|
115
|
+
[matcher]
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# For value expectations, we can evaluate the matchers sequentially.
|
|
119
|
+
class SequentialEvaluator
|
|
120
|
+
def initialize(actual, *)
|
|
121
|
+
@actual = actual
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def matcher_matches?(matcher)
|
|
125
|
+
matcher.matches?(@actual)
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# Normally, we evaluate the matching sequentially. For an expression like
|
|
130
|
+
# `expect(x).to foo.and bar`, this becomes:
|
|
131
|
+
#
|
|
132
|
+
# expect(x).to foo
|
|
133
|
+
# expect(x).to bar
|
|
134
|
+
#
|
|
135
|
+
# For block expectations, we need to nest them instead, so that
|
|
136
|
+
# `expect { x }.to foo.and bar` becomes:
|
|
137
|
+
#
|
|
138
|
+
# expect {
|
|
139
|
+
# expect { x }.to foo
|
|
140
|
+
# }.to bar
|
|
141
|
+
#
|
|
142
|
+
# This is necessary so that the `expect` block is only executed once.
|
|
143
|
+
class NestedEvaluator
|
|
144
|
+
def initialize(actual, matcher_1, matcher_2)
|
|
145
|
+
@actual = actual
|
|
146
|
+
@matcher_1 = matcher_1
|
|
147
|
+
@matcher_2 = matcher_2
|
|
148
|
+
@match_results = {}
|
|
149
|
+
|
|
150
|
+
inner, outer = order_block_matchers
|
|
151
|
+
|
|
152
|
+
@match_results[outer] = outer.matches?(Proc.new do |*args|
|
|
153
|
+
@match_results[inner] = inner.matches?(inner_matcher_block(args))
|
|
154
|
+
end)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def matcher_matches?(matcher)
|
|
158
|
+
@match_results.fetch(matcher)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
private
|
|
162
|
+
|
|
163
|
+
# Some block matchers (such as `yield_xyz`) pass args to the `expect` block.
|
|
164
|
+
# When such a matcher is used as the outer matcher, we need to forward the
|
|
165
|
+
# the args on to the `expect` block.
|
|
166
|
+
def inner_matcher_block(outer_args)
|
|
167
|
+
return @actual if outer_args.empty?
|
|
168
|
+
|
|
169
|
+
Proc.new do |*inner_args|
|
|
170
|
+
unless inner_args.empty?
|
|
171
|
+
raise ArgumentError, "(#{@matcher_1.description}) and " \
|
|
172
|
+
"(#{@matcher_2.description}) cannot be combined in a compound expectation " \
|
|
173
|
+
"since both matchers pass arguments to the block."
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
@actual.call(*outer_args)
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
# For a matcher like `raise_error` or `throw_symbol`, where the block will jump
|
|
181
|
+
# up the call stack, we need to order things so that it is the inner matcher.
|
|
182
|
+
# For example, we need it to be this:
|
|
183
|
+
#
|
|
184
|
+
# expect {
|
|
185
|
+
# expect {
|
|
186
|
+
# x += 1
|
|
187
|
+
# raise "boom"
|
|
188
|
+
# }.to raise_error("boom")
|
|
189
|
+
# }.to change { x }.by(1)
|
|
190
|
+
#
|
|
191
|
+
# ...rather than:
|
|
192
|
+
#
|
|
193
|
+
# expect {
|
|
194
|
+
# expect {
|
|
195
|
+
# x += 1
|
|
196
|
+
# raise "boom"
|
|
197
|
+
# }.to change { x }.by(1)
|
|
198
|
+
# }.to raise_error("boom")
|
|
199
|
+
#
|
|
200
|
+
# In the latter case, the after-block logic in the `change` matcher would never
|
|
201
|
+
# get executed because the `raise "boom"` line would jump to the `rescue` in the
|
|
202
|
+
# `raise_error` logic, so only the former case will work properly.
|
|
203
|
+
#
|
|
204
|
+
# This method figures out which matcher should be the inner matcher and which
|
|
205
|
+
# should be the outer matcher.
|
|
206
|
+
def order_block_matchers
|
|
207
|
+
return @matcher_1, @matcher_2 unless self.class.matcher_expects_call_stack_jump?(@matcher_2)
|
|
208
|
+
return @matcher_2, @matcher_1 unless self.class.matcher_expects_call_stack_jump?(@matcher_1)
|
|
209
|
+
|
|
210
|
+
raise ArgumentError, "(#{@matcher_1.description}) and " \
|
|
211
|
+
"(#{@matcher_2.description}) cannot be combined in a compound expectation " \
|
|
212
|
+
"because they both expect a call stack jump."
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def self.matcher_expects_call_stack_jump?(matcher)
|
|
216
|
+
matcher.expects_call_stack_jump?
|
|
217
|
+
rescue NoMethodError
|
|
218
|
+
false
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
# @api public
|
|
223
|
+
# Matcher used to represent a compound `and` expectation.
|
|
224
|
+
class And < self
|
|
225
|
+
# @api private
|
|
226
|
+
# @return [String]
|
|
227
|
+
def failure_message
|
|
228
|
+
if matcher_1_matches?
|
|
229
|
+
matcher_2.failure_message
|
|
230
|
+
elsif matcher_2_matches?
|
|
231
|
+
matcher_1.failure_message
|
|
232
|
+
else
|
|
233
|
+
compound_failure_message
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
private
|
|
238
|
+
|
|
239
|
+
def match(*)
|
|
240
|
+
super
|
|
241
|
+
matcher_1_matches? && matcher_2_matches?
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
def conjunction
|
|
245
|
+
"and"
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
# @api public
|
|
250
|
+
# Matcher used to represent a compound `or` expectation.
|
|
251
|
+
class Or < self
|
|
252
|
+
# @api private
|
|
253
|
+
# @return [String]
|
|
254
|
+
def failure_message
|
|
255
|
+
compound_failure_message
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
private
|
|
259
|
+
|
|
260
|
+
def match(*)
|
|
261
|
+
super
|
|
262
|
+
matcher_1_matches? || matcher_2_matches?
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
def conjunction
|
|
266
|
+
"or"
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
end
|