jinitest 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 +7 -0
- data/lib/jinitest.rb +157 -0
- metadata +43 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 999ccc2a82fb6d40ec8de5ee28c9453fb5fb481670d3efdd10dc8db1531e6add
|
4
|
+
data.tar.gz: 11159a397a1c7f3df08742abce10a282c3eb7156b7516d6841f34e676e9afc26
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9eef5d8450cc44c36180596296bb6f516f4af163b0d41e25ff19ac0119ba03d96939f0aef00190e6ec48510de2cc62fd4c3bc3158c417fba03ee4c2bf3ec311f
|
7
|
+
data.tar.gz: bf8853ed01718d7182a36b38162bcccce1686269784fa01429335b5c5423db88e8daedcdc1e5de2ca135387784f9baa021a81ae9a0385afc1abd4c5ac316f893
|
data/lib/jinitest.rb
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
module JiniTest
|
2
|
+
MAKE_SETUP = :make_setup
|
3
|
+
|
4
|
+
def self.autorun
|
5
|
+
at_exit {
|
6
|
+
JiniTest.run
|
7
|
+
}
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.run
|
11
|
+
reporter = Reporter.new
|
12
|
+
reporter.render_header
|
13
|
+
suites = Test.runnables.reject { |suite| suite.runnable_methods.empty? }
|
14
|
+
suites.map { |suite| suite.run(reporter) }
|
15
|
+
reporter.render_statistics
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.run_method(klass, method_name, reporter)
|
19
|
+
reporter.inc_runs
|
20
|
+
begin
|
21
|
+
instance = klass.new(method_name, reporter)
|
22
|
+
instance.send(MAKE_SETUP) if instance.respond_to? MAKE_SETUP
|
23
|
+
instance.run
|
24
|
+
reporter.render_test_ok
|
25
|
+
rescue TestError => e
|
26
|
+
reporter.add_failure(e)
|
27
|
+
reporter.render_test_failure
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class Reporter
|
32
|
+
MSG_ASSERT_FAILURE = 'Expected false to be truthy.'
|
33
|
+
|
34
|
+
def initialize
|
35
|
+
@count_runs = 0
|
36
|
+
@count_assertions = 0
|
37
|
+
@count_failures = 0
|
38
|
+
@failures = []
|
39
|
+
end
|
40
|
+
|
41
|
+
def add_failure(e)
|
42
|
+
@count_failures += 1
|
43
|
+
@failures << e
|
44
|
+
end
|
45
|
+
|
46
|
+
def inc_runs
|
47
|
+
@count_runs += 1
|
48
|
+
end
|
49
|
+
|
50
|
+
def inc_assertions
|
51
|
+
@count_assertions += 1
|
52
|
+
end
|
53
|
+
|
54
|
+
def render_test_ok
|
55
|
+
print('.')
|
56
|
+
end
|
57
|
+
|
58
|
+
def render_test_failure
|
59
|
+
print('F')
|
60
|
+
end
|
61
|
+
|
62
|
+
def render_header
|
63
|
+
print "# Running:\r\n\r\n"
|
64
|
+
end
|
65
|
+
|
66
|
+
def render_statistics
|
67
|
+
print "\r\n"
|
68
|
+
print "# Finish:\r\n"
|
69
|
+
print "\r\n"
|
70
|
+
print render_failures, "\r\n"
|
71
|
+
print "\r\n"
|
72
|
+
print "#{@count_runs} runs, #{@count_assertions} assertions, #{@count_failures} failures"
|
73
|
+
print "\r\n"
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
def render_failures
|
79
|
+
text_failures = @failures.map.with_index do |failure, i|
|
80
|
+
info = parse_failure(failure)
|
81
|
+
header = "#{i}) Failure:"
|
82
|
+
body = "#{failure.class_name}##{info[:method_name]} [#{info[:file_path]}:#{info[:line_number]}]:"
|
83
|
+
[header, body].join("\r\n")
|
84
|
+
end
|
85
|
+
|
86
|
+
text_failures.join("\r\n")
|
87
|
+
end
|
88
|
+
|
89
|
+
def parse_failure(failure)
|
90
|
+
place_of_exception = failure.backtrace[1].split(' ')
|
91
|
+
|
92
|
+
info_about_file = place_of_exception[0].split(':')
|
93
|
+
|
94
|
+
{
|
95
|
+
method_name: place_of_exception[1].delete('`\''),
|
96
|
+
file_path: info_about_file[0],
|
97
|
+
line_number: info_about_file[1],
|
98
|
+
}
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
class TestError < StandardError
|
103
|
+
attr_reader :class_name
|
104
|
+
|
105
|
+
def initialize(class_name, msg = '')
|
106
|
+
@class_name = class_name
|
107
|
+
super(msg)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
class Test
|
112
|
+
@@runnables = []
|
113
|
+
|
114
|
+
def self.setup(&block)
|
115
|
+
define_method(JiniTest::MAKE_SETUP, &block)
|
116
|
+
end
|
117
|
+
|
118
|
+
def initialize(method_name, reporter)
|
119
|
+
@method_name = method_name
|
120
|
+
@reporter = reporter
|
121
|
+
end
|
122
|
+
|
123
|
+
def run
|
124
|
+
self.send(@method_name)
|
125
|
+
end
|
126
|
+
|
127
|
+
def assert(a, b)
|
128
|
+
@reporter.inc_assertions
|
129
|
+
result = a == b
|
130
|
+
raise TestError.new(self.class) unless result
|
131
|
+
result
|
132
|
+
end
|
133
|
+
|
134
|
+
def self.runnables
|
135
|
+
@@runnables
|
136
|
+
end
|
137
|
+
|
138
|
+
def self.inherited(klass)
|
139
|
+
self.runnables << klass
|
140
|
+
super
|
141
|
+
end
|
142
|
+
|
143
|
+
def self.runnable_methods
|
144
|
+
self.public_instance_methods(true).grep(/^test_/)
|
145
|
+
end
|
146
|
+
|
147
|
+
def self.run(reporter)
|
148
|
+
test_methods = self.runnable_methods
|
149
|
+
test_methods.each do |method_name|
|
150
|
+
JiniTest.run_method(self, method_name, reporter)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
JiniTest.autorun
|
157
|
+
|
metadata
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jinitest
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jo Ago
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-12-05 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: A simple hello world gem
|
14
|
+
email: zipofar@gmail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/jinitest.rb
|
20
|
+
homepage: https://rubygems.org/gems/jinitest
|
21
|
+
licenses:
|
22
|
+
- MIT
|
23
|
+
metadata: {}
|
24
|
+
post_install_message:
|
25
|
+
rdoc_options: []
|
26
|
+
require_paths:
|
27
|
+
- lib
|
28
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - ">="
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
requirements: []
|
39
|
+
rubygems_version: 3.1.2
|
40
|
+
signing_key:
|
41
|
+
specification_version: 4
|
42
|
+
summary: JiniTest
|
43
|
+
test_files: []
|