Codebase list ruby-fxruby / df01385c-e530-4672-8ccc-4904e8a7dedd/upstream/1.6.45+git20221125.1.7d76b2a test / TC_FXFileStream.rb
df01385c-e530-4672-8ccc-4904e8a7dedd/upstream/1.6.45+git20221125.1.7d76b2a

Tree @df01385c-e530-4672-8ccc-4904e8a7dedd/upstream/1.6.45+git20221125.1.7d76b2a (Download .tar.gz)

TC_FXFileStream.rb @df01385c-e530-4672-8ccc-4904e8a7dedd/upstream/1.6.45+git20221125.1.7d76b2araw · history · blame

require 'test/unit'
require 'fox16'
require 'tempfile'

class TC_FXFileStream < Test::Unit::TestCase
  include Fox

  def setup
    @filestream = FXFileStream.new
  end

  def test_container
    assert_nil(@filestream.container)
  end

  def test_open_non_existing_file
    assert_equal(FXStreamDead, @filestream.direction)
    status = @filestream.open("non_existing_file", FXStreamLoad)
    assert(!status)
    assert_equal(FXStreamDead, @filestream.direction)
  end

  def test_open_existing_file
    assert_equal(FXStreamDead, @filestream.direction)
    status = @filestream.open(__FILE__, FXStreamLoad)
    assert(status)
    assert_equal(FXStreamLoad, @filestream.direction)
    status = @filestream.close
    assert(status)
    assert_equal(FXStreamDead, @filestream.direction)
  end

  def test_open_new_file
    assert_equal(FXStreamDead, @filestream.direction)
    status = @filestream.open("goobers", FXStreamSave)
    assert(status)
    assert_equal(FXStreamSave, @filestream.direction)
    status = @filestream.close
    assert(status)
    assert_equal(FXStreamDead, @filestream.direction)
  end

  def test_status
    assert_equal(FXStreamOK, @filestream.status)
    @filestream.open(__FILE__, FXStreamLoad)
    assert_equal(FXStreamOK, @filestream.status)
    @filestream.close
    assert_equal(FXStreamOK, @filestream.status)
  end

  def test_position
    @filestream.open(__FILE__, FXStreamLoad)
    assert_equal(0, @filestream.position)
    @filestream.position = 500
    assert_equal(500, @filestream.position)
    @filestream.close
  end

  def test_exceptions
    # Non-existing file
    assert_raises(FXStreamNoReadError) {
      FXFileStream.open("non_existing_file", FXStreamLoad) { |s| }
    }

    pend "chmod isn't supported on Windows" if RUBY_PLATFORM=~/mingw|mswin/i

    # Write-only file (i.e. no read permissions)
    tf = Tempfile.new("write_only_file")
    tf.puts("junk")
    tf.close
    File.chmod(0222, tf.path) # --w--w--w-
    assert_raises(FXStreamNoReadError) {
      FXFileStream.open(tf.path, FXStreamLoad) { |s| }
    }

    # Read-only file
    tf = Tempfile.new("read_only_file")
    tf.puts("junk")
    tf.close
    File.chmod(0444, tf.path) # -r--r--r--
    assert_raises(FXStreamNoWriteError) {
      FXFileStream.open(tf.path, FXStreamSave) { |s| }
    }
  end

  def teardown
    if File.exist?("goobers")
      FileUtils.rm_f("goobers")
    end
  end
end