pidgin_spec 0.0.0 → 0.0.1

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