code: def test_status(_path=None, linkpath=None):
      # do the setup on the real path, not the symlink, to have its
      # bugs not affect this test of status()
      ds = get_deeply_nested_structure(str(_path))
      if has_symlink_capability():
          # make it more complicated by default
          ut.Path(linkpath).symlink_to(_path, target_is_directory=True)
          path = linkpath
      else:
          path = _path
  
      ds = Dataset(path)
      if has_symlink_capability():
          assert ds.pathobj != ds.repo.pathobj
  
      # spotcheck that annex status reporting and availability evaluation
      # works
      assert_result_count(
          ds.status(annex="all", result_renderer="disabled"),
          1,
          path=str(ds.pathobj / "subdir" / "annexed_file.txt"),
          key="MD5E-s5--275876e34cf609db118f3d84b799a790.txt",
          has_content=True,
          objloc=str(
              ds.repo.pathobj
              / ".git"
              / "annex"
              / "objects"
              /
              # hashdir is different on windows
              ("f33" if ds.repo.is_managed_branch() else "7p")
              / ("94b" if ds.repo.is_managed_branch() else "gp")
              / "MD5E-s5--275876e34cf609db118f3d84b799a790.txt"
              / "MD5E-s5--275876e34cf609db118f3d84b799a790.txt"
          ),
      )
  
      plain_recursive = ds.status(
          recursive=True, result_renderer="disabled"
      )
      # check integrity of individual reports
      for res in plain_recursive:
          # anything that is an "intended" symlink should be reported
          # as such
          if "link2" in str(res["path"]):
              assert res["type"] == "symlink", res
          # every item must report its parent dataset
          assert_in("parentds", res)
  
      # bunch of smoke tests
      # query of '.' is same as no path
      eq_(
          plain_recursive,
          ds.status(
              path=".", recursive=True, result_renderer="disabled"
          ),
      )
      # duplicate paths do not change things
      eq_(
          plain_recursive,
          ds.status(
              path=[".", "."],
              recursive=True,
              result_renderer="disabled",
          ),
      )
      # neither do nested paths
      eq_(
          plain_recursive,
          ds.status(
              path=[".", "subds_modified"],
              recursive=True,
              result_renderer="disabled",
          ),
      )
      # when invoked in a subdir of a dataset it still reports on the full thing
      # just like `git status`, as long as there are no paths specified
      with chpwd(op.join(path, "directory_untracked")):
          plain_recursive = status(
              recursive=True, result_renderer="disabled"
          )
      # should be able to take absolute paths and yield the same
      # output
      eq_(
          plain_recursive,
          ds.status(
              path=ds.path, recursive=True, result_renderer="disabled"
          ),
      )
  
      # query for a deeply nested path from the top, should just work with a
      # variety of approaches
      rpath = op.join(
          "subds_modified",
          "subds_lvl1_modified",
          OBSCURE_FILENAME + "_directory_untracked",
      )
      apathobj = ds.pathobj / rpath
      apath = str(apathobj)
      # ds.repo.pathobj will have the symlink resolved
      arealpath = ds.repo.pathobj / rpath
      # TODO include explicit relative path in test
      for p in (rpath, apath, arealpath, None):
          if p is None:
              # change into the realpath of the dataset and
              # query with an explicit path
              with chpwd(ds.repo.path):
                  res = ds.status(
                      path=op.join(".", rpath),
                      result_renderer="disabled",
                  )
          else:
              res = ds.status(path=p, result_renderer="disabled")
          assert_result_count(
              res,
              1,
              state="untracked",
              type="directory",
              refds=ds.path,
              # path always comes out a full path inside the queried dataset
              path=apath,
          )
  
      assert_result_count(
          ds.status(recursive=True, result_renderer="disabled"),
          1,
          path=apath,
      )
      # limiting recursion will exclude this particular path
      assert_result_count(
          ds.status(
              recursive=True,
              recursion_limit=1,
              result_renderer="disabled",
          ),
          0,
          path=apath,
      )
      # negative limit is unlimited limit
      eq_(
          ds.status(
              recursive=True,
              recursion_limit=-1,
              result_renderer="disabled",
          ),
          ds.status(recursive=True, result_renderer="disabled"),
      )
  
      # check integrity of individual reports with a focus on how symlinks
      # are reported in annex-mode
      # this is different from plain git-mode, which reports types as-is
      # from the git record
      for res in ds.status(
          recursive=True, annex="basic", result_renderer="disabled"
      ):
          # anything that is an "intended" symlink should be reported
          # as such. In contrast, anything that is a symlink for mere
          # technical reasons (annex using it for something in some mode)
          # should be reported as the thing it is representing (i.e.
          # a file)
          if "link2" in str(res["path"]):
              assert res["type"] == "symlink", res
          else:
              assert res["type"] != "symlink", res
  
file_path: datalad/datalad/core/local/tests/test_status.py
imports: import os.path
  import datalad.utils
  from datalad.api import status
  from datalad.core.local.status import get_paths_by_ds
  from datalad.distribution.dataset import Dataset
  from datalad.support.annexrepo import AnnexRepo
  from datalad.support.exceptions import CommandError, IncompleteResultsError, NoDatasetFound
  from datalad.tests.utils_pytest import OBSCURE_FILENAME, SkipTest, assert_dict_equal, assert_in, assert_in_results, assert_not_in_results, assert_raises, assert_repo_status, assert_result_count, assert_status, eq_, get_deeply_nested_structure, has_symlink_capability, with_tempfile
  from datalad.utils import chpwd, on_windows
label_desc: Use image node_id 4 for calling a global function with example usage: test_status(_path, linkpath) without return types