rcomp 0.2.0 → 0.2.1

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.
@@ -1,4 +1,11 @@
1
- == 0.2.0, released 2012-11-25
1
+ # 0.2.1, released 2012-11-28
2
+
3
+ * Overhaul default output
4
+ * Add output highlighting
5
+ * More descriptive output for test failure
6
+ * Explanations: why tests were skipped by test or generate
7
+
8
+ # 0.2.0, released 2012-11-25
2
9
 
3
10
  * Add "ignore" configuration option
4
11
  * Add "timeout" configuration option
@@ -6,11 +13,11 @@
6
13
  * Remove "set-directory"
7
14
  * Upgrade "init" to handle command setting when neccessary
8
15
 
9
- == 0.1.1, released 2012-11-20
16
+ # 0.1.1, released 2012-11-20
10
17
 
11
18
  * Ignore dotfiles in tests directory
12
19
  * Clean up generate output, remove remnant debugging output
13
20
 
14
- == 0.1.0, released 2012-11-20
21
+ # 0.1.0, released 2012-11-20
15
22
 
16
23
  * Initial release
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rcomp (0.2.0)
4
+ rcomp (0.2.1)
5
5
  childprocess (~> 0.3.6)
6
6
  thor (~> 0.16.0)
7
7
 
data/README.md CHANGED
@@ -54,7 +54,7 @@ Managed by RComp. Stores the results of your most recent test suite run.
54
54
 
55
55
  ---
56
56
 
57
- A simple RComp suite might look something like:
57
+ A simple RComp suite might look like:
58
58
 
