code: def test_url_mapping_specs():
      from datalad.core.distributed.clone_utils import _map_urls
  
      cfg = ConfigManager()
      for m, i, o in (
          # path redirect on windows
          (_windows_map, r"C:\Users\datalad\from", r"D:\to"),
          # test standard github mapping, no patch needed
          (
              {},
              "https://github.com/datalad/testrepo_gh/sub _1",
              "https://github.com/datalad/testrepo_gh-sub__1",
          ),
          # trailing slash is not mapped
          (
              {},
              "https://github.com/datalad/testrepo_gh/sub _1/",
              "https://github.com/datalad/testrepo_gh-sub__1/",
          ),
          # and on deep subdataset too
          (
              {},
              "https://github.com/datalad/testrepo_gh/sub _1/d/sub_-  1",
              "https://github.com/datalad/testrepo_gh-sub__1-d-sub_-_1",
          ),
          # test that the presence of another mapping spec doesn't ruin
          # the outcome
          (
              _nomatch_map,
              "https://github.com/datalad/testrepo_gh/sub _1",
              "https://github.com/datalad/testrepo_gh-sub__1",
          ),
          # verify OSF mapping, but see
          # https://github.com/datalad/datalad/issues/5769 for future
          # implications
          ({}, "https://osf.io/q8xnk/", "osf://q8xnk"),
      ):
          with patch.dict(cfg._merged_store, m):
              eq_(_map_urls(cfg, [i]), [o])
  
imports: import logging
  import os.path
  import stat
  from unittest.mock import patch
  import pytest
  from datalad import consts
  from datalad.api import clone, create, remove
  from datalad.cmd import GitWitlessRunner
  from datalad.cmd import WitlessRunner
  from datalad.config import ConfigManager
  from datalad.core.distributed.clone_utils import _get_installationpath_from_url, decode_source_spec
  from datalad.distribution.dataset import Dataset
  from datalad.support.annexrepo import AnnexRepo
  from datalad.support.exceptions import IncompleteResultsError
  from datalad.support.external_versions import external_versions
  from datalad.support.gitrepo import GitRepo
  from datalad.support.network import get_local_file_url
  from datalad.tests.utils_pytest import DEFAULT_BRANCH, DEFAULT_REMOTE, SkipTest, assert_false, assert_in, assert_in_results, assert_message, assert_not_in, assert_not_is_instance, assert_raises, assert_repo_status, assert_result_count, assert_result_values_equal, assert_status, create_tree, eq_, get_datasets_topdir, has_symlink_capability, integration, known_failure, known_failure_githubci_win, known_failure_osx, known_failure_windows, neq_, nok_, ok_, ok_file_has_content, ok_startswith, on_github, on_osx, on_travis, patch_config, serve_path_via_http, set_date, skip_if, skip_if_adjusted_branch, skip_if_no_network, skip_if_on_windows, skip_ssh, slow, swallow_logs, with_sameas_remote, with_tempfile, with_tree, xfail_buggy_annex_info
  from datalad.utils import Path, chpwd, get_home_envvars, on_windows, rmtree
label_desc: Use image node_id 46 for calling a global function with example usage: test_url_mapping_specs() without return types