diff options
Diffstat (limited to 'jni/ruby/test/etc')
-rw-r--r-- | jni/ruby/test/etc/test_etc.rb | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/jni/ruby/test/etc/test_etc.rb b/jni/ruby/test/etc/test_etc.rb new file mode 100644 index 0000000..374b379 --- /dev/null +++ b/jni/ruby/test/etc/test_etc.rb @@ -0,0 +1,169 @@ +require "test/unit" +require "etc" + +class TestEtc < Test::Unit::TestCase + def test_getlogin + s = Etc.getlogin + return if s == nil + assert(s.is_a?(String), "getlogin must return a String or nil") + assert_predicate(s, :valid_encoding?, "login name should be a valid string") + end + + def test_passwd + Etc.passwd do |s| + assert_instance_of(String, s.name) + assert_instance_of(String, s.passwd) if s.respond_to?(:passwd) + assert_kind_of(Integer, s.uid) + assert_kind_of(Integer, s.gid) + assert_instance_of(String, s.gecos) if s.respond_to?(:gecos) + assert_instance_of(String, s.dir) + assert_instance_of(String, s.shell) + assert_kind_of(Integer, s.change) if s.respond_to?(:change) + assert_kind_of(Integer, s.quota) if s.respond_to?(:quota) + assert(s.age.is_a?(Integer) || s.age.is_a?(String)) if s.respond_to?(:age) + assert_instance_of(String, s.uclass) if s.respond_to?(:uclass) + assert_instance_of(String, s.comment) if s.respond_to?(:comment) + assert_kind_of(Integer, s.expire) if s.respond_to?(:expire) + end + + Etc.passwd { assert_raise(RuntimeError) { Etc.passwd { } }; break } + end + + def test_getpwuid + # password database is not unique on UID, and which entry will be + # returned by getpwuid() is not specified. + passwd = Hash.new {[]} + # on MacOSX, same entries are returned from /etc/passwd and Open + # Directory. + Etc.passwd {|s| passwd[s.uid] |= [s]} + passwd.each_pair do |uid, s| + assert_include(s, Etc.getpwuid(uid)) + end + s = passwd[Process.euid] + unless s.empty? + assert_include(s, Etc.getpwuid) + end + end + + def test_getpwnam + passwd = {} + Etc.passwd do |s| + passwd[s.name] ||= s unless /\A\+/ =~ s.name + end + passwd.each_value do |s| + assert_equal(s, Etc.getpwnam(s.name)) + end + end + + def test_passwd_with_low_level_api + a = [] + Etc.passwd {|s| a << s } + b = [] + Etc.setpwent + while s = Etc.getpwent + b << s + end + Etc.endpwent + assert_equal(a, b) + end + + def test_group + Etc.group do |s| + assert_instance_of(String, s.name) + assert_instance_of(String, s.passwd) if s.respond_to?(:passwd) + assert_kind_of(Integer, s.gid) + end + + Etc.group { assert_raise(RuntimeError) { Etc.group { } }; break } + end + + def test_getgrgid + # group database is not unique on GID, and which entry will be + # returned by getgrgid() is not specified. + groups = Hash.new {[]} + # on MacOSX, same entries are returned from /etc/group and Open + # Directory. + Etc.group {|s| groups[s.gid] |= [s]} + groups.each_pair do |gid, s| + assert_include(s, Etc.getgrgid(gid)) + end + s = groups[Process.egid] + unless s.empty? + assert_include(s, Etc.getgrgid) + end + end + + def test_getgrnam + groups = {} + Etc.group do |s| + groups[s.name] ||= s unless /\A\+/ =~ s.name + end + groups.each_value do |s| + assert_equal(s, Etc.getgrnam(s.name)) + end + end + + def test_group_with_low_level_api + a = [] + Etc.group {|s| a << s } + b = [] + Etc.setgrent + while s = Etc.getgrent + b << s + end + Etc.endgrent + assert_equal(a, b) + end + + def test_uname + begin + uname = Etc.uname + rescue NotImplementedError + return + end + assert_kind_of(Hash, uname) + [:sysname, :nodename, :release, :version, :machine].each {|sym| + assert_operator(uname, :has_key?, sym) + assert_kind_of(String, uname[sym]) + } + end + + def test_sysconf + begin + Etc.sysconf + rescue NotImplementedError + return + rescue ArgumentError + end + assert_kind_of(Integer, Etc.sysconf(Etc::SC_CLK_TCK)) + end if defined?(Etc::SC_CLK_TCK) + + def test_confstr + begin + Etc.confstr + rescue NotImplementedError + return + rescue ArgumentError + end + assert_kind_of(String, Etc.confstr(Etc::CS_PATH)) + end if defined?(Etc::CS_PATH) + + def test_pathconf + begin + Etc.confstr + rescue NotImplementedError + return + rescue ArgumentError + end + IO.pipe {|r, w| + val = w.pathconf(Etc::PC_PIPE_BUF) + assert(val.nil? || val.kind_of?(Integer)) + } + end if defined?(Etc::PC_PIPE_BUF) + + def test_nprocessors + n = Etc.nprocessors + assert_operator(1, :<=, n) + end + +end |