Skip to content

Commit 8cba5aa

Browse files
headiusnobu
authored andcommitted
Add tests for read-only methods on frozen StringIO
See #120
1 parent f85b814 commit 8cba5aa

File tree

1 file changed

+81
-15
lines changed

1 file changed

+81
-15
lines changed

test/stringio/test_stringio.rb

Lines changed: 81 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,9 @@ def test_open
359359

360360
def test_isatty
361361
assert_equal(false, StringIO.new("").isatty)
362+
assert_equal(false, StringIO.new("").tty?)
363+
assert_nothing_raised { StringIO.new("").freeze.isatty}
364+
assert_nothing_raised { StringIO.new("").freeze.tty?}
362365
end
363366

364367
def test_fsync
@@ -368,6 +371,7 @@ def test_fsync
368371
def test_sync
369372
assert_equal(true, StringIO.new("").sync)
370373
assert_equal(false, StringIO.new("").sync = false)
374+
assert_nothing_raised { StringIO.new("").freeze.sync}
371375
end
372376

373377
def test_set_fcntl
@@ -420,8 +424,8 @@ def test_closed
420424
assert_equal(false, f.closed?)
421425
f.close
422426
assert_equal(true, f.closed?)
423-
ensure
424-
f.close unless f.closed?
427+
f.freeze
428+
assert_nothing_raised { f.closed? }
425429
end
426430

427431
def test_closed_read
@@ -431,8 +435,8 @@ def test_closed_read
431435
assert_equal(false, f.closed_read?)
432436
f.close_read
433437
assert_equal(true, f.closed_read?)
434-
ensure
435-
f.close unless f.closed?
438+
f.freeze
439+
assert_nothing_raised { f.closed_read? }
436440
end
437441

438442
def test_closed_write
@@ -442,8 +446,8 @@ def test_closed_write
442446
assert_equal(false, f.closed_write?)
443447
f.close_write
444448
assert_equal(true, f.closed_write?)
445-
ensure
446-
f.close unless f.closed?
449+
f.freeze
450+
assert_nothing_raised { f.closed_write? }
447451
end
448452

449453
def test_dup
@@ -469,8 +473,8 @@ def test_lineno
469473
f.lineno = 1000
470474
assert_equal([1000, "baz\n"], [f.lineno, f.gets])
471475
assert_equal([1001, nil], [f.lineno, f.gets])
472-
ensure
473-
f.close unless f.closed?
476+
f.freeze
477+
assert_nothing_raised { f.lineno }
474478
end
475479

476480
def test_pos
@@ -483,8 +487,8 @@ def test_pos
483487
assert_equal([4, "bar\n"], [f.pos, f.gets])
484488
assert_equal([8, "baz\n"], [f.pos, f.gets])
485489
assert_equal([12, nil], [f.pos, f.gets])
486-
ensure
487-
f.close unless f.closed?
490+
f.freeze
491+
assert_nothing_raised { f.pos }
488492
end
489493

490494
def test_reopen
@@ -508,13 +512,10 @@ def test_seek
508512
assert_raise(Errno::EINVAL) { f.seek(1, 3) }
509513
f.close
510514
assert_raise(IOError) { f.seek(0) }
511-
ensure
512-
f.close unless f.closed?
513-
end
514-
515-
def test_seek_frozen_string
516515
f = StringIO.new(-"1234")
517516
assert_equal(0, f.seek(1))
517+
ensure
518+
f.close unless f.closed?
518519
end
519520

520521
def test_each_byte
@@ -837,11 +838,17 @@ def test_pread
837838
buf = "stale".b
838839
assert_equal "stale".b, StringIO.new("").pread(0, 0, buf)
839840
assert_equal "stale".b, buf
841+
842+
assert_nothing_raised { StringIO.new("pread").freeze.pread(3, 0)}
840843
end
841844

842845
def test_size
843846
f = StringIO.new("1234")
844847
assert_equal(4, f.size)
848+
assert_equal(4, f.length)
849+
f.freeze
850+
assert_nothing_raised { f.size }
851+
assert_nothing_raised { f.length }
845852
end
846853

847854
# This test is should in ruby/test_method.rb
@@ -1105,6 +1112,65 @@ def test_chilled_string_set_enocoding
11051112
end
11061113
end
11071114

1115+
def test_eof
1116+
f = StringIO.new
1117+
assert_equal(true, f.eof)
1118+
assert_equal(true, f.eof?)
1119+
f.ungetc("1234")
1120+
assert_equal(false, f.eof)
1121+
assert_equal(false, f.eof?)
1122+
f.freeze
1123+
assert_nothing_raised { f.eof }
1124+
assert_nothing_raised { f.eof? }
1125+
end
1126+
1127+
def test_pid
1128+
f = StringIO.new
1129+
assert_equal(nil, f.pid)
1130+
f.freeze
1131+
assert_nothing_raised { f.pid }
1132+
end
1133+
1134+
def test_fileno
1135+
f = StringIO.new
1136+
assert_equal(nil, f.fileno)
1137+
f.freeze
1138+
assert_nothing_raised { f.fileno }
1139+
end
1140+
1141+
def test_external_encoding
1142+
f = StringIO.new
1143+
assert_equal(Encoding.find("external"), f.external_encoding)
1144+
f = StringIO.new("1234".encode("UTF-16BE"))
1145+
assert_equal(Encoding::UTF_16BE, f.external_encoding)
1146+
f.freeze
1147+
assert_nothing_raised { f.external_encoding }
1148+
end
1149+
1150+
def test_string
1151+
f = StringIO.new
1152+
assert_equal("", f.string)
1153+
f = StringIO.new("1234")
1154+
assert_equal("1234", f.string)
1155+
f.freeze
1156+
assert_nothing_raised { f.string }
1157+
end
1158+
1159+
def test_initialize_copy
1160+
f = StringIO.new("1234")
1161+
f.read(1)
1162+
f2 = f.dup
1163+
assert_equal(1, f2.pos)
1164+
f.read(1)
1165+
assert_equal(2, f2.pos)
1166+
f.ungetc("56")
1167+
assert_equal(0, f2.pos)
1168+
assert_equal("5634", f2.string)
1169+
f.freeze
1170+
f2 = f.dup
1171+
assert_not_predicate(f2, :frozen?)
1172+
end
1173+
11081174
private
11091175

11101176
def assert_string(content, encoding, str, mesg = nil)

0 commit comments

Comments
 (0)