pidgin_spec 0.0.0 → 0.0.1

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: f08f4fd9023345ec1aadea869fb7c19c6f025331c833a9cd45bf6cb39e791360
4
- data.tar.gz: 1c40b0e4330cadbdc5b32899400f3167c8c09e0d6a83f45357f93caca03176b2
3
+ metadata.gz: 5ad2761700b44a2bf96a151cd4e31074a755b5a617b0fe18c22da22aa2f20ea3
4
+ data.tar.gz: ce3db04594eaf80b923025b71bebd4a20071a1f46150a26a31a18f5a87cefb4d
5
5
  SHA512:
6
- metadata.gz: 61408984c3aee67823b5e4a33758b9db33cc1ae36869d12478b423d88911f909ea2cae4e2745da1adf848f3ea370a25ff44b221d99858c01fb7f4b3428467468
7
- data.tar.gz: 51eb4ac1ce334c931500f0f8e3d0eec8f997edbe48c4f4d38f9e8a5994dc81c4b20cacf7da34858c6903b45bff50a88babfd749a4bb752c535f240f3f25d0384
6
+ metadata.gz: 7011a4b2a1f48ef58d4eeafdc51c2ea35dc78b07924d083bcbde7c0d2d9c548c25c52510c1a1aeeefc6a811fcaa4c924acf75d78dd08a114c4040574a5e470db
7
+ data.tar.gz: c8245cf3363e3c362ba158fc9a35d0a718174fb3c69296029b39b5bd2edd5ebb3d32cdd2612c105a9e20f4c834577897ad67e3107d1a858c00010dbda6b26aab
@@ -1,11 +1,3 @@
1
- $LOAD_PATH << '.'
2
- require "colorize"
3
- require 'require_all'
4
-
5
-
6
-
7
- require_all 'pidgin_spec'
8
-
9
1
  class PidginSpec
10
2
  def self.describe(desc = nil, &block)
11
3
  puts desc
@@ -21,12 +13,23 @@ class PidginSpec
21
13
  instance_eval(&block)
22
14
  puts "\n#{@spec_count} tests run, #{@fail_count} fail#{"\n\nFailures:\n" if fail_count.nonzero?}".send(@fail_count.zero? ? 'green' : 'red')
23
15
  @failure_messages.each_with_index {|m, index|
24
- puts "#{index + 1}. #{m[:description]}"
25
- puts m[:message].red
16
+ puts "#{index + 1}. #{m[:description]}\n#{"Wetin make am fail".red}: #{format(m[:failed_code])} \n #{m[:message].red}\n#{m[:failed_code_path].magenta}\n\n"
26
17
  }
27
18
  end
28
19
 
29
20
  def describe(des_statement, &block)
30
21
  ExampleGroup.new(des_statement, self, &block)
31
22
  end
23
+
24
+ private
25
+
26
+ def format(str)
27
+ lexer = Rouge::Lexers::Ruby.new.lex(str)
28
+ Rouge::Formatters::Terminal256.new.format(lexer)
29
+ end
32
30
  end
