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 +4 -4
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +1 -1
- data/Rakefile +33 -0
- data/TODO.md +5 -5
- data/bin/smlspec +16 -14
- data/build/smlspec-0.0.5.gem +0 -0
- data/build/smlspec-0.0.6.gem +0 -0
- data/features/running_tests.feature +0 -6
- data/lib/formats_lines.rb +1 -1
- data/lib/sml_file.rb +13 -4
- data/smlspec.gemspec +1 -1
- data/spec/sml_file_spec.rb +17 -3
- metadata +18 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 39f6feb5a43b36a31bf46b6a5e0be0975d94d9c3
|
4
|
+
data.tar.gz: 0e1517ca695de17afbc6bd5ff39c48e2acedb9de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb5387f637557d0020384609d34b0fb228a8c07d01957780c7b36211fcee1c4403048701e943662ddb001358590248b0c85c137da58bd518310e6a361a621b86
|
7
|
+
data.tar.gz: 5e5c2823374179bdaf0e63199e7c8f678d7155cd7b77ef08f9fecfbe75a0747b0f1e4617d304781c5bffa32447bcacf7779d6b8169cb08b1d50b08ab1da8b735
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
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.
|
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
|
data/bin/smlspec
CHANGED
@@ -22,10 +22,10 @@ class Runner
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def initialize(input)
|
25
|
-
|
26
|
-
|
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
|
-
|
49
|
-
|
50
|
-
|
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
|
-
|
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
|
60
|
-
|
61
|
+
def ensure_correct_input(input)
|
62
|
+
unless valid_file_input(input)
|
61
63
|
puts "Gimme an sml file, that exists!"
|
62
|
-
exit
|
64
|
+
exit 2
|
63
65
|
end
|
64
66
|
end
|
65
67
|
|
66
|
-
def valid_file_input
|
67
|
-
|
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
|
data/lib/formats_lines.rb
CHANGED
@@ -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
|
-
|
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
|
data/lib/sml_file.rb
CHANGED
@@ -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,
|
11
|
+
def initialize(path, options={})
|
11
12
|
@path = path
|
12
|
-
@contents =
|
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 =
|
23
|
-
|
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)
|
data/smlspec.gemspec
CHANGED
data/spec/sml_file_spec.rb
CHANGED
@@ -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)
|
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.
|
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.
|
161
|
+
rubygems_version: 2.2.0
|
160
162
|
signing_key:
|
161
163
|
specification_version: 4
|
162
164
|
summary: Runner for SML tests
|