From 7f385bc19badd2100b76e8b2404be5be46306bf6 Mon Sep 17 00:00:00 2001
From: Go <monkeywzr@gmail.com>
Date: Sun, 20 Oct 2024 15:18:04 +0900
Subject: [PATCH] Improve history test's encoding setting (#1022)

* improve history test's encoding setting

* fix missing locale error for ci and refactoring
---
 test/irb/test_history.rb | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/test/irb/test_history.rb b/test/irb/test_history.rb
index 791eef1ac..15c16ed89 100644
--- a/test/irb/test_history.rb
+++ b/test/irb/test_history.rb
@@ -10,17 +10,20 @@
 module TestIRB
   class HistoryTest < TestCase
     def setup
+      @conf_backup = IRB.conf.dup
       @original_verbose, $VERBOSE = $VERBOSE, nil
       @tmpdir = Dir.mktmpdir("test_irb_history_")
       setup_envs(home: @tmpdir)
-      @backup_default_external = Encoding.default_external
+      IRB.conf[:LC_MESSAGES] = IRB::Locale.new
+      save_encodings
       IRB.instance_variable_set(:@existing_rc_name_generators, nil)
     end
 
     def teardown
+      IRB.conf.replace(@conf_backup)
       IRB.instance_variable_set(:@existing_rc_name_generators, nil)
       teardown_envs
-      Encoding.default_external = @backup_default_external
+      restore_encodings
       $VERBOSE = @original_verbose
       FileUtils.rm_rf(@tmpdir)
     end
@@ -146,7 +149,6 @@ def test_history_concurrent_use_readline
     end
 
     def test_history_concurrent_use_not_present
-      IRB.conf[:LC_MESSAGES] = IRB::Locale.new
       IRB.conf[:SAVE_HISTORY] = 1
       io = TestInputMethodWithRelineHistory.new
       io.class::HISTORY.clear
@@ -163,9 +165,9 @@ def test_history_concurrent_use_not_present
 
     def test_history_different_encodings
       IRB.conf[:SAVE_HISTORY] = 2
-      Encoding.default_external = Encoding::US_ASCII
-      locale = IRB::Locale.new("en_US.ASCII")
-      assert_history(<<~EXPECTED_HISTORY.encode(Encoding::US_ASCII), <<~INITIAL_HISTORY.encode(Encoding::UTF_8), <<~INPUT, locale: locale)
+      IRB.conf[:LC_MESSAGES] = IRB::Locale.new("en_US.ASCII")
+      IRB.__send__(:set_encoding, Encoding::US_ASCII.name, override: false)
+      assert_history(<<~EXPECTED_HISTORY.encode(Encoding::US_ASCII), <<~INITIAL_HISTORY.encode(Encoding::UTF_8), <<~INPUT)
         ????
         exit
       EXPECTED_HISTORY
@@ -234,8 +236,7 @@ def history_concurrent_use_for_input_method(input_method)
       end
     end
 
-    def assert_history(expected_history, initial_irb_history, input, input_method = TestInputMethodWithRelineHistory, locale: IRB::Locale.new)
-      IRB.conf[:LC_MESSAGES] = locale
+    def assert_history(expected_history, initial_irb_history, input, input_method = TestInputMethodWithRelineHistory)
       actual_history = nil
       history_file = IRB.rc_file("_history")
       ENV["HOME"] = @tmpdir
