theorem 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/bin/theorize +5 -0
- data/src/harness.rb +40 -0
- data/src/hypothesis.rb +137 -0
- metadata +117 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 82f4b3d0f32345396cdbc66fc1d28d00d014f3576c8cf36e18eb355913fd34cd
|
4
|
+
data.tar.gz: ac2241928677901a46a9e12fb980e7a787f9e43ede2c7bf862a0bb3277fe6527
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2233e6daab124321a5f83dda68b09b8159f1561afb5b9cb8c2f1b626170dce551ed1a833164fc2e58cc5a02a86f216b0be95057b4f8aee6b2c986c3928c10837
|
7
|
+
data.tar.gz: 7b4432d63c2a4bdc6c18875b7fdecc27cb14412fcdbaf8d3867fd31863ff8173faa21d2e1b37db65848af72571e7656ebf5ce0a31ed8d21697f2412a9f052976
|
data/bin/theorize
ADDED
data/src/harness.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require_relative './hypothesis'
|
2
|
+
require 'extended_dir'
|
3
|
+
|
4
|
+
# module
|
5
|
+
module Theorem
|
6
|
+
module Hypothesis
|
7
|
+
on_completed_test do |test|
|
8
|
+
print test.failed? ? 'X' : '.'
|
9
|
+
end
|
10
|
+
|
11
|
+
# harness
|
12
|
+
class Harness
|
13
|
+
def self.locate_tests(dir)
|
14
|
+
ExtendedDir.require_all("./#{dir}")
|
15
|
+
|
16
|
+
Hypothesis.registry
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.run!(dir)
|
20
|
+
test_cases = locate_tests(dir)
|
21
|
+
total_count = test_cases.map do |test_case|
|
22
|
+
test_case.tests.size
|
23
|
+
end.inject(&:+)
|
24
|
+
|
25
|
+
puts "Total tests #{total_count}"
|
26
|
+
|
27
|
+
results = test_cases.map(&:run!).flatten
|
28
|
+
|
29
|
+
puts "\n\nSummary\n-------"
|
30
|
+
|
31
|
+
failed_tests = results.select(&:failed?)
|
32
|
+
failed_tests.each do |failure|
|
33
|
+
puts "Failure in #{failure.name}\nError: #{failure.error}\nBacktrace:\n------\n#{failure.error.backtrace.join("\n")}"
|
34
|
+
end
|
35
|
+
|
36
|
+
exit failed_tests.any? ? 1 : 0
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/src/hypothesis.rb
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Theorem
|
4
|
+
# entrypoint
|
5
|
+
module Hypothesis
|
6
|
+
# beaker
|
7
|
+
def self.registry
|
8
|
+
@registry ||= []
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.add_to_registry(klass)
|
12
|
+
registry << klass
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.on_completed_test(&block)
|
16
|
+
@completed_tests ||= []
|
17
|
+
@completed_tests << block
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.completed_test_subscribers
|
21
|
+
@completed_tests
|
22
|
+
end
|
23
|
+
|
24
|
+
class Beaker
|
25
|
+
def initialize
|
26
|
+
@state = []
|
27
|
+
end
|
28
|
+
|
29
|
+
def run!(ctx)
|
30
|
+
ctx.instance_exec @state, ctx do |state, ctx|
|
31
|
+
state.each do |b|
|
32
|
+
ctx.instance_eval &b
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def prepare(&block)
|
38
|
+
@state << block
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# error class
|
43
|
+
class CompletedTest
|
44
|
+
attr_reader :name, :error
|
45
|
+
|
46
|
+
def initialize(name, error = nil)
|
47
|
+
@name = name
|
48
|
+
@error = error
|
49
|
+
end
|
50
|
+
|
51
|
+
def failed?
|
52
|
+
!@error.nil?
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
# test
|
58
|
+
class Test
|
59
|
+
def initialize(name, beaker, &block)
|
60
|
+
@name = name
|
61
|
+
@block = block
|
62
|
+
end
|
63
|
+
|
64
|
+
attr_reader :block, :name
|
65
|
+
|
66
|
+
def run!(ctx)
|
67
|
+
ctx.instance_exec self, &block
|
68
|
+
nil
|
69
|
+
rescue Exception => ex
|
70
|
+
ex
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.included(klass)
|
75
|
+
klass.extend ClassMethods
|
76
|
+
klass.instance_eval do
|
77
|
+
@before_all ||= Beaker.new
|
78
|
+
@tests = []
|
79
|
+
@completed_tests = []
|
80
|
+
@self = new
|
81
|
+
end
|
82
|
+
Hypothesis.add_to_registry(klass)
|
83
|
+
end
|
84
|
+
|
85
|
+
# module
|
86
|
+
module ClassMethods
|
87
|
+
def inherited(klass)
|
88
|
+
klass.include(Hypothesis)
|
89
|
+
klass.instance_exec self do |me|
|
90
|
+
@parent_before_all ||= []
|
91
|
+
@parent_before_all << me.before_all_beaker
|
92
|
+
end
|
93
|
+
super
|
94
|
+
end
|
95
|
+
|
96
|
+
def before_all(&block)
|
97
|
+
@before_all.prepare(&block)
|
98
|
+
end
|
99
|
+
|
100
|
+
def tests
|
101
|
+
@tests
|
102
|
+
end
|
103
|
+
|
104
|
+
def before_all_beaker
|
105
|
+
@before_all
|
106
|
+
end
|
107
|
+
|
108
|
+
def test(name, &block)
|
109
|
+
@tests << Test.new(name, @before_all, &block)
|
110
|
+
end
|
111
|
+
|
112
|
+
def run!
|
113
|
+
test_case = new
|
114
|
+
@parent_before_all&.each do |beaker|
|
115
|
+
beaker.run!(test_case)
|
116
|
+
end
|
117
|
+
@before_all.run!(test_case)
|
118
|
+
results = []
|
119
|
+
@tests.each do |test|
|
120
|
+
error = test.run!(test_case)
|
121
|
+
completed_test = CompletedTest.new(test.name, error)
|
122
|
+
publish_test_completion(completed_test)
|
123
|
+
results << completed_test
|
124
|
+
end
|
125
|
+
results
|
126
|
+
end
|
127
|
+
|
128
|
+
private
|
129
|
+
|
130
|
+
def publish_test_completion(completed_test)
|
131
|
+
Hypothesis.completed_test_subscribers.each do |subscriber|
|
132
|
+
subscriber.call(completed_test)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
metadata
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: theorem
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Sean Gregory
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-04-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: extended_dir
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rbs
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec-expectations
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: watir
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: simple. testing. ah.
|
84
|
+
email: sean.christopher.gregory@gmail.com
|
85
|
+
executables:
|
86
|
+
- theorize
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- bin/theorize
|
91
|
+
- src/harness.rb
|
92
|
+
- src/hypothesis.rb
|
93
|
+
homepage: https://rubygems.org/gems/theorem
|
94
|
+
licenses:
|
95
|
+
- MIT
|
96
|
+
metadata:
|
97
|
+
source_code_uri: https://github.com/skinnyjames/theorem
|
98
|
+
post_install_message:
|
99
|
+
rdoc_options: []
|
100
|
+
require_paths:
|
101
|
+
- lib
|
102
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: 2.7.5
|
107
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
requirements: []
|
113
|
+
rubygems_version: 3.2.31
|
114
|
+
signing_key:
|
115
|
+
specification_version: 4
|
116
|
+
summary: simple. testing. ah.
|
117
|
+
test_files: []
|