smlspec 0.0.5 → 0.0.6

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: d6991ed75c5f26034f05f335944a7ddcd524b9dd
4
- data.tar.gz: abceb8d8cce6a840c2d823821d1b57c3e0f43dc5
3
+ metadata.gz: 39f6feb5a43b36a31bf46b6a5e0be0975d94d9c3
4
+ data.tar.gz: 0e1517ca695de17afbc6bd5ff39c48e2acedb9de
5
5
  SHA512:
6
- metadata.gz: e6a28ba4103305899aa80caa3938f584cca26106137f90394956eedd6b554c432914da159fa9b68a10c55b92ed259d99eaf550fff7efd290a80cdfa2d349f2c1
7
- data.tar.gz: 1e8870d7795d9c5472d42164d28c69e00dc1e17201e70734c54631e0ba68f6e6d30054af0aea068d493a0d2a06e5bd2ebddf265ff336130e10006b4a55bd3188
6
+ metadata.gz: eb5387f637557d0020384609d34b0fb228a8c07d01957780c7b36211fcee1c4403048701e943662ddb001358590248b0c85c137da58bd518310e6a361a621b86
7
+ data.tar.gz: 5e5c2823374179bdaf0e63199e7c8f678d7155cd7b77ef08f9fecfbe75a0747b0f1e4617d304781c5bffa32447bcacf7779d6b8169cb08b1d50b08ab1da8b735
@@ -1,5 +1,10 @@
1
1
  # Change log
2
2
 
3
+ ## 0.0.6
4
+
5
+ - Bug fixes and improvements.
6
+ - Fix crash when runnig command without any arguments.
7
+
3
8
  ## 0.0.5
4
9
  - Add colorize gem as runtime dependency.
5
10
  - Bug fixes and improvements.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- smlspec (0.0.5)
4
+ smlspec (0.0.6)
5
5
  colorize
6
6
  thor
7
7
 
data/Rakefile CHANGED
@@ -6,13 +6,46 @@ task default: :spec
6
6
 
7
7
  desc 'Build gem'
8
8
  task :build do
9
+ guard_against_broken_tests
10
+
9
11
  system "gem build smlspec.gemspec"
10
12
  Dir.glob("*.gem") {|f| system "mv #{f} build" }
11
13
  end
12
14
 
13
15
  desc 'Install gem'
14
16
  task :install do
17
+ guard_against_broken_tests
18
+
15
19
  system "gem uninstall smlspec"
16
20
  newest_build = Dir.glob("build/*.gem").last
17
21
  system "gem install ./#{newest_build}"
18
22
  end
23
+
24
+ desc 'Push to rubygems'
25
+ task :push do
26
+ guard_against_broken_tests
27
+
28
+ newest_build = Dir.glob("build/*.gem").last
29
+ system "gem push ./#{newest_build}"
30
+ end
31
+
32
+ desc 'Run all tests and tell if there are failures'
33
+ task :test_all do
34
+ if tests_passing?
35
+ puts "OK!"
36
+ else
37
+ puts "Errors!"
38
+ end
39
+ end
40
+
41
+ def tests_passing?
42
+ system("rake > /dev/null") && system("cucumber > /dev/null")
43
+ end
44
+
45
+ def guard_against_broken_tests
46
+ unless tests_passing?
47
+ puts "Can't do that with broken tests"
48
+ exit 1
49
+ end
50
+ end
51
+
data/TODO.md CHANGED
@@ -1,19 +1,19 @@
1
1
  # TODOS
2
2
 
3
- ## For version 0.0.5
3
+ ## For version 0.0.6
4
4
 
5
+ - [ ] clean up fixtures folder
6
+ - [ ] refactor binary
7
+ - [ ] show time it took to run tests
5
8
 
6
9
  ## Others
7
10
 
8
- - [ ] make tests of SmlFile isolated, could be done using dependency injection
9
11
  - [ ] allow for other implementations than moscow ml
10
12
  - [ ] work with "load" function
11
- - [ ] show time it took to run tests
12
- - [ ] refactor binary
13
- - [ ] clean up fixtures folder
14
13
 
