cspec 0.1.5 → 0.2.0

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
  SHA256:
3
- metadata.gz: 714f4f91b2400d6116f74df4ffbe5ca1bc9c5bec537e732e40be0b98a7725257
4
- data.tar.gz: fba0bb895cee486513aa75eca6b822bf4dc111e9f3036638addbfb86a56d2088
3
+ metadata.gz: cda46241abf4da89965884153263bde46dca2f2861f260797ae0d7e0dd9112f5
4
+ data.tar.gz: c313da5f4b11eba2dc9f666d39377ae2c5d53780dfbf3a7521c97b16d02cd8d0
5
5
  SHA512:
6
- metadata.gz: da0f7fe559c1e5cc941cda78d4d2eeb2b78a29b69364c5b0c92581772d7447cad98a5f54ce035dd243020d08487dd5d33c3254d8ad58200493d5aaad17ad11a2
7
- data.tar.gz: a5da9ae8fd9f37aa85a77f5f8ea9ba56a9b89d38bfdc50724398b49722ee166ffb106515f65137d9a841d572793317265def0e2a173292ef3ccdbf45d7c39418
6
+ metadata.gz: a31c47d67801b6e6efd5e7ad7903e3bdec312c8df734e84768b27f707f6a89c3b0b14545c14d8450416afc3d331647fe209b3094652a68b690abb02405afcb30
7
+ data.tar.gz: 6132fb403d49a14b014ffeade47400dc2c2e1c95e207573e64d50acae0bdfcab40f7fe9e6e2891ae2b563a415bd818177c89a86dce4f97a286cad93efd9cdb7b
data/.rubocop_todo.yml CHANGED
@@ -1,28 +1,12 @@
1
- # This configuration was generated by
2
- # `rubocop --auto-gen-config`
3
- # on 2022-03-04 05:00:00 UTC using RuboCop version 1.25.1.
4
- # The point is for the user to remove these configuration records
5
- # one by one as the offenses are removed from the code base.
6
- # Note that changes in the inspected code, or installation of new
7
- # versions of RuboCop, may require this file to be generated again.
8
-
9
- # Offense count: 3
10
- # Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
11
- # IgnoredMethods: refine
12
1
  Metrics/BlockLength:
13
2
  Max: 50
14
3
 
15
- # Offense count: 1
16
- # Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
17
4
  Metrics/MethodLength:
18
5
  Max: 11
19
6
 
20
- # Offense count: 1
21
- # Configuration parameters: CountKeywordArgs, MaxOptionalParameters.
22
7
  Metrics/ParameterLists:
23
8
  Max: 6
24
9
 
25
- # Offense count: 1
26
10
  Security/Eval:
27
11
  Exclude:
28
- - 'lib/cspec.rb'
12
+ - 'lib/cspec/data_type.rb'
data/Gemfile.lock CHANGED
@@ -1,12 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cspec (0.1.4)
4
+ cspec (0.1.5)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
9
  diff-lcs (1.5.0)
10
+ docile (1.4.0)
10
11
  rake (10.5.0)
11
12
  rspec (3.11.0)
12
13
  rspec-core (~> 3.11.0)
@@ -21,6 +22,12 @@ GEM
21
22
  diff-lcs (>= 1.2.0, < 2.0)
22
23
  rspec-support (~> 3.11.0)
23
24
  rspec-support (3.11.0)
25
+ simplecov (0.21.2)
26
+ docile (~> 1.1)
27
+ simplecov-html (~> 0.11)
28
+ simplecov_json_formatter (~> 0.1)
29
+ simplecov-html (0.12.3)
30
+ simplecov_json_formatter (0.1.4)
24
31
 
25
32
  PLATFORMS
26
33
  ruby
@@ -30,6 +37,7 @@ DEPENDENCIES
30
37
  cspec!
31
38
  rake (~> 10.0)
32
39
  rspec (~> 3.0)
40
+ simplecov
33
41
 
34
42
  BUNDLED WITH
35
43
  1.17.2
data/cspec.gemspec CHANGED
@@ -41,4 +41,5 @@ Gem::Specification.new do |spec|
41
41
  spec.add_development_dependency 'bundler', '~> 1.17'
42
42
  spec.add_development_dependency 'rake', '~> 10.0'
43
43
  spec.add_development_dependency 'rspec', '~> 3.0'
44
+ spec.add_development_dependency 'simplecov'
44
45
  end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+ gem 'cspec'
