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 +4 -4
- data/lib/pidgin_spec.rb +13 -10
- data/lib/pidgin_spec/example.rb +19 -0
- data/lib/pidgin_spec/example_group.rb +12 -0
- data/lib/pidgin_spec/expect.rb +48 -0
- data/lib/pidgin_spec/matchers.rb +13 -0
- data/lib/pidgin_spec/matchers/base_matcher.rb +7 -0
- data/lib/pidgin_spec/matchers/be.rb +16 -0
- data/lib/pidgin_spec/matchers/dey_equal_to.rb +17 -0
- data/lib/pidgin_spec/matchers/end_with.rb +30 -0
- metadata +64 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ad2761700b44a2bf96a151cd4e31074a755b5a617b0fe18c22da22aa2f20ea3
|
4
|
+
data.tar.gz: ce3db04594eaf80b923025b71bebd4a20071a1f46150a26a31a18f5a87cefb4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7011a4b2a1f48ef58d4eeafdc51c2ea35dc78b07924d083bcbde7c0d2d9c548c25c52510c1a1aeeefc6a811fcaa4c924acf75d78dd08a114c4040574a5e470db
|
7
|
+
data.tar.gz: c8245cf3363e3c362ba158fc9a35d0a718174fb3c69296029b39b5bd2edd5ebb3d32cdd2612c105a9e20f4c834577897ad67e3107d1a858c00010dbda6b26aab
|
data/lib/pidgin_spec.rb
CHANGED
@@ -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,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.
|
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
|