Skip to content

Commit

Permalink
fixup! Add PrettyPrint to RBS Stdlib
Browse files Browse the repository at this point in the history
  • Loading branch information
Alain Mauri committed Jan 22, 2021
1 parent 1786b6f commit 0d1b887
Show file tree
Hide file tree
Showing 2 changed files with 113 additions and 30 deletions.
10 changes: 5 additions & 5 deletions stdlib/prettyprint/0/prettyprint.rbs
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ class PrettyPrint
#
# By default this is:
# lambda {|n| ' ' * n}
attr_reader genspace: untyped
attr_reader genspace: Proc

# The number of spaces to be indented
attr_reader indent: Integer
Expand Down Expand Up @@ -182,20 +182,20 @@ class PrettyPrint
# grouping. If `close_obj` is specified, `text close_obj, close_width` is called
# after grouping.
#
def group: (?::Integer indent, ?::String open_obj, ?::String close_obj, ?untyped open_width, ?untyped close_width) { () -> untyped } -> void
def group: (?::Integer indent, ?::String open_obj, ?::String close_obj, ?Integer open_width, ?Integer close_width) { () -> untyped } -> Integer

# Takes a block and queues a new group that is indented 1 level further.
#
def group_sub: () { () -> untyped } -> void
def group_sub: () { () -> untyped } -> untyped

# Increases left margin after newline with `indent` for line breaks added in the
# block.
#
def nest: (untyped indent) { () -> untyped } -> void
def nest: (Integer indent) { () -> untyped } -> void

# outputs buffered data.
#
def flush: () -> void
def flush: () -> Integer

class Text
# Creates a new text object.
Expand Down
133 changes: 108 additions & 25 deletions test/stdlib/PrettyPrint_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -53,83 +53,166 @@ class PrettyPrintTest < Test::Unit::TestCase
library "prettyprint"
testing "::PrettyPrint"

def test_initialize
assert_send_type "(?untyped output, ?::Integer maxwidth, ?::String newline) ?{ (::Integer) -> untyped } -> void",
PrettyPrint.new, :initialize
def initialize_with_block
PrettyPrint.new(['first', 'second'], 25, "\n") { |n| " " * 2 * n }
end

def test_output
assert_send_type "() -> untyped",
PrettyPrint.new, :output
assert_send_type "() -> String",
PrettyPrint.new('text'), :output
assert_send_type "() -> Array[Integer]",
PrettyPrint.new([1,2,3]), :output
assert_send_type "() -> Array[String]",
PrettyPrint.new(['test', 'test_one']), :output
assert_send_type "() -> Array[String]",
initialize_with_block, :output
end

def test_maxwidth
assert_send_type "() -> ::Integer",
PrettyPrint.new, :maxwidth
assert_send_type "() -> Integer",
PrettyPrint.new(''), :maxwidth
assert_send_type "() -> Integer",
PrettyPrint.new('', 20), :maxwidth
assert_send_type "() -> Integer",
PrettyPrint.new(['first', 'second'], 25, "\n"), :maxwidth
assert_send_type "() -> Integer",
initialize_with_block, :maxwidth
end

def test_newline
assert_send_type "() -> ::String",
PrettyPrint.new, :newline
assert_send_type "() -> String",
PrettyPrint.new(''), :newline
assert_send_type "() -> String",
PrettyPrint.new('', 20), :newline
assert_send_type "() -> String",
PrettyPrint.new(['first', 'second'], 25, "\n"), :newline
assert_send_type "() -> String",
initialize_with_block, :newline
end

def test_genspace
assert_send_type "() -> untyped",
PrettyPrint.new, :genspace
assert_send_type "() -> Proc",
PrettyPrint.new(''), :genspace
assert_send_type "() -> Proc",
PrettyPrint.new('', 20), :genspace
assert_send_type "() -> Proc",
PrettyPrint.new(['first', 'second'], 25, "\n"), :genspace
assert_send_type "() -> Proc",
initialize_with_block, :genspace
end

def test_indent
assert_send_type "() -> ::Integer",
PrettyPrint.new, :indent
assert_send_type "() -> Integer",
PrettyPrint.new(''), :indent
assert_send_type "() -> Integer",
PrettyPrint.new('', 20), :indent
assert_send_type "() -> Integer",
PrettyPrint.new(['first', 'second'], 25, "\n"), :indent
assert_send_type "() -> Integer",
initialize_with_block, :indent
end

def test_group_queue
assert_send_type "() -> ::PrettyPrint::GroupQueue",
PrettyPrint.new, :group_queue
assert_send_type "() -> PrettyPrint::GroupQueue",
PrettyPrint.new(''), :group_queue
assert_send_type "() -> PrettyPrint::GroupQueue",
PrettyPrint.new('', 20), :group_queue
assert_send_type "() -> PrettyPrint::GroupQueue",
PrettyPrint.new(['first', 'second'], 25, "\n"), :group_queue
assert_send_type "() -> PrettyPrint::GroupQueue",
initialize_with_block, :group_queue
end

