smlspec 0.0.5 → 0.0.6

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.
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