opal-rspec 0.6.1 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: d85d8f2c3e91a3277ff22eac597554b6c7c9fad3
4
- data.tar.gz: d36a6b8ef94ebe0bb7cbfd5fa342e3beafc660e9
2
+ SHA256:
3
+ metadata.gz: 75ebf6988b2018f0174da74e1232e9b34fc5d7934d459e1bc58a70afac085af7
4
+ data.tar.gz: 302016b488d81915ae5d6bda8e249ee4d37eaa948a19f2037a6a2acd2cf49fe7
5
5
  SHA512:
6
- metadata.gz: 18e1fa24aa9c4647d30f65004e685bdbf1f80d3550749de6e9e703eda078975bce3e81f7497f19a38d470eabe77c8d3d4cb9a04276bf1603f31399e2cf2ce106
7
- data.tar.gz: c5d331955aaef00517ece7a419f30918f805382c47c5772fd95f98567c90e34495be196901111092dff019b519092ba29ce25ee3b40647398685a188c2a45ac7
6
+ metadata.gz: 4c665b19023aecb9310c533e418931c77a47a59b85f9b9d46db5494ad5a50556529b6d600307dcf8efd1623f9bae7d7d4a9ec43374c1350c78e1020a59ccc603
7
+ data.tar.gz: b0213c7196ef7fa86757420e8d4b4c665db2df1badd0de94fbf4d7ed6bfa85741584116082ebaee0e9275e145bcc9dd94146eae2f62163dd4c0f1b5f2a005cb7
data/.travis.yml CHANGED
@@ -5,62 +5,30 @@ cache:
5
5
  bundler: true
6
6
  directories:
7
7
  - node_modules
8
- - phantom20
8
+
9
+ env:
10
+ global:
11
+ - OPAL_VERSION="~> 0.10.0"
9
12
 
10
13
  matrix:
11
14
  fast_finish: true
12
15
 
13
16
  include:
14
- - rvm: 2.2.4
17
+ - rvm: 2.4.5
15
18
  env: RUN=mri_sanity_check
16
- - rvm: 2.3.4
19
+ - rvm: 2.3.8
17
20
  env: RUN=mri_sanity_check
18
- - rvm: 2.4.1
21
+ - rvm: 2.5.3
19
22
  env: RUN=mri_sanity_check
20
- - rvm: 2.4.1
23
+ - rvm: 2.5.3
21
24
  env: RUN=rake_only
22
- - rvm: 2.4.1
23
- # PHANTOMJS env variable is not used but it makes it easier to differentiate this build in Travis
24
- env: PHANTOMJS=2.1 RUN=rake_only
25
- before_install:
26
- # Attempt to work around Travis issues and Ruby 2.3 - https://github.com/vcr/vcr/issues/582
27
- - gem update --system
28
- - "export PATH=`pwd`/node_modules/phantomjs-prebuilt/bin:$PATH"
29
- - "echo $PATH"
30
- - phantomjs -v | grep 2.1 || npm install phantomjs-prebuilt # get rate limits from bitbucket download source, so get from NPM if we don't have it already
31
- - rvm: 2.4.1
25
+ - rvm: 2.5.3
32
26
  env: RUNNER=node RUN=rake_only
33
- - rvm: 2.4.1
34
- env: RUN=rake_only
35
- gemfile: gemfiles/opal_master.gemfile
36
- - rvm: 2.4.1
37
- env: RUN=rake_only
38
- gemfile: gemfiles/opal_0.10_stable.gemfile
39
-
40
- allow_failures:
41
- - gemfile: gemfiles/opal_master.gemfile
42
27
 
43
28
  before_install:
44
- # Attempt to work around Travis issues and Ruby 2.3 - https://github.com/vcr/vcr/issues/582
45
- - gem update --system
46
- - "mkdir -p phantom20"
47
- - "export PATH=`pwd`/phantom20:$PATH"
29
+ - "export PATH=`pwd`/node_modules/phantomjs-prebuilt/bin:$PATH"
48
30
  - "echo $PATH"