@@ -0,0 +1,13 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ cspec (0.1.4)
5
+
6
+ PLATFORMS
7
+ ruby
8
+
9
+ DEPENDENCIES
10
+ cspec
11
+
12
+ BUNDLED WITH
13
+ 1.17.2
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'cspec'
4
+
5
+ class MyClass
6
+ def greet(fname, sname)
7
+ "Hello, #{fname} #{sname}"
8
+ end
9
+ end
10
+
11
+ result = CSpec::Runner.run!("#{Dir.pwd}/specs.csv")
12
+ puts "Success: #{result}"
13
+ exit result ? 0 : 1
@@ -0,0 +1,2 @@
1
+ class,name,type,method,method_arg_1,method_arg_2,expected
2
+ MyClass,my test,instance,greent,Bob,Jones,"Hello, Bo Jones"
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CSpec
4
+ module CodeExec
5
+ def self.do_instance(spec)
6
+ class_under_test = Object.const_get(spec.class)
7
+ instance_under_test = class_under_test.new(*spec.initialization_args)
8
+ instance_under_test.send(spec.method, *spec.method_args)
9
+ end
10
+
11
+ def self.do_class(spec)
12
+ class_under_test = Object.const_get(spec.class)
13
+ class_under_test.send(spec.method, *spec.method_args)
14
+ end
15
+
16
+ def self.do(spec)
17
+ case spec.type
18
+ when 'class'
19
+ do_class(spec)
20
+ when 'instance'
21
+ do_instance(spec)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CSpec
4
+ module DataType
5
+ def self.convert_all(inputs)
6
+ return nil unless inputs
7
+
8
+ inputs.map { |input| convert(input) }
9
+ end
10
+
11
+ def self.convert(input)
12
+ return input unless input.instance_of?(String)
13
+
14
+ input = input.strip
15
+ return input.to_f if input =~ /^\d+\.\d+$/
16
+ return input.to_i if input =~ /^\d+$/
17
+ return eval(input) if input =~ /^\[.*\]$/
18
+ return nil if ['', nil, 'nil'].include?(input)
19
+
20
+ input.to_s
21
+ end
22
+ end
23
+ end
data/lib/cspec/loader.rb CHANGED
@@ -1,9 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'spec'
4
+
3
5
  module CSpec
4
6
  module Loader
5
7
  def self.load(filename)
6
- ::CSV.open(filename, headers: :first_row).map(&:to_h)
8
+ specs = ::CSV.open(filename, headers: :first_row).map(&:to_h)
9
+ specs.map { |spec| ::CSpec::Spec.new(process_args(spec)) }
7
10
  end
8
11
 
9
12
  def self.process_args(spec)
@@ -22,9 +25,7 @@ module CSpec
22
25
 
23
26
  def self.validate(filename)
24
27
  headers = CSV.open(filename, &:readline)
25
- %w[class type name method expected].map do |required_header|
26
- "Need header: #{required_header}" unless headers.include?(required_header)
27
- end.reject(&:nil?)
28
+ ::CSpec::Validator.validate(headers)
28
29
  end
29
30
  end
30
31
  end
data/lib/cspec/result.rb CHANGED
@@ -2,38 +2,29 @@
2
2
 
3
3
  module CSpec
4
4
  class Result
5
- attr_reader :name, :class, :method, :error, :description, :details
5
+ attr_reader :spec, :error
6
6
 
7
7
  def self.success?(results)
8
8
  results.count { |r| !r.error.nil? }.zero?
9
9
  end
10
10
 
11
11
  def self.from_spec(spec, error = nil)
12
- Result.new(spec['name'], spec['class'], spec['method'],
13
- error, spec['description'], nil)
12
+ Result.new(spec, error)
14
13
  end
15
14
 
16
- def initialize(name, klass, method, error, description, details)
17
- @name = name
15
+ def initialize(spec, error)
16
+ @spec = spec
18
17
  @error = error
19
- @class = klass
20
- @method = method
21
- @description = description
22
- @details = details
23
18
  end
24
19
 
25
20
  def ==(other)
26
- name == other.name &&
27
- self.class == other.class &&
28
- method == other.method &&
29
- error == other.error &&
30
- description == other.description &&
31
- details == other.details
21
+ error == other.error &&
22
+ spec == other.spec
32
23
  end
33
24
 
34
25
  def to_s
35
- "name: #{name}, class: #{self.class}, method: #{method}," \
36
- " error: #{error}, description: #{description}, details: #{details}"
26
+ "spec: #{spec}\n" \
27
+ "error: #{error}"
37
28
  end
38
29
  end
39
30
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CSpec
4
+ module ResultsOutputter
5
+ def self.display(results)
6
+ results.each do |r|
7
+ puts r
8
+ end
9
+ end
10
+ end
11
+ end
data/lib/cspec/runner.rb CHANGED
@@ -19,9 +19,9 @@ module CSpec
19
19
 
20
20
  def self.run(specs)
21
21
  specs.map do |spec|
22
- result = ::CSpec::DataType.convert(::CSpec::Executer.do(spec))
23
- expected = ::CSpec::DataType.convert(spec[:expected])
24
- error_msg = "Expected #{spec[:expected]}, got: #{result}" if result != expected
22
+ result = ::CSpec::CodeExec.do(spec)
23
+ expected = ::CSpec::DataType.convert(spec.expected)
24
+ error_msg = "Expected #{spec.expected}, got: #{result}" if result != expected
25
25
  Result.from_spec(spec, error_msg)