15
14
  ## Done
16
15
 
16
+ - [x] make tests of SmlFile isolated
17
17
  - [x] append test function to file
18
18
  - [x] write test output parser
19
19
  - [x] make change log
@@ -22,10 +22,10 @@ class Runner
22
22
  end
23
23
 
24
24
  def initialize(input)
25
- @input = input || ""
26
- check_for_correct_input
25
+ ensure_correct_input(input)
26
+ @input = input
27
27
 
28
- @file = SmlFile.new(@input).prepare_tests
28
+ @file = SmlFile.new(@input, formatters: [FormatsLines, FormatsTests]).prepare_tests
29
29
 
30
30
  tmp_file_name = random_name
31
31
 
@@ -39,32 +39,34 @@ class Runner
39
39
  output = TestOutput.new(e.message.split("\n"))
40
40
  puts TestOutputPresenter.parse(output).gsub(tmp_file_name+".sml", @input)
41
41
  ensure
42
- clean_up!
42
+ clean_up!(input)
43
43
  end
44
44
 
45
45
  private
46
46
 
47
- def clean_up!
48
- [".uo", ".ui", ".exe"].each do |s|
49
- FileUtils.rm_f(File.basename(@file.path, ".*") + s)
50
- end
47
+ def clean_up!(input)
48
+ if valid_file_input(input)
49
+ [".uo", ".ui", ".exe"].each do |s|
50
+ FileUtils.rm_f(File.basename(@file.path, ".*") + s)
51
+ end
51
52
 
52
- @file.delete!
53
+ @file.delete!
54
+ end
53
55
  end
54
56
 
55
57
  def random_name
56
58
  Digest::MD5.hexdigest(Time.now.to_s)
57
59
  end
58
60
 
59
- def check_for_correct_input
60
- if !valid_file_input
61
+ def ensure_correct_input(input)
62
+ unless valid_file_input(input)
61
63
  puts "Gimme an sml file, that exists!"
62
- exit 1
64
+ exit 2
63
65
  end
64
66
  end
65
67
 
66
- def valid_file_input
67
- @input && File.exists?(@input) && File.extname(@input) == ".sml"
68
+ def valid_file_input(input)
69
+ input && !input.empty? && File.exists?(input) && File.extname(input) == ".sml"
68
70
  end
69
71
  end
70
72
 
Binary file
Binary file
@@ -12,9 +12,3 @@ Feature: Running SML tests
12
12
  Given I have an invalid SML file
13
13
  When I run smlspec on the file
14
14
  Then I should see a compile error message
