diff --git a/lib/et-orbi/zones.rb b/lib/et-orbi/zones.rb index 3507ca5..736e7e0 100644 --- a/lib/et-orbi/zones.rb +++ b/lib/et-orbi/zones.rb @@ -124,7 +124,7 @@ def osx_tz path = '/etc/localtime' File.symlink?(path) ? - File.readlink(path).split('/')[4..-1].join('/') : + File.readlink(path).split('/zoneinfo/', 2)[1] : nil rescue; nil; end diff --git a/test/module_test.rb b/test/module_test.rb index 0e07d30..193fa14 100644 --- a/test/module_test.rb +++ b/test/module_test.rb @@ -391,6 +391,32 @@ end end + group '.osx_tz' do + + test 'extracts the timezone relative to the zoneinfo directory' do + + symlink = File.method(:symlink?) + readlink = File.method(:readlink) + links = [ + '/var/db/timezone/zoneinfo/Europe/Istanbul', + '/usr/share/zoneinfo/Asia/Tokyo', + '/var/db/timezone/localtime' + ] + + File.define_singleton_method(:symlink?) { |path| path == '/etc/localtime' } + File.define_singleton_method(:readlink) { |_| links.shift } + + assert EtOrbi.osx_tz, 'Europe/Istanbul' + assert EtOrbi.osx_tz, 'Asia/Tokyo' + assert_nil EtOrbi.osx_tz + + ensure + + File.define_singleton_method(:symlink?, symlink) + File.define_singleton_method(:readlink, readlink) + end + end + group '.get_tzone' do {