cucumber 0.10.0 → 0.10.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. data/.gitignore +1 -0
  2. data/Gemfile +1 -1
  3. data/History.txt +20 -0
  4. data/README.rdoc +1 -1
  5. data/bin/cucumber +1 -1
  6. data/cucumber.gemspec +19 -12
  7. data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +1 -1
  8. data/examples/i18n/he/features/step_definitons/calculator_steps.rb +1 -1
  9. data/examples/i18n/ro/features/adunare.feature +12 -0
  10. data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +4 -7
  11. data/examples/i18n/tr/features/step_definitons/hesap_makinesi_adimlari.rb +3 -3
  12. data/features/background.feature +10 -10
  13. data/features/bootstrap.feature +13 -0
  14. data/features/execute_with_tag_filter.feature +2 -2
  15. data/features/hooks.feature +2 -2
  16. data/features/iso-8859-1.feature +6 -0
  17. data/features/stats_formatters.feature +2 -2
  18. data/features/step_definitions/cucumber_steps.rb +8 -2
  19. data/features/step_definitions/iso-8859-1_steps.rb +24 -0
  20. data/features/support/env.rb +2 -2
  21. data/features/tagged_hooks.feature +5 -5
  22. data/features/transforms.feature +63 -0
  23. data/gem_tasks/examples.rake +1 -1
  24. data/legacy_features/diffing.feature +1 -1
  25. data/legacy_features/html_formatter.feature +1 -1
  26. data/legacy_features/html_formatter/a.html +68 -116
  27. data/legacy_features/language_help.feature +44 -45
  28. data/legacy_features/wire_protocol.feature +2 -2
  29. data/legacy_features/wire_protocol_erb.feature +57 -0
  30. data/lib/cucumber/ast/table.rb +2 -2
  31. data/lib/cucumber/ast/tree_walker.rb +2 -2
  32. data/lib/cucumber/cli/configuration.rb +1 -1
  33. data/lib/cucumber/cli/options.rb +4 -0
  34. data/lib/cucumber/feature_file.rb +45 -6
  35. data/lib/cucumber/formatter/console.rb +1 -1
  36. data/lib/cucumber/formatter/cucumber.css +21 -17
  37. data/lib/cucumber/formatter/cucumber.sass +170 -194
  38. data/lib/cucumber/formatter/gherkin_formatter_adapter.rb +2 -2
  39. data/lib/cucumber/formatter/html.rb +8 -5
  40. data/lib/cucumber/platform.rb +3 -3
  41. data/lib/cucumber/rake/task.rb +22 -15
  42. data/lib/cucumber/rb_support/rb_transform.rb +17 -0
  43. data/lib/cucumber/rb_support/rb_world.rb +2 -2
  44. data/lib/cucumber/runtime/for_programming_languages.rb +3 -1
  45. data/lib/cucumber/runtime/user_interface.rb +2 -2
  46. data/lib/cucumber/wire_support/configuration.rb +2 -1
  47. data/spec/cucumber/ast/table_spec.rb +10 -0
  48. data/spec/cucumber/cli/options_spec.rb +7 -0
  49. data/spec/cucumber/formatter/html_spec.rb +1 -3
  50. data/spec/cucumber/rb_support/rb_transform_spec.rb +21 -0
  51. metadata +104 -98
  52. data/examples/i18n/ro/features/suma.feature +0 -11
@@ -11,7 +11,7 @@ Feature: Wire Protocol
11
11
  #
12
12
  # Communication is over a TCP socket, which Cucumber connects to when it finds
13
13
  # a definition file with the .wire extension in the step_definitions folder
14
- # (or other load path).
14
+ # (or other load path). Note that these files are rendered with ERB when loaded.
15
15
  #
16
16
  # Cucumber sends the following request messages out over the wire:
17
17
  #
@@ -31,7 +31,7 @@ Feature: Wire Protocol
31
31
  # Some messages support more responses - see below for details.
32
32
  #
33
33
  # A WirePacket flowing in either direction is formatted as a JSON-encoded
34
- # string, with a newline character signalling the end of a packet. See the
34
+ # string, with a newline character signaling the end of a packet. See the
35
35
  # specs for Cucumber::WireSupport::WirePacket for more details.
36
36
  #
37
37
  # These messages are described in detail below, with examples.
