jinitest 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/jinitest.rb +157 -0
  3. metadata +43 -0
@@ -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
@@ -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: []