aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/tests/dependency_resolver
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-21 04:03:39 +0900
committernsfisis <nsfisis@gmail.com>2026-06-21 04:03:39 +0900
commitc3fe731783ef681e62026e723ed44f58810d404f (patch)
tree5bbf3775838b186e9ce635d0f3aca61b3ad0e8cc /crates/shirabe/tests/dependency_resolver
parente0c984ebbf674dd67adc396b5b4e9bdafc9ac5bf (diff)
downloadphp-shirabe-c3fe731783ef681e62026e723ed44f58810d404f.tar.gz
php-shirabe-c3fe731783ef681e62026e723ed44f58810d404f.tar.zst
php-shirabe-c3fe731783ef681e62026e723ed44f58810d404f.zip
test(dependency-resolver): port RuleTest
equals/type/enable/disable/isAssertion pass; getHash reaches hash_raw (todo!()) and prettyString needs mocked RepositorySet/Request, so both are stubbed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/tests/dependency_resolver')
-rw-r--r--crates/shirabe/tests/dependency_resolver/main.rs1
-rw-r--r--crates/shirabe/tests/dependency_resolver/rule_test.rs91
2 files changed, 92 insertions, 0 deletions
diff --git a/crates/shirabe/tests/dependency_resolver/main.rs b/crates/shirabe/tests/dependency_resolver/main.rs
index e9b2259..d81ab0c 100644
--- a/crates/shirabe/tests/dependency_resolver/main.rs
+++ b/crates/shirabe/tests/dependency_resolver/main.rs
@@ -4,3 +4,4 @@ mod test_case;
mod pool_test;
mod request_test;
mod rule_set_iterator_test;
+mod rule_test;
diff --git a/crates/shirabe/tests/dependency_resolver/rule_test.rs b/crates/shirabe/tests/dependency_resolver/rule_test.rs
index 69d4816..31c525f 100644
--- a/crates/shirabe/tests/dependency_resolver/rule_test.rs
+++ b/crates/shirabe/tests/dependency_resolver/rule_test.rs
@@ -1 +1,92 @@
//! ref: composer/tests/Composer/Test/DependencyResolver/RuleTest.php
+
+use shirabe::dependency_resolver::{
+ GenericRule, RULE_ROOT_REQUIRE, ReasonData, Rule, RuleSet,
+};
+use shirabe_semver::constraint::MatchAllConstraint;
+
+fn root_require_reason() -> ReasonData {
+ ReasonData::RootRequire {
+ package_name: String::new(),
+ constraint: MatchAllConstraint::new(None).into(),
+ }
+}
+
+fn generic_rule(literals: Vec<i64>) -> Rule {
+ Rule::Generic(GenericRule::new(literals, RULE_ROOT_REQUIRE, root_require_reason()))
+}
+
+#[test]
+#[ignore = "Rule::get_hash reaches shirabe_php_shim::hash_raw, which is todo!()"]
+fn test_get_hash() {
+ todo!()
+}
+
+#[test]
+fn test_equals_for_rules_with_different_hashes() {
+ let rule = generic_rule(vec![1, 2]);
+ let rule2 = generic_rule(vec![1, 3]);
+
+ assert!(!rule.equals(&rule2));
+}
+
+#[test]
+fn test_equals_for_rules_with_differ_literals_quantity() {
+ let rule = generic_rule(vec![1, 12]);
+ let rule2 = generic_rule(vec![1]);
+
+ assert!(!rule.equals(&rule2));
+}
+
+#[test]
+fn test_equals_for_rules_with_same_literals() {
+ let rule = generic_rule(vec![1, 12]);
+ let rule2 = generic_rule(vec![1, 12]);
+
+ assert!(rule.equals(&rule2));
+}
+
+#[test]
+fn test_set_and_get_type() {
+ let mut rule = generic_rule(vec![]);
+ rule.set_type(RuleSet::TYPE_REQUEST);
+
+ assert_eq!(RuleSet::TYPE_REQUEST, rule.get_type());
+}
+
+#[test]
+fn test_enable() {
+ let mut rule = generic_rule(vec![]);
+ rule.disable().unwrap();
+ rule.enable();
+
+ assert!(rule.is_enabled());
+ assert!(!rule.is_disabled());
+}
+
+#[test]
+fn test_disable() {
+ let mut rule = generic_rule(vec![]);
+ rule.enable();
+ rule.disable().unwrap();
+
+ assert!(rule.is_disabled());
+ assert!(!rule.is_enabled());
+}
+
+#[test]
+fn test_is_assertions() {
+ let rule = generic_rule(vec![1, 12]);
+ let rule2 = generic_rule(vec![1]);
+
+ assert!(!rule.is_assertion());
+ assert!(rule2.is_assertion());
+}
+
+// In PHP this mocks RepositorySet and Request and passes a Link reason to build the
+// pretty string. The mocked collaborators cannot be reproduced here.
+#[test]
+#[ignore = "getPrettyString needs mocked RepositorySet and Request; mocking is not available"]
+fn test_pretty_string() {
+ todo!()
+}