iterm2_tab_formatter 0.7.3 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -38,10 +38,21 @@ Or install it yourself as:
38
38
 
39
39
  Just add the following line to your spec_helper.rb file:
40
40
 
41
- require 'iterm2_tab_formatter/auto'
41
+ require 'iterm2_tab_formatter/autoload'
42
42
 
43
43
  And then your iTerm2 tabs will participate in testing too!
44
44
 
45
+ If you want to customize your colors:
46
+
47
+ RSpec.configure do |c|
48
+ # ugly monochrome
49
+ c.it2tf_neutral = '#7F7F7F' # gray
50
+ c.it2tf_pass = '#FFFFFF' # white
51
+ c.it2tf_fail = '#000000' # black
52
+ end
53
+
54
+ require 'iterm2_tab_formatter/autoload' # must be after configuration
55
+
45
56
  ## Contributing
46
57
 
47
58
  1. Fork it
@@ -1,7 +1,9 @@
1
1
  require 'iterm2_tab_formatter/base'
2
- require "iterm2_tab_formatter/version"
3
- require "iterm2_tab_formatter/controller"
4
- require "iterm2_tab_formatter/text_formatter"
2
+ require 'iterm2_tab_formatter/version'
3
+ require 'iterm2_tab_formatter/controller'
4
+ require 'iterm2_tab_formatter/text_formatter'
5
+ require 'iterm2_tab_formatter/color_parse'
6
+ require 'iterm2_tab_formatter/rspec_configuration'
5
7
 
6
8
  class Iterm2TabFormatter
7
9
  attr_reader :controller
@@ -9,9 +11,9 @@ class Iterm2TabFormatter
9
11
  def initialize(output)
10
12
  super
11
13
  colors = {
12
- suite_start: [128, 128, 128],
13
- spec_fail: [255, 0, 0],
14
- suite_pass: [0, 255, 0]
14
+ suite_start: color(:it2tf_neutral),
15
+ spec_fail: color(:it2tf_fail),
16
+ suite_pass: color(:it2tf_pass)
15
17
  }
16
18
  @controller = Iterm2TabFormatter::Controller.new(colors)
17
19
  end
@@ -39,13 +41,26 @@ class Iterm2TabFormatter
39
41
  pass_ratio = 1 - (1.0 * failure_count / example_count)
40
42
  controller.tab_title = "#{pass_ratio * 100}% passed"
41
43
 
42
- window_title = Iterm2TabFormatter::TextFormatter.status(failure_count)
44
+ formatter = Iterm2TabFormatter::TextFormatter.new(
45
+ duration_seconds: duration,
46
+ example_count: example_count,
47
+ failure_count: failure_count,
48
+ pending_count: pending_count,
49
+ finish_time: Time.now
50
+ )
51
+
52
+ window_title = formatter.status
43
53
  window_title << ' - '
44
- window_title << Iterm2TabFormatter::TextFormatter.window_title(example_count, failure_count, pending_count)
54
+ window_title << formatter.window_title
45
55
  window_title << ' - '
46
- window_title << Iterm2TabFormatter::TextFormatter.duration(duration)
56
+ window_title << formatter.duration
47
57
  window_title << ' - Finished at '
48
- window_title << Iterm2TabFormatter::TextFormatter.finished_at(Time.now)
58
+ window_title << formatter.finished_at
49
59
  controller.window_title = window_title
50
60
  end
61
+
62
+ private
63
+ def color(name)
64
+ Iterm2TabFormatter::color_parse(RSpec.configuration.__send__(name))
65
+ end
51
66
  end
@@ -1,5 +1,5 @@
1
1
  require 'iterm2_tab_formatter'
2
- require 'rspec/core/configuration'
2
+ require 'rspec/core'
3
3
 
4
4
  RSpec.configure do |c|
5
5
  c.add_formatter(Iterm2TabFormatter)
