examiner 0.1.0 → 0.2.0

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
2
  SHA1:
3
- metadata.gz: 47e2a6a62cf3492f80d7e9e1e6025c2efea11e49
4
- data.tar.gz: 8f06bf636a2da099d282209e5e018069d13684bc
3
+ metadata.gz: f1799a2bafa8549f65627403149d87d4cc005a61
4
+ data.tar.gz: 40684b52306eb976819c05daf9bb6e73e82ceb05
5
5
  SHA512:
6
- metadata.gz: ad52fa7af0abfadcd4ea88bd9f3c4f9352b72362e2925db404362d79f3416100f67c21de99360f735e73d8275a0e345fc4ac7bed1817effea34772a9d8915391
7
- data.tar.gz: 8fa1fd9f36692ed873f77ab693ebcc49855649a6237ab61250b04e828fce137dff06856cc8140882e71b12ade06ce5abebb70391d2bb995524c11e0d8086e4e9
6
+ metadata.gz: 6c656506f027cc09729c0980a1710012f9f72a26bcfee10b5713a1da0984fbfe214582cb0cb3168b1c9b708cc3b8fea5e021e67b8d92df0d54dd465c7a7bdd04
7
+ data.tar.gz: 70d1c3ef7792ed8398527c4e22eb4e1a5884ed355d191006277c9393597f34c588eeb82bd5cff91a1af2bf7872ae3e823375c1bab5fade2b9862f6706fcc6087
data/README.md CHANGED
@@ -3,11 +3,9 @@
3
3
 
4
4
  # Examiner
5
5
 
6
- Grade a student's exercise solution.
6
+ Grade a student's exercise solution, assuming:
7
7
 