31
+
32
+ require "colorize"
33
+ require "rouge"
34
+ require 'require_all'
35
+ require_rel './pidgin_spec'
@@ -0,0 +1,19 @@
1
+ require_relative './matchers'
2
+
3
+ class Example
4
+ include Matchers
5
+ attr_accessor :passed
6
+ def initialize(des_statement, spec_statement, klass, &block)
7
+ @passed = true
8
+ @spec_statement = spec_statement
9
+ @des_statement = des_statement
10
+ klass.spec_count += 1
11
+ @klass = klass
12
+ @self_klass = self
13
+ instance_eval(&block)
14
+ print '.'.send(@passed ? 'green' : 'red')
15
+ end
16
+ def expect_say(value)
17
+ Expect.new(value, @klass, @self_klass, @spec_statement, @des_statement)
18
+ end
19
+ end
@@ -0,0 +1,12 @@
1
+ class ExampleGroup
2
+ def initialize(des_statement, klass, &block)
3
+ @des_statement = des_statement
4
+ @klass = klass
5
+ instance_eval(&block)
6
+ end
7
+ def e_go(spec_statement, &block)
8
+ Example.new(@des_statement, spec_statement, @klass, &block)
9
+ @spec_statement = spec_statement
10
+ end
11
+ alias_method :e_dey, :e_go
12
+ end
@@ -0,0 +1,48 @@
1
+ class Expect
2
+ class NoMatcherError < StandardError
3
+ end
4
+
5
+ def initialize(value, klass, self_klass, spec_statement, des_statement)
6
+ @klass = klass
7
+ @value = value
8
+ @des_statement = des_statement
9
+ @spec_statement = spec_statement
10
+ @self_klass = self_klass
11
+ end
12
+
13
+ def go(matcher)
14
+
15
+ if matcher.matches?(@value)
16
+ @klass.pass_count += 1
17
+ else
18
+ @klass.fail_count += 1
19
+ @klass.failure_messages << {
20
+ description: "#{@des_statement} #{@spec_statement}",
21
+ message: matcher.failure_message,
22
+ failed_code: failed_code(caller_locations[0]),
23
+ failed_code_path: "#{caller_locations[0].path.to_s}:#{caller_locations[0].lineno.to_s}"
24
+ }
25
+ @self_klass.passed = false
26
+ end
27
+ end
28
+
29
+ def no_go(matcher)
30
+ if !matcher.matches?(@value)
31
+ @klass.pass_count += 1
32
+ else
33
+ @klass.fail_count += 1
34
+ @klass.failure_messages << {
35
+ description: "#{@des_statement} #{@spec_statement}",
36
+ message: matcher.failure_message_when_negated,
37
+ failed_code: failed_code(caller_locations[0]),
38
+ failed_code_path: "#{caller_locations[0].path.to_s}:#{caller_locations[0].lineno.to_s}"
39
+ }
40
+ @self_klass.passed = false
41
+ end
42
+ end
43
+
44
+ private
45
+ def failed_code(caller_trace)
46
+ File.readlines(caller_trace.absolute_path)[caller_trace.lineno - 1].strip
47
+ end
48
+ end
@@ -0,0 +1,13 @@
1
+ module Matchers
2
+ def be(expected)
3
+ Be.new(expected)
4
+ end
5
+
6
+ def dey_equal_to(expected)
7
+ DeyEqualTo.new(expected)
8
+ end
9
+
10
+ def end_with(*expected)
11
+ EndWith.new(expected)
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ module Matchers
2
+ class BaseMatcher
3
+ def initialize(expected)
4
+ @expected = expected
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,16 @@
1
+ module Matchers
2
+ class Be < BaseMatcher
3
+ def matches?(value)
4
+ @value = value
5
+ @value.is_a? @expected
6
+ end
7
+
8
+ def failure_message_when_negated
9
+ "I bin dey expect say #{@value} no go be #{@expected}, but e con be #{@expected}"
10
+ end
11
+
12
+ def failure_message
13
+ "I bin dey expect #{value} go be #{@expected} but e no be am at all"
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ module Matchers
2
+ class DeyEqualTo < BaseMatcher
3
+
4
+ def matches?(value)
5
+ @value = value
6
+ @expected == value
7
+ end
8
+
9
+ def failure_message_when_negated
10
+ "You bin dey expect say #{@value} no go equal #{@expected}, but e con equal"
11
+ end
12
+
13
+ def failure_message
14
+ "You bin dey expect #{@expected} but na #{@value} dey hia o"
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,30 @@
1
+ module Matchers
2
+ class EndWith < BaseMatcher
3
+ def initialize(expected)
4
+ @expected = expected.length == 1 ? expected.first : expected
5
+ end
6
+
7
+ def matches?(value)
8
+ @value = value
9
+ if @expected.is_a?(String) || @expected.is_a?(Array)
10
+ @value[-@expected.length, @expected.length] == @expected
11
+ else
12
+ @value.last == @expected
13
+ end
14
+ # if value.is_a?(String) && @expected.is_a?(String)
15
+ # @value[-@expected[0].length, @expected[0].length] == @expected[0]
16
+ # elsif value.is_a? Array
17
+ # array_len = @expected.length
18
+ # @value.last(array_len) == @expected
19
+ # end
20
+ end
21
+
22
+ def failure_message_when_negated
23
+ "You bin dey expect say #{@value} no go end with #{@expected}, but e con end with am"
24
+ end
25
+
26
+ def failure_message
27
+ "You bin dey expect make #{@value} end with #{@expected}, but e no con end with am"
28
+ end
29
+ end
30
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pidgin_spec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ezenwa ogbonna
@@ -9,7 +9,61 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2019-11-19 00:00:00.000000000 Z
12
- dependencies: []
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: colorize
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.8'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.8.1
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0.8'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.8.1
33
+ - !ruby/object:Gem::Dependency
34
+ name: rouge
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 3.13.0
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '3.13'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 3.13.0
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: '3.13'
53
+ - !ruby/object:Gem::Dependency
54
+ name: require_all
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '3.00'
60
+ type: :runtime
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '3.00'
13
67
  description: A simple DSL for writing unit tests in Nigerian pidgin language. Pidgin
14
68
  is a grammatically simplified form of communication in Nigeria and other West african
15
69
  countries
@@ -19,6 +73,14 @@ extensions: []
19
73
  extra_rdoc_files: []
20
74
  files:
21
75
  - lib/pidgin_spec.rb
76
+ - lib/pidgin_spec/example.rb
77
+ - lib/pidgin_spec/example_group.rb
78
+ - lib/pidgin_spec/expect.rb
79
+ - lib/pidgin_spec/matchers.rb
80
+ - lib/pidgin_spec/matchers/base_matcher.rb
81
+ - lib/pidgin_spec/matchers/be.rb
82
+ - lib/pidgin_spec/matchers/dey_equal_to.rb
83
+ - lib/pidgin_spec/matchers/end_with.rb
22
84
  homepage: https://rubygems.org/gems/pidgin_spec
23
85
  licenses:
24
86
  - MIT