@@ -0,0 +1,14 @@
1
+ require 'iterm2_tab_formatter/base'
2
+
3
+ class Iterm2TabFormatter
4
+ class << self
5
+ def color_parse(code)
6
+ regex = /\A#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})\z/i
7
+ raise ArgumentError, "Invalid format: #{code}. Use #RRGGBB" unless code.match(regex)
8
+
9
+ code.scan(regex) do |red, green, blue|
10
+ return [red.to_i(16), green.to_i(16), blue.to_i(16)]
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,7 @@
1
+ require 'rspec/core'
2
+
3
+ RSpec.configure do |c|
4
+ c.add_setting(:it2tf_neutral, default: '#7F7F7F')
5
+ c.add_setting(:it2tf_pass, default: '#00FF00')
6
+ c.add_setting(:it2tf_fail, default: '#FF0000')
7
+ end
@@ -2,37 +2,52 @@ require 'iterm2_tab_formatter/base'
2
2
  require 'time'
3
3
 
4
4
  class Iterm2TabFormatter
5
- module TextFormatter
6
- class << self
7
- def window_title(example_count, failure_count, pending_count)
8
- window_title = "#{example_count} example"
9
- window_title << 's' unless example_count == 1
5
+ class TextFormatter
6
+ def initialize(options)
7
+ @options = options.dup
8
+ end
10
9
 
11
- window_title << ", #{failure_count} failure" if failure_count > 0
12
- window_title << 's' if failure_count > 1
10
+ def window_title
11
+ window_title = "#{example_count} example"
12
+ window_title << 's' unless example_count == 1
13
13
 
14
- window_title << ", #{pending_count} pending" if pending_count > 0
14
+ window_title << ", #{failure_count} failure" if failure_count > 0
15
+ window_title << 's' if failure_count > 1
15
16
 
16
- window_title
17
- end
17
+ window_title << ", #{pending_count} pending" if pending_count > 0
18
18
 
19
- def finished_at(time)
20
- time.iso8601
21
- end
19
+ window_title
20
+ end
21
+
22
+ def finished_at
23
+ finish_time.iso8601
24
+ end
22
25
 
23
- def duration(seconds)
24
- text_minutes = (seconds / 60).to_i
25
- text_seconds = (seconds % 60)
26
+ def duration
27
+ text_minutes = (duration_seconds / 60).to_i
28
+ text_seconds = (duration_seconds % 60)
26
29
 
27
- text = ''
28
- text << "#{text_minutes}m" if text_minutes > 0
29
- text << ("%.1fs" % text_seconds)
30
+ text = ''
31
+ text << "#{text_minutes}m" if text_minutes > 0
32
+ text << ("%.1fs" % text_seconds)
30
33
 
31
- text
32
- end
34
+ text
35
+ end
36
+
37
+ def status
38
+ failure_count == 0 ? 'PASS' : 'FAIL'
39
+ end
33
40
 
34
- def status(failure_count)
35
- failure_count == 0 ? 'PASS' : 'FAIL'
41
+ private
42
+ %w(
43
+ example_count
44
+ failure_count
45
+ pending_count
46
+ finish_time
47
+ duration_seconds
48
+ ).map(&:to_sym).each do |attr|
49
+ define_method(attr) do
50
+ @options.fetch(attr)
36
51
  end
37
52
  end
38
53
  end
@@ -5,5 +5,5 @@ rescue LoadError
5
5
  end
6
6
 
7
7
  class Iterm2TabFormatter
8
- VERSION = "0.7.3"
8
+ VERSION = "0.8.0"
9
9
  end
data/sandbox/slow_spec.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'rspec'
2
- require 'iterm2_tab_formatter/auto'
2
+ require 'iterm2_tab_formatter/autoload'
3
3
 
4
4
  RSpec.configure do |c|
