Skip to content

Commit 4c09768

Browse files
authored
Merge pull request #2898 from sampersand/master
[Class] update class.rbs
2 parents c30f46b + b461980 commit 4c09768

File tree

2 files changed

+60
-17
lines changed

2 files changed

+60
-17
lines changed

core/class.rbs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class Class < Module
8383
# Assign the class to a constant (name starting uppercase) if you want to treat
8484
# it like a regular class.
8585
#
86-
def initialize: (?Class superclass) ?{ (Class newclass) -> void } -> void
86+
def initialize: (?Class superclass) ?{ (Class newclass) [self: Class] -> void } -> void
8787

8888
# <!--
8989
# rdoc-file=object.c
@@ -107,6 +107,8 @@ class Class < Module
107107
#
108108
def allocate: () -> untyped
109109

110+
def self.allocate: () -> untyped
111+
110112
# <!--
111113
# rdoc-file=object.c
112114
# - attached_object -> object
@@ -150,7 +152,7 @@ class Class < Module
150152
# New subclass: Bar
151153
# New subclass: Baz
152154
#
153-
def inherited: (Class arg0) -> untyped
155+
private def inherited: (Class subclass) -> void
154156

155157
# <!--
156158
# rdoc-file=object.c
@@ -160,7 +162,7 @@ class Class < Module
160162
# object's #initialize method, passing it *args*. This is the method that ends
161163
# up getting called whenever an object is constructed using <code>.new</code>.
162164
#
163-
def new: () -> untyped
165+
def new: (*untyped, **untyped) ?{ (?) -> untyped } -> untyped
164166

165167
# <!--
166168
# rdoc-file=object.c

test/stdlib/Class_test.rb

Lines changed: 55 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,73 @@
11
require_relative "test_helper"
22

3-
class ClassTest < StdlibTest
4-
target Class
3+
class ClassSingletonTest < Test::Unit::TestCase
4+
include TestHelper
55

6-
def test_singleton_new
7-
Class.new()
8-
Class.new(Integer)
9-
Class.new { }
6+
testing "singleton(::Class)"
7+
8+
def test_allocate
9+
assert_send_type "() -> untyped",
10+
Class, :new
1011
end
12+
end
13+
14+
class ClassInstanceTest < Test::Unit::TestCase
15+
include TestHelper
16+
17+
testing "::Class"
18+
19+
Subclass = Class.new
1120

1221
def test_allocate
13-
Class.new.allocate
22+
assert_send_type "() -> untyped",
23+
Subclass, :new
1424
end
1525

16-
def test_instance_new
17-
Class.new.new
26+
def test_new
27+
assert_send_type '() -> untyped',
28+
Subclass, :new
29+
30+
big_init = Class.new do
31+
def initialize(*a, **k, &b) = nil
32+
end
33+
34+
assert_send_type '(*untyped, **untyped) { (?) -> untyped } -> untyped',
35+
big_init, :new, 1, 2, a: 3, 'b' => 4 do |x, y, &z| 3 end
1836
end
1937

20-
def test_super_class
21-
Class.new.superclass
22-
BasicObject.superclass
38+
def test_initialize
39+
assert_send_type "() -> void",
40+
Class.allocate, :initialize
41+
42+
assert_send_type "() { (Class) [self: Class] -> void } -> void",
43+
Class.allocate, :initialize do end
44+
45+
assert_send_type "(Class) -> void",
46+
Class.allocate, :initialize, String
47+
48+
assert_send_type "(Class) { (Class) [self: Class] -> void } -> void",
49+
Class.allocate, :initialize, String do end
50+
end
51+
52+
def test_superclass
53+
assert_send_type "() -> Class",
54+
String, :superclass
55+
assert_send_type "() -> nil",
56+
BasicObject, :superclass
2357
end
2458

2559
def test_subclasses
26-
Class.new.subclasses
60+
assert_send_type "() -> Array[Class]",
61+
Module, :subclasses
2762
end
2863

2964
def test_attached_object
30-
Class.new.singleton_class.attached_object
65+
assert_send_type "() -> untyped",
66+
Subclass.new.singleton_class, :attached_object
67+
end
68+
69+
def test_inherited
70+
assert_send_type "(Class) -> void",
71+
Subclass, :inherited, String
3172
end
3273
end

0 commit comments

Comments
 (0)