15
-
16
- Scenario: Running it without Moscow ML installed
17
- Given I have written an SML file with tests
18
- And I don't have Moscow ML installed
19
- When I run smlspec on the file
20
- Then I should see message saying that I don't have Moscow ML installed
@@ -14,7 +14,7 @@ class FormatsLines
14
14
  @keywords = %w(
15
15
  abstype and andalso as case do datatype div
16
16
  else end eqtype exception extract fn fun functor
17
- handle if in include infix infixr let local mod
17
+ if in include infix infixr let local mod
18
18
  nonfix of op open orelse raise rec sharing sig
19
19
  signature struct structure then type val where
20
20
  with withtype
@@ -4,12 +4,18 @@ class SmlFile
4
4
  class NotCompiled < Exception; end
5
5
  class CannotCompile < Exception; end
6
6
  class NotSaved < Exception; end
7
+ class InvalidFormatterInterface < Exception; end
7
8
 
8
9
  attr_reader :contents, :path
9
10
 
10
- def initialize(path, contents=nil)
11
+ def initialize(path, options={})
11
12
  @path = path
12
- @contents = contents || File.read(@path)
13
+ @contents = options[:content] || File.read(@path)
14
+ @formatters = options[:formatters] || []
15
+
16
+ unless @formatters.all? { |f| f.respond_to?(:format) }
17
+ raise InvalidFormatterInterface
18
+ end
13
19
  end
14
20
 
15
21
  def save_as!(new_path)
@@ -19,8 +25,11 @@ class SmlFile
19
25
  end
20
26
 
21
27
  def prepare_tests
22
- formatted_content = FormatsTests.format(FormatsLines.format(@contents))
23
- self.class.new(nil, formatted_content)
28
+ formatted_content = @formatters.inject(@contents) do |acc, formatter|
29
+ formatter.format(acc)
30
+ end
31
+
32
+ self.class.new(nil, content: formatted_content, formatters: @formatters)
24
33
  end
25
34
 
26
35
  def compile!(destination)
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'smlspec'
3
- s.version = '0.0.5'
3
+ s.version = '0.0.6'
4
4
  s.date = '2012-12-16'
5
5
  s.summary = "Runner for SML tests"
6
6
  s.description = "Gem for running tests in SML files"
@@ -1,13 +1,22 @@
1
1
  require 'spec_helper'
2
- require 'formats_lines'
3
- require 'formats_tests'
4
2
  require 'sml_file'
5
3
 
6
4
  describe SmlFile do
7
5
  before(:each) { clean_tmp }
8
6
  after(:each) { clean_tmp }
9
7
 
10
- let(:file) { SmlFile.new("spec/fixtures/unformatted_tests.sml") }
8
+ let(:file) do
9
+ SmlFile.new("spec/fixtures/unformatted_tests.sml",
10
+ formatters: [double(format: ""), double(format: "")])
11
+ end
12
+
13
+ it "checks that the formatters have a format method" do
14
+ expect do
15
+ SmlFile.new("spec/fixtures/unformatted_tests.sml",
16
+ formatters: [Class.new]
17
+ )
18
+ end.to raise_error SmlFile::InvalidFormatterInterface
19
+ end
11
20
 
12
21
  describe "#save_as!" do
13
22
  before { file.save_as!("tmp/saved_as.sml") }
@@ -23,6 +32,11 @@ describe SmlFile do
23
32
 
24
33
  describe "#prepare_tests" do
25
34
  it "prepares the tests" do
35
+ formatter = double(format: fixture("formatted_tests.sml"))
36
+ file = SmlFile.new("spec/fixtures/unformatted_tests.sml",
37
+ formatters: [formatter])
38
+
39
+ formatter.should_receive(:format)
26
40
  file_with_tests_prepared = file.prepare_tests
27
41
 
28
42
  file_with_tests_prepared.contents.should eq fixture("formatted_tests.sml")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smlspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Pedersen
@@ -14,70 +14,70 @@ dependencies:
14
14
  name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
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
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: cucumber
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: colorize
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: thor
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  description: Gem for running tests in SML files
@@ -87,8 +87,8 @@ executables:
87
87
  extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
- - .gitignore
91
- - .rspec
90
+ - ".gitignore"
91
+ - ".rspec"
92
92
  - CHANGELOG.md
93
93
  - Gemfile
94
94
  - Gemfile.lock
@@ -100,6 +100,8 @@ files:
100
100
  - build/smlspec-0.0.2.gem
101
101
  - build/smlspec-0.0.3.gem
102
102
  - build/smlspec-0.0.4.gem
103
+ - build/smlspec-0.0.5.gem
104
+ - build/smlspec-0.0.6.gem
103
105
  - features/running_tests.feature
104
106
  - features/step_definitions/smlspec_steps.rb
105
107
  - features/support/env.rb
@@ -146,17 +148,17 @@ require_paths:
146
148
  - lib
147
149
  required_ruby_version: !ruby/object:Gem::Requirement
148
150
  requirements:
149
- - - '>='
151
+ - - ">="
150
152
  - !ruby/object:Gem::Version
151
153
  version: '0'
152
154
  required_rubygems_version: !ruby/object:Gem::Requirement
153
155
  requirements:
154
- - - '>='
156
+ - - ">="
155
157
  - !ruby/object:Gem::Version
156
158
  version: '0'
157
159
  requirements: []
158
160
  rubyforge_project:
159
- rubygems_version: 2.1.11
161
+ rubygems_version: 2.2.0
160
162
  signing_key:
161
163
  specification_version: 4
162
164
  summary: Runner for SML tests