aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/tests/repository/vcs_repository_test.rs
blob: d84ed51aefda7735a20ad77350b8dd885dd4200f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//! ref: composer/tests/Composer/Test/Repository/VcsRepositoryTest.php

use std::cell::RefCell;
use std::rc::Rc;

use indexmap::IndexMap;
use shirabe::config::Config;
use shirabe::io::IOInterface;
use shirabe::io::null_io::NullIO;
use shirabe::package::dumper::ArrayDumper;
use shirabe::repository::RepositoryInterface;
use shirabe::repository::VcsRepository;
use shirabe::util::filesystem::Filesystem;
use shirabe::util::http_downloader::HttpDownloader;
use shirabe_php_shim::PhpMixed;

struct SetUp {
    composer_home: std::path::PathBuf,
    git_repo: std::path::PathBuf,
}

fn set_up() -> SetUp {
    // setUp lazily runs initialize(), which shells out to git to build a fixture repository
    // on disk; the ExecutableFinder/ProcessExecutor-driven setup and the markTestSkipped
    // skip path are not ported.
    todo!()
}

fn tear_down(composer_home: &std::path::Path, git_repo: &std::path::Path) {
    let mut fs = Filesystem::new(None);
    fs.remove_directory(composer_home).unwrap();
    fs.remove_directory(git_repo).unwrap();
}

struct TearDown {
    composer_home: std::path::PathBuf,
    git_repo: std::path::PathBuf,
}

impl TearDown {
    fn new(composer_home: std::path::PathBuf, git_repo: std::path::PathBuf) -> Self {
        TearDown {
            composer_home,
            git_repo,
        }
    }
}

impl Drop for TearDown {
    fn drop(&mut self) {
        tear_down(&self.composer_home, &self.git_repo);
    }
}

// testLoadVersions initialises a real git repository on disk and drives a VcsRepository over
// it, then asserts the loaded package versions; the git fixture setup and constraint parsing
// (look-around regex) are not ported. In addition, VcsRepository does not implement
// RepositoryInterface and keeps its inner ArrayRepository pub(crate), so getPackages() (inherited
// from ArrayRepository in PHP) is not reachable from the test crate.
#[test]
#[ignore = "VcsRepository does not expose get_packages() to the test crate; git fixture setup not ported"]
fn test_load_versions() {
    todo!()
}