# libguestfs Ruby bindings -*- ruby -*-
# Copyright (C) 2016 Red Hat Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

require 'minitest/autorun'
require 'guestfs'

class Test090RetValues < Minitest::Test
  def test_090_retvalues
    g = Guestfs::Guestfs.new()

    assert_equal 10, g.internal_test_rint("10")

    assert_raises(Guestfs::Error) {
      g.internal_test_rinterr()
    }
  end

  def test_rint64
    g = Guestfs::Guestfs.new()

    assert_equal 10, g.internal_test_rint64("10")

    assert_raises(Guestfs::Error) {
      g.internal_test_rint64err()
    }
  end

  def test_rbool
    g = Guestfs::Guestfs.new()

    assert_equal 1, g.internal_test_rbool("true")
    assert_equal 0, g.internal_test_rbool("false")

    assert_raises(Guestfs::Error) {
      g.internal_test_rboolerr()
    }
  end

  def test_rconststring
    g = Guestfs::Guestfs.new()

    assert_equal "static string", g.internal_test_rconststring("test")

    assert_raises(Guestfs::Error) {
      g.internal_test_rconststringerr()
    }
  end

  def test_rconstoptstring
    g = Guestfs::Guestfs.new()

    assert_equal "static string", g.internal_test_rconstoptstring("test")

    # this never fails
    assert_nil g.internal_test_rconstoptstringerr()
  end

  def test_rstring
    g = Guestfs::Guestfs.new()

    assert_equal "test", g.internal_test_rstring("test")

    assert_raises(Guestfs::Error) {
      g.internal_test_rstringerr()
    }
  end

  def test_rstringlist
    g = Guestfs::Guestfs.new()

    assert_equal [], g.internal_test_rstringlist("0")
    assert_equal ["0", "1", "2", "3", "4"], g.internal_test_rstringlist("5")

    assert_raises(Guestfs::Error) {
      g.internal_test_rstringlisterr()
    }
  end

  def test_rstruct
    g = Guestfs::Guestfs.new()

    s = g.internal_test_rstruct("unused")
    assert_instance_of Hash, s
    assert_equal "pv0", s["pv_name"]

    assert_raises(Guestfs::Error) {
      g.internal_test_rstructerr()
    }
  end

  def test_rstructlist
    g = Guestfs::Guestfs.new()

    assert_equal [], g.internal_test_rstructlist("0")
    l = g.internal_test_rstructlist("5")
    assert_instance_of Array, l
    assert_equal 5, l.length
    for i in 0..4
      assert_instance_of Hash, l[i]
      assert_equal "pv#{i}", l[i]["pv_name"]
    end

    assert_raises(Guestfs::Error) {
      g.internal_test_rstructlisterr()
    }
  end

  def test_rhashtable
    g = Guestfs::Guestfs.new()

    assert_equal Hash[], g.internal_test_rhashtable("0")
    assert_equal Hash["0"=>"0","1"=>"1","2"=>"2","3"=>"3","4"=>"4"], g.internal_test_rhashtable("5")

    assert_raises(Guestfs::Error) {
      g.internal_test_rhashtableerr()
    }
  end

  def test_rbufferout
    g = Guestfs::Guestfs.new()

    assert_equal "test", g.internal_test_rbufferout("test")

    assert_raises(Guestfs::Error) {
      g.internal_test_rbufferouterr()
    }
  end
end