def test_current_group
assert_send_type "() -> ::PrettyPrint::Group",
PrettyPrint.new, :current_group
assert_send_type "() -> PrettyPrint::GroupQueue",
PrettyPrint.new('', 20), :group_queue
assert_send_type "() -> PrettyPrint::GroupQueue",
PrettyPrint.new(['first', 'second'], 25, "\n"), :group_queue
assert_send_type "() -> PrettyPrint::GroupQueue",
initialize_with_block, :group_queue
end

def test_break_outmost_groups
assert_send_type "() -> untyped",
PrettyPrint.new, :break_outmost_groups
assert_send_type "() -> untyped",
PrettyPrint.new('', 20), :break_outmost_groups
assert_send_type "() -> untyped",
PrettyPrint.new(['first', 'second'], 25, "\n"), :break_outmost_groups
assert_send_type "() -> untyped",
initialize_with_block, :break_outmost_groups
end

def test_text
assert_send_type "(untyped obj, ?::Integer width) -> untyped",
PrettyPrint.new, :text
assert_send_type "(String) -> void",
PrettyPrint.new, :text, 'text'
assert_send_type "(String, Integer) -> void",
PrettyPrint.new, :text, 'text', 85
assert_send_type "(String) -> untyped",
PrettyPrint.new(['first', 'second'], 25, "\n"), :text, 'text'
assert_send_type "(String, Integer) -> untyped",
initialize_with_block, :text, 'text', 85
end

def test_fill_breakable
assert_send_type "(?::String sep, ?::Integer width) -> untyped",
assert_send_type "() -> void",
PrettyPrint.new, :fill_breakable
assert_send_type "() -> void",
PrettyPrint.new, :fill_breakable
assert_send_type "(String) -> void",
PrettyPrint.new(['first', 'second'], 25, "\n"), :fill_breakable, '\n'
assert_send_type "(String, Integer) -> void",
initialize_with_block, :fill_breakable, '\n\n', 85
end

def test_breakable
assert_send_type "(?::String sep, ?::Integer width) -> untyped",
assert_send_type "() -> void",
PrettyPrint.new, :breakable
assert_send_type "() -> void",
PrettyPrint.new, :breakable
assert_send_type "(String) -> void",
PrettyPrint.new(['first', 'second'], 25, "\n"), :breakable, '\n'
assert_send_type "(String, Integer) -> void",
initialize_with_block, :breakable, '\n\n', 85
end

def test_group
assert_send_type "(?::Integer indent, ?::String open_obj, ?::String close_obj, ?untyped open_width, ?untyped close_width) { () -> untyped } -> untyped",
PrettyPrint.new, :group
assert_send_type "() { () -> untyped } -> Integer",
PrettyPrint.new, :group do true end
assert_send_type "(Integer) { () -> untyped } -> Integer",
PrettyPrint.new, :group, 10 do true end
assert_send_type "(Integer, String) { () -> untyped } -> Integer",
PrettyPrint.new, :group, 10, "text" do true end
assert_send_type "(Integer, String, String) { () -> untyped } -> Integer",
PrettyPrint.new, :group, 10, "open", "close" do true end
assert_send_type "(Integer, String, String, Integer) { () -> untyped } -> Integer",
PrettyPrint.new, :group, 10, "open", "close", 25 do true end
assert_send_type "(Integer, String, String, Integer, Integer) { () -> untyped } -> Integer",
PrettyPrint.new, :group, 10, "open", "close", 25, 25 do true end
assert_send_type "(Integer, String, String, Integer, Integer) { () -> untyped } -> Integer",
PrettyPrint.new, :group, 10, "open", "close", 25, 25 do true end
end

def test_group_sub
assert_send_type "() { () -> untyped } -> untyped",
PrettyPrint.new, :group_sub
PrettyPrint.new, :group_sub do true end
assert_send_type "() { () -> untyped } -> untyped",
PrettyPrint.new, :group_sub do "" end
end

def test_nest
assert_send_type "(untyped indent) { () -> untyped } -> untyped",
PrettyPrint.new, :nest
assert_send_type "(Integer) { () -> untyped } -> untyped",
PrettyPrint.new, :nest, 25 do true end
assert_send_type "(Integer) { () -> untyped } -> untyped",
PrettyPrint.new, :nest, 25 do "" end
end

def test_flush
assert_send_type "() -> untyped",
assert_send_type "() -> Integer",
PrettyPrint.new, :flush
assert_send_type "() -> Integer",
initialize_with_block, :flush
end
end

0 comments on commit 0d1b887

Please sign in to comment.