On Thu, Jun 5, 2025 at 5:36 PM Jun Omae <jun6...@gmail.com> wrote: > Hi, > > On 2025/06/05 20:10, Timofei Zhakov wrote: > > Hi, > > > > (For some reason there is no thread to “reply” to about this) > > > > I did a little research to find a reason why basic_test#73 is failing on > Linux. > > > > Few lines of background: This is a test that I added to test Unicode > functionality of the cmdline, and in which I create and commit files with > emojis. It’s currently passing on Windows (in utf8-cmdline-prototype), but > fails on Linux due to unsuccessful conversion to urf8 from native encoding. > > > > Also, it works correctly if svn is run from cmdline instead of a python > script. > > > > So, I did several testing with other programs (python in my exact case) > with Unicode arguments. And I noticed that it fails due to a similar reason > (funny). But, I remember subprocess.run() was working. > > > > I concluded that Popen() doesn’t properly work with Unicode args on > UNIX. Should I skip this test on this platform then, since the problem is > in python itself? > > > > Also I found a similar issue on GitHub: > https://github.com/python/cpython/issues/105312 > > > > Timofei Zhakov > > Root cause of the issue is caused by setting LC_ALL=C in > tests/cmdline/svntest/main.py. > > [[[ > diff --git a/subversion/tests/cmdline/svntest/main.py > b/subversion/tests/cmdline/svntest/main.py > index bea54f101..3f19aa3a6 100644 > --- a/subversion/tests/cmdline/svntest/main.py > +++ b/subversion/tests/cmdline/svntest/main.py > @@ -153,7 +153,7 @@ wc_author2 = 'jconstant' # use the same password as > wc_author > stack_trace_regexp = r'(?:.*subversion[\\//].*\.c:[0-9]*,$|.*apr_err=.*)' > > # Set C locale for command line programs > -os.environ['LC_ALL'] = 'C' > +os.environ['LC_ALL'] = 'C.utf8' # XXX workaround > > ###################################################################### > # Permission constants used with e.g. chmod() and open(). > ]]] > > Before the workaround: > [[[ > $ make check TESTS=subversion/tests/cmdline/basic_tests.py#73 > [1/1] > basic_tests.py..............................................................FAILURE > At least one test FAILED, checking > /home/jun66j5/src/subversion/subversion.git/tests.log > FAIL: basic_tests.py 73: test unicode arguments > Summary of test results: > 1 test FAILED > Python version: 3.10.12. > SUMMARY: 😱 Some tests failed > > make: *** [Makefile:553: check] Error 1 > }}} > > After the workaround: > [[[ > $ make check TESTS=subversion/tests/cmdline/basic_tests.py#73 > [1/1] > basic_tests.py..............................................................success > Summary of test results: > 1 test PASSED > Python version: 3.10.12. > SUMMARY: 🍺 All tests successful > ]]] > > -- > Jun Omae <jun6...@gmail.com> (大前 潤) >
Yay! It makes sense. Thank you so much for pointing me out. Is it worthed to change the locale to utf8 for all tests? However, if not, I think I could temporarily modify it, and set it back to C after the test body. The patch: [[[ Index: subversion/tests/cmdline/basic_tests.py =================================================================== --- subversion/tests/cmdline/basic_tests.py (revision 1926036) +++ subversion/tests/cmdline/basic_tests.py (working copy) @@ -3349,37 +3349,42 @@ def unicode_arguments_test(sbox: svntest.sandbox.Sandbox): """test unicode arguments""" - UNICODE_TEST_STRING = '\U0001f449\U0001f448' - sbox.build(read_only=False, empty=True) + oldlocale = os.environ["LC_ALL"] + os.environ["LC_ALL"] = "C.utf8" - unicode_item = sbox.ospath(UNICODE_TEST_STRING) - test_item = sbox.ospath("test") + try: + UNICODE_TEST_STRING = '\U0001f449\U0001f448' + sbox.build(read_only=False, empty=True) - svntest.actions.run_and_verify_svn2(None, [], 0, "mkdir", unicode_item) - svntest.actions.run_and_verify_svn2(None, [], 0, "mkdir", test_item) - svntest.actions.run_and_verify_svn2(None, [], 0, "propset", - "name", UNICODE_TEST_STRING, unicode_item) - svntest.actions.run_and_verify_svn2(None, [], 0, "ci", sbox.wc_dir, - "-m", UNICODE_TEST_STRING, - "--with-revprop", - "revprop=" + UNICODE_TEST_STRING) + unicode_item = sbox.ospath(UNICODE_TEST_STRING) + test_item = sbox.ospath("test") - expected_disk = wc.State("", { - UNICODE_TEST_STRING: Item(props={ "name": UNICODE_TEST_STRING }), - "test" : Item(), - }) + svntest.actions.run_and_verify_svn2(None, [], 0, "mkdir", unicode_item) + svntest.actions.run_and_verify_svn2(None, [], 0, "mkdir", test_item) + svntest.actions.run_and_verify_svn2(None, [], 0, "propset", + "name", UNICODE_TEST_STRING, unicode_item) + svntest.actions.run_and_verify_svn2(None, [], 0, "ci", sbox.wc_dir, + "-m", UNICODE_TEST_STRING, + "--with-revprop", + "revprop=" + UNICODE_TEST_STRING) - svntest.actions.verify_disk(sbox.wc_dir, expected_disk, check_props=True) - os.chdir(sbox.wc_dir) - svntest.actions.run_and_verify_log_xml( - expected_revprops=[{ - "svn:author": "jrandom", - "svn:date": "", - "svn:log": UNICODE_TEST_STRING, - "revprop": UNICODE_TEST_STRING - }], - args=["-r1", "--with-all-revprops"]) + expected_disk = wc.State("", { + UNICODE_TEST_STRING: Item(props={ "name": UNICODE_TEST_STRING }), + "test" : Item(), + }) + svntest.actions.verify_disk(sbox.wc_dir, expected_disk, check_props=True) + os.chdir(sbox.wc_dir) + svntest.actions.run_and_verify_log_xml( + expected_revprops=[{ + "svn:author": "jrandom", + "svn:date": "", + "svn:log": UNICODE_TEST_STRING, + "revprop": UNICODE_TEST_STRING + }], + args=["-r1", "--with-all-revprops"]) + finally: + os.environ["LC_ALL"] = oldlocale ######################################################################## # Run the tests ]]] -- Timofei Zhakov