This repository has been archived by the owner on Mar 2, 2020. It is now read-only.
/
example.rb
135 lines (115 loc) · 3.13 KB
/
example.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
require_relative 'test_helper'
class Hoge
def foo arg
'bar ' + arg
end
def foo2
'original foo2'
end
def foo3
end
def never_predef_ed
end
def self.singleton_method arg
'singleton_bar ' + arg
end
end
example 'Predef.predef overrides a method of a class' do
note 'overridden method can use super.'
Predef.predef Hoge, :foo do|arg|
super(arg) + ' baz'
end
actual = Hoge.new.foo('arg')
expected = 'bar arg baz'
test(
(actual == expected),
"Expected #{actual.inspect} to equal to #{expected.inspect}."
)
end
example 'Predef.predef overrides a singleton method of a object' do
Predef.predef Hoge.singleton_class, :singleton_method do|arg|
super(arg) + ' baz'
end
actual = Hoge.singleton_method('arg')
expected = 'singleton_bar arg baz'
test(
(actual == expected),
"Expected #{actual.inspect} to equal to #{expected.inspect}."
)
end
example 'Predef.predef overrides another method of the class' do
Predef.predef Hoge, :foo2 do
'baz2'
end
actual = Hoge.new.foo2
expected = 'baz2'
test(
(actual == expected),
"Expected #{actual.inspect} to equal to #{expected.inspect}."
)
end
example 'Predef.predef raises an error given an undefined method.' do
actual = error_of do
Predef.predef Hoge, :non_defined do
end
end
expected = ::Predef::Error
test(
(actual.instance_of? expected),
"Expected an instance of #{actual.class} to be an instance of #{expected}."
)
end
example 'Predef.predef! does NOT raise an error given even an undefined method.' do
actual = error_of do
Predef.predef! Hoge, :non_defined do
end
end
test(actual.nil?, "Expected an instance of #{actual.inspect} to nil.")
end
example 'Predef.unpredef gets back orignal method.' do
Predef.unpredef Hoge, :foo2
actual = Hoge.new.foo2
expected = 'original foo2'
test(
(actual == expected),
"Expected #{actual.inspect} to equal to #{expected.inspect}."
)
end
example 'Predef.unpredef raises an error given a non predef-ed class.' do
class AnotherClass
def foo
end
end
actual = error_of { Predef.unpredef AnotherClass, :foo }
expected = ::Predef::Error
test(
(actual.instance_of? expected),
"Expected an instance of #{actual.class} to be an instance of #{expected}."
)
end
example 'Predef.unpredef raises an error given a non predef-ed method.' do
actual = error_of { Predef.unpredef Hoge, :never_predef_ed }
expected = ::Predef::Error
test(
(actual.instance_of? expected),
"Expected an instance of #{actual.class} to be an instance of #{expected}."
)
end
example 'Hoge.predef raises a NoMethodError without using Predef::Refinements' do
actual = error_of { Hoge.predef(:foo3){ :foo3 } }
expected = ::NoMethodError
test(
(actual.instance_of? expected),
"Expected an instance of #{actual.class} to be an instance of #{expected}."
)
end
using ::Predef::Refinements
example "Hoge.predef doesn't raise an error by using Predef::Refinements" do
Hoge.predef(:foo3){ :foo3 }
actual = Hoge.new.foo3
expected = :foo3
test(
(actual == expected),
"Expected #{actual.inspect} to equal to #{expected.inspect}."
)
end