# Copyright 2020 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# Utility classes for testing remote_link.

import contextlib
import os
import shutil
import tempfile


# tempfile.NamedDirectory is in Python 3.8. This is for compatibility with
# older Python versions.
@contextlib.contextmanager
def named_directory(*args, **kwargs):
  name = tempfile.mkdtemp(*args, **kwargs)
  try:
    yield name
  finally:
    shutil.rmtree(name)


@contextlib.contextmanager
def working_directory(newcwd):
  """
  Changes working directory to the specified directory, runs enclosed code,
  and changes back to the previous directory.
  """
  oldcwd = os.getcwd()
  os.chdir(newcwd)
  try:
    # Use os.getcwd() instead of newcwd so that we have a path that works
    # inside the block.
    yield os.getcwd()
  finally:
    os.chdir(oldcwd)