8
- Assumptions:
9
-
10
- - The exercise uses [minitest](https://github.com/seattlerb/minitest) to be checkied
8
+ - The exercise uses [minitest](https://github.com/seattlerb/minitest) to be checked
11
9
  - There is a `Rakefile` in the exercise folder
12
10
 
13
11
  ## Installation
@@ -20,7 +18,9 @@ gem 'examiner'
20
18
 
21
19
  And then execute:
22
20
 
23
- $ bundle
21
+ ```bash
22
+ $ bundle
23
+ ```
24
24
 
25
25
  ## Usage
26
26
 
@@ -31,9 +31,13 @@ the following code.
31
31
  exercise_directory = "/path/to/student_exercise_with_rakefile"
32
32
 
33
33
  runner = Examiner::RakeRunner.new
34
- runner.run exercise_directory
35
- if runner.success?
34
+ begin
35
+ runner.run exercise_directory
36
36
  puts "Results: #{runner.tests - runner.failures}/#{runner.tests}"
37
+ rescue Examiner::RakefileMissingError => e
38
+ puts "Folder does not have any Rakefile"
39
+ rescue Examiner::MissingDefaultRakeTaskError => e
40
+ puts "Could not launch tests with 'rake'"
37
41
  end
38
42
 
39
43
  # You can display stdout and stderr
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["seb@saunier.me"]
11
11
  spec.summary = %q{Grade a student's exercise solution using rake and minitest}
12
12
  spec.description = spec.summary
13
- spec.homepage = ""
13
+ spec.homepage = "http://github.com/ssaunier/examiner"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
@@ -18,6 +18,6 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.6"
21
+ spec.add_development_dependency "bundler", "~> 1.5"
22
22
  spec.add_development_dependency "rake"
23
23
  end
@@ -22,6 +22,13 @@ module Examiner
22
22
  end
23
23
  end
24
24
 
25
+ def default_rake?(lines)
26
+ lines.reverse_each.each do |line|
27
+ return false if /Don't know how to build task 'default'/.match line
28
+ end
29
+ true
30
+ end
31
+
25
32
  def success?
26
33
  @success
27
34
  end
@@ -2,6 +2,9 @@ require 'open3'
2
2
  require_relative 'minitest_parser'
3
3
 
4
4
  module Examiner
5
+ class RakefileMissingError < StandardError; end
6
+ class MissingDefaultRakeTaskError < StandardError; end
7
+
5
8
  class RakeRunner
6
9
  attr_reader :stdout_lines, :stderr_lines
7
10
  attr_reader :tests, :failures
@@ -13,27 +16,29 @@ module Examiner
13
16
  end
14
17
 
15
18
  def run(directory)
16
- return unless rakefile?(directory)
19
+ raise RakefileMissingError.new(directory) unless rakefile?(directory)
17
20
 
18
21
  Open3.popen3('rake', chdir: directory) do |_, stdout, stderr, wait_thr|
19
- @stdout_lines, @stderr_lines = stdout.readlines, stderr_lines
22
+ @stdout_lines, @stderr_lines = stdout.readlines, stderr.readlines
23
+ parse_stderr(directory)
20
24
  parse_stdout
21
25
  end
22
26
  end
23
27
 
24
- def success?
25
- @success
26
- end
27
-
28
28
  private
29
29
 
30
+ def parse_stderr(directory)
31
+ unless MinitestParser.new.default_rake?(@stderr_lines)
32
+ raise MissingDefaultRakeTaskError.new(directory)
33
+ end
34
+ end
35
+
30
36
  def parse_stdout
31
37
  parser = MinitestParser.new
32
38
  parser.parse @stdout_lines
33
39
  if parser.success?
34
40
  @tests = parser.tests
35
41
  @failures = parser.failures
36
- @success = true
37
42
  end
38
43
  end
39
44
 
@@ -1,3 +1,3 @@
1
1
  module Examiner
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -6,13 +6,11 @@ module Exmanier
6
6
  let(:runner) { Examiner::RakeRunner.new }
7
7
 
8
8
  it "should handle a folder without Rakefile" do
9
- runner.run directory("no_rake_file")
10
- runner.success?.must_equal false
9
+ lambda { runner.run directory("no_rake_file") }.must_raise Examiner::RakefileMissingError
11
10
  end
12
11
 
13
12
  it "should be successful for 1_test_0_failure use case" do
14
13
  runner.run directory("1_test_0_failure")
15
- runner.success?.must_equal true
16
14
  runner.tests.must_equal 1
17
15
  runner.failures.must_equal 0
18
16
  runner.stdout_lines.wont_be_empty
@@ -21,7 +19,6 @@ module Exmanier
21
19
 
22
20
  it "should be successful for 2_tests_1_failure use case" do
23
21
  runner.run directory("2_tests_1_failure")
24
- runner.success?.must_equal true
25
22
  runner.tests.must_equal 2
26
23
  runner.failures.must_equal 1
27
24
  runner.stdout_lines.wont_be_empty
@@ -30,7 +27,13 @@ module Exmanier
30
27
 
31
28
  it "should handle a file with syntax errors" do
32
29
  runner.run directory("syntax_error")
33
- runner.success?.must_equal false
30
+ runner.stderr_lines.wont_be_empty
31
+ runner.tests.must_equal 0
32
+ runner.failures.must_equal 0
33
+ end
34
+
35
+ it "should handle a folder with an empty rakefile" do
36
+ lambda { runner.run directory("empty_rakefile") }.must_raise Examiner::MissingDefaultRakeTaskError
34
37
  end
35
38
 
36
39
  def directory(name)
File without changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: examiner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastien Saunier
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-27 00:00:00.000000000 Z
11
+ date: 2014-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.6'
19
+ version: '1.5'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.6'
26
+ version: '1.5'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -61,8 +61,9 @@ files:
61
61
  - spec/spec_helper.rb
62
62
  - spec/support/1_test_0_failure/Rakefile
63
63
  - spec/support/2_tests_1_failure/Rakefile
64
+ - spec/support/empty_rakefile/Rakefile
64
65
  - spec/support/syntax_error/Rakefile
65
- homepage: ''
66
+ homepage: http://github.com/ssaunier/examiner
66
67
  licenses:
67
68
  - MIT
68
69
  metadata: {}
@@ -92,4 +93,5 @@ test_files:
92
93
  - spec/spec_helper.rb
93
94
  - spec/support/1_test_0_failure/Rakefile
94
95
  - spec/support/2_tests_1_failure/Rakefile
96
+ - spec/support/empty_rakefile/Rakefile
95
97
  - spec/support/syntax_error/Rakefile