summaryrefslogtreecommitdiff
path: root/test/-ext-/string/test_fstring.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/-ext-/string/test_fstring.rb')
-rw-r--r--test/-ext-/string/test_fstring.rb72
1 files changed, 72 insertions, 0 deletions
diff --git a/test/-ext-/string/test_fstring.rb b/test/-ext-/string/test_fstring.rb
new file mode 100644
index 0000000000..fcec6be543
--- /dev/null
+++ b/test/-ext-/string/test_fstring.rb
@@ -0,0 +1,72 @@
+# frozen_string_literal: false
+require 'test/unit'
+require '-test-/string'
+require_relative '../symbol/noninterned_name'
+
+class Test_String_Fstring < Test::Unit::TestCase
+ include Test_Symbol::NonInterned
+
+ def assert_fstring(str)
+ fstr = Bug::String.fstring(str)
+ yield str
+ yield fstr
+ end
+
+ def test_rb_enc_interned_str_autoloaded_encoding
+ assert_separately([], <<~RUBY)
+ require '-test-/string'
+ assert_include(Encoding::CESU_8.inspect, 'autoload')
+ Bug::String.rb_enc_interned_str(Encoding::CESU_8)
+ RUBY
+ end
+
+ def test_rb_enc_interned_str_null_encoding
+ assert_equal Encoding::ASCII_8BIT, Bug::String.rb_enc_interned_str(nil).encoding
+ end
+
+ def test_rb_enc_str_new_autoloaded_encoding
+ assert_separately([], <<~RUBY)
+ require '-test-/string'
+ assert_include(Encoding::CESU_8.inspect, 'autoload')
+ Bug::String.rb_enc_str_new(Encoding::CESU_8)
+ RUBY
+ end
+
+ def test_rb_enc_str_new_null_encoding
+ assert_equal Encoding::ASCII_8BIT, Bug::String.rb_enc_str_new(nil).encoding
+ end
+
+ def test_instance_variable
+ str = __method__.to_s * 3
+ str.instance_variable_set(:@test, 42)
+ str.freeze
+ assert_fstring(str) {|s| assert_send([s, :instance_variable_defined?, :@test])}
+ end
+
+ def test_singleton_method
+ str = __method__.to_s * 3
+ def str.foo
+ end
+ str.freeze
+ assert_fstring(str) {|s| assert_send([s, :respond_to?, :foo])}
+ end
+
+ def test_singleton_class
+ str = noninterned_name
+ fstr = Bug::String.fstring(str)
+ assert_raise(TypeError) {fstr.singleton_class}
+ end
+
+ def test_fake_str
+ assert_equal([*"a".."z"].join(""), Bug::String.fstring_fake_str)
+ end
+
+ class S < String
+ end
+
+ def test_subclass
+ str = S.new(__method__.to_s * 3)
+ str.freeze
+ assert_fstring(str) {|s| assert_instance_of(S, s)}
+ end
+end