# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: BUSL-1.1

require 'tmpdir'

require File.expand_path("../../../base", __FILE__)

require 'vagrant/util/safe_chdir'

describe Vagrant::Util::SafeChdir do
  let(:temp_dir) { Dir.mktmpdir("vagrant-test-util-safe-chdir") }
  let(:temp_dir2) { Dir.mktmpdir("vagrant-test-util-safe-chdir-2") }

  after do
    FileUtils.rm_rf(temp_dir)
    FileUtils.rm_rf(temp_dir2)
  end

  it "should change directories" do
    expected = nil
    result   = nil

    Dir.chdir(temp_dir) do
      expected = Dir.pwd
    end

    described_class.safe_chdir(temp_dir) do
      result = Dir.pwd
    end

    expect(result).to eq(expected)
  end

  it "should allow recursive chdir" do
    expected  = nil
    result    = nil

    Dir.chdir(temp_dir) do
      expected = Dir.pwd
    end

    expect do
      described_class.safe_chdir(temp_dir2) do
        described_class.safe_chdir(temp_dir) do
          result = Dir.pwd
        end
      end
    end.to_not raise_error

    expect(result).to eq(expected)
  end
end
