aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--crates/shirabe/tests/dependency_resolver/main.rs1
-rw-r--r--crates/shirabe/tests/dependency_resolver/request_test.rs54
2 files changed, 55 insertions, 0 deletions
diff --git a/crates/shirabe/tests/dependency_resolver/main.rs b/crates/shirabe/tests/dependency_resolver/main.rs
new file mode 100644
index 0000000..35fba9a
--- /dev/null
+++ b/crates/shirabe/tests/dependency_resolver/main.rs
@@ -0,0 +1 @@
+mod request_test;
diff --git a/crates/shirabe/tests/dependency_resolver/request_test.rs b/crates/shirabe/tests/dependency_resolver/request_test.rs
index 9a211a7..969cd4d 100644
--- a/crates/shirabe/tests/dependency_resolver/request_test.rs
+++ b/crates/shirabe/tests/dependency_resolver/request_test.rs
@@ -1 +1,55 @@
//! ref: composer/tests/Composer/Test/DependencyResolver/RequestTest.php
+
+use indexmap::IndexMap;
+use shirabe::dependency_resolver::request::Request;
+use shirabe::package::version::version_parser::VersionParser;
+use shirabe_semver::constraint::{AnyConstraint, MatchAllConstraint, SimpleConstraint};
+
+// AnyConstraint does not implement PartialEq (it lives in another crate), so
+// the original assertEquals() on the requires map is reproduced by comparing
+// the Debug representations.
+//
+// The original tests also build ArrayRepositories and add packages, but those
+// are never read by the assertions (the Request does not consult them), so the
+// repository setup is omitted here.
+
+fn get_version_constraint(operator: &str, version: &str) -> AnyConstraint {
+ let normalized = VersionParser::new().normalize(version, None).unwrap();
+ AnyConstraint::Simple(SimpleConstraint::new(
+ operator.to_string(),
+ normalized,
+ Some(format!("{} {}", operator, version)),
+ ))
+}
+
+#[test]
+fn test_request_install() {
+ let mut request = Request::new(None);
+ request.require_name("foo", None).unwrap();
+
+ let mut expected: IndexMap<String, AnyConstraint> = IndexMap::new();
+ expected.insert("foo".to_string(), MatchAllConstraint::new(None).into());
+
+ assert_eq!(
+ format!("{:?}", expected),
+ format!("{:?}", request.get_requires())
+ );
+}
+
+#[test]
+fn test_request_install_same_package_from_different_repositories() {
+ let constraint = get_version_constraint("=", "1");
+
+ let mut request = Request::new(None);
+ request
+ .require_name("foo", Some(constraint.clone()))
+ .unwrap();
+
+ let mut expected: IndexMap<String, AnyConstraint> = IndexMap::new();
+ expected.insert("foo".to_string(), constraint);
+
+ assert_eq!(
+ format!("{:?}", expected),
+ format!("{:?}", request.get_requires())
+ );
+}