u-test 0.7.0

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.
Files changed (5) hide show
  1. checksums.yaml +7 -0
  2. data/microtest.rb +105 -0
  3. data/test_runners.rb +35 -0
  4. data/u-test.rb +3 -0
  5. metadata +47 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: a1ac17b72f4257a8511f88bd8d2fc64cb3fbb5f6b89346513753d14c468a3b57
4
+ data.tar.gz: b1f8466076b4488b214dfbeda14f1c91a95a62c0b2c8489f6be0881e7d8930f2
5
+ SHA512:
6
+ metadata.gz: 7bce28f44f44666a73704ac6851b2a79e5c4980b516e8e5f99d3bf9d959788675463edb3386c45eaeaffb726f8e0fe24fafbb8f170dd6c189c1a59ff5812a898
7
+ data.tar.gz: d0deb86939a031a5dcace6b878a20e2280c0949202135f9dcdd4191b4d2878bb5a12e4c5317ad607ed75955a2b2b4b9d05f6547bfb641285ad43916aa2e26be9
data/microtest.rb ADDED
@@ -0,0 +1,105 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'set'
4
+ require 'singleton'
5
+
6
+ module Microtest
7
+ VERSION = '0.7.0'
8
+
9
+ TryToBuildARandom = -> (seed, randomized) do
10
+ Random.new Integer(seed ? seed : rand(1000..99999)) if seed || randomized
11
+ end
12
+
13
+ class Runner
14
+ include Singleton
15
+
16
+ def initialize
17
+ @test_cases = Set.new
18
+ end
19
+
20
+ def register(test_case)
21
+ @test_cases.add(test_case) and true
22
+ end
23
+
24
+ def call(random:)
25
+ iterate_each_test_after_try_to_shuffle(random) do |test, test_methods|
26
+ test.call(:setup_all)
27
+
28
+ test_methods.each do |test_method|
29
+ test.call(:setup, test_method)
30
+ test.call(test_method)
31
+ test.call(:teardown, test_method)
32
+ end
33
+
34
+ test.call(:teardown_all)
35
+ end
36
+ end
37
+
38
+ private
39
+
40
+ def iterate_each_test_after_try_to_shuffle(random)
41
+ shuffle_if_random(@test_cases, random).each do |test_case|
42
+ test_methods = test_case.public_instance_methods.grep(/\Atest_/)
43
+
44
+ yield method(:call_test).curry[test_case.new],
45
+ shuffle_if_random(test_methods, random)
46
+ end
47
+ end
48
+
49
+ def call_test(test_case, method_to_call, method_arg = nil)
50
+ return unless test_case.respond_to?(method_to_call)
51
+ method = test_case.method(method_to_call)
52
+ method.arity == 0 ? method.call : method.call(method_arg)
53
+ end
54
+
55
+ def shuffle_if_random(relation, random)
56
+ random ? relation.to_a.shuffle(random: random) : relation
57
+ end
58
+ end
59
+
60
+ class Test
61
+ def self.inherited(test_case)
62
+ Runner.instance.register(test_case)
63
+ end
64
+
65
+ def self.test(name, &block)
66
+ method = "test_#{name.gsub(/\s+/,'_')}"
67
+ raise "#{method} is already defined in #{self}" if method_defined?(method)
68
+ define_method(method, &block)
69
+ end
70
+
71
+ def assert(test, msg = '%s is not truthy.')
72
+ stop!(test, caller, msg) unless test
73
+ end
74
+
75
+ def refute(test, msg = '%s is neither nil or false.')
76
+ stop!(test, caller, msg) if test
77
+ end
78
+
79
+ private
80
+
81
+ def stop!(test, kaller, msg)
82
+ message = msg % test.inspect
83
+ caller_location = kaller[0].split('/').last
84
+ raise RuntimeError, message, [caller_location]
85
+ end
86
+ end
87
+
88
+ def self.report(randomized = nil, out:)
89
+ random = TryToBuildARandom.call(ENV['SEED'], randomized)
90
+
91
+ yield -> { Runner.instance.call(random: random) }
92
+
93
+ out.puts "\n\e[#{32}m\u{1f60e} Tests passed!\e[0m\n\n"
94
+ rescue => e
95
+ content = ["\u{1f4a9} <#{e.class}> #{e.message}\n", e.backtrace.join("\n")]
96
+
97
+ out.puts ["\e[#{31}m", content, "\e[0m"].flatten.join("\n")
98
+ ensure
99
+ out.puts "Randomized with seed: #{random.seed}\n\n" if random.is_a?(Random)
100
+ end
101
+
102
+ def self.call(randomized: false, out: Kernel)
103
+ report(randomized, out: out) { |runner| runner.call }
104
+ end
105
+ end
data/test_runners.rb ADDED
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ class RunRubyProgram
4
+ LINE_CHAR = '#'
5
+
6
+ def self.line(command)
7
+ (LINE_CHAR * command.size) + LINE_CHAR * 4
8
+ end
9
+
10
+ def self.cmd(file)
11
+ yield "ruby #{file}.rb"
12
+ end
13
+
14
+ def self.render_cmd(file)
15
+ cmd(file) do |command|
16
+ puts line(command)
17
+ puts "#{LINE_CHAR} #{command} #{LINE_CHAR}"
18
+ puts line(command)
19
+
20
+ yield(command) if block_given?
21
+ end
22
+ end
23
+
24
+ def self.call(file)
25
+ render_cmd(file) { |command| system(command) }
26
+ end
27
+ end
28
+
29
+ RunRubyProgram.call('test_runner')
30
+
31
+ RunRubyProgram.call('test_runner_to_assert_a_random_execution')
32
+
33
+ RunRubyProgram.call('test_runner_to_assert_an_execution_in_sequence')
34
+
35
+ RunRubyProgram.call('test_runner_to_assert_microtest_outputs')
data/u-test.rb ADDED
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'microtest'
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: u-test
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.7.0
5
+ platform: ruby
6
+ authors:
7
+ - Rodrigo Serradura
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-09-11 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A xUnit family unit testing microframework for Ruby.
14
+ email: rodrigo.serradura@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - microtest.rb
20
+ - test_runners.rb
21
+ - u-test.rb
22
+ homepage: https://gist.github.com/serradura/d26f7f322977e35dd508c8c13a9179b1
23
+ licenses:
24
+ - MIT
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - "."
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: 2.2.2
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 2.7.7
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: A unit testing microframework
46
+ test_files:
47
+ - test_runners.rb