|
# frozen_string_literal: true |
|
|
|
require 'bundler/inline' |
|
|
|
gemfile do |
|
source 'https://rubygems.org' |
|
gem 'u-test', '0.9.0' |
|
end |
|
|
|
require_relative 'thenable' |
|
|
|
class TestThenable < Microtest::Test |
|
def number_class(value) |
|
Class.new.tap do |base| |
|
base.class_eval <<-RUBY |
|
def self.number; #{value}; end |
|
def number; self.class.number; end |
|
RUBY |
|
end |
|
end |
|
|
|
def test_methods_in_instances |
|
# |
|
# .yield_self |
|
# |
|
one = number_class(1) |
|
|
|
one.send(:include, Thenable) |
|
|
|
## |
|
## assert the instances |
|
## |
|
assert 1 == one.new.yield_self(&:number) |
|
assert 1 == one.new.yield_self { |i| i.number } |
|
assert 0 == one.new.yield_self { |i| 0 } |
|
assert 0 == one.new.yield_self { 0 } |
|
assert 1 == one.new.yield_self.count |
|
assert one.new.yield_self.instance_of?(Enumerator) |
|
|
|
## |
|
## assert the class |
|
## |
|
assert 1 == one.yield_self(&:number) |
|
assert 1 == one.yield_self { |i| i.number } |
|
assert 0 == one.yield_self { |i| 0 } |
|
assert 0 == one.yield_self { 0 } |
|
assert 1 == one.yield_self.count |
|
assert one.yield_self.instance_of?(Enumerator) |
|
|
|
# |
|
# .then |
|
# |
|
two = number_class(2) |
|
|
|
two.send(:include, Thenable) |
|
|
|
## |
|
## assert the instances |
|
## |
|
assert 2 == two.new.then(&:number) |
|
assert 2 == two.new.then { |i| i.number } |
|
assert 0 == two.new.then { |i| 0 } |
|
assert 0 == two.new.then { 0 } |
|
assert 1 == two.new.yield_self.count |
|
assert two.new.yield_self.instance_of?(Enumerator) |
|
|
|
## |
|
## assert the class |
|
## |
|
assert 2 == two.then(&:number) |
|
assert 2 == two.then { |i| i.number } |
|
assert 0 == two.then { |i| 0 } |
|
assert 0 == two.then { 0 } |
|
assert 1 == two.then.count |
|
assert two.then.instance_of?(Enumerator) |
|
end |
|
|
|
def test_methods_in_classes |
|
# |
|
# .yield_self |
|
# |
|
one = number_class(1).extend(Thenable) |
|
|
|
assert 1 == one.yield_self(&:number) |
|
assert 1 == one.yield_self { |i| i.number } |
|
assert 0 == one.yield_self { |i| 0 } |
|
assert 0 == one.yield_self { 0 } |
|
assert 1 == one.yield_self.count |
|
assert one.yield_self.instance_of?(Enumerator) |
|
|
|
# |
|
# .then |
|
# |
|
two = number_class(2).extend(Thenable) |
|
|
|
assert 2 == two.then(&:number) |
|
assert 2 == two.then { |i| i.number } |
|
assert 0 == two.then { |i| 0 } |
|
assert 0 == two.then { 0 } |
|
assert 1 == two.then.count |
|
assert two.then.instance_of?(Enumerator) |
|
end |
|
|
|
def test_methods_in_modules |
|
one = Module.new do |
|
extend Thenable |
|
|
|
def self.number; 1 ;end |
|
end |
|
|
|
# |
|
# .yield_self |
|
# |
|
assert 1 == one.yield_self(&:number) |
|
assert 1 == one.yield_self { |i| i.number } |
|
assert 0 == one.yield_self { |i| 0 } |
|
assert 0 == one.yield_self { 0 } |
|
assert 1 == one.yield_self.count |
|
assert one.yield_self.instance_of?(Enumerator) |
|
|
|
# |
|
# .then |
|
# |
|
assert 1 == one.then(&:number) |
|
assert 1 == one.then { |i| i.number } |
|
assert 0 == one.then { |i| 0 } |
|
assert 0 == one.then { 0 } |
|
assert 1 == one.then.count |
|
assert one.then.instance_of?(Enumerator) |
|
|
|
|
|
refute Module.new.respond_to?(:yield_self) if RUBY_VERSION < '2.5.0' |
|
refute Module.new.respond_to?(:then) if RUBY_VERSION < '2.6.0' |
|
end |
|
end |
|
|
|
Microtest.call |