@@ -0,0 +1,57 @@
1
+ @wire
2
+ Feature: Wire Protocol with ERB
3
+ In order to be allow Cucumber to touch my app in intimate places
4
+ As a developer on server with multiple users
5
+ I want to be able to configure which port my wire server runs on
6
+ So that I can avoid port conflicts
7
+
8
+ Background:
9
+ Given a standard Cucumber project directory structure
10
+ And a file named "features/wired.feature" with:
11
+ """
12
+ Feature: High strung
13
+ Scenario: Wired
14
+ Given we're all wired
15
+
16
+ """
17
+
18
+ Scenario: ERB is used in the wire file which references an environment variable that is not set
19
+ Given a file named "features/step_definitions/server.wire" with:
20
+ """
21
+ host: localhost
22
+ port: <%= ENV['PORT'] || 12345 %>
23
+ """
24
+ And there is a wire server running on port 12345 which understands the following protocol:
25
+ | request | response |
26
+ | ["step_matches",{"name_to_match":"we're all wired"}] | ["success",[]] |
27
+ When I run cucumber --dry-run --no-snippets -f progress
28
+ And it should pass with
29
+ """
30
+ U
31
+
32
+ 1 scenario (1 undefined)
33
+ 1 step (1 undefined)
34
+
35
+ """
36
+
37
+
38
+ Scenario: ERB is used in the wire file which references an environment variable
39
+ Given I have environment variable PORT set to "16816"
40
+ And a file named "features/step_definitions/server.wire" with:
41
+ """
42
+ host: localhost
43
+ port: <%= ENV['PORT'] || 12345 %>
44
+ """
45
+ And there is a wire server running on port 16816 which understands the following protocol:
46
+ | request | response |
47
+ | ["step_matches",{"name_to_match":"we're all wired"}] | ["success",[]] |
48
+ When I run cucumber --dry-run --no-snippets -f progress
49
+ And it should pass with
50
+ """
51
+ U
52
+
53
+ 1 scenario (1 undefined)
54
+ 1 step (1 undefined)
55
+
56
+ """
57
+
@@ -168,9 +168,8 @@ module Cucumber
168
168
  @col_names ||= cell_matrix[0].map { |cell| cell.value }
169
169
  end
170
170
 
171
- # Same as #raw, but skips the first (header) row
172
171
  def rows
173
- raw[1..-1]
172
+ hashes.map(&:values)
174
173
  end
175
174
 
176
175
  def each_cells_row(&proc) #:nodoc:
@@ -278,6 +277,7 @@ module Cucumber
278
277
  def map_column!(column_name, strict=true, &conversion_proc)
279
278
  verify_column(column_name.to_s) if strict
280
279
  @conversion_procs[column_name.to_s] = conversion_proc
280
+ self
281
281
  end
282
282
 
283
283
  # Compares +other_table+ to self. If +other_table+ contains columns
@@ -149,8 +149,8 @@ module Cucumber
149
149
 
150
150
  # Embed +file+ of +mime_type+ in the formatter. This method can be called from within StepDefinitions.
151
151
  # For most formatters this is a no-op.
152
- def embed(file, mime_type)
153
- broadcast(file, mime_type)
152
+ def embed(file, mime_type, label)
153
+ broadcast(file, mime_type, label)
154
154
  end
155
155
 
156
156
  private
@@ -106,7 +106,7 @@ module Cucumber
106
106
  path = path.gsub(/\\/, '/') # In case we're on windows. Globs don't work with backslashes.
107
107
  path = path.chomp('/')
108
108
  if File.directory?(path)
109
- Dir["#{path}/**/*.feature"]
109
+ Dir["#{path}/**/*.feature"].sort
110
110
  elsif path[0..0] == '@' and # @listfile.txt
111
111
  File.file?(path[1..-1]) # listfile.txt is a file
112
112
  IO.read(path[1..-1]).split
@@ -240,6 +240,9 @@ module Cucumber
240
240
  opts.on("-g", "--guess", "Guess best match for Ambiguous steps.") do
241
241
  @options[:guess] = true
242
242
  end
243
+ opts.on("-l", "--lines LINES", "Run given line numbers. Equivalent to FILE:LINE syntax") do |lines|
244
+ @options[:lines] = lines
245
+ end
243
246
  opts.on("-x", "--expand", "Expand Scenario Outline Tables in output.") do
244
247
  @options[:expand] = true
245
248
  end
