From: "usa (Usaku NAKAMURA)" Date: 2012-07-31T10:46:04+09:00 Subject: [ruby-core:46883] [ruby-trunk - Bug #6814][Assigned] Test failures in test_win32ole_variant.rb Issue #6814 has been updated by usa (Usaku NAKAMURA). Category set to test Status changed from Open to Assigned Assignee changed from luislavena (Luis Lavena) to suke (Masaki Suketa) Target version set to 2.0.0 ---------------------------------------- Bug #6814: Test failures in test_win32ole_variant.rb https://bugs.ruby-lang.org/issues/6814#change-28561 Author: h.shirosaki (Hiroshi Shirosaki) Status: Assigned Priority: Normal Assignee: suke (Masaki Suketa) Category: test Target version: 2.0.0 ruby -v: ruby 2.0.0dev (2012-07-30 trunk 36577) [x64-mswin64_100] Originally this was reported on RubyInstaller-list by dmajkic. https://groups.google.com/d/msg/rubyinstaller/a4TS9XAsia0/NkZZOzG6n4wJ Quote: ------- This one is about 3 failures I have in "test_win32ole_variant.rb". Those are: test_s_array test_conversion_str2num test_conversion_ole_variant2ole_variant After looking at the win32ole.c, I see that the default locale is LOCALE_SYSTEM_DEFAULT. That means that the locale is from the Windows, and is not affected by the console settings. Since I am using "Serbian Latin", which sets coma as decimal separator (eg. 123456,78), all three tests fail simply because Windows API tires to convert string to number using wrong locale. String is in US locale, but conversion API uses system default. Since WIN32OLE.locale= exists, setting it to 1033 (US English), solves all three tests as "pass". It looks like this: def test_conversion_str2num WIN32OLE.locale = 1033 # set US-Eng locale - number with decimal point obj = WIN32OLE_VARIANT.new("12.345", WIN32OLE::VARIANT::VT_R8) assert_equal(12.345, obj.value) end ----- I've created the following patch based on above analysis. It seems to work fine. https://gist.github.com/3202976 -- http://bugs.ruby-lang.org/