5
5
  c.add_formatter('documentation')
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+ require 'iterm2_tab_formatter/color_parse'
3
+
4
+ describe Iterm2TabFormatter do
5
+ describe '.color_parse' do
6
+ ({
7
+ '#000000' => [0, 0, 0],
8
+ '#FF0000' => [255, 0, 0],
9
+ '#00FF00' => [0, 255, 0],
10
+ '#0000FF' => [0, 0, 255],
11
+ '#123456' => [0x12, 0x34, 0x56],
12
+ }).each do |code, values|
13
+ it "correctly parses #{code}" do
14
+ expect(Iterm2TabFormatter.color_parse(code)).to eq(values)
15
+ end
16
+ end
17
+
18
+ it 'raises on invalid code' do
19
+ expect {
20
+ Iterm2TabFormatter.color_parse('whatever')
21
+ }.to raise_error(/RRGGBB/)
22
+ end
23
+ end
24
+ end
@@ -21,6 +21,16 @@ describe Iterm2TabFormatter do
21
21
  formatter.example_failed(double)
22
22
  end
23
23
 
24
+ it 'sets the window title to the description of a spec' do
25
+ example = double("example", description: 'an example description')
26
+
27
+ controller.should_receive(:window_title=).with('an example description')
28
+ controller.should_receive(:tab_title=).with('0/100')
29
+
30
+ formatter.stub(example_count: 100)
31
+ formatter.example_started(example)
32
+ end
33
+
24
34
  describe 'at the end of the suite' do
25
35
  before do
26
36
  controller.stub(:apply_pass_color)
@@ -56,25 +66,25 @@ describe Iterm2TabFormatter do
56
66
  end
57
67
 
58
68
  it 'sets the window title through TextFormatter' do
59
- Time.should_receive(:now).and_return('time_now')
60
- Iterm2TabFormatter::TextFormatter.should_receive(:status).with(3).and_return('PASS_OR_FAIL')
61
- Iterm2TabFormatter::TextFormatter.should_receive(:duration).with(5).and_return('the_duration')
62
- Iterm2TabFormatter::TextFormatter.should_receive(:window_title).with(10, 3, 4).and_return('window_title')
63
- Iterm2TabFormatter::TextFormatter.should_receive(:finished_at).with('time_now').and_return('finish_time')
69
+ now = Time.now
70
+ Time.should_receive(:now).and_return(now)
71
+ Iterm2TabFormatter::TextFormatter.should_receive(:new).with(
72
+ duration_seconds: 5,
73
+ example_count: 10,
74
+ failure_count: 3,
75
+ pending_count: 4,
76
+ finish_time: now
77
+ ).and_return(double(
78
+ status: 'PASS_OR_FAIL',
79
+ duration: 'the_duration',
80
+ window_title: 'window_title',
81
+ finished_at: 'finish_time'
82
+ ))
83
+
64
84
  controller.should_receive(:window_title=).with('PASS_OR_FAIL - window_title - the_duration - Finished at finish_time')
65
85
 
66
86
  formatter.dump_summary(5, 10, 3, 4)
67
87
  end
68
88
  end
69
89
  end
70
-
71
- it 'sets the window title to the description of a spec' do
72
- example = double("example", description: 'an example description')
73
-
74
- controller.should_receive(:window_title=).with('an example description')
75
- controller.should_receive(:tab_title=).with('0/100')
76
-
77
- formatter.stub(example_count: 100)
78
- formatter.example_started(example)
79
- end
80
90
  end
@@ -14,7 +14,9 @@ describe Iterm2TabFormatter::TextFormatter do
14
14
  example_count, failure_count, pending_count = counts
15
15
 
16
16
  it "is correct for #{example_count}/#{failure_count}/#{pending_count}" do
17
- expect(described_class.window_title(example_count, failure_count, pending_count)).to eq(expected_message)
17
+ opts = {example_count: example_count, failure_count: failure_count, pending_count: pending_count}
18
+ formatter = described_class.new(opts)#example_count, failure_count, pending_count)
19
+ expect(formatter.window_title).to eq(expected_message)
18
20
  end
19
21
  end
20
22
  end
@@ -22,26 +24,32 @@ describe Iterm2TabFormatter::TextFormatter do
22
24
  describe '.finished_at' do