26
26
  rescue StandardError => e
27
27
  Result.from_spec(spec, e.inspect)
data/lib/cspec/spec.rb ADDED
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CSpec
4
+ class Spec
5
+ attr_reader :class,
6
+ :name,
7
+ :type,
8
+ :method,
9
+ :method_args,
10
+ :initialization_args,
11
+ :expected
12
+
13
+ def initialize(hash)
14
+ @class = hash['class']
15
+ @name = hash['name']
16
+ @type = hash['type']
17
+ @method = hash['method']
18
+ @method_args = ::CSpec::DataType.convert_all(hash['method_args'])
19
+ @initialization_args = ::CSpec::DataType.convert_all(hash['initialization_args'])
20
+ @expected = hash['expected']
21
+ end
22
+
23
+ def ==(other)
24
+ name == other.name &&
25
+ self.class == other.class &&
26
+ method == other.method &&
27
+ type == other.type &&
28
+ method_args == other.method_args &&
29
+ initialization_args == other.initialization_args
30
+ end
31
+
32
+ def to_s
33
+ "name: #{name}, class: #{self.class}, method: #{method},"
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CSpec
4
+ module Validator
5
+ def self.validate(headers)
6
+ %w[class type name method expected].map do |required_header|
7
+ "Need header: #{required_header}" unless headers.include?(required_header)
8
+ end.reject(&:nil?)
9
+ end
10
+ end
11
+ end
data/lib/cspec/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Cspec
4
- VERSION = '0.1.5'
4
+ VERSION = '0.2.0'
5
5
  end
data/lib/cspec.rb CHANGED
@@ -4,48 +4,12 @@ require 'cspec/version'
4
4
  require 'cspec/runner'
5
5
  require 'cspec/loader'
6
6
  require 'cspec/result'
7
+ require 'cspec/code_exec'
8
+ require 'cspec/data_type'
9
+ require 'cspec/validator'
10
+ require 'cspec/results_outputter'
7
11
 
8
12
  require 'csv'
9
13
 
10
14
  module CSpec
11
- module ResultsOutputter
12
- def self.display(results)
13
- results.each do |r|
14
- puts r
15
- end
16
- end
17
- end
18
-
19
- module Executer
20
- def self.do_instance(spec)
21
- class_under_test = Object.const_get(spec['class'])
22
- instance_under_test = class_under_test.new(*spec['initialization_args'])
23
- instance_under_test.send(spec['method'], *spec['method_args'])
24
- end
25
-
26
- def self.do_class(spec)
27
- class_under_test = Object.const_get(spec['class'])
28
- class_under_test.send(spec['method'], *spec['method_args'])
29
- end
30
-
31
- def self.do(spec)
32
- case spec[:type]
33
- when 'class'
34
- do_class(spec)
35
- when 'instance'
36
- do_instance(spec)
37
- end
38
- end
39
- end
40
-
41
- module DataType
42
- def self.convert(input)
43
- return input.to_f if input =~ /^\d+\.\d+$/
44
- return input.to_i if input =~ /^\d+$/
45
- return eval(input) if input =~ /^\[.*\]$/
46
- return nil if ['', nil, 'nil'].include?(input)
47
-
48
- input.to_s
49
- end
50
- end
51
15
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jarrod Folino
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-05 00:00:00.000000000 Z
11
+ date: 2022-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  description: A testing framework to run unit tests via csv
56
70
  email:
57
71
  - jarrod.folino@coderacademy.edu.au
@@ -73,6 +87,10 @@ files:
73
87
  - bin/console
74
88
  - bin/setup
75
89
  - cspec.gemspec
90
+ - examples/advance/Gemfile
91
+ - examples/advance/Gemfile.lock
92
+ - examples/advance/myspec.rb
93
+ - examples/advance/specs.csv
76
94
  - examples/basic/Gemfile
77
95
  - examples/basic/Gemfile.lock
78
96
  - examples/basic/myspec.rb
@@ -86,9 +104,14 @@ files:
86
104
  - examples/method_args/myspec.rb
87
105
  - examples/method_args/specs.csv
88
106
  - lib/cspec.rb
107
+ - lib/cspec/code_exec.rb
108
+ - lib/cspec/data_type.rb
89
109
  - lib/cspec/loader.rb
90
110
  - lib/cspec/result.rb
111
+ - lib/cspec/results_outputter.rb
91
112
  - lib/cspec/runner.rb
113
+ - lib/cspec/spec.rb
114
+ - lib/cspec/validator.rb
92
115
  - lib/cspec/version.rb
93
116
  homepage: https://github.com/jarroddalefolino/cspec
94
117
  licenses: