rcomp 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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