23
25
  it 'formats as ISO-8601 datetime' do
24
26
  date = DateTime.new(2013, 3, 17, 19, 25, 0, '-7')
25
- expect(described_class.finished_at(date)).to eq('2013-03-17T19:25:00-07:00')
27
+ formatter = described_class.new(finish_time: date)
28
+ expect(formatter.finished_at).to eq('2013-03-17T19:25:00-07:00')
26
29
  end
27
30
  end
28
31
 
29
32
  describe '.duration' do
30
33
  it 'correctly prints the time under a minute' do
31
- expect(described_class.duration(1.1)).to eq('1.1s')
34
+ formatter = described_class.new(duration_seconds: 1.1)
35
+ expect(formatter.duration).to eq('1.1s')
32
36
  end
37
+
33
38
  it 'correctly prints time over a minute' do
34
- expect(described_class.duration(65)).to eq('1m5.0s')
39
+ formatter = described_class.new(duration_seconds: 65)
40
+ expect(formatter.duration).to eq('1m5.0s')
35
41
  end
36
42
  end
37
43
 
38
44
  describe '.status' do
39
45
  it 'is "PASS" when there are 0 failures' do
40
- expect(described_class.status(0)).to eq('PASS')
46
+ formatter = described_class.new(failure_count: 0)
47
+ expect(formatter.status).to eq('PASS')
41
48
  end
42
49
 
43
50
  it 'is "FAIL" when there are >0 failures' do
44
- expect(described_class.status(1)).to eq('FAIL')
51
+ formatter = described_class.new(failure_count: 1)
52
+ expect(formatter.status).to eq('FAIL')
45
53
  end
46
54
  end
47
55
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iterm2_tab_formatter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.3
4
+ version: 0.8.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-19 00:00:00.000000000 Z
12
+ date: 2013-03-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: iterm2_escape
@@ -59,12 +59,15 @@ files:
59
59
  - Rakefile
60
60
  - iterm2_tab_formatter.gemspec
61
61
  - lib/iterm2_tab_formatter.rb
62
- - lib/iterm2_tab_formatter/auto.rb
62
+ - lib/iterm2_tab_formatter/autoload.rb
63
63
  - lib/iterm2_tab_formatter/base.rb
64
+ - lib/iterm2_tab_formatter/color_parse.rb
64
65
  - lib/iterm2_tab_formatter/controller.rb
66
+ - lib/iterm2_tab_formatter/rspec_configuration.rb
65
67
  - lib/iterm2_tab_formatter/text_formatter.rb
66
68
  - lib/iterm2_tab_formatter/version.rb
67
69
  - sandbox/slow_spec.rb
70
+ - spec/color_parse_spec.rb
68
71
  - spec/controller_spec.rb
69
72
  - spec/iterm2_tab_formatter_spec.rb
70
73
  - spec/spec_helper.rb
@@ -84,7 +87,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
84
87
  version: '0'
85
88
  segments:
86
89
  - 0
87
- hash: -3358931275503651157
90
+ hash: 235173726208200768
88
91
  required_rubygems_version: !ruby/object:Gem::Requirement
89
92
  none: false
90
93
  requirements:
@@ -93,7 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
93
96
  version: '0'
94
97
  segments:
95
98
  - 0
96
- hash: -3358931275503651157
99
+ hash: 235173726208200768
97
100
  requirements: []
98
101
  rubyforge_project:
99
102
  rubygems_version: 1.8.25
@@ -105,6 +108,7 @@ summary: ! 'iTerm2 Tab Formatter communicates your RSpec status through your iTe
105
108
  title: * Index of current spec and total number of specs * Window title: * Full
106
109
  spec name for the current spec'
107
110
  test_files:
111
+ - spec/color_parse_spec.rb
108
112
  - spec/controller_spec.rb
109
113
  - spec/iterm2_tab_formatter_spec.rb
110
114
  - spec/spec_helper.rb