opal-rspec 0.4.3 → 0.5.0.beta1
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 +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +9 -3
- data/Gemfile +6 -5
- data/README.md +73 -13
- data/Rakefile +108 -12
- data/lib/opal/rspec/version.rb +1 -1
- data/lib/opal/rspec.rb +35 -12
- data/opal/opal/rspec/async/async_example.rb +87 -0
- data/opal/opal/rspec/async/example_group.rb +94 -0
- data/opal/opal/rspec/async/hooks.rb +46 -0
- data/opal/opal/rspec/async/legacy.rb +50 -0
- data/opal/opal/rspec/async.rb +4 -289
- data/opal/opal/rspec/browser_formatter.rb +55 -18
- data/opal/opal/rspec/fixes/caller_filter.rb +6 -0
- data/opal/opal/rspec/fixes/example.rb +20 -0
- data/opal/opal/rspec/fixes/example_groups.rb +32 -0
- data/opal/opal/rspec/fixes/expectations.rb +21 -0
- data/opal/opal/rspec/fixes/formatter.rb +62 -0
- data/opal/opal/rspec/fixes/kernel.rb +35 -0
- data/opal/opal/rspec/fixes/matchers.rb +15 -0
- data/opal/opal/rspec/fixes/mocks.rb +13 -0
- data/opal/opal/rspec/fixes/reporter.rb +12 -0
- data/opal/opal/rspec/fixes.rb +11 -115
- data/opal/opal/rspec/pre_require_fixes.rb +4 -0
- data/opal/opal/rspec/requires.rb +103 -35
- data/opal/opal/rspec/runner.rb +19 -15
- data/opal/opal/rspec/text_formatter.rb +24 -10
- data/opal/opal/rspec.rb +4 -9
- data/opal-rspec.gemspec +5 -2
- data/{vendor_lib → rspec/lib}/rspec/version.rb +1 -1
- data/{vendor_lib → rspec/lib}/rspec.rb +0 -0
- data/rspec-core/benchmarks/call_v_yield.rb +81 -0
- data/rspec-core/benchmarks/check_inclusion.rb +125 -0
- data/rspec-core/benchmarks/define_method_v_attr_reader_v_def.rb +81 -0
- data/rspec-core/benchmarks/eager_vs_lazy_metadata/define_examples.rb +22 -0
- data/rspec-core/benchmarks/eager_vs_lazy_metadata.rb +126 -0
- data/rspec-core/benchmarks/filter_object.rb +35 -0
- data/rspec-core/benchmarks/index_v_take_while.rb +47 -0
- data/rspec-core/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb +94 -0
- data/rspec-core/benchmarks/require_relative_v_require.rb +75 -0
- data/rspec-core/benchmarks/respond_to_v_defined.rb +72 -0
- data/rspec-core/benchmarks/several_regexps_v_one_big_one.rb +86 -0
- data/rspec-core/benchmarks/sort_by_v_shuffle.rb +83 -0
- data/rspec-core/benchmarks/to_proc_v_not_to_proc.rb +539 -0
- data/rspec-core/features/step_definitions/additional_cli_steps.rb +126 -0
- data/rspec-core/features/step_definitions/core_standalone_steps.rb +12 -0
- data/rspec-core/features/support/env.rb +21 -0
- data/rspec-core/features/support/require_expect_syntax_in_aruba_specs.rb +29 -0
- data/rspec-core/features/support/rubinius.rb +6 -0
- data/{vendor_lib → rspec-core/lib}/rspec/autorun.rb +0 -0
- data/{vendor_lib → rspec-core/lib}/rspec/core/backport_random.rb +40 -6
- data/rspec-core/lib/rspec/core/backtrace_formatter.rb +66 -0
- data/{vendor_lib → rspec-core/lib}/rspec/core/configuration.rb +561 -250
- data/rspec-core/lib/rspec/core/configuration_options.rb +173 -0
- data/rspec-core/lib/rspec/core/drb.rb +111 -0
- data/rspec-core/lib/rspec/core/dsl.rb +93 -0
- data/rspec-core/lib/rspec/core/example.rb +502 -0
- data/rspec-core/lib/rspec/core/example_group.rb +606 -0
- data/rspec-core/lib/rspec/core/filter_manager.rb +259 -0
- data/{vendor_lib → rspec-core/lib}/rspec/core/flat_map.rb +1 -0
- data/rspec-core/lib/rspec/core/formatters/base_formatter.rb +67 -0
- data/rspec-core/lib/rspec/core/formatters/base_text_formatter.rb +76 -0
- data/rspec-core/lib/rspec/core/formatters/console_codes.rb +64 -0
- data/{vendor_lib → rspec-core/lib}/rspec/core/formatters/deprecation_formatter.rb +65 -36
- data/rspec-core/lib/rspec/core/formatters/documentation_formatter.rb +68 -0
- data/{vendor_lib → rspec-core/lib}/rspec/core/formatters/helpers.rb +18 -13
- data/{vendor_lib → rspec-core/lib}/rspec/core/formatters/html_formatter.rb +69 -75
- data/{vendor_lib → rspec-core/lib}/rspec/core/formatters/html_printer.rb +17 -22
- data/rspec-core/lib/rspec/core/formatters/json_formatter.rb +94 -0
- data/rspec-core/lib/rspec/core/formatters/profile_formatter.rb +65 -0
- data/rspec-core/lib/rspec/core/formatters/progress_formatter.rb +28 -0
- data/rspec-core/lib/rspec/core/formatters/protocol.rb +163 -0
- data/{vendor_lib → rspec-core/lib}/rspec/core/formatters/snippet_extractor.rb +15 -12
- data/rspec-core/lib/rspec/core/formatters.rb +240 -0
- data/rspec-core/lib/rspec/core/hooks.rb +591 -0
- data/{vendor_lib → rspec-core/lib}/rspec/core/memoized_helpers.rb +82 -41
- data/rspec-core/lib/rspec/core/metadata.rb +437 -0
- data/rspec-core/lib/rspec/core/metadata_filter.rb +95 -0
- data/rspec-core/lib/rspec/core/minitest_assertions_adapter.rb +28 -0
- data/rspec-core/lib/rspec/core/mocking_adapters/flexmock.rb +31 -0
- data/{vendor_lib/rspec/core/mocking/with_mocha.rb → rspec-core/lib/rspec/core/mocking_adapters/mocha.rb} +21 -16
- data/rspec-core/lib/rspec/core/mocking_adapters/null.rb +14 -0
- data/rspec-core/lib/rspec/core/mocking_adapters/rr.rb +31 -0
- data/rspec-core/lib/rspec/core/mocking_adapters/rspec.rb +32 -0
- data/rspec-core/lib/rspec/core/notifications.rb +542 -0
- data/{vendor_lib → rspec-core/lib}/rspec/core/option_parser.rb +53 -65
- data/{vendor_lib → rspec-core/lib}/rspec/core/ordering.rb +11 -10
- data/rspec-core/lib/rspec/core/pending.rb +163 -0
- data/rspec-core/lib/rspec/core/project_initializer/spec/spec_helper.rb +89 -0
- data/rspec-core/lib/rspec/core/project_initializer.rb +48 -0
- data/rspec-core/lib/rspec/core/rake_task.rb +187 -0
- data/rspec-core/lib/rspec/core/reporter.rb +149 -0
- data/{vendor_lib → rspec-core/lib}/rspec/core/ruby_project.rb +3 -2
- data/rspec-core/lib/rspec/core/runner.rb +158 -0
- data/{vendor_lib → rspec-core/lib}/rspec/core/shared_context.rb +7 -5
- data/rspec-core/lib/rspec/core/shared_example_group.rb +182 -0
- data/rspec-core/lib/rspec/core/test_unit_assertions_adapter.rb +30 -0
- data/rspec-core/lib/rspec/core/version.rb +9 -0
- data/rspec-core/lib/rspec/core/warnings.rb +40 -0
- data/{vendor_lib → rspec-core/lib}/rspec/core/world.rb +78 -26
- data/{vendor_lib → rspec-core/lib}/rspec/core.rb +64 -98
- data/rspec-core/spec/command_line/order_spec.rb +213 -0
- data/rspec-core/spec/rspec/core/backtrace_formatter_spec.rb +306 -0
- data/rspec-core/spec/rspec/core/configuration_options_spec.rb +425 -0
- data/rspec-core/spec/rspec/core/configuration_spec.rb +1963 -0
- data/rspec-core/spec/rspec/core/drb_spec.rb +278 -0
- data/rspec-core/spec/rspec/core/dsl_spec.rb +85 -0
- data/rspec-core/spec/rspec/core/example_execution_result_spec.rb +142 -0
- data/rspec-core/spec/rspec/core/example_group_constants_spec.rb +16 -0
- data/rspec-core/spec/rspec/core/example_group_spec.rb +1621 -0
- data/rspec-core/spec/rspec/core/example_spec.rb +662 -0
- data/rspec-core/spec/rspec/core/failed_example_notification_spec.rb +25 -0
- data/rspec-core/spec/rspec/core/filter_manager_spec.rb +299 -0
- data/rspec-core/spec/rspec/core/formatters/base_text_formatter_spec.rb +182 -0
- data/rspec-core/spec/rspec/core/formatters/console_codes_spec.rb +65 -0
- data/rspec-core/spec/rspec/core/formatters/deprecation_formatter_spec.rb +225 -0
- data/rspec-core/spec/rspec/core/formatters/documentation_formatter_spec.rb +111 -0
- data/rspec-core/spec/rspec/core/formatters/helpers_spec.rb +104 -0
- data/rspec-core/spec/rspec/core/formatters/html_formatter_spec.rb +111 -0
- data/rspec-core/spec/rspec/core/formatters/json_formatter_spec.rb +183 -0
- data/rspec-core/spec/rspec/core/formatters/profile_formatter_spec.rb +99 -0
- data/rspec-core/spec/rspec/core/formatters/progress_formatter_spec.rb +55 -0
- data/rspec-core/spec/rspec/core/formatters/snippet_extractor_spec.rb +26 -0
- data/rspec-core/spec/rspec/core/formatters_spec.rb +160 -0
- data/rspec-core/spec/rspec/core/hooks_filtering_spec.rb +227 -0
- data/rspec-core/spec/rspec/core/hooks_spec.rb +447 -0
- data/rspec-core/spec/rspec/core/memoized_helpers_spec.rb +537 -0
- data/rspec-core/spec/rspec/core/metadata_filter_spec.rb +181 -0
- data/rspec-core/spec/rspec/core/metadata_spec.rb +642 -0
- data/rspec-core/spec/rspec/core/notifications_spec.rb +92 -0
- data/rspec-core/spec/rspec/core/option_parser_spec.rb +270 -0
- data/rspec-core/spec/rspec/core/ordering_spec.rb +102 -0
- data/rspec-core/spec/rspec/core/pending_example_spec.rb +221 -0
- data/rspec-core/spec/rspec/core/pending_spec.rb +8 -0
- data/rspec-core/spec/rspec/core/project_initializer_spec.rb +123 -0
- data/rspec-core/spec/rspec/core/rake_task_spec.rb +351 -0
- data/rspec-core/spec/rspec/core/random_spec.rb +47 -0
- data/rspec-core/spec/rspec/core/reporter_spec.rb +198 -0
- data/rspec-core/spec/rspec/core/resources/a_bar.rb +0 -0
- data/rspec-core/spec/rspec/core/resources/a_foo.rb +0 -0
- data/rspec-core/spec/rspec/core/resources/a_spec.rb +1 -0
- data/rspec-core/spec/rspec/core/resources/acceptance/bar.rb +0 -0
- data/rspec-core/spec/rspec/core/resources/acceptance/foo_spec.rb +0 -0
- data/rspec-core/spec/rspec/core/resources/custom_example_group_runner.rb +14 -0
- data/rspec-core/spec/rspec/core/resources/formatter_specs.rb +58 -0
- data/rspec-core/spec/rspec/core/resources/utf8_encoded.rb +9 -0
- data/rspec-core/spec/rspec/core/rspec_matchers_spec.rb +45 -0
- data/rspec-core/spec/rspec/core/ruby_project_spec.rb +26 -0
- data/rspec-core/spec/rspec/core/runner_spec.rb +309 -0
- data/rspec-core/spec/rspec/core/shared_context_spec.rb +102 -0
- data/rspec-core/spec/rspec/core/shared_example_group_spec.rb +268 -0
- data/rspec-core/spec/rspec/core/warnings_spec.rb +72 -0
- data/rspec-core/spec/rspec/core/world_spec.rb +142 -0
- data/rspec-core/spec/rspec/core_spec.rb +103 -0
- data/rspec-core/spec/spec_helper.rb +89 -0
- data/rspec-core/spec/support/config_options_helper.rb +13 -0
- data/rspec-core/spec/support/fake_minitest/minitest/minitest_assertions.rb +4 -0
- data/rspec-core/spec/support/fake_minitest/minitest.rb +0 -0
- data/rspec-core/spec/support/fake_minitest/test/unit/assertions.rb +6 -0
- data/rspec-core/spec/support/formatter_support.rb +263 -0
- data/rspec-core/spec/support/helper_methods.rb +26 -0
- data/rspec-core/spec/support/isolated_home_directory.rb +16 -0
- data/rspec-core/spec/support/matchers.rb +103 -0
- data/rspec-core/spec/support/mathn_integration_support.rb +12 -0
- data/rspec-core/spec/support/sandboxing.rb +50 -0
- data/rspec-core/spec/support/shared_example_groups.rb +43 -0
- data/rspec-core/spec/support/spec_files.rb +44 -0
- data/rspec-expectations/benchmarks/2.x_vs_3.x_matcher_dsl_implementation.rb +253 -0
- data/rspec-expectations/benchmarks/autoload_v_require.rb +25 -0
- data/rspec-expectations/benchmarks/cloning_matchers.rb +19 -0
- data/rspec-expectations/benchmarks/default_messages_as_methods_v_blocks.rb +27 -0
- data/rspec-expectations/benchmarks/example_spec.rb +9 -0
- data/rspec-expectations/benchmarks/include_v_superclass.rb +39 -0
- data/rspec-expectations/benchmarks/match_array/failing_with_distinct_items.rb +147 -0
- data/rspec-expectations/benchmarks/match_array/failing_with_duplicate_items.rb +122 -0
- data/rspec-expectations/benchmarks/match_array/passing_with_distinct_items.rb +154 -0
- data/rspec-expectations/benchmarks/match_array/passing_with_duplicate_items.rb +132 -0
- data/rspec-expectations/benchmarks/match_array/rubyprof/passing_with_distinct_items.rb +9 -0
- data/rspec-expectations/benchmarks/matcher_dsl_vs_classes.rb +180 -0
- data/rspec-expectations/benchmarks/method_to_proc.rb +72 -0
- data/rspec-expectations/benchmarks/set_vs_array_include.rb +68 -0
- data/rspec-expectations/features/step_definitions/additional_cli_steps.rb +22 -0
- data/rspec-expectations/features/support/disallow_certain_apis.rb +34 -0
- data/rspec-expectations/features/support/env.rb +21 -0
- data/rspec-expectations/features/support/rubinius.rb +6 -0
- data/{vendor_lib/rspec/matchers → rspec-expectations/lib/rspec/expectations}/configuration.rb +50 -16
- data/rspec-expectations/lib/rspec/expectations/expectation_target.rb +119 -0
- data/rspec-expectations/lib/rspec/expectations/fail_with.rb +34 -0
- data/rspec-expectations/lib/rspec/expectations/handler.rb +167 -0
- data/rspec-expectations/lib/rspec/expectations/minitest_integration.rb +17 -0
- data/rspec-expectations/lib/rspec/expectations/syntax.rb +132 -0
- data/{vendor_lib → rspec-expectations/lib}/rspec/expectations/version.rb +1 -1
- data/rspec-expectations/lib/rspec/expectations.rb +68 -0
- data/rspec-expectations/lib/rspec/matchers/aliased_matcher.rb +116 -0
- data/rspec-expectations/lib/rspec/matchers/built_in/all.rb +85 -0
- data/rspec-expectations/lib/rspec/matchers/built_in/base_matcher.rb +132 -0
- data/rspec-expectations/lib/rspec/matchers/built_in/be.rb +277 -0
- data/rspec-expectations/lib/rspec/matchers/built_in/be_between.rb +77 -0
- data/{vendor_lib → rspec-expectations/lib}/rspec/matchers/built_in/be_instance_of.rb +11 -4
- data/{vendor_lib → rspec-expectations/lib}/rspec/matchers/built_in/be_kind_of.rb +5 -0
- data/rspec-expectations/lib/rspec/matchers/built_in/be_within.rb +72 -0
- data/rspec-expectations/lib/rspec/matchers/built_in/change.rb +337 -0
- data/rspec-expectations/lib/rspec/matchers/built_in/compound.rb +258 -0
- data/rspec-expectations/lib/rspec/matchers/built_in/contain_exactly.rb +249 -0
- data/{vendor_lib → rspec-expectations/lib}/rspec/matchers/built_in/cover.rb +3 -0
- data/rspec-expectations/lib/rspec/matchers/built_in/eq.rb +75 -0
- data/{vendor_lib → rspec-expectations/lib}/rspec/matchers/built_in/eql.rb +17 -6
- data/rspec-expectations/lib/rspec/matchers/built_in/equal.rb +81 -0
- data/rspec-expectations/lib/rspec/matchers/built_in/exist.rb +86 -0
- data/rspec-expectations/lib/rspec/matchers/built_in/has.rb +101 -0
- data/rspec-expectations/lib/rspec/matchers/built_in/have_attributes.rb +84 -0
- data/rspec-expectations/lib/rspec/matchers/built_in/include.rb +105 -0
- data/rspec-expectations/lib/rspec/matchers/built_in/match.rb +29 -0
- data/rspec-expectations/lib/rspec/matchers/built_in/operators.rb +119 -0
- data/rspec-expectations/lib/rspec/matchers/built_in/output.rb +152 -0
- data/{vendor_lib → rspec-expectations/lib}/rspec/matchers/built_in/raise_error.rb +66 -46
- data/{vendor_lib → rspec-expectations/lib}/rspec/matchers/built_in/respond_to.rb +43 -26
- data/{vendor_lib → rspec-expectations/lib}/rspec/matchers/built_in/satisfy.rb +13 -4
- data/rspec-expectations/lib/rspec/matchers/built_in/start_and_end_with.rb +82 -0
- data/{vendor_lib → rspec-expectations/lib}/rspec/matchers/built_in/throw_symbol.rb +51 -13
- data/rspec-expectations/lib/rspec/matchers/built_in/yield.rb +420 -0
- data/rspec-expectations/lib/rspec/matchers/built_in.rb +52 -0
- data/rspec-expectations/lib/rspec/matchers/composable.rb +183 -0
- data/{vendor_lib/rspec/matchers/matcher.rb → rspec-expectations/lib/rspec/matchers/dsl.rb} +120 -30
- data/{vendor_lib → rspec-expectations/lib}/rspec/matchers/generated_descriptions.rb +13 -6
- data/rspec-expectations/lib/rspec/matchers/matcher_delegator.rb +33 -0
- data/rspec-expectations/lib/rspec/matchers/matcher_protocol.rb +99 -0
- data/rspec-expectations/lib/rspec/matchers/pretty.rb +77 -0
- data/{vendor_lib → rspec-expectations/lib}/rspec/matchers.rb +408 -74
- data/rspec-expectations/spec/rspec/expectations/configuration_spec.rb +226 -0
- data/rspec-expectations/spec/rspec/expectations/expectation_target_spec.rb +147 -0
- data/rspec-expectations/spec/rspec/expectations/extensions/kernel_spec.rb +69 -0
- data/rspec-expectations/spec/rspec/expectations/fail_with_spec.rb +73 -0
- data/rspec-expectations/spec/rspec/expectations/handler_spec.rb +200 -0
- data/rspec-expectations/spec/rspec/expectations/minitest_integration_spec.rb +25 -0
- data/rspec-expectations/spec/rspec/expectations/syntax_spec.rb +93 -0
- data/rspec-expectations/spec/rspec/expectations_spec.rb +15 -0
- data/rspec-expectations/spec/rspec/matchers/aliased_matcher_spec.rb +113 -0
- data/rspec-expectations/spec/rspec/matchers/aliases_spec.rb +455 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/all_spec.rb +212 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/base_matcher_spec.rb +140 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/be_between_spec.rb +157 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/be_instance_of_spec.rb +61 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/be_kind_of_spec.rb +39 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/be_spec.rb +685 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/be_within_spec.rb +139 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/change_spec.rb +829 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/compound_spec.rb +537 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/contain_exactly_spec.rb +556 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/cover_spec.rb +67 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/eq_spec.rb +176 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/eql_spec.rb +39 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/equal_spec.rb +130 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/exist_spec.rb +139 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/has_spec.rb +179 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/have_attributes_spec.rb +177 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/include_spec.rb +587 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/match_spec.rb +100 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/operators_spec.rb +250 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/output_spec.rb +168 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/raise_error_spec.rb +446 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/respond_to_spec.rb +290 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/satisfy_spec.rb +42 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/start_and_end_with_spec.rb +347 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/throw_symbol_spec.rb +133 -0
- data/rspec-expectations/spec/rspec/matchers/built_in/yield_spec.rb +643 -0
- data/rspec-expectations/spec/rspec/matchers/composable_spec.rb +77 -0
- data/rspec-expectations/spec/rspec/matchers/define_negated_matcher_spec.rb +199 -0
- data/rspec-expectations/spec/rspec/matchers/description_generation_spec.rb +189 -0
- data/rspec-expectations/spec/rspec/matchers/dsl_spec.rb +1036 -0
- data/rspec-expectations/spec/rspec/matchers/legacy_spec.rb +104 -0
- data/rspec-expectations/spec/rspec/matchers_spec.rb +108 -0
- data/rspec-expectations/spec/spec_helper.rb +94 -0
- data/rspec-expectations/spec/support/matchers.rb +54 -0
- data/rspec-expectations/spec/support/shared_examples.rb +101 -0
- data/rspec-mocks/benchmarks/double_creation.rb +66 -0
- data/rspec-mocks/benchmarks/each_value_v_values_each.rb +58 -0
- data/rspec-mocks/benchmarks/find_original_method_early.rb +64 -0
- data/rspec-mocks/benchmarks/method_defined_at_any_visibility.rb +101 -0
- data/rspec-mocks/benchmarks/thread_safety.rb +24 -0
- data/rspec-mocks/benchmarks/transfer_nested_constants.rb +77 -0
- data/rspec-mocks/features/step_definitions/additional_cli_steps.rb +21 -0
- data/rspec-mocks/features/support/disallow_certain_apis.rb +24 -0
- data/rspec-mocks/features/support/env.rb +22 -0
- data/rspec-mocks/features/support/rubinius.rb +6 -0
- data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/any_instance/chain.rb +19 -2
- data/rspec-mocks/lib/rspec/mocks/any_instance/expect_chain_chain.rb +35 -0
- data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/any_instance/expectation_chain.rb +12 -11
- data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/any_instance/message_chains.rb +15 -5
- data/rspec-mocks/lib/rspec/mocks/any_instance/proxy.rb +116 -0
- data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/any_instance/recorder.rb +105 -38
- data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/any_instance/stub_chain.rb +9 -9
- data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/any_instance/stub_chain_chain.rb +5 -1
- data/rspec-mocks/lib/rspec/mocks/any_instance.rb +10 -0
- data/rspec-mocks/lib/rspec/mocks/argument_list_matcher.rb +72 -0
- data/rspec-mocks/lib/rspec/mocks/argument_matchers.rb +282 -0
- data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/configuration.rb +60 -14
- data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/error_generator.rb +93 -43
- data/rspec-mocks/lib/rspec/mocks/example_methods.rb +379 -0
- data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/instance_method_stasher.rb +30 -7
- data/rspec-mocks/lib/rspec/mocks/marshal_extension.rb +41 -0
- data/rspec-mocks/lib/rspec/mocks/matchers/expectation_customization.rb +20 -0
- data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/matchers/have_received.rb +36 -14
- data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/matchers/receive.rb +24 -30
- data/rspec-mocks/lib/rspec/mocks/matchers/receive_message_chain.rb +66 -0
- data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/matchers/receive_messages.rb +9 -10
- data/rspec-mocks/lib/rspec/mocks/message_chain.rb +91 -0
- data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/message_expectation.rb +156 -105
- data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/method_double.rb +81 -30
- data/rspec-mocks/lib/rspec/mocks/method_reference.rb +155 -0
- data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/mutate_const.rb +84 -166
- data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/object_reference.rb +19 -18
- data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/order_group.rb +4 -5
- data/rspec-mocks/lib/rspec/mocks/proxy.rb +431 -0
- data/rspec-mocks/lib/rspec/mocks/space.rb +221 -0
- data/rspec-mocks/lib/rspec/mocks/standalone.rb +3 -0
- data/rspec-mocks/lib/rspec/mocks/syntax.rb +329 -0
- data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/targets.rb +20 -13
- data/rspec-mocks/lib/rspec/mocks/test_double.rb +135 -0
- data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/verifying_double.rb +69 -19
- data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/verifying_message_expecation.rb +23 -21
- data/{vendor_lib → rspec-mocks/lib}/rspec/mocks/verifying_proxy.rb +58 -38
- data/rspec-mocks/lib/rspec/mocks/version.rb +9 -0
- data/rspec-mocks/lib/rspec/mocks.rb +126 -0
- data/rspec-mocks/spec/rspec/mocks/and_call_original_spec.rb +267 -0
- data/rspec-mocks/spec/rspec/mocks/and_return_spec.rb +21 -0
- data/rspec-mocks/spec/rspec/mocks/and_wrap_original_spec.rb +63 -0
- data/rspec-mocks/spec/rspec/mocks/and_yield_spec.rb +161 -0
- data/rspec-mocks/spec/rspec/mocks/any_instance/message_chains_spec.rb +39 -0
- data/rspec-mocks/spec/rspec/mocks/any_instance_spec.rb +1242 -0
- data/rspec-mocks/spec/rspec/mocks/argument_matchers_spec.rb +336 -0
- data/rspec-mocks/spec/rspec/mocks/array_including_matcher_spec.rb +39 -0
- data/rspec-mocks/spec/rspec/mocks/at_least_spec.rb +147 -0
- data/rspec-mocks/spec/rspec/mocks/at_most_spec.rb +113 -0
- data/rspec-mocks/spec/rspec/mocks/before_all_spec.rb +75 -0
- data/rspec-mocks/spec/rspec/mocks/block_return_value_spec.rb +68 -0
- data/rspec-mocks/spec/rspec/mocks/combining_implementation_instructions_spec.rb +196 -0
- data/rspec-mocks/spec/rspec/mocks/configuration_spec.rb +175 -0
- data/rspec-mocks/spec/rspec/mocks/double_spec.rb +830 -0
- data/rspec-mocks/spec/rspec/mocks/example_methods_spec.rb +11 -0
- data/rspec-mocks/spec/rspec/mocks/expiration_spec.rb +90 -0
- data/rspec-mocks/spec/rspec/mocks/hash_excluding_matcher_spec.rb +65 -0
- data/rspec-mocks/spec/rspec/mocks/hash_including_matcher_spec.rb +92 -0
- data/rspec-mocks/spec/rspec/mocks/instance_method_stasher_spec.rb +72 -0
- data/rspec-mocks/spec/rspec/mocks/marshal_extension_spec.rb +67 -0
- data/rspec-mocks/spec/rspec/mocks/matchers/have_received_spec.rb +513 -0
- data/rspec-mocks/spec/rspec/mocks/matchers/receive_message_chain_spec.rb +227 -0
- data/rspec-mocks/spec/rspec/mocks/matchers/receive_messages_spec.rb +148 -0
- data/rspec-mocks/spec/rspec/mocks/matchers/receive_spec.rb +525 -0
- data/rspec-mocks/spec/rspec/mocks/methods_spec.rb +24 -0
- data/rspec-mocks/spec/rspec/mocks/mock_expectation_error_spec.rb +20 -0
- data/rspec-mocks/spec/rspec/mocks/mock_ordering_spec.rb +112 -0
- data/rspec-mocks/spec/rspec/mocks/multiple_return_value_spec.rb +130 -0
- data/rspec-mocks/spec/rspec/mocks/mutate_const_spec.rb +561 -0
- data/rspec-mocks/spec/rspec/mocks/nil_expectation_warning_spec.rb +52 -0
- data/rspec-mocks/spec/rspec/mocks/null_object_double_spec.rb +135 -0
- data/rspec-mocks/spec/rspec/mocks/once_counts_spec.rb +50 -0
- data/rspec-mocks/spec/rspec/mocks/order_group_spec.rb +26 -0
- data/rspec-mocks/spec/rspec/mocks/partial_double_spec.rb +379 -0
- data/rspec-mocks/spec/rspec/mocks/partial_double_using_mocks_directly_spec.rb +83 -0
- data/rspec-mocks/spec/rspec/mocks/precise_counts_spec.rb +66 -0
- data/rspec-mocks/spec/rspec/mocks/serialization_spec.rb +89 -0
- data/rspec-mocks/spec/rspec/mocks/should_syntax_spec.rb +539 -0
- data/rspec-mocks/spec/rspec/mocks/space_spec.rb +242 -0
- data/rspec-mocks/spec/rspec/mocks/spy_spec.rb +127 -0
- data/rspec-mocks/spec/rspec/mocks/stash_spec.rb +43 -0
- data/rspec-mocks/spec/rspec/mocks/stub_chain_spec.rb +166 -0
- data/rspec-mocks/spec/rspec/mocks/stub_implementation_spec.rb +98 -0
- data/rspec-mocks/spec/rspec/mocks/stub_spec.rb +520 -0
- data/rspec-mocks/spec/rspec/mocks/stubbed_message_expectations_spec.rb +56 -0
- data/rspec-mocks/spec/rspec/mocks/syntax_agnostic_message_matchers_spec.rb +99 -0
- data/rspec-mocks/spec/rspec/mocks/syntax_spec.rb +7 -0
- data/rspec-mocks/spec/rspec/mocks/test_double_spec.rb +53 -0
- data/rspec-mocks/spec/rspec/mocks/thrice_counts_spec.rb +72 -0
- data/rspec-mocks/spec/rspec/mocks/to_ary_spec.rb +52 -0
- data/rspec-mocks/spec/rspec/mocks/twice_counts_spec.rb +64 -0
- data/rspec-mocks/spec/rspec/mocks/verifying_doubles/class_double_with_class_loaded_spec.rb +118 -0
- data/rspec-mocks/spec/rspec/mocks/verifying_doubles/class_double_with_class_not_loaded_spec.rb +58 -0
- data/rspec-mocks/spec/rspec/mocks/verifying_doubles/construction_spec.rb +54 -0
- data/rspec-mocks/spec/rspec/mocks/verifying_doubles/expected_arg_verification_spec.rb +81 -0
- data/rspec-mocks/spec/rspec/mocks/verifying_doubles/instance_double_with_class_loaded_spec.rb +195 -0
- data/rspec-mocks/spec/rspec/mocks/verifying_doubles/instance_double_with_class_not_loaded_spec.rb +57 -0
- data/rspec-mocks/spec/rspec/mocks/verifying_doubles/method_visibility_spec.rb +129 -0
- data/rspec-mocks/spec/rspec/mocks/verifying_doubles/object_double_spec.rb +68 -0
- data/rspec-mocks/spec/rspec/mocks_spec.rb +199 -0
- data/rspec-mocks/spec/spec_helper.rb +131 -0
- data/rspec-mocks/spec/support/before_all_shared_example_group.rb +16 -0
- data/rspec-mocks/spec/support/doubled_classes.rb +74 -0
- data/rspec-mocks/spec/support/matchers.rb +15 -0
- data/rspec-support/benchmarks/caller.rb +81 -0
- data/{vendor_lib → rspec-support/lib}/rspec/support/caller_filter.rb +11 -4
- data/rspec-support/lib/rspec/support/differ.rb +214 -0
- data/rspec-support/lib/rspec/support/directory_maker.rb +61 -0
- data/rspec-support/lib/rspec/support/encoded_string.rb +69 -0
- data/rspec-support/lib/rspec/support/fuzzy_matcher.rb +48 -0
- data/rspec-support/lib/rspec/support/hunk_generator.rb +47 -0
- data/rspec-support/lib/rspec/support/matcher_definition.rb +31 -0
- data/rspec-support/lib/rspec/support/method_signature_verifier.rb +272 -0
- data/rspec-support/lib/rspec/support/os.rb +18 -0
- data/rspec-support/lib/rspec/support/recursive_const_methods.rb +76 -0
- data/rspec-support/lib/rspec/support/ruby_features.rb +45 -0
- data/rspec-support/lib/rspec/support/spec/deprecation_helpers.rb +60 -0
- data/rspec-support/lib/rspec/support/spec/formatting_support.rb +9 -0
- data/{vendor_lib → rspec-support/lib}/rspec/support/spec/in_sub_process.rb +5 -2
- data/rspec-support/lib/rspec/support/spec/prevent_load_time_warnings.rb +44 -0
- data/rspec-support/lib/rspec/support/spec/shell_out.rb +69 -0
- data/{vendor_lib → rspec-support/lib}/rspec/support/spec/stderr_splitter.rb +7 -5
- data/rspec-support/lib/rspec/support/spec/with_isolated_directory.rb +9 -0
- data/rspec-support/lib/rspec/support/spec/with_isolated_stderr.rb +13 -0
- data/rspec-support/lib/rspec/support/spec.rb +72 -0
- data/{vendor_lib → rspec-support/lib}/rspec/support/version.rb +1 -1
- data/rspec-support/lib/rspec/support/version_checker.rb +53 -0
- data/rspec-support/lib/rspec/support/warnings.rb +39 -0
- data/rspec-support/lib/rspec/support.rb +76 -0
- data/rspec-support/spec/rspec/support/caller_filter_spec.rb +66 -0
- data/rspec-support/spec/rspec/support/differ_spec.rb +322 -0
- data/rspec-support/spec/rspec/support/directory_maker_spec.rb +58 -0
- data/rspec-support/spec/rspec/support/encoded_string_spec.rb +86 -0
- data/rspec-support/spec/rspec/support/fuzzy_matcher_spec.rb +179 -0
- data/rspec-support/spec/rspec/support/method_signature_verifier_spec.rb +357 -0
- data/rspec-support/spec/rspec/support/os_spec.rb +36 -0
- data/rspec-support/spec/rspec/support/recursive_const_methods_spec.rb +49 -0
- data/rspec-support/spec/rspec/support/spec/in_sub_process_spec.rb +36 -0
- data/rspec-support/spec/rspec/support/spec/prevent_load_time_warnings_spec.rb +10 -0
- data/rspec-support/spec/rspec/support/spec/shell_out_spec.rb +44 -0
- data/rspec-support/spec/rspec/support/spec/stderr_splitter_spec.rb +60 -0
- data/rspec-support/spec/rspec/support/spec/with_isolated_std_err_spec.rb +21 -0
- data/rspec-support/spec/rspec/support/version_checker_spec.rb +29 -0
- data/rspec-support/spec/rspec/support/warnings_spec.rb +66 -0
- data/rspec-support/spec/rspec/support_spec.rb +119 -0
- data/rspec-support/spec/spec_helper.rb +2 -0
- data/spec/after_hooks_spec.rb +140 -0
- data/spec/around_hooks_spec.rb +223 -0
- data/spec/async_spec.rb +147 -1
- data/spec/before_hooks_spec.rb +183 -0
- data/spec/example_spec.rb +11 -0
- data/spec/matchers_spec.rb +4 -0
- data/spec/skip_pending_spec.rb +43 -0
- data/spec/subject_spec.rb +87 -0
- data/util/create_requires.rb +45 -0
- metadata +443 -147
- data/spec/named_subject_spec.rb +0 -11
- data/vendor_lib/rspec/core/backtrace_formatter.rb +0 -65
- data/vendor_lib/rspec/core/command_line.rb +0 -36
- data/vendor_lib/rspec/core/configuration_options.rb +0 -143
- data/vendor_lib/rspec/core/drb_command_line.rb +0 -26
- data/vendor_lib/rspec/core/drb_options.rb +0 -87
- data/vendor_lib/rspec/core/dsl.rb +0 -26
- data/vendor_lib/rspec/core/example.rb +0 -312
- data/vendor_lib/rspec/core/example_group.rb +0 -540
- data/vendor_lib/rspec/core/filter_manager.rb +0 -224
- data/vendor_lib/rspec/core/formatters/base_formatter.rb +0 -291
- data/vendor_lib/rspec/core/formatters/base_text_formatter.rb +0 -307
- data/vendor_lib/rspec/core/formatters/documentation_formatter.rb +0 -67
- data/vendor_lib/rspec/core/formatters/json_formatter.rb +0 -99
- data/vendor_lib/rspec/core/formatters/progress_formatter.rb +0 -32
- data/vendor_lib/rspec/core/formatters.rb +0 -54
- data/vendor_lib/rspec/core/hooks.rb +0 -535
- data/vendor_lib/rspec/core/metadata.rb +0 -313
- data/vendor_lib/rspec/core/mocking/with_absolutely_nothing.rb +0 -11
- data/vendor_lib/rspec/core/mocking/with_flexmock.rb +0 -27
- data/vendor_lib/rspec/core/mocking/with_rr.rb +0 -27
- data/vendor_lib/rspec/core/mocking/with_rspec.rb +0 -27
- data/vendor_lib/rspec/core/pending.rb +0 -110
- data/vendor_lib/rspec/core/project_initializer.rb +0 -88
- data/vendor_lib/rspec/core/rake_task.rb +0 -128
- data/vendor_lib/rspec/core/reporter.rb +0 -132
- data/vendor_lib/rspec/core/runner.rb +0 -97
- data/vendor_lib/rspec/core/shared_example_group/collection.rb +0 -27
- data/vendor_lib/rspec/core/shared_example_group.rb +0 -146
- data/vendor_lib/rspec/core/version.rb +0 -7
- data/vendor_lib/rspec/core/warnings.rb +0 -22
- data/vendor_lib/rspec/expectations/differ.rb +0 -154
- data/vendor_lib/rspec/expectations/errors.rb +0 -9
- data/vendor_lib/rspec/expectations/expectation_target.rb +0 -87
- data/vendor_lib/rspec/expectations/extensions/object.rb +0 -29
- data/vendor_lib/rspec/expectations/extensions.rb +0 -1
- data/vendor_lib/rspec/expectations/fail_with.rb +0 -79
- data/vendor_lib/rspec/expectations/handler.rb +0 -68
- data/vendor_lib/rspec/expectations/syntax.rb +0 -182
- data/vendor_lib/rspec/expectations.rb +0 -75
- data/vendor_lib/rspec/matchers/built_in/base_matcher.rb +0 -68
- data/vendor_lib/rspec/matchers/built_in/be.rb +0 -213
- data/vendor_lib/rspec/matchers/built_in/be_within.rb +0 -55
- data/vendor_lib/rspec/matchers/built_in/change.rb +0 -141
- data/vendor_lib/rspec/matchers/built_in/eq.rb +0 -22
- data/vendor_lib/rspec/matchers/built_in/equal.rb +0 -48
- data/vendor_lib/rspec/matchers/built_in/exist.rb +0 -26
- data/vendor_lib/rspec/matchers/built_in/has.rb +0 -48
- data/vendor_lib/rspec/matchers/built_in/include.rb +0 -61
- data/vendor_lib/rspec/matchers/built_in/match.rb +0 -17
- data/vendor_lib/rspec/matchers/built_in/match_array.rb +0 -51
- data/vendor_lib/rspec/matchers/built_in/start_and_end_with.rb +0 -48
- data/vendor_lib/rspec/matchers/built_in/yield.rb +0 -297
- data/vendor_lib/rspec/matchers/built_in.rb +0 -39
- data/vendor_lib/rspec/matchers/compatibility.rb +0 -14
- data/vendor_lib/rspec/matchers/dsl.rb +0 -23
- data/vendor_lib/rspec/matchers/method_missing.rb +0 -12
- data/vendor_lib/rspec/matchers/operator_matcher.rb +0 -99
- data/vendor_lib/rspec/matchers/pretty.rb +0 -70
- data/vendor_lib/rspec/matchers/test_unit_integration.rb +0 -11
- data/vendor_lib/rspec/mocks/argument_list_matcher.rb +0 -104
- data/vendor_lib/rspec/mocks/argument_matchers.rb +0 -264
- data/vendor_lib/rspec/mocks/arity_calculator.rb +0 -66
- data/vendor_lib/rspec/mocks/errors.rb +0 -12
- data/vendor_lib/rspec/mocks/example_methods.rb +0 -201
- data/vendor_lib/rspec/mocks/extensions/marshal.rb +0 -17
- data/vendor_lib/rspec/mocks/framework.rb +0 -36
- data/vendor_lib/rspec/mocks/method_reference.rb +0 -95
- data/vendor_lib/rspec/mocks/mock.rb +0 -7
- data/vendor_lib/rspec/mocks/proxy.rb +0 -269
- data/vendor_lib/rspec/mocks/proxy_for_nil.rb +0 -37
- data/vendor_lib/rspec/mocks/space.rb +0 -95
- data/vendor_lib/rspec/mocks/standalone.rb +0 -3
- data/vendor_lib/rspec/mocks/stub_chain.rb +0 -51
- data/vendor_lib/rspec/mocks/syntax.rb +0 -374
- data/vendor_lib/rspec/mocks/test_double.rb +0 -109
- data/vendor_lib/rspec/mocks/version.rb +0 -7
- data/vendor_lib/rspec/mocks.rb +0 -100
- data/vendor_lib/rspec/support/spec/deprecation_helpers.rb +0 -29
- data/vendor_lib/rspec/support/spec.rb +0 -14
- data/vendor_lib/rspec/support/warnings.rb +0 -41
- data/vendor_lib/rspec/support.rb +0 -6
- data/vendor_lib/rspec-expectations.rb +0 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: dbd011de53ddb59b6953bb90ecddf3082402cc8d
|
|
4
|
+
data.tar.gz: cfb1bcebd79e37b25dda19aaa9b57e173c446154
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: dea4bff6ec1be0af8b3d3f205407cdbeff969307fd5ae8817653762c5099428c359756ec9ea55630e38350a9b302b41e8dcc091a05c7f8429ca927ba207170ab
|
|
7
|
+
data.tar.gz: a0ba39d3e3851bf95ad496da0635dd9b0bd2db21aa8875a77da7fa4c3f5a9984f65cd8421fcde54dcc5434ecc5fc85fccd25e639af1c69880a2054a9e3064128
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
## 0.5.0 (edge)
|
|
2
|
+
|
|
3
|
+
* By default, any subject, it example block, before(:each), after(:each), and around that returns a promise will be executed asynchronously. Async is NOT yet supported for context level hooks. Async approach from < 0.4.3 will still work.
|
|
4
|
+
|
|
5
|
+
* Update to RSpec 3.1 (core is 3.1.7, expectations/support 3.1.2, mocks 3.1.3)
|
|
6
|
+
|
|
7
|
+
* Remove copy of source (and just rely on git submodule fetch)
|
|
8
|
+
|
|
1
9
|
## 0.4.3 (2015-06-14)
|
|
2
10
|
|
|
3
11
|
* Allow the gem to be run under Opal 0.7 and 0.8
|
|
@@ -8,7 +16,7 @@
|
|
|
8
16
|
|
|
9
17
|
* Avoid phantomjs warning messages
|
|
10
18
|
|
|
11
|
-
## 0.4.1
|
|
19
|
+
## 0.4.1 (2015-02-25)
|
|
12
20
|
|
|
13
21
|
* Remove predicate matcher fixes as Opal supports $1..$9 special gvars.
|
|
14
22
|
|
|
@@ -21,5 +29,3 @@
|
|
|
21
29
|
* Replaced browser formatter to use html printer from rspec
|
|
22
30
|
|
|
23
31
|
* Add timeout support to asynchronous specs
|
|
24
|
-
|
|
25
|
-
## 0.2.1 November 24, 2013
|
data/Gemfile
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
source 'https://rubygems.org'
|
|
2
2
|
gemspec
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
unless Dir['rspec{,-{core,expectations,mocks,support}}'].any?
|
|
5
|
+
warn 'Run: "git submodule update --init" to get RSpec sources'
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
# Opal 0.9 still in development
|
|
9
|
+
# gem 'opal', git: 'https://github.com/opal/opal.git'
|
data/README.md
CHANGED
|
@@ -51,8 +51,12 @@ in any web browser.
|
|
|
51
51
|
|
|
52
52
|
## Async examples
|
|
53
53
|
|
|
54
|
-
`opal-rspec` adds support for async specs to rspec. These specs
|
|
55
|
-
|
|
54
|
+
`opal-rspec` adds support for async specs to rspec. These specs can be defined using 2 approaches:
|
|
55
|
+
|
|
56
|
+
1. Promises returned from subject or the `#it` block (preferred)
|
|
57
|
+
1. `#async` instead of `#it` (in use with opal-rspec <= 0.4.3)
|
|
58
|
+
|
|
59
|
+
### Promise approach
|
|
56
60
|
|
|
57
61
|
```ruby
|
|
58
62
|
describe MyClass do
|
|
@@ -62,29 +66,85 @@ describe MyClass do
|
|
|
62
66
|
end
|
|
63
67
|
|
|
64
68
|
# async example
|
|
65
|
-
|
|
66
|
-
|
|
69
|
+
it 'does something else, too' do
|
|
70
|
+
promise = Promise.new
|
|
71
|
+
delay 1 do
|
|
72
|
+
expect(:foo).to eq(:foo)
|
|
73
|
+
promise.resolve
|
|
74
|
+
end
|
|
75
|
+
promise
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it 'does another thing' do
|
|
79
|
+
# Argument is number of seconds, delay_with_promise is a convenience method that will
|
|
80
|
+
# call setTimeout with the block and return a promise
|
|
81
|
+
delay_with_promise 0 do
|
|
82
|
+
expect(:foo).to eq(:foo)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
describe MyClass2 do
|
|
88
|
+
# will wait for the before promise to complete before proceeding
|
|
89
|
+
before do
|
|
90
|
+
delay_with_promise 0 do
|
|
91
|
+
puts 'async before 'action
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# async subject works too
|
|
96
|
+
subject do
|
|
97
|
+
delay_with_promise 0 do
|
|
98
|
+
42
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it { is_expected.to eq 42 }
|
|
103
|
+
|
|
104
|
+
# If you use an around block and have async specs, you must use this approach
|
|
105
|
+
around do |example|
|
|
106
|
+
puts 'do stuff before'
|
|
107
|
+
example.run.then do
|
|
108
|
+
puts 'do stuff after example'
|
|
109
|
+
end
|
|
67
110
|
end
|
|
68
111
|
end
|
|
69
112
|
```
|
|
70
113
|
|
|
71
|
-
|
|
72
|
-
|
|
114
|
+
Advantages:
|
|
115
|
+
* Assuming your subject under test (or matchers) return/use promises, the syntax is the same for sync or async specs
|
|
116
|
+
|
|
117
|
+
Limitations:
|
|
118
|
+
* Right now, async `before(:context)` and `after(:context)` hooks cannot be async
|
|
119
|
+
* `let` dependencies cannot be async, only subject
|
|
120
|
+
* Opal-rspec will not timeout while waiting for your async code to finish
|
|
121
|
+
|
|
122
|
+
### Async/it approach
|
|
123
|
+
|
|
124
|
+
This is the approach that was supported in opal-rspec <= 0.4.3 and it still works.
|
|
73
125
|
|
|
74
126
|
```ruby
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
127
|
+
describe MyClass2 do
|
|
128
|
+
async 'HTTP requests should work' do
|
|
129
|
+
HTTP.get('/users/1.json') do |res|
|
|
130
|
+
async {
|
|
131
|
+
expect(res).to be_ok
|
|
132
|
+
}
|
|
133
|
+
end
|
|
134
|
+
end
|
|
81
135
|
end
|
|
82
136
|
```
|
|
83
137
|
|
|
84
|
-
The block passed to `
|
|
138
|
+
The block passed to the second `async` call informs the runner that this spec is finished
|
|
85
139
|
so it can move on. Any failures/expectations run inside this block will be run
|
|
86
140
|
in the context of the example.
|
|
87
141
|
|
|
142
|
+
Advantages:
|
|
143
|
+
* Hides promises from the specs
|
|
144
|
+
|
|
145
|
+
Disadvantages:
|
|
146
|
+
* Requires different syntax for async specs vs. sync specs
|
|
147
|
+
|
|
88
148
|
## Contributing
|
|
89
149
|
|
|
90
150
|
Install required gems at required versions:
|
data/Rakefile
CHANGED
|
@@ -4,23 +4,119 @@ Bundler.require
|
|
|
4
4
|
Bundler::GemHelper.install_tasks
|
|
5
5
|
|
|
6
6
|
require 'opal/rspec/rake_task'
|
|
7
|
-
Opal::RSpec::RakeTask.new(:
|
|
7
|
+
Opal::RSpec::RakeTask.new(:specs_untested)
|
|
8
8
|
|
|
9
|
+
desc 'Generates an RSpec requires file free of dynamic requires'
|
|
10
|
+
task :generate_requires do
|
|
11
|
+
# Do this free of any requires used to make this Rake task happen
|
|
12
|
+
sh 'ruby -Irspec/lib -Irspec-core/lib/rspec -Irspec-support/lib/rspec util/create_requires.rb'
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
task :default do
|
|
16
|
+
test_output = `rake specs_untested`
|
|
17
|
+
raise "Expected test runner to fail due to failed tests, but got return code of #{$?.exitstatus}" if $?.success?
|
|
18
|
+
count_match = /(\d+) examples, (\d+) failures, (\d+) pending/.match(test_output)
|
|
19
|
+
raise 'Expected a finished count of test failures/success/etc. but did not see it' unless count_match
|
|
20
|
+
total, failed, pending = count_match.captures
|
|
9
21
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
22
|
+
actual_failures = []
|
|
23
|
+
test_output.scan /\d+\) (.*)/ do |match|
|
|
24
|
+
actual_failures << match[0].strip
|
|
25
|
+
end
|
|
26
|
+
actual_failures.sort!
|
|
14
27
|
|
|
15
|
-
|
|
16
|
-
spec = Gem::Specification.find_by_name gem
|
|
17
|
-
lib = File.join spec.gem_dir, 'lib'
|
|
28
|
+
failure_messages = []
|
|
18
29
|
|
|
19
|
-
|
|
20
|
-
|
|
30
|
+
bad_strings = [/.*is still running, after block problem.*/,
|
|
31
|
+
/.*should not have.*/,
|
|
32
|
+
/.*Expected \d+ after hits but got \d+.*/,
|
|
33
|
+
/.*Expected \d+ around hits but got \d+.*/]
|
|
21
34
|
|
|
22
|
-
|
|
23
|
-
|
|
35
|
+
bad_strings.each do |regex|
|
|
36
|
+
test_output.scan(regex) do |match|
|
|
37
|
+
failure_messages << "Expected not to see #{regex} in output, but found match #{match}"
|
|
24
38
|
end
|
|
25
39
|
end
|
|
40
|
+
|
|
41
|
+
expected_pending_count = 22
|
|
42
|
+
|
|
43
|
+
expected_failures= ['promise should make example fail properly before async block reached',
|
|
44
|
+
'promise matcher fails properly',
|
|
45
|
+
'promise non-assertion failure in promise no args',
|
|
46
|
+
'promise non-assertion failure in promise string arg',
|
|
47
|
+
'promise non-assertion failure in promise exception arg',
|
|
48
|
+
'pending in example no promise would not fail otherwise, thus fails properly',
|
|
49
|
+
'async/sync mix fails properly if a sync test is among async tests',
|
|
50
|
+
'async/sync mix can finish running after a long delay and fail properly',
|
|
51
|
+
'be_truthy fails properly with truthy values',
|
|
52
|
+
'subject sync unnamed assertion fails properly should eq 43',
|
|
53
|
+
'subject sync unnamed fails properly during subject create',
|
|
54
|
+
'subject async assertion implicit fails properly should eq 43',
|
|
55
|
+
'subject async fails properly during creation explicit async',
|
|
56
|
+
'subject async fails properly during creation implicit usage',
|
|
57
|
+
'subject async assertion explicit async fails properly',
|
|
58
|
+
'hooks around sync fails after example should equal 42',
|
|
59
|
+
'hooks around sync fails before example',
|
|
60
|
+
'hooks around async fails after example after(:each) async fails sync match passes',
|
|
61
|
+
'hooks around async fails after example after(:each) async passes sync match passes',
|
|
62
|
+
'hooks around async fails after example after(:each) sync fails sync match passes',
|
|
63
|
+
'hooks around async fails after example after(:each) sync passes sync match passes',
|
|
64
|
+
'hooks around async fails after example before(:each) fails should not reach the example',
|
|
65
|
+
'hooks around async fails after example matches another async match',
|
|
66
|
+
'hooks around async fails after example matches async match',
|
|
67
|
+
'hooks around async fails after example matches async match fails properly',
|
|
68
|
+
'hooks around async fails after example matches sync fails properly',
|
|
69
|
+
'hooks around async fails after example matches sync match',
|
|
70
|
+
'hooks around async fails before example after(:each) async fails sync match passes',
|
|
71
|
+
'hooks around async fails before example after(:each) async passes sync match passes',
|
|
72
|
+
'hooks around async fails before example after(:each) sync fails sync match passes',
|
|
73
|
+
'hooks around async fails before example after(:each) sync passes sync match passes',
|
|
74
|
+
'hooks around async fails before example before(:each) fails should not reach the example',
|
|
75
|
+
'hooks around async fails before example matches another async match',
|
|
76
|
+
'hooks around async fails before example matches async match',
|
|
77
|
+
'hooks around async fails before example matches async match fails properly',
|
|
78
|
+
'hooks around async fails before example matches sync fails properly',
|
|
79
|
+
'hooks around async fails before example matches sync match',
|
|
80
|
+
'hooks around async succeeds after(:each) async fails sync match passes',
|
|
81
|
+
'hooks around async succeeds after(:each) sync fails sync match passes',
|
|
82
|
+
'hooks around async succeeds before(:each) fails should not reach the example',
|
|
83
|
+
'hooks around async succeeds matches async match fails properly',
|
|
84
|
+
'hooks around async succeeds matches sync fails properly',
|
|
85
|
+
'hooks before async with async subject async match fails properly',
|
|
86
|
+
'hooks before async with async subject before :each fails properly should not reach the example',
|
|
87
|
+
'hooks before async with async subject before :each succeeds, assertion fails properly should not eq 42',
|
|
88
|
+
'hooks before async with async subject before :each succeeds, subject fails properly should not reach the example',
|
|
89
|
+
'hooks before async with async subject both subject and before(:each) fail properly should not reach the example',
|
|
90
|
+
'hooks before async with sync subject async match fails properly',
|
|
91
|
+
'hooks before async with sync subject before :each fails properly should not reach the example',
|
|
92
|
+
'hooks before async with sync subject match fails properly should not eq 42',
|
|
93
|
+
'hooks before sync with sync subject context fails properly should not reach the example',
|
|
94
|
+
'hooks before sync with sync subject before :each fails properly should not reach the example',
|
|
95
|
+
'hooks before sync with sync subject match fails properly should not eq 42',
|
|
96
|
+
'hooks before sync with sync subject first before :each in chain triggers failure inner context should not reach the example',
|
|
97
|
+
'hooks after sync after fails should eq 42',
|
|
98
|
+
'hooks after sync before fails should not reach the example',
|
|
99
|
+
'hooks after sync match fails async match',
|
|
100
|
+
'hooks after sync match fails sync match should eq 43',
|
|
101
|
+
'hooks after async after(:each) fails properly',
|
|
102
|
+
'hooks after async before(:each) fails properly',
|
|
103
|
+
'hooks after async match fails properly async match',
|
|
104
|
+
'hooks after async match fails properly sync match should eq 43',
|
|
105
|
+
'exception handling should fail properly if an exception is raised',
|
|
106
|
+
'exception handling should ignore an exception after a failed assertion',
|
|
107
|
+
'legacy async fails properly after a long delay'].sort
|
|
108
|
+
if actual_failures != expected_failures
|
|
109
|
+
unexpected = actual_failures - expected_failures
|
|
110
|
+
missing = expected_failures - actual_failures
|
|
111
|
+
failure_messages << "Expected test failures do not match actual\n"
|
|
112
|
+
failure_messages << "\nUnexpected fails:\n#{unexpected.join("\n")}\n\nMissing fails:\n#{missing.join("\n")}\n\n"
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
failure_messages << "Expected #{expected_pending_count} pending examples but actual was #{pending}" unless pending == expected_pending_count.to_s
|
|
116
|
+
|
|
117
|
+
if failure_messages.empty?
|
|
118
|
+
puts 'Test successful!'
|
|
119
|
+
else
|
|
120
|
+
raise "Test failed, reasons:\n\n#{failure_messages.join("\n")}\n"
|
|
121
|
+
end
|
|
26
122
|
end
|
data/lib/opal/rspec/version.rb
CHANGED
data/lib/opal/rspec.rb
CHANGED
|
@@ -1,20 +1,43 @@
|
|
|
1
1
|
require 'opal'
|
|
2
2
|
require 'opal/rspec/version'
|
|
3
|
+
require 'opal/minitest'
|
|
3
4
|
|
|
4
5
|
# Just register our opal code path with opal build tools
|
|
5
6
|
Opal.append_path File.expand_path('../../../opal', __FILE__)
|
|
6
|
-
|
|
7
|
+
|
|
8
|
+
# Catch our git submodule included directories
|
|
9
|
+
%w{rspec rspec-core rspec-expectations rspec-mocks rspec-support}.each do |gem|
|
|
10
|
+
Opal.append_path File.expand_path("../../../#{gem}/lib", __FILE__)
|
|
11
|
+
end
|
|
7
12
|
|
|
8
13
|
Opal::Processor.dynamic_require_severity = :warning
|
|
9
14
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
Opal
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
stubs = [
|
|
16
|
+
'mutex_m', # Used with some threading operations but seems to run OK without this
|
|
17
|
+
'prettyprint',
|
|
18
|
+
'tempfile', # Doesn't exist in Opal
|
|
19
|
+
'diff/lcs',
|
|
20
|
+
'diff/lcs/block',
|
|
21
|
+
'diff/lcs/callbacks',
|
|
22
|
+
'diff/lcs/change',
|
|
23
|
+
'diff/lcs/hunk',
|
|
24
|
+
'diff/lcs/internals',
|
|
25
|
+
'test/unit/assertions',
|
|
26
|
+
|
|
27
|
+
# Opal doesn't have optparse, yet
|
|
28
|
+
'optparse',
|
|
29
|
+
|
|
30
|
+
'shellwords',
|
|
31
|
+
'socket',
|
|
32
|
+
'uri',
|
|
33
|
+
'drb/drb',
|
|
34
|
+
|
|
35
|
+
# Minitest used to be in stdlib, now is in opal-minitest GEM,
|
|
36
|
+
# but this file does not exist
|
|
37
|
+
# (referenced from minitest_assertions_adapter.rb in RSpec)
|
|
38
|
+
'minitest/unit',
|
|
39
|
+
|
|
40
|
+
'cgi/util',
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
stubs.each {|mod| Opal::Processor.stub_file mod }
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
class ::RSpec::Core::Example
|
|
2
|
+
def core_block_run
|
|
3
|
+
example_promise = Promise.value(@example_group_instance.instance_exec(self, &@example_block))
|
|
4
|
+
example_promise.then do |result|
|
|
5
|
+
result
|
|
6
|
+
end.rescue do |ex|
|
|
7
|
+
ex ||= Exception.new 'Async promise failed for unspecified reason'
|
|
8
|
+
ex = Exception.new ex unless ex.kind_of?(Exception)
|
|
9
|
+
ex
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def resolve_subject
|
|
14
|
+
if example_group_instance.respond_to? :subject and example_group_instance.subject.is_a?(Promise)
|
|
15
|
+
example_group_instance.subject.then do |resolved_subject|
|
|
16
|
+
# This is a private method, but we're using Opal
|
|
17
|
+
example_group_instance.__memoized[:subject] = resolved_subject
|
|
18
|
+
end
|
|
19
|
+
else
|
|
20
|
+
Promise.value
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def run_after_example
|
|
25
|
+
@example_group_class.hooks.run(:after, :example, self).then do
|
|
26
|
+
verify_mocks
|
|
27
|
+
assign_generated_description if RSpec.configuration.expecting_with_rspec?
|
|
28
|
+
end.rescue do |e|
|
|
29
|
+
set_exception(e, "in an `after(:example)` hook")
|
|
30
|
+
end.ensure do
|
|
31
|
+
@example_group_instance.teardown_mocks_for_rspec
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def run(example_group_instance, reporter)
|
|
36
|
+
@example_group_instance = example_group_instance
|
|
37
|
+
RSpec.current_example = self
|
|
38
|
+
|
|
39
|
+
start(reporter)
|
|
40
|
+
Pending.mark_pending!(self, pending) if pending?
|
|
41
|
+
|
|
42
|
+
Promise.value.then do
|
|
43
|
+
Promise.value.then do
|
|
44
|
+
if skipped?
|
|
45
|
+
Pending.mark_pending! self, skip
|
|
46
|
+
elsif !RSpec.configuration.dry_run?
|
|
47
|
+
with_around_example_hooks do
|
|
48
|
+
Promise.value.then do
|
|
49
|
+
run_before_example.then do
|
|
50
|
+
resolve_subject
|
|
51
|
+
end.then do
|
|
52
|
+
core_block_run
|
|
53
|
+
end.then do
|
|
54
|
+
if pending?
|
|
55
|
+
Pending.mark_fixed! self
|
|
56
|
+
|
|
57
|
+
raise Pending::PendingExampleFixedError,
|
|
58
|
+
'Expected example to fail since it is pending, but it passed.',
|
|
59
|
+
[location]
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end.rescue do |e|
|
|
63
|
+
# no-op, required metadata has already been set by the `skip`
|
|
64
|
+
# method.
|
|
65
|
+
unless e.is_a? Pending::SkipDeclaredInExample
|
|
66
|
+
set_exception(e)
|
|
67
|
+
end
|
|
68
|
+
end.ensure do
|
|
69
|
+
run_after_example
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end.rescue do |e|
|
|
74
|
+
set_exception(e)
|
|
75
|
+
end.ensure do
|
|
76
|
+
@example_group_instance.instance_variables.each do |ivar|
|
|
77
|
+
@example_group_instance.instance_variable_set(ivar, nil)
|
|
78
|
+
end
|
|
79
|
+
@example_group_instance = nil
|
|
80
|
+
end
|
|
81
|
+
end.then do
|
|
82
|
+
finish(reporter)
|
|
83
|
+
end.ensure do
|
|
84
|
+
RSpec.current_example = nil
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
require 'promise'
|
|
2
|
+
|
|
3
|
+
class ::RSpec::Core::ExampleGroup
|
|
4
|
+
# @param duration [Integer, Float] time in seconds to wait
|
|
5
|
+
def delay(duration, &block)
|
|
6
|
+
`setTimeout(block, duration * 1000)`
|
|
7
|
+
self
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def delay_with_promise(duration, &block)
|
|
11
|
+
result = Promise.new
|
|
12
|
+
delay(duration) { result.resolve }
|
|
13
|
+
result.then &block
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.process_descendants(our_examples_result, reporter)
|
|
17
|
+
descendants = ordering_strategy.order(children)
|
|
18
|
+
return Promise.value our_examples_result if descendants.empty?
|
|
19
|
+
|
|
20
|
+
results_for_descendants = []
|
|
21
|
+
# Can use true for this because we're AND'ing everything anyways
|
|
22
|
+
seed = Promise.value(true)
|
|
23
|
+
latest_descendant = descendants.inject(seed) do |previous_promise, next_descendant|
|
|
24
|
+
previous_promise.then do |result|
|
|
25
|
+
results_for_descendants << result
|
|
26
|
+
next_descendant.run reporter
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
latest_descendant.then do |result|
|
|
30
|
+
results_for_descendants << result
|
|
31
|
+
combined_result = our_examples_result && results_for_descendants.all?
|
|
32
|
+
combined_result
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Promise oriented version
|
|
37
|
+
def self.run(reporter)
|
|
38
|
+
if RSpec.world.wants_to_quit
|
|
39
|
+
RSpec.world.clear_remaining_example_groups if top_level?
|
|
40
|
+
return
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
reporter.example_group_started(self)
|
|
44
|
+
Promise.value.then do
|
|
45
|
+
run_before_context_hooks(new)
|
|
46
|
+
end.then do
|
|
47
|
+
run_examples(reporter)
|
|
48
|
+
end.then do |our_examples_result|
|
|
49
|
+
process_descendants(our_examples_result, reporter)
|
|
50
|
+
end.rescue do |ex|
|
|
51
|
+
result = if ex.is_a? Pending::SkipDeclaredInExample
|
|
52
|
+
for_filtered_examples(reporter) { |example| example.skip_with_exception(reporter, ex) }
|
|
53
|
+
else
|
|
54
|
+
RSpec.world.wants_to_quit = true if fail_fast?
|
|
55
|
+
for_filtered_examples(reporter) { |example| example.fail_with_exception(reporter, ex) }
|
|
56
|
+
end
|
|
57
|
+
result
|
|
58
|
+
end.always do
|
|
59
|
+
run_after_context_hooks(new)
|
|
60
|
+
before_context_ivars.clear
|
|
61
|
+
reporter.example_group_finished(self)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Promise oriented version
|
|
66
|
+
def self.run_examples(reporter)
|
|
67
|
+
examples = ordering_strategy.order(filtered_examples)
|
|
68
|
+
return Promise.value true if examples.empty?
|
|
69
|
+
|
|
70
|
+
example_promise = lambda do |example|
|
|
71
|
+
instance = new
|
|
72
|
+
set_ivars(instance, before_context_ivars)
|
|
73
|
+
# Always returns a promise since we modified the Example class
|
|
74
|
+
example.run(instance, reporter)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
results = []
|
|
78
|
+
# Can use true for this because we're AND'ing everything anyways
|
|
79
|
+
seed = Promise.value true
|
|
80
|
+
latest_promise = examples.inject(seed) do |previous_promise, next_example|
|
|
81
|
+
previous_promise.then do |succeeded|
|
|
82
|
+
RSpec.world.wants_to_quit = true if fail_fast? && !succeeded
|
|
83
|
+
results << succeeded
|
|
84
|
+
example_promise[next_example]
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
latest_promise.then do |succeeded|
|
|
89
|
+
RSpec.world.wants_to_quit = true if fail_fast? && !succeeded
|
|
90
|
+
results << succeeded
|
|
91
|
+
results.all?
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
class RSpec::Core::Hooks::HookCollection
|
|
2
|
+
def run
|
|
3
|
+
hooks.inject(Promise.value) do |previous_hook_promise, next_hook|
|
|
4
|
+
previous_hook_promise.then do
|
|
5
|
+
result = next_hook.run @example
|
|
6
|
+
Promise.value result
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Need to be able to work with a promise, but without modifying proxy, we can't get a promise back from our around hook
|
|
13
|
+
# therefore, modify this so that we pass a promise in
|
|
14
|
+
class RSpec::Core::Hooks::AroundHook
|
|
15
|
+
def execute_with_promise(use_promise, example, procsy)
|
|
16
|
+
Promise.value(example.instance_exec(procsy, &block)).then do
|
|
17
|
+
unless procsy.executed?
|
|
18
|
+
Pending.mark_skipped!(example, "#{hook_description} did not execute the example")
|
|
19
|
+
end
|
|
20
|
+
use_promise.resolve
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# This is an odd one because of the way around hooks subclass themselves. We mirror the original code, we just carry
|
|
26
|
+
# around a promise with the procsy
|
|
27
|
+
class RSpec::Core::Hooks::AroundHookCollection
|
|
28
|
+
def run
|
|
29
|
+
seed = [@initial_procsy, Promise.value]
|
|
30
|
+
last_procsy, last_promise = hooks.inject(seed) do |procsy_and_around_hook_promise, around_hook|
|
|
31
|
+
procsy, previous_hook_promise = procsy_and_around_hook_promise
|
|
32
|
+
new_hook_promise = Promise.new
|
|
33
|
+
new_procsy = procsy.wrap do
|
|
34
|
+
previous_hook_promise.then do
|
|
35
|
+
around_hook.execute_with_promise new_hook_promise, @example, procsy
|
|
36
|
+
end.rescue do |ex|
|
|
37
|
+
# because of the way Procsy works, we need to set this here and not in the execute_with_promise method
|
|
38
|
+
new_hook_promise.reject ex
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
[new_procsy, new_hook_promise]
|
|
42
|
+
end
|
|
43
|
+
last_procsy.call
|
|
44
|
+
last_promise
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
module Opal
|
|
2
|
+
module RSpec
|
|
3
|
+
module AsyncHelpers
|
|
4
|
+
module ClassMethods
|
|
5
|
+
def async(desc, *args, &block)
|
|
6
|
+
options = ::RSpec::Core::Metadata.build_hash_from(args)
|
|
7
|
+
options.update(:skip => ::RSpec::Core::Pending::NOT_YET_IMPLEMENTED) unless block
|
|
8
|
+
|
|
9
|
+
examples << Opal::RSpec::LegacyAsyncExample.new(self, desc, options, block)
|
|
10
|
+
examples.last
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
attr_accessor :legacy_promise
|
|
15
|
+
|
|
16
|
+
def self.included(base)
|
|
17
|
+
base.extend ClassMethods
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Use {#async} instead.
|
|
21
|
+
#
|
|
22
|
+
# @deprecated
|
|
23
|
+
def run_async(&block)
|
|
24
|
+
async(&block)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def async(&block)
|
|
28
|
+
begin
|
|
29
|
+
instance_eval &block
|
|
30
|
+
legacy_promise.resolve
|
|
31
|
+
rescue Exception => e
|
|
32
|
+
legacy_promise.reject e
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
class Opal::RSpec::LegacyAsyncExample < ::RSpec::Core::Example
|
|
40
|
+
def initialize(example_group_class, description, user_metadata, example_block=nil)
|
|
41
|
+
example = self
|
|
42
|
+
legacy_promise_ex_block = lambda do
|
|
43
|
+
self.legacy_promise = Promise.new
|
|
44
|
+
instance_exec(example, &example_block)
|
|
45
|
+
self.legacy_promise
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
super example_group_class, description, user_metadata, legacy_promise_ex_block
|
|
49
|
+
end
|
|
50
|
+
end
|