code: def test_delete_pr_1_and_detached(self) -> None:
      strategy = HFCacheInfo.delete_revisions(
          self.cache_info, "repo_A_rev_detached", "repo_A_rev_pr_1"
      )
      expected = DeleteCacheStrategy(
          expected_freed_size=1110,
          blobs={
              Path("repo_A/blobs/detached_only_hash"),
              Path("repo_A/blobs/pr_1_only_hash"),
              # blob shared in both revisions and only those two
              Path("repo_A/blobs/detached_and_pr_1_only_hash"),
          },
          refs={Path("repo_A/refs/refs/pr/1")},
          repos=set(),
          snapshots={
              Path("repo_A/snapshots_path/repo_A_rev_detached"),
              Path("repo_A/snapshots_path/repo_A_rev_pr_1"),
          },
      )
      self.assertEqual(strategy, expected)
  
imports: import os
  import tempfile
  import time
  import unittest
  from pathlib import Path
  from unittest.mock import Mock
  import pytest
  from huggingface_hub._snapshot_download import snapshot_download
  from huggingface_hub.commands.scan_cache import ScanCacheCommand
  from huggingface_hub.utils import DeleteCacheStrategy, HFCacheInfo, capture_output, scan_cache_dir
  from huggingface_hub.utils._cache_manager import CacheNotFound, _format_size, _format_timesince, _try_delete_path
  from .testing_constants import TOKEN
  from .testing_utils import rmtree_with_retry, with_production_testing, xfail_on_windows
label_desc: Use image node_id 4 for calling the TestDeleteRevisionsDryRun obj's underlying member method code with example usage: obj.test_delete_pr_1_and_detached() without return types