49
- - "pushd phantom20"
50
- - "ls phantomjs || curl -L -O https://s3.amazonaws.com/travis-phantomjs/phantomjs-2.0.0-ubuntu-12.04.tar.bz2"
51
- - "ls phantomjs || tar xjvf phantomjs-2.0.0-ubuntu-12.04.tar.bz2"
52
- - "rm -rf phantomjs-2.0.0-ubuntu-12.04.tar.bz2"
53
- - "popd"
54
-
55
- # before_script:
56
- # - "export DISPLAY=:99.0"
57
- # - "sh -e /etc/init.d/xvfb start"
58
- # - "phantomjs -v"
59
- # - "node -v"
60
- # - "firefox --version"
61
-
62
- notifications:
63
- irc: "irc.freenode.org#opal"
31
+ - phantomjs -v | grep 2.1 || npm install phantomjs-prebuilt # get rate limits from bitbucket download source, so get from NPM if we don't have it already
64
32
 
65
33
  script:
66
34
  - "bundle exec rake $RUN"
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## 0.6.2 - 2018-11-09
2
+
3
+ - Updated the homepage url
4
+
5
+ - Only test against Opal v0.10, v0.11 will be supported in opal-rspec v0.7
6
+
7
+ - Add support for multiple formats in `SPEC_OPTS` and allow both `--format` and `-f`
8
+
9
+
1
10
  ## 0.6.1 - 2017-05-25
2
11
 
3
12
  - Fixed compatibility with Rake 12
data/Gemfile CHANGED
@@ -5,15 +5,7 @@ unless Dir['rspec{,-{core,expectations,mocks,support}}'].any?
5
5
  warn 'Run: "git submodule update --init" to get RSpec sources'
6
6
  end
7
7
 
8
- case (opal_version = ENV['OPAL_VERSION'])
9
- when 'master'
10
- gem 'opal', github: 'opal/opal', branch: 'master'
11
- gem 'opal-sprockets', github: 'opal/opal-sprockets'
12
- when nil
13
- gem 'opal' # let bundler pick a version
14
- else
15
- gem 'opal', opal_version
16
- end
8
+ gem "opal", git: "https://github.com/opal/opal.git", branch: "0-10-stable"
17
9
 
18
10
  # These need to come from our local path in order for create_requires.rb to work properly
19
11
  gem 'rspec', path: 'rspec'
