Author: rinrab
Date: Tue Jun 17 18:31:22 2025
New Revision: 1926510

URL: http://svn.apache.org/viewvc?rev=1926510&view=rev
Log:
On the 'utf8-cmdline-prototype' branch: Add RequireUtf8 decorator and
run the basic_tests#unicode_arguments_test test in UTF8 environment to fix
failure its constant failures on Unix platforms.

* subversion/tests/cmdline/basic_tests.py
  (): Import RequireUtf8 decorator from testcase.py
  (unicode_arguments_test): Require UTF-8.
* subversion/tests/cmdline/svntest/testcase.py
  (_detect_utf8_locale): New local helper.
  (RequireUtf8_deco): Declare the decorator.

Patch by: jun66j5

PS: Sorry for committing this on my own, but I think you left it up to
me. Am I right? 😁

Modified:
    
subversion/branches/utf8-cmdline-prototype/subversion/tests/cmdline/basic_tests.py
    
subversion/branches/utf8-cmdline-prototype/subversion/tests/cmdline/svntest/testcase.py

Modified: 
subversion/branches/utf8-cmdline-prototype/subversion/tests/cmdline/basic_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/utf8-cmdline-prototype/subversion/tests/cmdline/basic_tests.py?rev=1926510&r1=1926509&r2=1926510&view=diff
==============================================================================
--- 
subversion/branches/utf8-cmdline-prototype/subversion/tests/cmdline/basic_tests.py
 (original)
+++ 
subversion/branches/utf8-cmdline-prototype/subversion/tests/cmdline/basic_tests.py
 Tue Jun 17 18:31:22 2025
@@ -40,6 +40,7 @@ XFail = svntest.testcase.XFail_deco
 Issues = svntest.testcase.Issues_deco
 Issue = svntest.testcase.Issue_deco
 Wimp = svntest.testcase.Wimp_deco
+RequireUtf8 = svntest.testcase.RequireUtf8_deco
 Item = wc.StateItem
 
 # Generic UUID-matching regular expression
@@ -3346,6 +3347,7 @@ def argv_with_best_fit_chars(sbox):
   if count == 0:
     raise svntest.Skip('No best fit characters in code page %r' % codepage)
 
+@RequireUtf8
 def unicode_arguments_test(sbox: svntest.sandbox.Sandbox):
   """test unicode arguments"""
 

Modified: 
subversion/branches/utf8-cmdline-prototype/subversion/tests/cmdline/svntest/testcase.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/utf8-cmdline-prototype/subversion/tests/cmdline/svntest/testcase.py?rev=1926510&r1=1926509&r2=1926510&view=diff
==============================================================================
--- 
subversion/branches/utf8-cmdline-prototype/subversion/tests/cmdline/svntest/testcase.py
 (original)
+++ 
subversion/branches/utf8-cmdline-prototype/subversion/tests/cmdline/svntest/testcase.py
 Tue Jun 17 18:31:22 2025
@@ -349,3 +349,50 @@ def SkipDumpLoadCrossCheck_deco(cond_fun
 
 # Create a singular alias, for linguistic correctness
 Issue_deco = Issues_deco
+
+
+# Determines the name of UTF-8 locale on the system, or returns None if one
+# couldn't be found.
+def _detect_utf8_locale():
+    import locale
+
+    orig = None
+    try:
+        for name in ('C.UTF-8', 'en_US.UTF-8'):
+            try:
+                orig = locale.setlocale(locale.LC_ALL, name)
+            except locale.Error:
+                continue
+            else:
+                return name
+    finally:
+        if orig is not None:
+            locale.setlocale(locale.LC_ALL, orig)
+
+    return None  # utf-8 locale unavailable
+
+_utf8_locale = _detect_utf8_locale() if os.name != 'nt' else False
+
+# Decorator that runs the test in UTF-8 environment. If there are no good
+# UTF-8 locales availible on the system, skips the test.
+def RequireUtf8_deco(f):
+
+    import functools
+
+    @functools.wraps(f)
+    def wrapper(sbox: svntest.sandbox.Sandbox):
+        if _utf8_locale is None:
+            raise svntest.Skip
+        if _utf8_locale is not False:
+            orig = os.environ.get('LC_ALL')
+            os.environ['LC_ALL'] = _utf8_locale
+        try:
+            return f(sbox)
+        finally:
+            if _utf8_locale is not False:
+                if orig is None:
+                    del os.environ['LC_ALL']
+                else:
+                    os.environ['LC_ALL'] = orig
+
+    return wrapper


Reply via email to