@@ -265,6 +268,7 @@ module Cucumber
265
268
  @options[:snippets] = true if @options[:snippets].nil?
266
269
  @options[:source] = true if @options[:source].nil?
267
270
  end
271
+ @args.map! { |a| "#{a}:#{@options[:lines]}" } if @options[:lines]
268
272
 
269
273
  extract_environment_variables
270
274
  @options[:paths] = @args.dup #whatver is left over
@@ -6,9 +6,11 @@ require 'gherkin/parser/parser'
6
6
  module Cucumber
7
7
  class FeatureFile
8
8
  FILE_COLON_LINE_PATTERN = /^([\w\W]*?):([\d:]+)$/ #:nodoc:
9
- LANGUAGE_PATTERN = /language:\s*(.*)/ #:nodoc:
9
+ DEFAULT_ENCODING = "UTF-8" #:nodoc:
10
+ COMMENT_OR_EMPTY_LINE_PATTERN = /^\s*#|^\s*$/ #:nodoc:
11
+ ENCODING_PATTERN = /^\s*#\s*encoding\s*:\s*([^\s]+)/ #:nodoc:
10
12
 
11
- # The +uri+ argument is the location of the source. It can be a path
13
+ # The +uri+ argument is the location of the source. It can be a path
12
14
  # or a path:line1:line2 etc. If +source+ is passed, +uri+ is ignored.
13
15
  def initialize(uri, source=nil)
14
16
  @source = source
@@ -19,7 +21,7 @@ module Cucumber
19
21
  @path = uri
20
22
  end
21
23
  end
22
-
24
+
23
25
  # Parses a file and returns a Cucumber::Ast
24
26
  # If +configuration_filters+ contains any filters, the result will
25
27
  # be filtered.
@@ -50,13 +52,50 @@ module Cucumber
50
52
  open(@path).read
51
53
  else
52
54
  begin
53
- File.open(@path, Cucumber.file_mode('r')).read
55
+ source = File.open(@path, Cucumber.file_mode('r', DEFAULT_ENCODING)).read
56
+ encoding = encoding_for(source)
57
+ if(DEFAULT_ENCODING.downcase != encoding.downcase)
58
+ # Read the file again - it's explicitly declaring a different encoding
59
+ source = File.open(@path, Cucumber.file_mode('r', encoding)).read
60
+ source = to_default_encoding(source, encoding)
61
+ end
62
+ source
54
63
  rescue Errno::EACCES => e
55
- p = File.expand_path(@path)
56
- e.message << "\nCouldn't open #{p}"
64
+ e.message << "\nCouldn't open #{File.expand_path(@path)}"
65
+ raise e
66
+ rescue Errno::ENOENT => e
67
+ # special-case opening features, because this could be a new user:
68
+ if(@path == 'features')
69
+ STDERR.puts("You don't have a 'features' directory. Please create one to get started.",
70
+ "See http://cukes.info/ for more information.")
71
+ exit 1
72
+ end
57
73
  raise e
58
74
  end
59
75
  end
60
76
  end
77
+
78
+ private
79
+
80
+ def encoding_for(source)
81
+ encoding = DEFAULT_ENCODING
82
+ source.each_line do |line|
83
+ break unless COMMENT_OR_EMPTY_LINE_PATTERN =~ line
84
+ if ENCODING_PATTERN =~ line
85
+ encoding = $1
86
+ break
87
+ end
88
+ end
89
+ encoding
90
+ end
91
+
92
+ def to_default_encoding(string, encoding)
93
+ if string.respond_to?(:encode)
94
+ string.encode(DEFAULT_ENCODING)
95
+ else
96
+ require 'iconv'
97
+ Iconv.new(DEFAULT_ENCODING, encoding).iconv(string)
98
+ end
99
+ end
61
100
  end
62
101
  end
@@ -125,7 +125,7 @@ module Cucumber
125
125
  end
126
126
  end
127
127
 
128
- def embed(file, mime_type)
128
+ def embed(file, mime_type, label)
129
129
  # no-op
130
130
  end
131
131
 
@@ -2,7 +2,7 @@
2
2
  /* Regenerate with rake sass */
3
3
  body {
4
4
  font-size: 0px;
5
- color: #FFFFFF;
5
+ color: white;
6
6
  margin: 0px;
7
7
  padding: 0px;
8
8
  }