59
59
  ```
60
60
  .
@@ -62,7 +62,9 @@ Feature: Generate
62
62
 
63
63
  """
64
64
  When I run `rcomp generate`
65
- Then the output should contain "1 file (1 skipped)"
65
+ Then the output should contain "Skipped 1 file"
66
+ And the output should contain "Run rcomp generate -O"
67
+ And the output should contain "1 file (1 skipped)"
66
68
  And the file "rcomp/expected/test1.out" should contain "DEF"
67
69
  And the exit status should be 0
68
70
 
@@ -324,7 +326,7 @@ Feature: Generate
324
326
  """
325
327
  When I run `rcomp generate` for up to 6 seconds
326
328
  Then the output should contain "1 file (1 failed)"
327
- And the output should contain "timeout : /test1"
329
+ And the output should contain "timeout : test1.test"
328
330
  And the exit status should be 1
329
331
 
330
332
  @loop-conf
@@ -341,5 +343,5 @@ Feature: Generate
341
343
  """
342
344
  When I run `rcomp generate` for up to 2 seconds
343
345
  Then the output should contain "1 file (1 failed)"
344
- And the output should contain "timeout : /test1"
346
+ And the output should contain "timeout : test1.test"
345
347
  And the exit status should be 1
@@ -61,7 +61,9 @@ Feature: Test
61
61
 
62
62
  """
63
63
  When I run `rcomp test`
64
- Then the output should contain "1 test (1 skipped)"
64
+ Then the output should contain "Skipped 1 test"
65
+ And the output should contain "Run rcomp generate"
66
+ And the output should contain "1 test (1 skipped)"
65
67
  And the exit status should be 0
66
68
 
67
69
  @basic-conf
@@ -77,7 +79,8 @@ Feature: Test
77
79
 
78
80
  """
79
81
  When I run `rcomp test`
80
- Then the output should contain "1 test (1 failed)"
82
+ Then the output should contain "failed : test1.test (out)"
83
+ And the output should contain "1 test (1 failed)"
81
84
  And the exit status should be 1
82
85
 
83
86
  # stdout multiple tests
@@ -118,7 +121,8 @@ Feature: Test
118
121
 
119
122
  """
120
123
  When I run `rcomp test`
121
- Then the output should contain "1 test (1 failed)"
124
+ Then the output should contain "failed : test1.test (err)"
125
+ And the output should contain "1 test (1 failed)"
122
126
  And the exit status should be 1
123
127
 
124
128
  # stderr multiple tests
@@ -129,6 +133,29 @@ Feature: Test
129
133
  Then the output should contain "3 tests (1 failed, 1 skipped, 1 passed)"
130
134
  And the exit status should be 1
131
135
 
136
+ # stderr + stdout tests
137
+ @basic-conf
138
+ Scenario: Single test, failing both err and out
139
+ Given a file named "rcomp/tests/test1.test" with:
140
+ """
141
+ ABC
142
+
143
+ """
144
+ And a file named "rcomp/expected/test1.out" with:
145
+ """
146
+ XYZ
147
+
148
+ """
149
+ And a file named "rcomp/expected/test1.err" with:
150
+ """
151
+ XYZ
152
+
153
+ """
154
+ When I run `rcomp test`
155
+ Then the output should contain "failed : test1.test (out, err)"
156
+ And the output should contain "1 test (1 failed)"
157
+ And the exit status should be 1
158
+
132
159
  # alias
133
160
  @basic-conf
134
161
  @load-assorted-tests
@@ -274,7 +301,7 @@ Feature: Test
274
301
  """
275
302
  When I run `rcomp test` for up to 6 seconds
276
303
  Then the output should contain "1 test (1 failed)"
277
- And the output should contain "timeout : /test1"
304
+ And the output should contain "timeout : test1.test"
278
305
  And the exit status should be 1
279
306
 
280
307
  @loop-conf
@@ -296,5 +323,5 @@ Feature: Test
296
323
  """
297
324
  When I run `rcomp test` for up to 2 seconds
298
325
  Then the output should contain "1 test (1 failed)"
299
- And the output should contain "timeout : /test1"
326
+ And the output should contain "timeout : test1.test"
300
327
  And the exit status should be 1
@@ -7,5 +7,5 @@ require 'rcomp/runner'
7
7
  require 'rcomp/suite'
8
8
  require 'rcomp/test'
9
9
  require 'rcomp/version'
10
- require 'rcomp/initializer'
10
+ require 'rcomp/env'
11
11
  require 'rcomp/process'
@@ -33,9 +33,7 @@ module RComp
33
33
  end
34
34
 
35
35
  def touch(path)
36
- unless File.exist? path
37
- FileUtils.touch path
38
- end
36
+ FileUtils.touch path
39
37
  end
40
38
  end
41
39
  end
@@ -4,9 +4,6 @@ module RComp
4
4
  class CLI < Thor
5
5
 
6
6
  include Thor::Actions
7
- include RComp::Runner
8
- include RComp::Suite
9
- include RComp::Initializer
10
7
 
11
8
  def initialize(args=[], options={}, config={})
12
9
  super
@@ -20,13 +17,13 @@ module RComp
20
17
 
21
18
  desc "init", "Setup rcomp test directory"
22
19
  def init
23
- guard_initialized
20
+ Env.guard_initialized
24
21
 
25
- unless command_exists?
22
+ unless Env.command_exists?
26
23
  @conf.set_command(ask("Enter the command you want to test:"))
27
24
  end
28
25
 
29
- initialize_directories
26
+ Env.initialize_directories
30
27
  puts "RComp successfully initialized"
31
28
  end
32
29
 
@@ -44,11 +41,11 @@ module RComp
44
41
  :type => :string,
45
42
  :desc => "Only test files that match pattern"
46
43
  def test
47
- guard_uninitialized
44
+ Env.guard_uninitialized
48
45
  if @options[:grep]
49
- run_suite(load_suite(@options[:grep]), :test)
46
+ Runner.run(Suite.load(@options[:grep]), :test)
50
47
  else
51
- run_suite(load_suite, :test)
48
+ Runner.run(Suite.load, :test)
52
49
  end
53
50
  end
54
51
 
@@ -65,7 +62,7 @@ module RComp
65
62
  :aliases => "-O",
66
63
  :desc => "Overwrite expected output file for test if present"
67
64
  def generate
68
- guard_uninitialized
65
+ Env.guard_uninitialized
69
66
 
70
67
  # Display confirmation dialouge when -O is passed without filter
71
68
  if !@options[:grep] && options.overwrite
@@ -76,9 +73,9 @@ module RComp
76
73
  end
77
74
 
78
75
  if @options[:grep]
79
- run_suite(load_suite(@options[:grep]), :generate, @options)
76
+ Runner.run(Suite.load(@options[:grep]), :generate, @options)
80
77
  else
81
- run_suite(load_suite, :generate, @options)
78
+ Runner.run(Suite.load, :generate, @options)
82
79
  end
83
80
  end
84
81
 
@@ -34,8 +34,7 @@ module RComp
34
34
 
35
35
  # Load configuration values into attributes
36
36
  @command = @conf['command']
37
- @ignore = @conf['ignore']
38
- @ignore ||= []
37
+ @ignore = @conf['ignore'] || []
39
38
  @timeout = @conf['timeout']
40
39
  @root = @conf['directory']
41
40
  @test_root = @root + '/tests'
@@ -58,7 +57,7 @@ module RComp
58
57
  #
59
58
  # Returns nothing
60
59
  def write_conf_file
61
- touch CONF_PATH unless File.exists?(CONF_PATH)
60
+ touch CONF_PATH
62
61
  conf_file = File.open(CONF_PATH, 'w')
63
62
  conf_file.puts YAML.dump @custom
64
63
  end
@@ -1,7 +1,8 @@
1
1
  module RComp
2
- module Initializer
2
+ module Env
3
3
 
4
- include RComp::Actions
4
+ extend self
5
+ extend Actions
5
6
 
6
7
  @@conf = Conf.instance
7
8
 
@@ -33,9 +34,7 @@ module RComp
33
34
  mkdir @@conf.expected_root
34
35
  mkdir @@conf.result_root
35
36
  end
36
-
37
- private
38
-
37
+
39
38
  # Checks for the existance of a command to test with
40
39
  #
41
40
  # Returns a boolean
@@ -43,6 +42,8 @@ module RComp
43
42
  @@conf.command
44
43
  end
45
44
 
45
+ private
46
+
46
47
  # Checks for the existance of RComp's root directory
47
48
  #
48
49
  # Returns a boolean
@@ -57,7 +58,7 @@ module RComp
57
58
  def root_subdirs_exist?
58
59
  File.exists?(@@conf.test_root) &&
59
60
  File.exists?(@@conf.result_root) &&
60
- File.exists?(@conf.expected_root)
61
+ File.exists?(@@conf.expected_root)
61
62
  end
62
63
 
63
64
  # Checks to see if RComp is fully initialized
@@ -1,23 +1,8 @@
1
1
  module RComp
2
2
  module Path
3
+
3
4
  def rel_path(test_path)
4
5
  test_path.gsub(Conf.instance.test_root, '')
5
6
  end
6
-
7
- def result_path(test_path, type)
8
- cmpnts = []
9
- cmpnts << Conf.instance.result_root
10
- cmpnts << rel_path(File.dirname(test_path))
11
- cmpnts << File.basename(test_path, ".*") + (type == :out ? '.out' : '.err')
12
- File.join(cmpnts)
13
- end
14
-
15
- def expected_path(test_path, type)
16
- cmpnts = []
17
- cmpnts << Conf.instance.expected_root
18
- cmpnts << rel_path(File.dirname(test_path))
19
- cmpnts << File.basename(test_path, ".*") + (type == :out ? '.out' : '.err')
20
- File.join(cmpnts)
21
- end
22
7
  end
23
8
  end
@@ -22,15 +22,17 @@ module RComp
22
22
  #
23
23
  # Returns nothing
24
24
  def run
25
- begin @process.start
25
+ begin
26
+ @process.start
26
27
  rescue ChildProcess::LaunchError => e
27
28
  raise StandardError.new(e.message)
28
29
  end
29
30
 
30
- begin @process.poll_for_exit(@timeout)
31
+ begin
32
+ @process.poll_for_exit(@timeout)
31
33
  rescue ChildProcess::TimeoutError
32
34
  @timedout = true
33
- @process.stop
35
+ @process.stop(@timeout)
34
36
  end
35
37
  end
36
38
 
@@ -1,8 +1,15 @@
1
+ require 'thor'
2
+
1
3
  module RComp
2
4
  class Reporter
3
5
 
6
+ include Thor::Shell
4
7
  include RComp::Helper
5
8
 
9
+ PADDING = 4
10
+ GEN_JUSTIFY = 12 + PADDING
11
+ TEST_JUSTIFY = 10 + PADDING
12
+
6
13
  # Initialize a new Reporter
7
14
  #
8
15
  # type - The type (Symbol) of the suite
@@ -15,64 +22,162 @@ module RComp
15
22
  @failed = 0
16
23
  end
17
24
 
25
+ # Main interface for reporting
26
+ # Reports the result of a single test or generation
27
+ #
28
+ # test - A test object that has been run
29
+ #
30
+ # Returns nothing
18
31
  def report(test)
19
32
  case test.result
20
- # success
21
33
  when :success
22
34
  if @type == :test
23
- puts "\tpassed : #{test.relative_path}"
35
+ print_test_success(test)
24
36
  else
25
- puts "\tgenerated : #{test.relative_path}"
37
+ print_generate_success(test)
26
38
  end
27
39
  @success += 1
28
40
 
29
- # skipped
30
41
  when :skipped
31
- puts "\tskipped : #{test.relative_path}"
42
+ if @type == :test
43
+ print_test_skipped(test)
44
+ else
45
+ print_generate_skipped(test)
46
+ end
32
47
  @skipped += 1
33
48
 
34
- # failed
49
+ # Generate can't fail directly
35
50
  when :failed
36
- puts "\tfailed : #{test.relative_path}"
51
+ print_test_failed(test)
37
52
  @failed += 1
38
53
 
39
- # timedout
40
54
  when :timedout
41
- puts "\ttimeout : #{test.relative_path}"
55
+ if @type == :test
56
+ print_test_timeout(test)
57
+ else
58
+ print_generate_timeout(test)
59
+ end
42
60
  @failed += 1
43
61
  end
44
62
  end
45
63
 
46
- def summary
47
- case @type
48
- when :test
49
- print_test_summary
50
- when :generate
51
- print_generate_summary
64
+ # Prints header for test suite report
65
+ #
66
+ # Returns nothing
67
+ def header
68
+ # The suite is a test suite
69
+ if @type == :test
70
+ puts "RComp: running test suite..."
71
+
72
+ # The suite is a generation suite
73
+ else
74
+ puts "RComp: generating expected output..."
52
75
  end
76
+ puts
77
+ end
78
+
79
+ # Prints summary of test suite report
80
+ #
81
+ # Returns nothing
82
+ def summary
83
+ print_summary
53
84
  exit 1 if @failed > 0
54
85
  end
55
86
 
56
87
  private
57
88
 
58
- def print_test_summary
59
- desc = []
60
- summary = "#{plural((@failed + @skipped + @success), 'test')} ("
61
- desc << "#{@failed} failed" unless @failed == 0
62
- desc << "#{@skipped} skipped" unless @skipped == 0
63
- desc << "#{@success} passed" unless @success == 0
64
- summary += desc.join(", ") + ")"
65
- puts summary
89
+ def print_test_success(test)
90
+ say "passed : ".rjust(TEST_JUSTIFY) + test.formatted_path, :green
91
+ end
92
+
93
+ def print_generate_success(test)
94
+ say "generated : ".rjust(GEN_JUSTIFY) + test.formatted_path, :green
95
+ end
96
+
97
+ def print_test_skipped(test)
98
+ say "skipped : ".rjust(TEST_JUSTIFY) + test.formatted_path, :yellow
99
+ end
100
+
101
+ def print_generate_skipped(test)
102
+ say "skipped : ".rjust(GEN_JUSTIFY) + test.formatted_path, :yellow
103
+ end
104
+
105
+ def print_test_failed(test)
106
+ msg = "failed : ".rjust(TEST_JUSTIFY) + test.formatted_path
107
+
108
+ # both out and err present
109
+ if test.expected_out_exists? && test.expected_err_exists?
110
+ # failed both out and err cmp
111
+ if !test.out_result && !test.err_result
112
+ msg += " (out, err)"
113
+
114
+ # failed out cmp
115
+ elsif !test.out_result
116
+ msg += " (out)"
117
+
118
+ # failed err cmp
119
+ else
120
+ msg += " (err)"
121
+ end
122
+
123
+ # out present
124
+ elsif test.expected_out_exists?
125
+ msg += " (out)"
126
+
127
+ # err present
128
+ else
129
+ msg += " (err)"
130
+ end
131
+
132
+ say msg, :red
133
+ end
134
+
135
+ def print_test_timeout(test)
136
+ say "timeout : ".rjust(TEST_JUSTIFY) + test.formatted_path, :red
66
137
  end
67
138
 
68
- def print_generate_summary
139
+ def print_generate_timeout(test)
140
+ say "timeout : ".rjust(GEN_JUSTIFY) + test.formatted_path, :red
141
+ end
142
+
143
+ def print_summary
144
+ # print skipped explanation if anything was skipped
145
+ if @skipped > 0
146
+ if @type == :test
147
+ print_skipped_test_explanation
148
+ else
149
+ print_skipped_generate_explanation
150
+ end
151
+ end
152
+
153
+ # construct and print output summary
69
154
  desc = []
70
- summary = "#{plural((@failed + @skipped + @success), 'file')} ("
71
- desc << "#{@failed} failed" unless @failed == 0
72
- desc << "#{@skipped} skipped" unless @skipped == 0
73
- desc << "#{@success} generated" unless @success == 0
155
+ tests = @failed + @skipped + @success
156
+
157
+ summary = "#{plural(tests, @type == :test ? 'test' : 'file')} ("
158
+
159
+ desc << set_color("#{@failed} failed", :red) unless @failed == 0
160
+ desc << set_color("#{@skipped} skipped", :yellow) unless @skipped == 0
161
+ unless @success == 0
162
+ if @type == :test
163
+ desc << set_color("#{@success} passed", :green)
164
+ else
165
+ desc << set_color("#{@success} generated", :green)
166
+ end
167
+ end
168
+
74
169
  summary += desc.join(", ") + ")"
75
- puts summary
170
+ puts "\n" + summary
171
+ end
172
+
173
+ def print_skipped_test_explanation
174
+ say "\nSkipped #{plural(@skipped, 'test')} due to missing expected output"
175
+ say "Run rcomp generate or manually create expected output"
176
+ end
177
+
178
+ def print_skipped_generate_explanation
179
+ say "\nSkipped #{plural(@skipped, 'file')} due to existing expected output"
180
+ say "Run rcomp generate -O to overwrite"
76
181
  end
77
182
  end
78
183
  end
@@ -3,7 +3,8 @@ require 'fileutils'
3
3
  module RComp
4
4
  module Runner
5
5
 
6
- include RComp::Actions
6
+ extend self
7
+ extend Actions
7
8
 
8
9
  # Run a suite of tests
9
10
  #
@@ -12,20 +13,22 @@ module RComp
12
13
  # options - A Hash of runner options
13
14
  #
14
15
  # Returns nothing
15
- def run_suite(suite, type, options={})
16
+ def run(suite, type, options={})
16
17
  @conf = Conf.instance
17
18
  reporter = Reporter.new(type)
18
19
 
20
+ reporter.header
21
+
19
22
  suite.each do |test|
20
23
  case type
21
24
  when :test
22
- run(test) if expected_exists?(test)
25
+ run_test(test) if expected_exists?(test)
23
26
 
24
27
  when :generate
25
28
  if expected_exists?(test)
26
- run(test, true) if options[:overwrite]
29
+ run_test(test, true) if options[:overwrite]
27
30
  else
28
- run(test, true)
31
+ run_test(test, true)
29
32
  end
30
33
  end
31
34
 
@@ -44,8 +47,7 @@ module RComp
44
47
  #
45
48
  # Returns a boolean
46
49
  def expected_exists?(test)
47
- File.exists?(test.expected_out_path) ||
48
- File.exists?(test.expected_err_path)
50
+ test.expected_out_exists? || test.expected_err_exists?
49
51
  end
50
52
 
51
53
  # Test or generate output for a specified test
@@ -54,11 +56,13 @@ module RComp
54
56
  # generate - Flag for running generate. Runs test otherwise.
55
57
  #
56
58
  # Returns nothing
57
- def run(test, generate=false)
59
+ def run_test(test, generate=false)
60
+ # Create output path if it doens't exist
58
61
  generate ? mkpath_to(test.expected_out_path) :
59
62
  mkpath_to(test.result_out_path)
60
63
 
61
64
  # Create process and run
65
+ # Handle the difference in path between a test and generate process
62
66
  cmd = [@conf.command, test.test_path]
63
67
  out = generate ? test.expected_out_path : test.result_out_path
64
68
  err = generate ? test.expected_err_path : test.result_err_path
@@ -67,36 +71,59 @@ module RComp
67
71
 
68
72
  if process.timedout?
69
73
  test.result = :timedout
70
- else
71
- test.result = generate ? :success : compare_output(test)
74
+ return
72
75
  end
76
+
77
+ test.result = generate ? :success : cmp_output(test)
73
78
  end
74
79
 
75
80
  # Compare the result and expected output of a test that has been run
76
81
  #
77
82
  # test - A Test object that has been run
78
- # precondition: expected_exists?(test) is true
83
+ # precondition :: expected_exists?(test) is true
79
84
  #
80
- # Returns a Symbol, :success or :failure, conditionally if the test passed
81
- def compare_output(test)
82
- exp_out_exists = File.exists?(test.expected_out_path)
83
- exp_err_exists = File.exists?(test.expected_err_path)
84
-
85
- if exp_out_exists && exp_err_exists # test out and err
86
- if FileUtils.identical?(test.expected_out_path, test.result_out_path) &&
87
- FileUtils.identical?(test.expected_err_path, test.result_err_path)
88
- return :success
89
- end
90
- elsif exp_out_exists # test only out
91
- if FileUtils.identical?(test.expected_out_path, test.result_out_path)
92
- return :success
93
- end
94
- else # test only err
95
- if FileUtils.identical?(test.expected_err_path, test.result_err_path)
96
- return :success
97
- end
85
+ # Returns success or failure as a symbol
86
+ def cmp_output(test)
87
+ # test out and err
88
+ if test.expected_out_exists? && test.expected_err_exists?
89
+ cmp_out(test)
90
+ cmp_err(test)
91
+ return :success if (test.out_result && test.err_result)
92
+
93
+ # test only out
94
+ elsif test.expected_out_exists?
95
+ cmp_out(test)
96
+ return :success if test.out_result
97
+
98
+ # test only err
99
+ else
100
+ cmp_err(test)
101
+ return :success if test.err_result
98
102
  end
103
+
99
104
  return :failed
100
105
  end
106
+
107
+ # Compare a tests expected and result stdout
108
+ # Sets the result of the comparison to out_result in the test
109
+ #
110
+ # test - A test object that has been run
111
+ #
112
+ # Returns nothing
113
+ def cmp_out(test)
114
+ test.out_result = FileUtils.cmp(test.expected_out_path,
115
+ test.result_out_path)
116
+ end
117
+
118
+ # Compare a tests expected and result stderr
119
+ # Sets the result of the comparison to err_result in the test
120
+ #
121
+ # test - A test object that has been run
122
+ #
123
+ # Returns nothing
124
+ def cmp_err(test)
125
+ test.err_result = FileUtils.cmp(test.expected_err_path,
126
+ test.result_err_path)
127
+ end
101
128
  end
102
129
  end
@@ -3,7 +3,8 @@ require 'find'
3
3
  module RComp
4
4
  module Suite
5
5
 
6
- include RComp::Path
6
+ extend self
7
+ extend Path
7
8
 
8
9
  @@conf = Conf.instance
9
10
 
@@ -12,7 +13,7 @@ module RComp
12
13
  # pattern - A pattern to filter the tests that are added to the suite
13
14
  #
14
15
  # Returns an Array of Test objects
15
- def load_suite(pattern='')
16
+ def load(pattern=nil)
16
17
  tests = []
17
18
 
18
19
  # Find all tests in the tests directory
@@ -21,7 +22,7 @@ module RComp
21
22
  next if File.directory? path
22
23
 
23
24
  # filter tests by pattern if present
24
- unless pattern.empty?
25
+ if pattern
25
26
  next unless rel_path(path).match(pattern)
26
27
  end
27
28
 
@@ -37,6 +38,8 @@ module RComp
37
38
  return tests
38
39
  end
39
40
 
41
+ private
42
+
40
43
  # Checks all ignore patterns against a given relative path
41
44
  #
42
45
  # path - A relative path of a test
@@ -4,9 +4,10 @@ module RComp
4
4
  include RComp::Path
5
5
 
6
6
  attr_reader :test_path, :result_out_path, :result_err_path,
7
- :expected_out_path, :expected_err_path, :relative_path
7
+ :expected_out_path, :expected_err_path, :relative_path,
8
+ :formatted_path
8
9
 
9
- attr_accessor :result
10
+ attr_accessor :result, :out_result, :err_result
10
11
 
11
12
  # Initialize a new Test
12
13
  #
@@ -18,10 +19,42 @@ module RComp
18
19
  @result = :skipped
19
20
  @relative_path = rel_path(path)
20
21
  @test_path = path
21
- @result_out_path = result_path(path, :out)
22
- @result_err_path = result_path(path, :err)
23
- @expected_out_path = expected_path(path, :out)
24
- @expected_err_path = expected_path(path, :err)
22
+ @result_out_path = get_path(:result, path, '.out')
23
+ @result_err_path = get_path(:result, path, '.err')
24
+ @expected_out_path = get_path(:expected, path, '.out')
25
+ @expected_err_path = get_path(:expected, path, '.err')
26
+ @formatted_path = format_path(@relative_path)
27
+ end
28
+
29
+ def expected_out_exists?
30
+ @expected_out_exists ||= File.exists?(@expected_out_path)
31
+ end
32
+
33
+ def expected_err_exists?
34
+ @expected_err_exists ||= File.exists?(@expected_err_path)
35
+ end
36
+
37
+ private
38
+
39
+ def get_path(type, test_path, extension)
40
+ cmpnts = []
41
+ if type == :result
42
+ cmpnts << Conf.instance.result_root
43
+ else
44
+ cmpnts << Conf.instance.expected_root
45
+ end
46
+ cmpnts << rel_path(File.dirname(test_path))
47
+ cmpnts << File.basename(test_path, ".*") + extension
48
+ File.join(cmpnts)
49
+ end
50
+
51
+ # Formats relative path for user output
52
+ #
53
+ # path - A relative test path
54
+ #
55
+ # Returns formatted path
56
+ def format_path(path)
57
+ path[1..-1]
25
58
  end
26
59
  end
27
60
  end
@@ -1,3 +1,3 @@
1
1
  module RComp
2
- VERSION = '0.2.0'
2
+ VERSION = '0.2.1'
3
3
  end
@@ -9,8 +9,8 @@ Gem::Specification.new do |s|
9
9
  s.authors = ["Chris Knadler"]
10
10
  s.email = ["takeshi91k@gmail.com"]
11
11
  s.homepage = "https://github.com/cknadler/rcomp"
12
- s.summary = "A simple framework for testing command line application output."
13
- s.description = "RComp tests by passing a specified command tests (files) by argument and comparing the result with expected output."
12
+ s.summary = "A simple framework for testing command line application output"
13
+ s.description = "Command line output testing framework with dead simple tests"
14
14
 
15
15
  s.required_ruby_version = ">= 1.9.3"
16
16
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rcomp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
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: 2012-11-25 00:00:00.000000000 Z
12
+ date: 2012-11-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
@@ -91,8 +91,7 @@ dependencies:
91
91
  - - ~>
92
92
  - !ruby/object:Gem::Version
93
93
  version: 0.5.0
94
- description: RComp tests by passing a specified command tests (files) by argument
95
- and comparing the result with expected output.
94
+ description: Command line output testing framework with dead simple tests
96
95
  email:
97
96
  - takeshi91k@gmail.com
98
97
  executables:
@@ -102,7 +101,7 @@ extra_rdoc_files: []
102
101
  files:
103
102
  - .gitignore
104
103
  - .travis.yml
105
- - CHANGELOG.rdoc
104
+ - CHANGELOG.md
106
105
  - Gemfile
107
106
  - Gemfile.lock
108
107
  - LICENSE
@@ -121,8 +120,8 @@ files:
121
120
  - lib/rcomp/actions.rb
122
121
  - lib/rcomp/cli.rb
123
122
  - lib/rcomp/conf.rb
123
+ - lib/rcomp/env.rb
124
124
  - lib/rcomp/helper.rb
125
- - lib/rcomp/initializer.rb
126
125
  - lib/rcomp/path.rb
127
126
  - lib/rcomp/process.rb
128
127
  - lib/rcomp/reporter.rb
@@ -155,7 +154,7 @@ rubyforge_project: rcomp
155
154
  rubygems_version: 1.8.24
156
155
  signing_key:
157
156
  specification_version: 3
158
- summary: A simple framework for testing command line application output.
157
+ summary: A simple framework for testing command line application output
159
158
  test_files:
160
159
  - features/generate.feature
161
160
  - features/init.feature