Skip to content

Commit bee8167

Browse files
draft of the Data() syntax
1 parent 8f8b6db commit bee8167

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

test/rbs/parser_test.rb

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,72 @@ def `: () -> void
428428
end
429429
end
430430

431+
def test_data_class_decl
432+
RBS::Parser.parse_signature(buffer(<<-RBS)).tap do |_, _, decls|
433+
class Foo < Data(a: Integer)
434+
end
435+
RBS
436+
decls[0].tap do |decl|
437+
assert_instance_of RBS::AST::Declarations::Class, decl
438+
assert_equal TypeName("Foo"), decl.name
439+
assert_predicate decl.type_params, :empty?
440+
assert_nil decl.super_class.name
441+
assert_equal TypeName("Data"), decl.super_class.superclass.name
442+
443+
assert_equal 8, decl.members.size
444+
445+
decl.members[0].tap do |member|
446+
assert_instance_of RBS::AST::Members::AttrReader, member
447+
assert_equal :instance, member.kind
448+
assert_equal :a, member.name
449+
assert_equal "Integer", member.type.to_s
450+
end
451+
452+
decl.members[1].tap do |member|
453+
assert_instance_of RBS::AST::Members::MethodDefinition, member
454+
assert_equal :method, member.kind
455+
assert_equal :initialize, member.name
456+
assert_equal ["(::Integer) -> void | (id: ::Integer) -> void"], member.method_types.map(&:to_s)
457+
end
458+
459+
decl.members[2].tap do |member|
460+
assert_instance_of RBS::AST::Members::MethodDefinition, member
461+
assert_equal :method, member.kind
462+
assert_equal :members, member.name
463+
assert_equal ["() -> Array[Symbol]"], member.method_types.map(&:to_s)
464+
end
465+
466+
decl.members[3].tap do |member|
467+
assert_instance_of RBS::AST::Members::MethodDefinition, member
468+
assert_equal :method, member.kind
469+
assert_equal :deconstruct, member.name
470+
assert_equal ["() -> [Integer]"], member.method_types.map(&:to_s)
471+
end
472+
473+
decl.members[4].tap do |member|
474+
assert_instance_of RBS::AST::Members::MethodDefinition, member
475+
assert_equal :method, member.kind
476+
assert_equal :deconstruct_keys, member.name
477+
assert_equal ["(nil) -> {a: Integer} | (Array(Symbol)) -> Hash[untyped]"], member.method_types.map(&:to_s)
478+
end
479+
480+
decl.members[5].tap do |member|
481+
assert_instance_of RBS::AST::Members::MethodDefinition, member
482+
assert_equal :method, member.kind
483+
assert_equal :with, member.name
484+
assert_equal ["(?a: Integer) -> Foo"], member.method_types.map(&:to_s)
485+
end
486+
end
487+
488+
decls[1].tap do |decl|
489+
# as funcall: Foo[1]
490+
assert_instance_of RBS::Types::UntypedFunction, decl.block.type
491+
assert_equal TypeName("Foo"), decl.name
492+
assert_equal ["(::Integer a) -> Foo |(a: ::Integer) -> Foo"], member.method_types.map(&:to_s)
493+
end
494+
end
495+
end
496+
431497
def test_parse_type
432498
assert_equal "hello", RBS::Parser.parse_type(buffer('"hello"')).literal
433499
assert_equal "hello", RBS::Parser.parse_type(buffer("'hello'")).literal

0 commit comments

Comments
 (0)