@@ -10,11 +10,11 @@ body {
10
10
  .cucumber, td, th {
11
11
  font: normal 11px "Lucida Grande", Helvetica, sans-serif;
12
12
  background: white;
13
- color: #000000;
13
+ color: black;
14
14
  }
15
15
  .cucumber #cucumber-header, td #cucumber-header, th #cucumber-header {
16
- background: #65C400;
17
- color: #FFFFFF;
16
+ background: #65c400;
17
+ color: white;
18
18
  height: 6em;
19
19
  }
20
20
  .cucumber #cucumber-header #expand-collapse p, td #cucumber-header #expand-collapse p, th #cucumber-header #expand-collapse p {
@@ -25,8 +25,8 @@ body {
25
25
  font-size: 11px;
26
26
  padding: 3px;
27
27
  margin: 0;
28
- background: #65C400;
29
- color: #FFFFFF;
28
+ background: #65c400;
29
+ color: white;
30
30
  font-weight: bold;
31
31
  }
32
32
  .cucumber h1, td h1, th h1 {
@@ -62,19 +62,23 @@ body {
62
62
  .cucumber .step_file a, td .step_file a, th .step_file a {
63
63
  color: #999999;
64
64
  }
65
+ .cucumber .scenario_file, td .scenario_file, th .scenario_file {
66
+ float: right;
67
+ color: #999999;
68
+ }
65
69
  .cucumber .tag, td .tag, th .tag {
66
70
  font-weight: bold;
67
- color: #246AC1;
71
+ color: #246ac1;
68
72
  }
69
73
  .cucumber .backtrace, td .backtrace, th .backtrace {
70
74
  margin-top: 0;
71
75
  margin-bottom: 0;
72
76
  margin-left: 1em;
73
- color: #000000;
77
+ color: black;
74
78
  }
75
79
  .cucumber a, td a, th a {
76
80
  text-decoration: none;
77
- color: #BE5C00;
81
+ color: #be5c00;
78
82
  }
79
83
  .cucumber a:hover, td a:hover, th a:hover {
80
84
  text-decoration: underline;
@@ -84,7 +88,7 @@ body {
84
88
  }
85
89
  .cucumber a div.examples, td a div.examples, th a div.examples {
86
90
  margin: 5px 0px 5px 15px;
87
- color: #000000;
91
+ color: black;
88
92
  }
89
93
  .cucumber .outline table, td .outline table, th .outline table {
90
94
  margin: 0px 0px 5px 10px;
@@ -211,7 +215,7 @@ body {
211
215
  padding: 0.1em 0 0.2em 0;
212
216
  }
213
217
  .ruby .keyword {
214
- color: #FF6600;
218
+ color: #ff6600;
215
219
  }
216
220
  .ruby .constant {
217
221
  color: #339999;
@@ -229,13 +233,13 @@ body {
229
233
  color: white;
230
234
  }
231
235
  .ruby .string {
232
- color: #66FF00;
236
+ color: #66ff00;
233
237
  }
234
238
  .ruby .ident {
235
239
  color: white;
236
240
  }
237
241
  .ruby .method {
238
- color: #FFCC00;
242
+ color: #ffcc00;
239
243
  }
240
244
  .ruby .number {
241
245
  color: white;
@@ -244,13 +248,13 @@ body {
244
248
  color: white;
245
249
  }
246
250
  .ruby .comment {
247
- color: #9933CC;
251
+ color: #9933cc;
248
252
  }
249
253
  .ruby .symbol {
250
254
  color: white;
251
255
  }
252
256
  .ruby .regex {
253
- color: #44B4CC;
257
+ color: #44b4cc;
254
258
  }
255
259
  .ruby .punct {
256
260
  color: white;
@@ -270,6 +274,6 @@ body {
270
274
  .ruby .linenum {
271
275
  width: 75px;
272
276
  padding: 0.1em 1em 0.2em 0;
273
- color: #000000;
274
- background: #FFFBD3;
277
+ color: black;
278
+ background: #fffbd3;
275
279
  }
@@ -1,271 +1,247 @@
1
1
  /* cucumber.css is generated from cucumber.sass */
2
2
  /* Regenerate with rake sass */
3
3
 
4
- !step_left = 5px "solid"
5
- !step_bottom = 1px "solid"
4
+ $step_left: 5px solid
5
+ $step_bottom: 1px solid
6
6
 
7
- !failed = #FFFBD3
8
- !failed_border = #C20000
9
- !failed_text = #C20000
7
+ $failed: #fffbd3
8
+ $failed_border: #c20000
9
+ $failed_text: #c20000
10
10
 
11
- !passed = #DBFFB4
12
- !passed_border = #65C400
13
- !passed_text = #3D7700
11
+ $passed: #dbffb4
12
+ $passed_border: #65c400
13
+ $passed_text: #3d7700
14
14
 
15
- !skipped = #E0FFFF
16
- !skipped_border = #00FFFF
17
- !skipped_text = #001111
15
+ $skipped: #e0ffff
16
+ $skipped_border: aqua
17
+ $skipped_text: #001111
18
18
 
19
- !pending = #FCFB98
20
- !pending_border = #FAF834
21
- !pending_text = #131313
19
+ $pending: #fcfb98
20
+ $pending_border: #faf834
21
+ $pending_text: #131313
22
22
 
23
- !undefined = #FCFB98
24
- !undefined_border = #FAF834
25
- !undefined_text = #131313
23
+ $undefined: #fcfb98
24
+ $undefined_border: #faf834
25
+ $undefined_text: #131313
26
26
 
27
- !announcement = #E0FFFF
28
- !announcement_border = #00FFFF
29
- !announcement_text = #001111
27
+ $announcement: #e0ffff
28
+ $announcement_border: aqua
29
+ $announcement_text: #001111
30
30
 
31
31
  body
32
- :font-size 0px
33
- :color #FFFFFF
34
- :margin 0px
35
- :padding 0px
32
+ font-size: 0px
33
+ color: white
34
+ margin: 0px
35
+ padding: 0px
36
36
 
37
37
  .cucumber,td,th
38
- :font normal 11px "Lucida Grande", Helvetica, sans-serif
39
- :background white
40
- :color #000000
41
-
38
+ font: normal 11px "Lucida Grande", Helvetica, sans-serif
39
+ background: white
40
+ color: black
42
41
  #cucumber-header
43
- :background #65C400
44
- :color #FFFFFF
45
- :height 6em
46
-
42
+ background: #65c400
43
+ color: white
44
+ height: 6em
47
45
  #expand-collapse
48
46
  p
49
- :float right
50
- :margin 0 0 0 10px
51
-
47
+ float: right
48
+ margin: 0 0 0 10px
52
49
  .scenario
53
50
  h3
54
- :font-size 11px
55
- :padding 3px
56
- :margin 0
57
- :background #65C400
58
- :color #FFFFFF
59
- :font-weight bold
60
-
51
+ font-size: 11px
52
+ padding: 3px
53
+ margin: 0
54
+ background: #65c400
55
+ color: white
56
+ font-weight: bold
61
57
  h1
62
- :margin 0px 10px 0px 10px
63
- :padding 10px
64
- :font-family "Lucida Grande", Helvetica, sans-serif
65
- :font-size 2em
66
- :position absolute
67
-
58
+ margin: 0px 10px 0px 10px
59
+ padding: 10px
60
+ font-family: "Lucida Grande", Helvetica, sans-serif
61
+ font-size: 2em
62
+ position: absolute
68
63
  h4
69
- :margin-bottom 2px
70
-
64
+ margin-bottom: 2px
71
65
  div.feature
72
- :padding 2px
73
- :margin 0px 10px 5px 10px
74
-
66
+ padding: 2px
67
+ margin: 0px 10px 5px 10px
75
68
  div.examples
76
- :padding 0em 0em 0em 1em
77
-
69
+ padding: 0em 0em 0em 1em
78
70
  .stats
79
- :margin 2em
80
-
71
+ margin: 2em
81
72
  .summary
82
73
  ul.features
83
74
  li
84
- :display inline
85
-
75
+ display: inline
86
76
  .step_name
87
- :float left
88
-
77
+ float: left
89
78
  .step_file
90
- :text-align right
91
- :color #999999
79
+ text-align: right
80
+ color: #999999
92
81
  a
93
- :color #999999
94
-
95
-
82
+ color: #999999
83
+ .scenario_file
84
+ float: right
85
+ color: #999999
96
86
  .tag
97
- :font-weight bold
98
- :color #246AC1
99
-
87
+ font-weight: bold
88
+ color: #246ac1
100
89
  .backtrace
101
- :margin-top 0
102
- :margin-bottom 0
103
- :margin-left 1em
104
- :color #000000
105
-
90
+ margin-top: 0
91
+ margin-bottom: 0
92
+ margin-left: 1em
93
+ color: black
106
94
  a
107
- :text-decoration none
108
- :color #BE5C00
109
-
95
+ text-decoration: none
96
+ color: #be5c00
110
97
  &:hover
111
- :text-decoration underline
98
+ text-decoration: underline
112
99
  &:visited
113
- :font-weight normal
114
-
100
+ font-weight: normal
115
101
  div.examples
116
- :margin 5px 0px 5px 15px
117
- :color #000000
118
-
102
+ margin: 5px 0px 5px 15px
103
+ color: black
119
104
  .outline
120
105
  table
121
- :margin 0px 0px 5px 10px
122
-
106
+ margin: 0px 0px 5px 10px
123
107
  table
124
- :border-collapse collapse
108
+ border-collapse: collapse
125
109
  td
126
- :padding 3px 3px 3px 5px
110
+ padding: 3px 3px 3px 5px
127
111
  td.failed, td.passed, td.skipped, td.pending, td.undefined
128
- :padding-left 18px
129
- :padding-right 10px
112
+ padding-left: 18px
113
+ padding-right: 10px
130
114
  td.failed
131
- :border-left= !step_left !failed_border
132
- :border-bottom= !step_bottom !failed_border
133
- :background= !failed
134
- :color= !failed_text
115
+ border-left: $step_left $failed_border
116
+ border-bottom: $step_bottom $failed_border
117
+ background: $failed
118
+ color: $failed_text
135
119
  td.passed
136
- :border-left= !step_left !passed_border
137
- :border-bottom= !step_bottom !passed_border
138
- :background= !passed
139
- :color= !passed_text
120
+ border-left: $step_left $passed_border
121
+ border-bottom: $step_bottom $passed_border
122
+ background: $passed
123
+ color: $passed_text
140
124
  td.skipped
141
- :border-left= !step_left !skipped_border
142
- :border-bottom= !step_bottom !skipped_border
143
- :background= !skipped
144
- :color= !skipped_text
125
+ border-left: $step_left $skipped_border
126
+ border-bottom: $step_bottom $skipped_border
127
+ background: $skipped
128
+ color: $skipped_text
145
129
  td.pending
146
- :border-left= !step_left !pending_border
147
- :border-bottom= !step_bottom !pending_border
148
- :background= !pending
149
- :color= !pending_text
130
+ border-left: $step_left $pending_border
131
+ border-bottom: $step_bottom $pending_border
132
+ background: $pending
133
+ color: $pending_text
150
134
  td.undefined
151
- :border-left= !step_left !undefined_border
152
- :border-bottom= !step_bottom !undefined_border
153
- :background= !undefined
154
- :color= !undefined_text
135
+ border-left: $step_left $undefined_border
136
+ border-bottom: $step_bottom $undefined_border
137
+ background: $undefined
138
+ color: $undefined_text
155
139
  td.announcement
156
- :border-left= !step_left !announcement_border
157
- :border-bottom= !step_bottom !announcement_border
158
- :background= !announcement
159
- :color= !announcement_text
160
-
140
+ border-left: $step_left $announcement_border
141
+ border-bottom: $step_bottom $announcement_border
142
+ background: $announcement
143
+ color: $announcement_text
161
144
  ol
162
- :list-style none
163
- :margin 0px
164
- :padding 0px
165
-
145
+ list-style: none
146
+ margin: 0px
147
+ padding: 0px
166
148
  li.step
167
- :padding 3px 3px 3px 18px
168
- :margin 5px 0px 5px 5px
149
+ padding: 3px 3px 3px 18px
150
+ margin: 5px 0px 5px 5px
169
151
  li
170
- :margin 0em 0em 0em 1em
171
- :padding 0em 0em 0em 0.2em
152
+ margin: 0em 0em 0em 1em
153
+ padding: 0em 0em 0em 0.2em
172
154
  span.param
173
- :font-weight bold
155
+ font-weight: bold
174
156
  li.failed
175
- :border-left= !step_left !failed_border
176
- :border-bottom= !step_bottom !failed_border
177
- :background= !failed
178
- :color= !failed_text
157
+ border-left: $step_left $failed_border
158
+ border-bottom: $step_bottom $failed_border
159
+ background: $failed
160
+ color: $failed_text
179
161
  li.passed
180
- :border-left= !step_left !passed_border
181
- :border-bottom= !step_bottom !passed_border
182
- :background= !passed
183
- :color= !passed_text
162
+ border-left: $step_left $passed_border
163
+ border-bottom: $step_bottom $passed_border
164
+ background: $passed
165
+ color: $passed_text
184
166
  li.skipped
185
- :border-left= !step_left !skipped_border
186
- :border-bottom= !step_bottom !skipped_border
187
- :background= !skipped
188
- :color= !skipped_text
167
+ border-left: $step_left $skipped_border
168
+ border-bottom: $step_bottom $skipped_border
169
+ background: $skipped
170
+ color: $skipped_text
189
171
  li.pending
190
- :border-left= !step_left !pending_border
191
- :border-bottom= !step_bottom !pending_border
192
- :background= !pending
193
- :color= !pending_text
172
+ border-left: $step_left $pending_border
173
+ border-bottom: $step_bottom $pending_border
174
+ background: $pending
175
+ color: $pending_text
194
176
  li.undefined
195
- :border-left= !step_left !undefined_border
196
- :border-bottom= !step_bottom !undefined_border
197
- :background= !undefined
198
- :color= !undefined_text
177
+ border-left: $step_left $undefined_border
178
+ border-bottom: $step_bottom $undefined_border
179
+ background: $undefined
180
+ color: $undefined_text
199
181
  li.announcement
200
- :border-left= !step_left !announcement_border
201
- :border-bottom= !step_bottom !announcement_border
202
- :background= !announcement
203
- :color= !announcement_text
204
- :margin-left= 10px
205
-
182
+ border-left: $step_left $announcement_border
183
+ border-bottom: $step_bottom $announcement_border
184
+ background: $announcement
185
+ color: $announcement_text
186
+ margin-left: 10px
206
187
  #summary
207
- :margin 0px
208
- :padding 5px 10px
209
- :text-align right
210
- :top 0px
211
- :right 0px
212
- :float right
213
-
188
+ margin: 0px
189
+ padding: 5px 10px
190
+ text-align: right
191
+ top: 0px
192
+ right: 0px
193
+ float: right
214
194
  p
215
- :margin 0 0 0 2px
216
-
195
+ margin: 0 0 0 2px
217
196
  #totals
218
- :font-size 1.2em
219
-
220
- .ruby
221
- :font-size 12px
222
- :font-family monospace
223
- :color white
224
- :background black
225
- :padding 0.1em 0 0.2em 0
197
+ font-size: 1.2em
226
198
 
227
- .keyword
228
- :color #FF6600
199
+ .ruby
200
+ font-size: 12px
201
+ font-family: monospace
202
+ color: white
203
+ background: black
204
+ padding: 0.1em 0 0.2em 0
205
+ .keyword
206
+ color: #ff6600
229
207
  .constant
230
- :color #339999
208
+ color: #339999
231
209
  .attribute
232
- :color white
210
+ color: white
233
211
  .global
234
- :color white
212
+ color: white
235
213
  .module
236
- :color white
214
+ color: white
237
215
  .class
238
- :color white
216
+ color: white
239
217
  .string
240
- :color #66FF00
218
+ color: #66ff00
241
219
  .ident
242
- :color white
220
+ color: white
243
221
  .method
244
- :color #FFCC00
222
+ color: #ffcc00
245
223
  .number
246
- :color white
224
+ color: white
247
225
  .char
248
- :color white
226
+ color: white
249
227
  .comment
250
- :color #9933CC
228
+ color: #9933cc
251
229
  .symbol
252
- :color white
230
+ color: white
253
231
  .regex
254
- :color #44B4CC
232
+ color: #44b4cc
255
233
  .punct
256
- :color white
234
+ color: white
257
235
  .escape
258
- :color white
259
- .interp
260
- :color white
261
- .expr
262
- :color white
263
-
236
+ color: white
237
+ .interp
238
+ color: white
239
+ .expr
240
+ color: white
264
241
  .offending
265
- :background #333333
242
+ background: #333333
266
243
  .linenum
267
- :width 75px
268
- :padding 0.1em 1em 0.2em 0
269
- :color #000000
270
- :background #FFFBD3
271
-
244
+ width: 75px
245
+ padding: 0.1em 1em 0.2em 0
246
+ color: black
247
+ background: #fffbd3