data/Rakefile CHANGED
@@ -76,7 +76,7 @@ task :verify_rspec_specs => [
76
76
 
77
77
  desc 'Verifies other_spec_dir task ran correctly'
78
78
  task :verify_other_specs do
79
- test_output = `rake other_specs`
79
+ test_output = `rake other_specs --trace`
80
80
  unless /1 example, 0 failures/.match(test_output)
81
81
  raise "Expected 1 passing example, but got output '#{test_output}'"
82
82
  end
@@ -85,11 +85,21 @@ end
85
85
 
86
86
  desc 'Will run a spec suite (rake opal_specs) and check for expected combination of failures and successes'
87
87
  task :verify_opal_specs do
88
- test_output = `rake opal_specs`
88
+ require 'tempfile'
89
+
90
+ test_output = Tempfile.create('opal_specs') do |f|
91
+ `bundle exec rake opal_specs --trace > #{f.path}`
92
+ File.read f.path
93
+ end
89
94
  test_output.force_encoding 'UTF-8'
90
95
  raise "Expected test runner to fail due to failed tests, but got return code of #{$?.exitstatus}" if $?.success?
91
96
  count_match = /(\d+) examples, (\d+) failures, (\d+) pending/.match(test_output)
92
- raise 'Expected a finished count of test failures/success/etc. but did not see it' unless count_match
97
+
98
+ unless count_match
99
+ raise "Expected a finished count of test failures/success/etc. but did not see it\n" +
100
+ "Expected /(\d+) examples, (\d+) failures, (\d+) pending/ to match:\n\n> #{test_output.gsub("\n", "\n> ")}"
101
+ end
102
+
93
103
  total, failed, pending = count_match.captures
94
104
 
95
105
  actual_failures = []
@@ -18,47 +18,70 @@ module Opal
18
18
  setting == :enabled
19
19
  end
20
20
 
21
- def launch_phantom(timeout_value)
22
- command_line = %Q{phantomjs #{RUNNER} "#{URL}"#{timeout_value ? " #{timeout_value}" : ''}}
23
- puts "Running #{command_line}"
24
- system command_line
25
- success = $?.success?
21
+ def launch_phantom(sprockets_env, main, &config_block)
22
+ app = Opal::Server.new(sprockets: sprockets_env) { |server|
23
+ server.main = main
24
+ server.debug = false
25
+ config_block.call(server)
26
+ }
27
+
28
+ server = Thread.new do
29
+ require 'rack'
30
+ require 'webrick'
31
+ Thread.current.abort_on_exception = true
32
+ Rack::Server.start(
33
+ :app => app,
34
+ :Port => PORT,
35
+ :AccessLog => [],
36
+ :Logger => WEBrick::Log.new("/dev/null"),
37
+ )
38
+ end
26
39
 
27
- exit 1 unless success
40
+ wait_for_server
41
+
42
+ version_output = begin
43
+ `phantomjs -v`.strip
44
+ rescue
45
+ warn 'Could not find phantomjs command on path!'
46
+ exit 1
47
+ end
48
+
49
+ if version_output.to_f < 2
50
+ warn "PhantomJS >= 2.0 is required but version #{version_output} is installed!"
51
+ exit 1
52
+ end
53
+
54
+ begin
55
+ command_line = %Q{phantomjs #{RUNNER} "#{URL}"#{@timeout ? " #{@timeout}" : ''}}
56
+ puts "Running #{command_line}"
57
+ system command_line
58
+ success = $?.success?
59
+
60
+ exit 1 unless success
61
+ ensure
62
+ server.kill
63
+ end
28
64
  end
29
65
 
30
66
  def runner
31
67
  ((via_env = ENV['RUNNER']) && via_env.to_sym) || @runner || :phantom
32
68
  end
33
69
 
34
- def get_load_asset_code(server)
35
- sprockets = server.sprockets
36
- name = server.main
37
- asset = sprockets[name]
38
- raise "Cannot find asset: #{name}" if asset.nil?
39
- Opal::Sprockets.load_asset name, sprockets
40
- end
70
+ def launch_node(sprockets, main, &config_block)
71
+ Opal.paths.each { |p| sprockets.append_path(p) } # Opal::Server does this
41
72
 
42
- # TODO: Avoid the Rack server and compile directly
43
- def launch_node(server)
44
- compiled = Tempfile.new 'opal_rspec.js'
45
- begin
46
- require 'net/http'
47
- uri = URI(URL)
48
- Net::HTTP.start uri.hostname, uri.port do |http|
49
- resp = http.get File.join('/assets', server.main)
50
- compiled.write resp.body
51
- load_asset_code = get_load_asset_code server
52
- compiled.write load_asset_code
53
- compiled.close
54
- end
55
- command_line = "node #{compiled.path} 2>&1"
56
- puts "Running #{command_line}"
57
- system command_line
73
+ config_block.call sprockets
74
+
75
+ asset = sprockets[main]
76
+ raise "Cannot find asset: #{main} in #{sprockets.inspect}" if asset.nil?
77
+
78
+ Tempfile.create [main.to_s.gsub(/\W/, '.'), '.opal_rspec.js'] do |file|
79
+ File.write file.path, asset.to_s + Opal::Sprockets.load_asset(main)
80
+
81
+ command = "node #{file.path} 2>&1"
82
+ puts "~~> Running #{command}"
83
+ system command
58
84
  exit 1 unless $?.success?
59
- ensure
60
- compiled.close unless compiled.closed?
61
- compiled.unlink
62
85
  end
63
86
  end
64
87
 
@@ -87,56 +110,27 @@ module Opal
87
110
  def initialize(name = 'opal:rspec', &block)
88
111
  desc 'Run opal specs in phantomjs/node'
89
112
  task name do
90
- require 'rack'
91
- require 'webrick'
92
-
93
113
  sprockets_env = Opal::RSpec::SprocketsEnvironment.new
94
- app = Opal::Server.new(sprockets: sprockets_env) { |s|
95
- s.main = 'opal/rspec/sprockets_runner'
96
- s.debug = false
97
-
98
- block.call s, self if block
99
- sprockets_env.spec_pattern = self.pattern if self.pattern
100
- sprockets_env.spec_exclude_pattern = self.exclude_pattern
101
- sprockets_env.spec_files = self.files
102
- sprockets_env.default_path = self.default_path if self.default_path
103
- raise 'Cannot supply both a pattern and files!' if self.files and self.pattern
114
+ main = 'opal/rspec/sprockets_runner'
115
+ current_task = self
116
+
117
+ config_block = -> *args {
118
+ args.insert(1, current_task)
119
+ block.call *args if block
120
+
121
+ sprockets_env.spec_pattern = current_task.pattern if current_task.pattern
122
+ sprockets_env.spec_exclude_pattern = current_task.exclude_pattern
123
+ sprockets_env.spec_files = current_task.files
124
+ sprockets_env.default_path = current_task.default_path if current_task.default_path
125
+ raise 'Cannot supply both a pattern and files!' if current_task.files and current_task.pattern
104
126
  sprockets_env.add_spec_paths_to_sprockets
127
+ Opal::Config.arity_check_enabled = arity_checking?
105
128
  }
106
129
 
107
- Opal::Config.arity_check_enabled = arity_checking?
108
-
109
- # TODO: Once Opal 0.9 compatibility is established, if we're running node, add in the node stdlib requires in so RSpec can use them, also add NODE_PATH to the runner command above
110
-
111
- server = Thread.new do
112
- Thread.current.abort_on_exception = true
113
- Rack::Server.start(
114
- :app => app,
115
- :Port => PORT,
116
- :AccessLog => [],
117
- :Logger => WEBrick::Log.new("/dev/null"),
118
- )
119
- end
120
-
121
- wait_for_server
122
- is_phantom = runner == :phantom
123
- if is_phantom
124
- version_output = begin
125
- `phantomjs -v`.strip
126
- rescue
127
- warn 'Could not find phantomjs command on path!'
128
- exit 1
129
- end
130
- if version_output.to_f < 2
131
- warn "PhantomJS >= 2.0 is required but version #{version_output} is installed!"
132
- exit 1
133
- end
134
- end
135
-
136
- begin
137
- is_phantom ? launch_phantom(timeout) : launch_node(app)
138
- ensure
139
- server.kill
130
+ case runner
131
+ when :node then launch_node(sprockets_env, main, &config_block)
132
+ when :phantom then launch_phantom(sprockets_env, main, &config_block)
133
+ else raise "unknown runner type: #{runner.inspect}"
140
134
  end
141
135
  end
142
136
  end
@@ -1,5 +1,5 @@
1
1
  module Opal
2
2
  module RSpec
3
- VERSION = '0.6.1'
3
+ VERSION = '0.6.2'
4
4
  end
5
5
  end
data/opal-rspec.gemspec CHANGED
@@ -6,7 +6,7 @@ Gem::Specification.new do |s|
6
6
  s.version = Opal::RSpec::VERSION
7
7
  s.author = 'Adam Beynon'
8
8
  s.email = 'adam.beynon@gmail.com'
9
- s.homepage = 'http://opalrb.org'
9
+ s.homepage = 'https://github.com/opal-rspec'
10
10
  s.summary = 'RSpec for Opal'
11
11
  s.description = 'Opal compatible rspec library'
12
12
 
@@ -17,6 +17,7 @@ Gem::Specification.new do |s|
17
17
  s.add_dependency 'opal', ['>= 0.10.0', '< 0.12']
18
18
  s.add_development_dependency 'rake'
19
19
  s.add_development_dependency 'yard'
20
+ s.add_development_dependency 'puma'
20
21
  s.add_development_dependency 'poltergeist'
21
22
  s.add_development_dependency 'capybara'
22
23
  s.add_development_dependency 'launchy'
@@ -2,11 +2,10 @@ module ::RSpec::Core::Notifications
2
2
  # SummaryNotification is a Struct
3
3
  SummaryNotification.class_eval do
4
4
  def totals_line
5
+ # string mutations
5
6
  summary = Formatters::Helpers.pluralize(example_count, "example")
6
- # 2 string mutations
7
- summary = summary + ", " + Formatters::Helpers.pluralize(failure_count, "failure")
8
- # string mutation
9
- summary = summary + ", #{pending_count} pending" if pending_count > 0
7
+ summary += ", " + Formatters::Helpers.pluralize(failure_count, "failure")
8
+ summary += ", #{pending_count} pending" if pending_count > 0
10
9
  summary
11
10
  end
12
11
 
@@ -19,10 +19,9 @@
19
19
 
20
20
  <% end
21
21
  end
22
- if (match = /--format (\S+)/.match(spec_opts))
23
- formatter = match.captures[0]
22
+ if (match = spec_opts.scan(/(?:--format (\S+)|-f ?(\S+))/).flatten.compact).any?
24
23
  %>
25
- config.formatter = "<%=formatter%>"
24
+ <%= match.inspect %>.each { |f| config.add_formatter f }
26
25
  <% end %>
27
26
  end
28
27
  <% end %>
@@ -6,14 +6,13 @@ require_relative 'temp_dir_helper'
6
6
  describe Opal::RSpec::RakeTask do
7
7
  include_context :temp_dir
8
8
  let(:captured_opal_server) { {} }
9
+ let(:runner) { :phantom }
10
+ before { ENV['RUNNER'] = runner.to_s }
9
11
 
10
- RSpec::Matchers.define :invoke_runner do |expected, timeout_value=nil|
11
- match do
12
- invoked_runners == [{
13
- type: expected,
14
- timeout_value: timeout_value
15
- }]
16
- end
12
+ RSpec::Matchers.define :invoke_runner do |expected|
13
+ expected_value = [expected]
14
+ match { expect(invoked_runners).to eq(expected_value) }
15
+ failure_message { {expected: expected_value, got: invoked_runners}.inspect }
17
16
  end
18
17
 
19
18
  RSpec::Matchers.define :enable_arity_checking do
@@ -24,7 +23,7 @@ describe Opal::RSpec::RakeTask do
24
23
 
25
24
  RSpec::Matchers.define :require_opal_specs do |matcher|
26
25
  def actual
27
- captured_opal_server[:server].sprockets.cached.get_opal_spec_requires
26
+ captured_opal_server[:sprockets].cached.get_opal_spec_requires
28
27
  end
29
28
 
30
29
  match do
@@ -42,7 +41,7 @@ describe Opal::RSpec::RakeTask do
42
41
 
43
42
  RSpec::Matchers.define :append_opal_path do |expected_path|
44
43
  def actual
45
- captured_opal_server[:server].sprockets.paths
44
+ captured_opal_server[:sprockets].paths
46
45
  end
47
46
 
48
47
  abs_expected = lambda { File.expand_path(expected_path) }
@@ -66,8 +65,8 @@ describe Opal::RSpec::RakeTask do
66
65
  task.clear
67
66
  task.reenable
68
67
  end
69
- allow(Rack::Server).to receive(:start) do |config| # don't want to actually run specs
70
- captured_opal_server[:server] = config[:app]
68
+ allow(Rack::Server).to receive(:start) do |config|
69
+ # don't want to actually run specs
71
70
  end
72
71
  thread_double = instance_double Thread
73
72
  allow(thread_double).to receive :kill
@@ -75,23 +74,26 @@ describe Opal::RSpec::RakeTask do
75
74
  block.call
76
75
  thread_double
77
76
  end
78
- allow(task_definition).to receive(:launch_phantom) do |timeout_value|
79
- invoked_runners << {
80
- type: :phantom,
81
- timeout_value: timeout_value
82
- }
77
+
78
+ dummy_launch = -> (runner_name, sprockets, main, &config_block) {
79
+ config_block.call
80
+ captured_opal_server[:sprockets] = sprockets
81
+ captured_opal_server[:main] = main
82
+ invoked_runners << runner_name
83
83
  nil
84
+ }
85
+
86
+ allow(task_definition).to receive(:launch_phantom) do |*args, &block|
87
+ dummy_launch.call(:phantom, *args, &block)
84
88
  end
85
- allow(task_definition).to receive(:launch_node) do
86
- invoked_runners << {
87
- type: :node,
88
- timeout_value: nil
89
- }
90
- nil
89
+
90
+ allow(task_definition).to receive(:launch_node) do |*args, &block|
91
+ dummy_launch.call(:node, *args, &block)
91
92
  end
92
- expect(task_definition).to receive(:wait_for_server) if expected_to_run
93
93
  end
94
94
 
95
+ after { raise "did not run" if invoked_runners.empty? if expected_to_run }
96
+
95
97
  let(:invoked_runners) { [] }
96
98
  let(:task_name) { :foobar }
97
99
  let(:expected_to_run) { true }
@@ -112,6 +114,7 @@ describe Opal::RSpec::RakeTask do
112
114
  end
113
115
 
114
116
  around do |example|
117
+ expect(runner).to eq(:phantom)
115
118
  # in case we're running on travis, etc.
116
119
  current_env_runner = ENV['RUNNER']
117
120
  ENV['RUNNER'] = nil
@@ -195,9 +198,8 @@ describe Opal::RSpec::RakeTask do
195
198
  context 'ENV' do
196
199
  TEST_RUNNERS.each do |runner|
197
200
  context runner do
198
- before do
199
- ENV['RUNNER'] = runner.to_s
200
- end
201
+ let(:runner) { runner }
202
+ before { ENV['RUNNER'] = runner.to_s }
201
203
 
202
204
  include_context :explicit, runner
203
205
  end
@@ -310,6 +312,9 @@ describe Opal::RSpec::RakeTask do
310
312
  it { is_expected.to have_attributes pattern: nil }
311
313
  it { is_expected.to append_opal_path 'spec' }
312
314
  it { is_expected.to require_opal_specs eq ['something/dummy_spec'] }
313
- it { is_expected.to invoke_runner :phantom, timeout_value=40000 }
315
+ it { is_expected.to invoke_runner :phantom }
316
+ it 'has timeout set' do
317
+ expect(subject.timeout).to eq(40000)
318
+ end
314
319
  end
315
320
  end
@@ -1,4 +1,4 @@
1
- require 'opal/progress_json_formatter' # verify case uses this
1
+ require 'opal/separator_formatter' # verify case uses this
2
2
 
3
3
  RSpec.configure do |c|
4
4
  #c.full_description = 'uses the default color for the shared example backtrace line'
@@ -1,4 +1,4 @@
1
- require 'opal/progress_json_formatter' # verify case uses this
1
+ require 'opal/separator_formatter' # verify case uses this
2
2
 
3
3
  # Only doing this because this spec causes the runner itself to break
4
4
  CAUSES_SPECS_TO_CRASH = [
@@ -3,7 +3,7 @@ require 'rspec/support/spec'
3
3
  require 'rspec/support/ruby_features'
4
4
  require 'opal-parser'
5
5
 
6
- require 'opal/progress_json_formatter' # verify case uses this
6
+ require 'opal/separator_formatter' # verify case uses this
7
7
  # Only doing this because any_instance causes the runner itself to break
8
8
  CAUSES_SPECS_TO_CRASH = [
9
9
  /.*allow_any_instance.*/,
@@ -146,7 +146,7 @@ module Opal
146
146
  missing << path unless matching
147
147
  temp_filename
148
148
  end
149
- raise "Expected to #{description} in #{fix_these_files} but we didn't find any expressions in #{missing}. Check if RSpec has been upgraded" if missing.any?
149
+ raise "~~> Expected to #{description} in #{fix_these_files} but we didn't find any expressions in #{missing}. Check if RSpec has been upgraded" if missing.any?
150
150
  files_we_left_alone = starting_file_set - fix_these_files
151
151
  files_we_left_alone + fixed_temp_files
152
152
  end
@@ -162,7 +162,7 @@ module Opal
162
162
  .source
163
163
  .gsub('/', '\/')
164
164
  replace = "/#{escaped}/m"
165
- puts "Replacing multiline regex with #{replace} in new temp file #{temp_filename}"
165
+ puts "~~> Replacing multiline regex with #{replace} in new temp file #{temp_filename}"
166
166
  replace
167
167
  end
168
168
  end
@@ -204,46 +204,42 @@ module Opal
204
204
  missing << path unless found_blackslash
205
205
  temp_filename
206
206
  end
207
- raise "Expected to fix blackslash continuation in #{fix_these_files} but we didn't find any backslashes in #{missing}. Check if RSpec has been upgraded (maybe those blackslashes are gone??)" if missing.any?
207
+ raise "~~> Expected to fix blackslash continuation in #{fix_these_files} but we didn't find any backslashes in #{missing}. Check if RSpec has been upgraded (maybe those blackslashes are gone??)" if missing.any?
208
208
  files_we_left_alone = files - fix_these_files
209
209
  files_we_left_alone + fixed_temp_files
210
210
  end
211
211
 
212
212
  def execute_specs(name)
213
- command_line = "SPEC_OPTS=\"--format Opal::RSpec::ProgressJsonFormatter\" rake #{name}"
214
- puts "Running #{command_line}"
215
- pinger = Thread.new {
216
- while true
217
- sleep 60
218
- puts 'still alive' # travis/keep alive
219
- end
220
- }
221
- example_info = []
222
- state = :progress
223
- IO.popen(command_line).each do |line|
224
- line.force_encoding 'UTF-8'
225
- case state
226
- when :progress
227
- puts line
228
- when :example_info
229
- example_info << line
230
- end
231
- state = case line
232
- when /BEGIN JSON/
233
- :example_info
234
- else
235
- state
236
- end
237
- end.close
213
+ require 'tempfile'
214
+ file = Tempfile.new([name.to_s, '.json'])
215
+ command = "SPEC_OPTS=\"--no-color --format progress --format Opal::RSpec::SeparatorFormatter --format json\" rake #{name} --trace > #{file.path}"
216
+ puts
217
+ puts "~~> Running #{command}"
218
+
219
+ # travis/keep alive
220
+ pinger = Thread.new { loop { sleep 60; print '.' } }
221
+ success = system(command)
238
222
  pinger.exit
223
+
224
+ file.rewind
225
+ ouput = file.read
226
+ ouput.force_encoding 'UTF-8'
227
+ progress, example_info = ouput.split('~~~SEPARATOR~~~', 2)
228
+
239
229
  {
240
- example_info: example_info,
241
- success: $?.success?
230
+ example_info: [example_info],
231
+ success: success
242
232
  }
243
233
  end
244
234
 
245
235
  def parse_results(results)
246
236
  JSON.parse results[:example_info].join("\n")
237
+ rescue
238
+ warn "JSON PARSING FAILED"
239
+ warn "-------------------"
240
+ warn results[:example_info].join("\n")
241
+ warn "-------------------"
242
+ raise
247
243
  end
248
244
 
249
245
  def rake_tasks_for(name)
@@ -254,7 +250,8 @@ module Opal
254
250
  task.files = sub_in_files
255
251
  task.default_path = default_path
256
252
  append_additional_load_paths server
257
- server.debug = ENV['OPAL_DEBUG']
253
+
254
+ server.debug = ENV['OPAL_DEBUG'] if server.respond_to?(:debug=)
258
255
  end
259
256
 
260
257
  desc "Verifies that #{name} work correctly"
@@ -312,23 +309,23 @@ module Opal
312
309
  passing = total - failed - pending
313
310
  percentage = ((passing.to_f / total) * 100).round(1)
314
311
  if reasons.empty?
315
- puts 'Test successful!'
316
- puts "#{total} total specs, #{failed} expected failures, #{pending} expected pending"
317
- puts "Passing percentage: #{percentage}%"
312
+ puts '~~> Test successful!'
313
+ puts "~~> #{total} total specs, #{failed} expected failures, #{pending} expected pending"
314
+ puts "~~> Passing percentage: #{percentage}%"
318
315
  else
319
- puts "Test FAILED for the following reasons:\n"
316
+ puts "~~> Test FAILED for the following reasons:\n"
320
317
  puts reasons.join "\n\n"
321
318
  if remaining_failures.any?
322
319
  puts
323
- puts "Unexpected failures:\n\n#{remaining_failures.join("\n")}\n"
320
+ puts "~~> Unexpected failures:\n\n#{remaining_failures.join("\n")}\n"
324
321
  end
325
- puts '-----------Summary-----------'
326
- puts "Total passed count: #{passing}"
327
- puts "Pending count #{pending}"
328
- puts "Total 'failure' count: #{actual_failures.length}"
329
- puts "Passing percentage: #{percentage}%"
330
- puts "Unexpected failure count: #{remaining_failures.length}"
331
- raise 'Test failed!'
322
+ puts '~~> -----------Summary-----------'
323
+ puts "~~> Total passed count: #{passing}"
324
+ puts "~~> Pending count #{pending}"
325
+ puts "~~> Total 'failure' count: #{actual_failures.length}"
326
+ puts "~~> Passing percentage: #{percentage}%"
327
+ puts "~~> Unexpected failure count: #{remaining_failures.length}"
328
+ raise '~~> Test failed!'
332
329
  end
333
330
  end
334
331
  end
@@ -0,0 +1,14 @@
1
+ module Opal::RSpec
2
+ # a good compromise between not mucking with the code we're testing but making it more machine readable
3
+ class SeparatorFormatter < ::RSpec::Core::Formatters::BaseFormatter
4
+ ::RSpec::Core::Formatters.register self, :close
5
+ SEP = "~~~SEPARATOR~~~"
6
+
7
+ def close(_notification)
8
+ output.puts # our dots will not have closed out with a CR
9
+ output.puts SEP
10
+ output.sync = true
11
+ output.puts # Need a CR for popen to know we're done
12
+ end
13
+ end
14
+ end
@@ -1,4 +1,4 @@
1
- require 'opal/progress_json_formatter' # verify case uses this
1
+ require 'opal/separator_formatter' # verify case uses this
2
2
 
3
3
  RSpec::configure do |config|
4
4
  #config.full_description = '.*yield.*has a description'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opal-rspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Beynon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-25 00:00:00.000000000 Z
11
+ date: 2018-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opal
@@ -58,6 +58,20 @@ dependencies:
58
58
  - - ">="
59
59
  - !ruby/object:Gem::Version
60
60
  version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: puma
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
61
75
  - !ruby/object:Gem::Dependency
62
76
  name: poltergeist
63
77
  requirement: !ruby/object:Gem::Requirement
@@ -126,7 +140,6 @@ files:
126
140
  - ".rspec"
127
141
  - ".travis.yml"
128
142
  - ".yardopts"
129
- - Appraisals
130
143
  - CHANGELOG.md
131
144
  - Gemfile
132
145
  - README.md
@@ -137,8 +150,6 @@ files:
137
150
  - example/Rakefile
138
151
  - example/opal/user.rb
139
152
  - example/spec/user_spec.rb
140
- - gemfiles/opal_0.10_stable.gemfile
141
- - gemfiles/opal_master.gemfile
142
153
  - lib/opal-rspec.rb
143
154
  - lib/opal/rspec.rb
144
155
  - lib/opal/rspec/cached_environment.rb
@@ -764,7 +775,7 @@ files:
764
775
  - spec/rspec/opal_rspec_spec_loader.rb
765
776
  - spec/rspec/shared/opal/fixes/deprecation_helpers.rb
766
777
  - spec/rspec/shared/opal/fixes/rspec_helpers.rb
767
- - spec/rspec/shared/opal/progress_json_formatter.rb
778
+ - spec/rspec/shared/opal/separator_formatter.rb
768
779
  - spec/rspec/support/config.rb
769
780
  - spec/rspec/support/config.ru
770
781
  - spec/rspec/support/filter/bugs/recursive_const_methods.txt
@@ -781,7 +792,7 @@ files:
781
792
  - spec/rspec/support/support_spec_loader.rb
782
793
  - util/create_requires.rb
783
794
  - vendor/spec_runner.js
784
- homepage: http://opalrb.org
795
+ homepage: https://github.com/opal-rspec
785
796
  licenses: []
786
797
  metadata: {}
787
798
  post_install_message:
@@ -800,7 +811,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
800
811
  version: '0'
801
812
  requirements: []
802
813
  rubyforge_project:
803
- rubygems_version: 2.6.8
814
+ rubygems_version: 2.7.7
804
815
  signing_key:
805
816
  specification_version: 4
806
817
  summary: RSpec for Opal
data/Appraisals DELETED
@@ -1,8 +0,0 @@
1
- appraise 'opal-0.10-stable' do
2
- gem 'opal', git: 'https://github.com/opal/opal.git', branch: '0-10-stable'
3
- end
4
-
5
- appraise 'opal-master' do
6
- gem 'opal', git: 'https://github.com/opal/opal.git'
7
- gem 'opal-sprockets', github: 'opal/opal-sprockets'
8
- end
@@ -1,12 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "opal", git: "https://github.com/opal/opal.git", branch: "0-10-stable"
6
- gem "rspec", path: "../rspec"
7
- gem "rspec-support", path: "../rspec-support"
8
- gem "rspec-core", path: "../rspec-core"
9
- gem "rspec-mocks", path: "../rspec-mocks"
10
- gem "rspec-expectations", path: "../rspec-expectations"
11
-
12
- gemspec path: "../"
@@ -1,13 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "opal", git: "https://github.com/opal/opal.git"
6
- gem "rspec", path: "../rspec"
7
- gem "rspec-support", path: "../rspec-support"
8
- gem "rspec-core", path: "../rspec-core"
9
- gem "rspec-mocks", path: "../rspec-mocks"
10
- gem "rspec-expectations", path: "../rspec-expectations"
11
- gem "opal-sprockets", github: "opal/opal-sprockets"
12
-
13
- gemspec path: "../"
@@ -1,29 +0,0 @@
1
- module Opal::RSpec
2
- # a good compromise between not mucking with the code we're testing but making it more machine readable
3
- class ProgressJsonFormatter < ::RSpec::Core::Formatters::JsonFormatter
4
- ::RSpec::Core::Formatters.register self, :message, :dump_summary, :dump_profile, :example_passed, :example_pending, :example_failed, :close, :stop
5
-
6
- def example_passed(_notification)
7
- output.print ::RSpec::Core::Formatters::ConsoleCodes.wrap('.', :success)
8
- end
9
-
10
- def example_pending(_notification)
11
- output.print ::RSpec::Core::Formatters::ConsoleCodes.wrap('*', :pending)
12
- end
13
-
14
- def example_failed(_notification)
15
- output.print ::RSpec::Core::Formatters::ConsoleCodes.wrap('F', :failure)
16
- end
17
-
18
- def start_dump(_notification)
19
- output.puts
20
- end
21
-
22
- def close(_notification)
23
- output.puts # our dots will not have closed out with a CR
24
- output.puts 'BEGIN JSON'
25
- super
26
- output.puts # Need a CR for popen to know we're done
27
- end
28
- end
29
- end